Мера Пивоварского ставит целью учесть в оценке сложности ПО различия не только между последовательными и вложенными управляющими конструкциями, но и между структурированными и неструктурированными программами. Она выражается отношением N(G) = n *(G) + S Pi , где n *(G) - модифицированная цикломатическая сложность, вычисленная так же, как и V(G), но с одним отличием: оператор CASE с n- выходами рассматривается как один логический оператор, а не как n-1 операторов. Рi - глубина вложенности i - той предикатной вершины.
Для подсчета глубины вложенности предикатных вершин используется число сфер влияния. Под глубиной вложенности понимается число всех сфер влияния предикатов, которые либо полностью содержаться в сфере рассматриваемой вершины, либо пересекаются с ней. Глубина вложенности увеличивается за счет вложенности не самих предикатов, а сфер влияния. Сравнительный анализ цикломатических и функциональных мер с обсуждаемой для десятка различных управляющих графов программы показывает, что при нечувствительности прочих мер этого класса, мера Пивоварского возрастает при переходе от последовательных программ к вложенным и далее к неструктурированным.
Мера Мак-Клура предназначена для управления сложностью структурированных программ в процессе проектирования. Она применяется к иерархическим схемам разбиения программ на модули, что позволяет выбрать схему разбиения с меньшей сложностью задолго до написания программы. Метрикой выступает зависимость сложности программы от числа возможных путей исполнения, числа управляющих конструкций и числа переменных (от которых зависит выбор пути). Методика расчета сложности по Мак-Клуру четко ориентирована на хорошо структурированные программы.
Тестирующей мерой М называется мера сложности, удовлетворяющая следующим условиям:
1. Мера сложности простого оператора равна 1;
2. М ({F1; F2; ┘;Fn}) = еin M(Fi);
3. М (if P then F1 else F2) = 2 MAX (M (F1), M (F2));
4. М (while P do F) = 2 M(F).
Мера возрастает с глубиной вложенности и учитывает протяженность программы. К тестирующей мере близко примыкает мера на основе регулярных вложений. Идея этой меры сложности программ состоит в подсчете суммарного числа символов (операндов, операторов, скобок) в регулярном выражении с минимально необходимым числом скобок, описывающим управляющий граф программы. Все меры этой группы чувствительны к вложенности управляющих конструкций и к протяженности программы. Однако возрастает уровень трудоемкости вычислений.
Рассмотрим меры сложности, учитывающие характер разветвлений. В основе узловой меры Вудворда, Хедли лежит идея подсчета топологических характеристик потока управления. При этом, под узловой сложностью понимается число узлов передач управления. Данная мера отслеживает сложность линеаризации программы и чувствительна к структуризации (сложность уменьшается). Она применима для сравнения эквивалентных программ, предпочтительнее меры Холстеда, но по общности уступает мере Мак-Кейба.
Топологическая мера Чена выражает сложность программы числа пересечений границ между областями, образуемыми блок - схемой программы. Этот подход применим только к структурированным программам, допускающим лишь последовательное соединение управляющих конструкций. Для неструктурированных программ мера Чена существенно зависит от условных и безусловных переходов. В этом случае можно указать верхнюю и нижнюю границы меры. Верхняя - есть m+1, где m - число логических операторов при их гнездовой вложенности. Нижняя - равна 2. Когда управляющий граф программы имеет только одну компоненту связности, мера Чена совпадает с цикломатической мерой Мак-Кейба.
Метрики Джилба оценивают сложность графо-ориентированных модулей программ отношением числа переходов по условию к общему числу исполняемых операторов. Хорошо зарекомендовала себя метрика, относящаяся число межмодульных связей к общему числу модулей. Названные метрики использовались для оценки сложности эквивалентных схем программ, в особенности схем Янова.
Используются также меры сложности, учитывающие историю вычислений, характер взаимодействия модулей и комплексные меры.
Совокупность цикломатических мер пригодна для оценивания сложности первичных формализованных спецификаций, задающих в совокупности исходные данные, цели и условия построения искомого ПО. Оценка этой первичной программы или сравнение нескольких альтернативных ее вариантов позволит изначально гармонизировать процесс разработки ПО и от стартовой точки контролировать и управлять его текущей результирующей сложностью.
1.3.4 Объектно-ориентированные метрики
В современных условиях большинство программных проектов создается на основе ОО подхода, в связи с чем существует значительное количество метрик, позволяющих получить оценку сложности объектно-ориентированных проектов. [10]
Объектно-ориентированные метрики
Таблица 2
Метрика | Описание |
1 | 2 |
Взвешенная насыщенность класса 1 (Weighted Methods Per Class (WMC)) | Отражает относительную меру сложности класса на основе цикломатической сложности каждого его метода. Класс с более сложными методами и большим количеством методов считается более сложным. При вычислении метрики родительские классы не учитываются. |
Взвешенная насыщенность | Мера сложности класса, основанная на том, что класс с большим числом методов, является более сложным, и что |
Окончание таблицы 2 | |
1 | 2 |
класса 2 (Weighted Methods Per Class (WMC2)) | метод с большим количеством параметров также является более сложным. При вычислении метрики родительские классы не учитываются. |
Глубина дерева наследования (Depth of inheritance tree) | Длина самого длинного пути наследования, заканчивающегося на данном модуле. Чем глубже дерево наследования модуля, тем может оказаться сложнее предсказать его поведение. С другой стороны, увеличение глубины даёт больший потенциал повторного использования данным модулем поведения, определённого для классов-предков. |
Количество детей (Number of children) | Число модулей, непосредственно наследующих данный модуль. Большие значения этой метрики указывают на широкие возможности повторного использования; при этом слишком большое значение может свидетельствовать о плохо выбранной абстракции. |
Связность объектов (Coupling between objects) | Количество модулей, связанных с данным модулем в роли клиента или поставщика. Чрезмерная связность говорит о слабости модульной инкапсуляции и может препятствовать повторному использованию кода. |
Отклик на класс (Response For Class) | Количество методов, которые могут вызываться экземплярами класса; вычисляется как сумма количества локальных методов, так и количества удаленных методов |
Метрика Холстеда относится к метрикам, вычисляемым на основании анализа числа строк и синтаксических элементов исходного кода программы.
Основу метрики Холстеда составляют четыре измеряемые характеристики программы:
· NUOprtr (Number of Unique Operators) — число уникальных операторов программы, включая символы-разделители, имена процедур и знаки операций (словарь операторов);
· NUOprnd (Number of Unique Operands) — число уникальных операндов программы (словарь операндов);
· Noprtr (Number of Operators) — общее число операторов в программе;
· Noprnd (Number of Operands) — общее число операндов в программе.
Метрики Холстеда отражают лексический подход к измерению характеристик программного обеспечения, основанный на измеримых свойствах алгоритмов. Свойства любого описания алгоритма (или программы для ЭВМ), по мнению Холстеда, могут быть измерены или вычислены на основе следующих метрических характеристик (оценочных элементов):
n1 - количество различных операторов программы;
n2 - количество различных операндов программы;
N1 - общее количество операторов программы;
N2 - общее количество операндов программы.
На их основе Холстед определяет следующие метрики:
· словарь программы (в условных единицах)
n = n1+n2, (1)
· теоретический словарь программы, т.е. словарный запас, необходимый для написания программы, с учетом того, что необходимая функция уже реализована в данном языке и, следовательно, программа сводится к вызову этой функции.
n* = n1* + n2*
· длина программы (в условных единицах)
N = N1+N2 (2)
· теоретическая длина программы (в условных единицах)
Ñ = (n1 ´ log2 n1)+(n2´log2 ´ n2), (3)
Вводя эту оценку, Холстед исходит из основных концепций теории информации, по аналогии с которыми частота использования операторов и операндов в программе пропорциональна двоичному логарифму количества их типов. Таким образом, выражение (3) представляет собой идеализированную аппроксимацию (2), т. е. справедливо для потенциально корректных программ, свободных от избыточности или несовершенств (стилистических ошибок).
Несовершенствами можно считать следующие ситуации:
o последующая операция уничтожает результаты предыдущей без их использования;
o присутствуют тождественные выражения, решающие совершенно одинаковые задачи;
o одной и той же переменной назначаются различные имена и т. п.
Подобные ситуации приводят к изменению N без изменения n.
Холстед утверждает, что для стилистически корректных программ отклонение в оценке теоретической длины Ñ от реальной N не превышает 10%.