
- •Анализ программного обеспечения с использованием объектно-ориентированных метрик
- •Введение
- •Метрические особенности объектно-ориентированных программных систем
- •Локализация
- •Инкапсуляция
- •Информационная закрытость
- •Наследование
- •Абстракция
- •Объектно-ориентированные метрики для измерения характеристик систем
- •Количество строчек кода (loc)
- •Цикломатическая сложность Мак-Кейба (mvg)
- •Количество комментариев (com)
- •Число классов – получателей сообщений данного класса(Fan-out, Fan-in)
- •Количество "взвешенных" методов на класс (wmc)
- •Глубина дерева наследования (dit)
- •Количество потомков (noc)
- •Ширина иерархии наследования (bih)
- •Глубина класса в графе наследования (nl)
- •Связанность между классами объектов (cbo)
- •Количество реакций на класс (rfc)
- •Отсутствие сцепления в методах (lcom)
- •Количество строк текста на класс (kloc)
- •Число методов в классе (nm)
- •Число новых методов в классе (nnm)
- •Количество унаследованных методов (nmi)
- •Количество потенциально наследуемых методов (pmi)
- •Пропорция методов наследуемых подклассом (pmis)
- •Число общедоступных методов в классе(npm)
- •Степень методологической сцепленности (dmc)
- •Количество посылаемых методом сообщений (nms)
- •Сообщения и аргументы (maa)
- •Количество абстрактных классов (nac)
- •Степень абстрактности классов (dac)
- •Количество переопределеных методов в подклассе (nmo)
- •Пропорция переопределения методов в подклассе (pom)
- •Степень взаимосвязи между классами (dcbo)
- •Количество скрытых методов экземпляра (PrIm)
- •Мера Мак-Клура (mmk)
- •Литература
Глубина дерева наследования (dit)
Глубина дерева наследования (Depth of Inheritance Tree - DIT) позволяет определить количество классов-предков, которые потенциально оказывают влияние на данный класс.
Вероятное влияние метрики DITна характеристики системы:
Большое количество предков делает поведение класса менее предсказуемым.
Глубокие деревья наследования усложняют проект, поскольку включают большее число атрибутов и методов в классах-потомках.
Чем глубже положение класса в дереве иерархии, тем больше повторное использование его методов.
Глубина класса в дереве наследования – длина пути в простейшей модели иерархии наследования классов от корня до вершины, соответствующей рассматриваемому классу. Шкала значений абсолютная.
Данное определение справедливо только для ОО проектов и программ, модель иерархии наследования которых представляет собой дерево. В литературе, как правило, не рекомендуется проектировать классы, наследующие свойства и методы сразу от нескольких предков, однако на практике используется так называемое множественное наследование. Для измерения глубины класса в таких случаях должна использоваться метрика глубина класса в графе наследования
Метрика связана с сопровождаемостью и повторной используемостью программ. Во-первых, чем глубже конкретный класс в иерархии, тем более "проработанной" становится проблемная область и выше потенциальное повторное использование унаследованных методов (поскольку их становится все больше и больше). Но, во-вторых, чем глубже класс в иерархии наследования и больше число методов в нем, тем сложнее предсказать поведение объекта–представителя класса (а значит, и разобраться в том, что написано в программе).
Пример:
Рассмотрим программу:
class GrandFather {};
class Father : public GrandFather {};
class Son : public Father {}
В этом случае:
DIT(GrandFather) = 0
DIT(Father) = 1
DIT(Son) = 2.
Количество потомков (noc)
Количество потомков (Number Of Children - NOC) позволяет определить количество непосредственных потомков данного класса. Число дуг в простейшей модели иерархии наследования классов, выходящих из вершины, соответствующей классу.
Шкала значений: абсолютная.
Вероятное влияние метрики на характеристики системы:
Чем больше потомков у класса, тем больше повторное использование его методов. Это положительное свойство.
Чем больше потомков у класса, тем больше вероятность неправильного использования базового класса-родителя. Это отрицательное свойство.
Чем больше потомков у класса, тем большее влияние он оказывает на систему в целом. Такой класс требует более тщательного тестирования.
Пример:
Рассмотрим программу:
class GrandFather {};
class Father : public GrandFather {};
class Mother : public GrandFather {};
class Son : public Father, Mother{}
В этом случае:
NOC(GrandFather) = 2
NOC(Father) = 1
NOC(Mother) = 1
NOC(Son) =0.
Ширина иерархии наследования (bih)
The breadth of the inheritance hierarchy (BIH). Максимальное число вершин на одном уровне в простейшей модели наследования классов. Шкала значений: абсолютная. Эта метрика применима только в том случае, когда иерархия наследования представлена деревом.