Процедура определения типа связности модулей программных средств

Автор работы: Пользователь скрыл имя, 13 Мая 2013 в 18:53, контрольная работа

Описание работы

Связность модуля (Cohesion) — это мера зависимости его частей. Связность — это внутренняя характеристика модуля. Чем выше связность модуля, тем лучше результат проектирования, тем меньше «ручек управления» на нем находится и тем проще эти «ручки».
Для измерения связности используют понятие силы связности (СС). Существует 7 типов связности:
1. Связность по совпадению (СС=0). В модуле отсутствуют явно выраженные внутренние связи.
2. Логическая связность (СС=1). Части модуля объединены по принципу функционального подобия. Например, модуль состоит из разных подпрограмм обработки ошибок. При использовании такого модуля клиент выбирает только одну из подпрограмм.

Файлы: 1 файл

Документ Microsoft Office Word.docx

— 37.77 Кб (Скачать файл)

Ставропольский  технологический институт сервиса(филиал)

Федерального  государственного бюджетного образовательного учреждения

высшего профессионального образования

"Южно-Российский  государственный университет экономики  и сервиса.

 

 

Контрольная работа

По дисциплине: Стандартизация ,сертификация и контроль качества информационных систем

Тема:________________________________________________________________

Номер варианта:______________

Выполнил(а) Студент(ка)  группы_________________________________________

_____________________________________________________________________

(фамилия, имя, отчество)

 

Проверил  преподаватель_______________________________________________

(фамилия, инициалы)

 

 

 

 

 

Ставрополь

201__г 

Вопросы:

1. Процедура определения типа связности модулей программных средств.

2. Понятие стандартизации. Цели и задачи стандартизации.

3. Оценка надежности программы  на основе модели Миллса.

 

 

 

1. Процедура определения  типа связности модулей программных  средств.

 

Связность модуля (Cohesion) — это мера зависимости его частей. Связность — это внутренняя характеристика модуля. Чем выше связность модуля, тем лучше результат проектирования, тем меньше «ручек управления» на нем находится и тем проще эти «ручки».

 Для измерения связности  используют понятие силы связности  (СС). Существует 7 типов связности:

1. Связность по совпадению (СС=0). В модуле отсутствуют явно выраженные внутренние связи.

2. Логическая связность  (СС=1). Части модуля объединены  по принципу функционального  подобия. Например, модуль состоит  из разных подпрограмм обработки  ошибок. При использовании такого  модуля клиент выбирает только  одну из подпрограмм.

 Недостатки:

- сложное сопряжение;

- большая вероятность внесения ошибок при изменении сопряжения ради одной из функций.

3. Временная связность  (СС=3). Части модуля не связаны,  но необходимы в один и тот  же период работы системы.

Недостаток: сильная взаимная связь с другими модулями, отсюда — сильная чувствительность внесению изменений.

4.  Процедурная связность (СС=5). Части модуля связаны порядком выполняемых ими действий, реализующих некоторый сценарий поведения.

5. Коммуникативная связность  (СС=7). Части модуля связаны по  данным (работают с одной и  той же структурой данных).

6. Информационная (последовательная) связность (СС=9). Выходные данные  одной части используются как  входные данные в другой части  модуля.

7.  Функциональная связность (СС=10). Части модуля вместе реализуют одну функцию.

 Отметим, что типы  связности 1,2,3 — результат неправильного  планирования архитектуры, а тип  связности 4 — результат небрежного  планирования архитектуры приложения.

 

^ Функциональная связность

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

 Вычислять синус угла;

 Проверять орфографию;

 Читать запись файла;

 Вычислять координаты  цели;

 Вычислять зарплату  сотрудника;

 Определять место пассажира.

 Каждый из этих модулей  имеет единичное назначение. Когда  клиент вызывает модуль, выполняется  только одна работа, без привлечения  внешних обработчиков. Например, модуль  Определять место пассажира должен  делать только это; он не  должен распечатывать заголовки  страницы.

 Некоторые из функционально  связных модулей очень просты (например, Вычислять синус угла  или Читать запись файла), другие  сложны (например, Вычислять координаты  цели). Модуль Вычислять синус  угла, очевидно, реализует единичную  функцию, но как может модуль  Вычислять зарплату сотрудника  выполнять только одно действие? Ведь каждый знает, что приходится  определять начисленную сумму,  вычеты по рассрочкам, подоходный  налог, социальный налог, алименты  и т. д.! Дело в том, что,  несмотря на сложность модуля  и на то, что его обязанность  исполняют несколько подфункций, если его действия можно представить  как единую проблемную функцию  (с точки зрения клиента), тогда  считают, что модуль функционально  связен.

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

 

^ Информационная связность

При информационной (последовательной) связности элементы-обработчики  модуля образуют конвейер для обработки  данных — результаты одного обработчика используются как исходные данные для следующего обработчика. Приведем пример:

 Модуль Прием и проверка  записи

 прочитать запись из  файла

 проверить контрольные  данные в записи

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

 вернуть обработанную  запись 

 Конец модуля

 В этом модуле 3 элемента. Результаты первого элемента (прочитать  запись из файла) используются  как входные данные для второго  элемента (проверить контрольные  данные в записи) и т. д.

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

 

^ Коммуникативная связность

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

 Модуль Отчет и средняя  зарплата

 используется Таблица  зарплаты служащих

 сгенерировать Отчет  по зарплате

 вычислить параметр  Средняя зарплата

 вернуть Отчет по  зарплате. Средняя зарплата 

 Конец модуля 

 Здесь все элементы  модуля работают со структурой  Таблица зарплаты служащих.

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

 Модули с коммуникативной  и информационной связностью  подобны в том, что содержат  элементы, связанные по данным. Их  удобно использовать, потому что  лишь немногие элементы в этих  модулях связаны с внешней  средой. Главное различие между  ними — информационно связный  модуль работает подобно сборочной  линии; его обработчики действуют  в определенном порядке; в коммуникативно связном модуле порядок выполнения действий безразличен. В нашем примере не имеет значения, когда генерируется отчет (до, после или одновременно с вычислением средней зарплаты).

 

^ Процедурная связность

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

 Модуль Вычисление  средних значений

 используется Таблица-А.  Таблица-В

 вычислить среднее  по Таблица-А

 вычислить среднее  по Таблица-В

 вернуть среднееТабл-А. среднееТабл-В

 Конец модуля

 Этот модуль вычисляет  средние значения для двух  полностью несвязанных таблиц  Таблица-А и Таблица-В, каждая  из которых имеет по 300 элементов.

 

^ Временная связность

При связности по времени  элементы-обработчики модуля привязаны  к конкретному периоду времени (из жизни программной системы).

 Классическим примером  временной связности является  модуль инициализации:

 Модуль Инициализировать  Систему

 перемотать магнитную  ленту 1

 Счетчик магнитной  ленты 1 := 0

 перемотать магнитную  ленту 2

 Счетчик магнитной  ленты 2 := 0

 Таблица текущих записей  : = пробел..пробел

 Таблица количества  записей := 0..0

 Переключатель 1 : = выкл

 Переключатель 2 := вкл

 Конец модуля

 Элементы данного модуля  почти не связаны друг с  другом (за исключением того, что  должны выполняться в определенное  время). Они все — часть программы  запуска системы. Зато элементы  более тесно взаимодействуют  с другими модулями, что приводит  к сложным внешним связям.

 Модуль со связностью  по времени испытывает те же  трудности, что и процедурно  связный модуль. Программист соблазняется  возможностью совместного использования  кода (действиями, которые связаны  только по времени), модуль становится  трудно использовать повторно.

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

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

 

 

 

^ Логическая связность

Элементы логически связного модуля принадлежат к действиям  одной категории, и из этой категории  клиент выбирает выполняемое действие. Рассмотрим следующий пример:

 Модуль Пересылка сообщения

 переслать по электронной  почте

 переслать по факсу

 послать в телеконференцию

 переслать по ftp-протоколу 

 Конец модуля

 Как видим, логически  связный модуль — мешок доступных  действий. Действия вынуждены совместно  использовать один и тот же  интерфейс модуля. В строке вызова  модуля значение каждого параметра  зависит от используемого действия. При вызове отдельных действий  некоторые параметры должны иметь  значение пробела, нулевые значения  и т. д. (хотя клиент все же  должен использовать их и знать  их типы).

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

 уродливый внешний  вид с различными параметрами,  обеспечивающими, например, четыре  вида доступа;

 запутанную внутреннюю  структуру со множеством переходов,  похожую на волшебный лабиринт.

 В итоге модуль становится  сложным как для понимания,  так и для сопровождения.

 

^ Связность по совпадению

Элементы связного по совпадению модуля вообще не имеют никаких отношений  друг с другом:

 Модуль Разные функции  (какие-то параметры)

 поздравить с Новым  годом (...)

 проверить исправность  аппаратуры (...)

 заполнить анкету героя  (...)

 измерить температуру  (...)

 вывести собаку на  прогулку (...)

 запастись продуктами (...)

 приобрести «ягуар»  (...)

 Конец модуля

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

 Чтобы клиент мог  воспользоваться модулем Разные  функции, этот модуль (подобно  всем связным по совпадению  модулям) должен быть «белым  ящиком», чья реализация полностью  видима. Такие модули делают системы  менее понятными и труднее  сопровождаемыми, чем системы  без модульности вообще!

 К счастью, связность  по совпадению встречается редко.  Среди ее причин можно назвать:

 бездумный перевод  существующего монолитного кода  в модули;

Информация о работе Процедура определения типа связности модулей программных средств