Анализ программного обеспечения с использованием объектно-ориентированных метрик

Валентин Павлов

1.Введение 2

2.Метрические особенности объектно-ориентированных программных систем 2

2.1Локализация 2

2.2Инкапсуляция 3

2.3Информационная закрытость 3

2.4Наследование 3

2.5Абстракция 3

3.Объектно-ориентированные метрики для измерения характеристик систем 4

3.1Количество строчек кода (LOC) 4

3.2Цикломатическая сложность Мак-Кейба (MVG) 4

3.3Количество комментариев (COM) 5

3.4Число классов – получателей сообщений данного класса (Fan-out, Fan-in) 5

3.5Количество "взвешенных" методов на класс (WMC) 5

3.6Глубина дерева наследования (DIT) 6

3.7Количество потомков (NOC) 6

3.8Ширина иерархии наследования (BIH) 7

3.9Глубина класса в графе наследования (NL) 7

3.10Связанность между классами объектов (CBO) 7

3.11Количество реакций на класс (RFC) 8

3.12Отсутствие сцепления в методах (LCOM) 9

3.13Количество строк текста на класс (KLOC) 10

3.14Число методов в классе (NM) 10

3.15Число новых методов в классе (NNM) 10

3.16Количество унаследованных методов (NMI) 11

3.17Количество потенциально наследуемых методов (PMI) 11

3.18Пропорция методов наследуемых подклассом (PMIS) 11

3.19Число общедоступных методов в классе (NPM) 12

3.20Степень методологической сцепленности (DMC) 12

3.21Количество посылаемых методом сообщений (NMS) 13

3.22Сообщения и аргументы (MAA) 13

3.23Количество абстрактных классов (NAC) 15

3.24Степень абстрактности классов (DAC) 15

3.25Количество переопределеных методов в подклассе (NMO) 15

3.26Пропорция переопределения методов в подклассе (POM) 16

3.27Число свойств (атрибутов или переменных) в классе(NAA) 16

3.28Число унаследованных свойств (атрибутов или переменных) в классе (NIV) 16

3.29Использование глобалов (GUS) 16

3.30Излишняя взаимосвязь через глобалы (UCGU) 17

3.31Степень взаимосвязи между классами (DCBO) 17

3.32Количество скрытых методов экземпляра (PrIM) 17

3.33Мера Мак-Клура (MMK) 17

4.Литература 17

  1. Введение

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

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

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

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

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