Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В программной инженерии , муфты является степень взаимозависимости между программными модулями; мера того, насколько тесно связаны две процедуры или модули; [1] сила взаимосвязей между модулями. [2]

Сцепление обычно противопоставляется сплоченности . Низкое сцепление часто коррелирует с высоким сцеплением, и наоборот. Низкая взаимосвязь часто является признаком хорошо структурированной компьютерной системы и хорошего дизайна, а в сочетании с высокой степенью согласованности поддерживает общие цели высокой удобочитаемости и ремонтопригодности. [ необходима цитата ]

История [ править ]

В метрики качества программного обеспечения сцепления и сцепления были изобретены Ларри Константина в конце 1960 - х годов в рамках структурного проектирования , на основе характеристик «хороших» программирования методов , которые снижали содержание и модификации затрат. Структурированный дизайн, включая когезию и сцепление, был опубликован в статье Stevens, Myers & Constantine (1974) [3] и книге Yourdon & Constantine (1979), [4], и последние впоследствии стали стандартными терминами.

Типы сцепления [ править ]

Концептуальная модель сцепления

Сцепление может быть «низким» (также « рыхлым » и «слабым») или «высоким» (также «плотным» и «сильным»). Ниже приведены некоторые типы сцепления, в порядке от самого высокого до самого низкого:

Процедурное программирование [ править ]

Под модулем здесь понимается подпрограмма любого типа, то есть набор из одного или нескольких операторов, имеющих имя и предпочтительно собственный набор имен переменных.

Связь контента (высокая)
Говорят, что связывание содержимого происходит, когда один модуль использует код другого модуля, например, ветки. Это нарушает сокрытие информации - базовую концепцию разработки программного обеспечения.
Общая муфта
Считается, что общее связывание происходит, когда несколько модулей имеют доступ к одним и тем же глобальным данным. Но это может привести к неконтролируемому распространению ошибок и непредвиденным побочным эффектам при внесении изменений.
Внешнее соединение
Внешнее соединение происходит, когда два модуля совместно используют навязанный извне формат данных, протокол связи или интерфейс устройства. В основном это связано с обменом данными с внешними инструментами и устройствами.
Муфта управления
Связь управления - это один модуль, управляющий потоком другого, передавая ему информацию о том, что делать (например, передавая флаг «что делать»).
Штамповое связывание (связывание со структурой данных)
Связывание штампов происходит, когда модули совместно используют составную структуру данных и используют только ее части, возможно, разные части (например, передача всей записи функции, которой требуется только одно ее поле).
В этой ситуации изменение поля, в котором модуль не нуждается, может привести к изменению способа чтения записи модулем.
Связь данных
Связывание данных происходит, когда модули обмениваются данными, например, с помощью параметров. Каждая система данных является элементарной частью, и это единственные общие данные (например, передача целого числа функции, которая вычисляет квадратный корень).

Объектно-ориентированное программирование [ править ]

Связь подкласса
Описывает отношения между ребенком и его родителем. Дочерний элемент связан со своим родителем, но родитель не связан с дочерним элементом.
Временная связь
Это когда два действия объединяются в один модуль только потому, что они происходят одновременно.

В недавней работе были исследованы различные другие концепции связи, которые использовались в качестве индикаторов для различных принципов модуляции, используемых на практике. [5]

Динамическое сцепление [ править ]

Цель этого типа связи - обеспечить оценку программной системы во время выполнения. Утверждалось, что показатели статической связи теряют точность при интенсивном использовании динамической привязки или наследования. [6] При попытке решить эту проблему были приняты во внимание меры динамической связи.

Семантическая связь [ править ]

Этот вид связи учитывает концептуальное сходство между программными объектами, использующими, например, комментарии и идентификаторы, и полагаясь на такие методы, как скрытое семантическое индексирование (LSI).

Логическая связь [ править ]

Логическая связь (или эволюционная связь, или связь изменений) использует историю выпусков программной системы для поиска шаблонов изменений среди модулей или классов: например, сущностей, которые могут быть изменены вместе, или последовательностей изменений (изменение в классе A всегда с последующим изменением класса B).

Недостатки сильной связи [ править ]

Плотно связанные системы, как правило, демонстрируют следующие характеристики развития, которые часто рассматриваются как недостатки:

  1. Изменение в одном модуле обычно вызывает волновой эффект изменений в других модулях.
  2. Сборка модулей может потребовать больше усилий и / или времени из-за повышенной межмодульной зависимости.
  3. Конкретный модуль может быть труднее повторно использовать и / или тестировать, потому что должны быть включены зависимые модули.

Проблемы с производительностью [ править ]

Независимо от того, слабо или тесно связаны, производительность системы часто снижается из-за создания сообщений и параметров, их передачи, трансляции (например, маршалинга) и интерпретации сообщений (которые могут быть ссылкой на строку, массив или структуру данных), которые требуют меньше накладных расходов, чем создание сложное сообщение, такое как сообщение SOAP . Для создания более длинных сообщений требуется больше ЦП и памяти. Чтобы оптимизировать производительность во время выполнения, длина сообщения должна быть минимизирована, а значение сообщения должно быть максимальным.

Накладные расходы на передачу сообщений и производительность
Поскольку сообщение должно быть передано полностью, чтобы сохранить его полное значение, передача сообщения должна быть оптимизирована. Более длинные сообщения требуют большего количества ЦП и памяти для передачи и приема. Кроме того, при необходимости получатели должны повторно собрать сообщение в исходное состояние, чтобы полностью принять его. Следовательно, для оптимизации производительности во время выполнения длина сообщения должна быть минимизирована, а смысл сообщения - максимальным.
Накладные расходы на перевод сообщений и производительность
Протоколы сообщений и сами сообщения часто содержат дополнительную информацию (например, информацию о пакете, структуре, определении и языке). Следовательно, получателю часто требуется переводить сообщение в более точную форму, удаляя лишние символы и информацию о структуре и / или преобразовывая значения из одного типа в другой. Любой вид перевода увеличивает нагрузку на ЦП и / или память. Чтобы оптимизировать производительность во время выполнения, форма и содержимое сообщения должны быть уменьшены и уточнены, чтобы максимизировать их смысл и сократить перевод.
Накладные расходы на интерпретацию сообщений и производительность
Все сообщения должны интерпретироваться получателем. Простые сообщения, такие как целые числа, могут не требовать дополнительной обработки для интерпретации. Однако для сложных сообщений, таких как сообщения SOAP, требуется синтаксический анализатор и преобразователь строк для отображения предполагаемого значения. Чтобы оптимизировать производительность во время выполнения, сообщения должны быть уточнены и сокращены, чтобы минимизировать накладные расходы на интерпретацию.

Решения [ править ]

Один из подходов к уменьшению связанности - это функциональный дизайн , который направлен на ограничение ответственности модулей по функциональности. Связь увеличивается между двумя классами A и B, если:

  • A имеет атрибут, который относится к B (имеет тип).
  • Звонки на услуги объекта B .
  • У A есть метод, который ссылается на B (через тип возвращаемого значения или параметр).
  • Является подклассом (или) орудия класса B .

Низкое связывание относится к отношениям, в которых один модуль взаимодействует с другим модулем через простой и стабильный интерфейс и не должен быть связан с внутренней реализацией другого модуля (см. Скрытие информации ).

Такие системы, как CORBA или COM, позволяют объектам взаимодействовать друг с другом, не зная ничего о реализации другого объекта. Обе эти системы даже позволяют объектам общаться с объектами, написанными на других языках.

Связь против сплоченности [ править ]

Связь и сплоченность - термины, которые встречаются вместе очень часто. Связывание относится к взаимозависимостям между модулями, в то время как сплоченность описывает, как связаны функции в пределах одного модуля. Низкая связанность подразумевает, что данный модуль выполняет задачи, которые не очень связаны друг с другом и, следовательно, могут создавать проблемы по мере того, как модуль становится большим.

Соединение модулей [ править ]

Coupling in Software Engineering [7] описывает версию показателей, связанных с этой концепцией.

Для связи потока данных и управления:

  • d i : количество параметров входных данных
  • c i : количество входных параметров управления
  • d o : количество параметров выходных данных
  • c o : количество параметров управления выходом

Для глобальной связи:

  • g d : количество глобальных переменных, используемых в качестве данных
  • g c : количество глобальных переменных, используемых в качестве контроля

Для сцепления с окружающей средой:

  • w : количество вызываемых модулей (разветвление)
  • r : количество модулей, вызывающих рассматриваемый модуль (разветвление)

Coupling(C)делает значение больше, чем больше связан модуль. Это число колеблется от примерно 0,67 (слабое сцепление) до 1,0 (сильное сцепление).

Например, если модуль имеет только один параметр входных и выходных данных

Если модуль имеет 5 параметров входных и выходных данных, равное количество параметров управления и имеет доступ к 10 элементам глобальных данных с разветвлением 3 и разветвлением 4,

См. Также [ править ]

  • Сплоченность (информатика)
  • Connascence (информатика)
  • Связь (физика)
  • Устранение мертвого кода
  • Ад зависимости
  • Эфферентная связь
  • Инверсия контроля
  • Список терминов объектно-ориентированного программирования
  • Слабая связь
  • Сделать (программное обеспечение)
  • Статический анализ кода

Ссылки [ править ]

  1. ^ ISO / IEC / IEEE 24765: 2010 Системная и программная инженерия - Словарь
  2. ^ ISO / IEC TR 19759: 2005, Разработка программного обеспечения - Руководство по своду знаний по программной инженерии (SWEBOK)
  3. ^ Стивенс, Уэйн П .; Майерс, Гленфорд Дж .; Константин, Ларри Лерой (июнь 1974 г.). «Структурированный дизайн». IBM Systems Journal . 13 (2): 115–139. DOI : 10.1147 / sj.132.0115 .
  4. ^ Йордон, Эдвард ; Константин, Ларри Лерой (1979) [1975]. Структурированный дизайн: основы дисциплины проектирования компьютерных программ и систем . Yourdon Press. Bibcode : 1979sdfd.book ..... Y . ISBN 978-0-13-854471-3. ISBN 0-13-854471-9 . 
  5. ^ Бек, Фабиан; Диль, Стефан (сентябрь 2011 г.). «О конгруэнтности модульности и кодовой связи». В материалах 19-го симпозиума ACM SIGSOFT и 13-й Европейской конференции по основам программной инженерии (SIGSOFT / FSE '11) . Сегед, венгрия. DOI : 10.1145 / 2025113.2025162 .
  6. ^ Arisholm, Erik; Бриан, Лайонел К .; Фёйен, Аудун (август 2004 г.). «Измерение динамической связи для объектно-ориентированного программного обеспечения». IEEE Transactions по разработке программного обеспечения . IEEE . 30 (8): 491–506. DOI : 10.1109 / TSE.2004.41 . ЛВП : 10852/9090 .
  7. ^ Прессман, Роджер С. (1982). Программная инженерия - подход практикующего (4-е изд.). ISBN 0-07-052182-4.

Дальнейшее чтение [ править ]

  • Майерс, Гленфорд Дж. (1974). Надежное программное обеспечение за счет композитного дизайна . Нью-Йорк: Mason and Lipscomb Publishers.
  • Оффутт, А. Джефферсон; Харролд, Мэри Джин ; Кольте, Приядаршан (март 1993 г.). «Программно-метрическая система для соединения модулей». Журнал систем и программного обеспечения . 20 (3): 295–308.
  • Пейдж-Джонс, Мейлир (1980). Практическое руководство по проектированию структурированных систем . Нью-Йорк: Yourdon Press. ISBN 978-8-12031482-5.
  • Стандартный глоссарий терминологии программной инженерии . Нью-Йорк: IEEE . 1990. ISBN. 0-7381-0391-8. 610.12_1990.
  • «Учебная программа для сертифицированного специалиста по архитектуре программного обеспечения (CPSA) - базовый уровень» (PDF) . 3.01. Международная квалификационная комиссия по архитектуре программного обеспечения (ISAQB). 2015-05-15 [2009] . Проверено 23 июня 2019 . [1]