Сложность программной системы.
По Холстеду сложность программной системы оценивается мерой длины модуля.
N=n1*log (n1) + n2*log (n2)
N – Длина модуля
n1 – Число различных операторов
n2 – Число различных операндов
Вторая характеристика – объём модуля.
V – Количество символов для записи операторов и операндов текста модуля.
V=N*log (n1+n2)
Том Мак Кейб в качестве характеристики сложности программы предложил использовать топологию внутренних связей. Для этого была разработана метрика
цикломатической сложности.
V(G)=E-N+2
E – Количество дуг
N – Количество вершин в управляющем графе программной системы
Таким образом при комплексной оценке сложности программной системы необходимо рассматривать:
1) Меру сложности модулей;
2) Меру сложности внешних связей;
3) Меру сложности внутренних связей.
На основе полных коэффициентов функциональных модулей вычисляется метрика общей сложности структуры.
Высота depth
Рис.17
ширина
S= *(Fan_in(i)+Fan_out(i)) (*)
length(i) – Оценка размера i-ого модуля
Fan_in(i) – Коэффициент объединения по входу(Количество управляющих
i-ым модулем модулей)
Fan_out(i) – Коэффициент разветвления по выходу(Количество модулей,ко-торыми прямо управляет i-ый модуль)
Характеристики йерархической структуры программной системы.(рисунок 17)
m |
Высота
Depth
n |
Fan_in(n)=2
Fan_out(m)=3
Рассмотрим основные характеристики йерархической структуры,представ-
ленной на рисунке.
Первыми характеристиками являются количество вершин (модулей) и коли-чество рёбер (связей между модулями).К ним добавляются две глобальные харак-теристики – высота и ширина:
q Высота – количество уровней управления;
q Ширина – максимальное из количеств модулей,размещённых на уров-нях управления.
В нашем примере высота = 3,ширина = 3.
Локальными характеристиками модулей структуры являются коэффициент
объединения по входу и коэффициент разветвления по выходу (Fan_in(i) и Fan_out(i) ).
В примере для модуля n: Fan_in(n)=2 ;для модуля m: Fan_out(m)=3.
Возникает вопрос:как оценить качество структуры? Из практики проекти-рования известно,что лучшее решение обеспечивается йерархической структурой
в виде дерева.
Степень отличия реальной проектной структуры от дерева характеризуется невязкой структуры(Nev).
Значение невязки лежит в диапазоне от 0 до 1.Если Nev = 0,то проектная структура является деревом,если Nev = 1,то проектная структура – полный граф.
Ясно,что невязка даёт грубую оценку структуры.Для увеличения точности оценки следует применить характеристики связности и сцепления.
Хорошая структура должна иметь низкое сцепление и высокую связность.
Л.Констентайн и Э.Йордан (1979) предложили оценивать структуру с помо-щью коэффициентов Fan_in(i) и Fan_out(i) модулей.
Большое значение Fan_in(i) – свидетельство высокого сцепления,так как является мерой зависимости модуля.Большое значение Fan_out(i) говорит о высо-кой сложности вызывающего модуля.Причиной является то,что для координации подчинённых модулей требуется сложная логика управления.
Основной недостаток коэффициентов Fan_in(i) и Fan_out(i) состоит в игно-рировании веса связи.Здесь рассматриваются только управляющие потоки (вызо-вы модулей).В то же время информационные потоки,нагружающие рёбра структу-ры,могут существенно изменяться,поэтому нужна мера,которая учитывает не только количество рёбер,но и количество информации,проходящей через них.
С.Генри и Д.Кафура (1981) ввели информационные коэффициенты ifan_in(i) и ifan_out(j).Они учитывают количество элементов и структур данных,из которых i-й модуль берёт информацию и которые обновляются j-м модулем соответствен-но.
Информационные коэффициенты суммируются со структурными коэффи-циентами sfan_in(i) и sfan_out(j),которые учитывают только вызовы модулей.
В результате формируются полные значения коэффициентов:
Fan_in(i)= sfan_in(i)+ifan_in(i),
Fan_out(j)=sfan_out(j)+ifan_out(j).
На основе полных коэффициентов модулей вычисляется метрика общей сложности структуры: Формула (*).
Программная документация.
Она должна быть организована так, чтобы легко была доступна информация по отдельным модулям. Список модулей, описание программы и иерархической схемы используется как справочник. Модули должны быть пронумерованы (обычно в соответствии с их иерархической упорядоченностью).
Главный модуль |
2.2.1 |
2.2 |
2.1 |
2.2.3 |
2.2.2 |
Схема модульной структуры программы должна быть дополнена описанием внешних характеристик модулей. Оно называется внешней спецификацией и содержит все сведения, необходимые для обращения к модулю.
На основе внешней спецификации модулей осуществляется разработка логической структуры этих модулей. Логическая структура модуля прорабатывается на стадии технического проекта программы.
Внешняя спецификация модуля должна включать:
1. Имя модуля, используемое при обращении к нему.
2. Описание функции, здесь приводится назначение модуля, но оно не должно содержать сведений о логической структуре и о контекстах, в которых используется модуль.
3. Список параметров: число и порядок задания параметров.
4. Входные параметры: подробное описание и их атрибуты (структура, размер, единица измерения, допустимый диапазон назначений, типы и т.д.).
5. Выходные параметры (аналогично п.4).
6. Внешние эффекты.
Например: печать сообщений, чтение запроса с монитора, вывод сообщений об ошибке.
Внешние эффекты модуля включают все внешние эффекты подчинённых ему модулей.