- •Анализ программного обеспечения с использованием объектно-ориентированных метрик
- •Введение
- •Метрические особенности объектно-ориентированных программных систем
- •Локализация
- •Инкапсуляция
- •Информационная закрытость
- •Наследование
- •Абстракция
- •Объектно-ориентированные метрики для измерения характеристик систем
- •Количество строчек кода (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)
- •Литература
Абстракция
Абстракция – это механизм, который позволяет проектировщику выделять главное в программном компоненте (как свойства, так и операции) без учета второстепенных деталей. По мере помещения на более высокие уровни абстракции игнорируются все большее количество деталей, обеспечивая все более общее представление понятия или элемента. Класс – это абстракция, которая может быть представлена на различных уровнях детализации и различными способами (например как список операций, последовательность состояний, последовательность взаимодействий). Поэтому объектно-ориентированные метрики должны представлять абстракции в терминах измерений класса. Примеры: количество экземпляров класса в приложении, количество родовых классов на приложение, отношение количества родовых к количеству неродовых.
Объектно-ориентированные метрики для измерения характеристик систем
Метрики для измерения характеристик программных систем тесно связаны с понятиями языка, на котором он были созданы. Поскольку при разработке и сопровождении системы необходимо будет оперировать этими понятиями, метрики должны позволять измерить эти понятия. Далее в этом разделе рассматриваются метрики для объектно-ориентированных языков программирования. Описываемые метрики часто используются в статьях и книгах соответствующей тематики. Для многих из них имеются общепринятые названия и их сокращения. Поэтому для метрик будет приводится также соответствующее название и сокращение на английском языке.
Количество строчек кода (loc)
Метрика (LinesofСode) для подсчета исполняемых строчек кода. Метрика позволяет измерить не пустые и не закомментированные строчки кода. Может существовать несколько вариаций:LOCf- количество строчек кода в функциях,LOCm– в модулях (при ОО проектировании – модуль = класс), илиLOCp– количество строк кода во всем проекте. Эта метрика одна из первых и наиболее часто используемых, так как, опираясь на нее, можно получить грубую оценку об изменениях в проекте.
Подсчитывается, опираясь на стандарт подсчета исполняемых строк кода, т.е. подсчитываются не пустые, не комментированные строки. Строчки препроцессора считаются как пустые. Определения классов и функций считаются за исключением глобальных определений.
Цикломатическая сложность Мак-Кейба (mvg)
Топологическая мера сложности - цикломатическая мера Мак-Кейба. В ее основе лежит идея оценки сложности ПО по числу базисных путей в ее управляющем графе, т.е. таких путей, компонуя которые можно получить всевозможные пути из входа графа в выходы. Цикломатическое число l (G) орграфа G с n-вершинами, m-дугами и p-компонентами связности есть величина l (G) = m - n + p.
Существует теорема о том, что число базисных путей в орграфе равно его цикломатическому числу, увеличенному на единицу. При этом, цикломатической сложностью ПО Р с управляющим графом G называется величина n (G) = l (G) +1 = m - n + 2. Практически цикломатическая сложность ПО равна числу предикатов плюс единица, что позволяет вычислять ее без построения управляющего графа простым подсчетом предикатов. Данная мера отражает психологическую сложность ПО. К достоинствам меры относят простоту ее вычисления и повторяемость результата, а также наглядность и содержательность интерпретации. В качестве недостатков можно отметить: нечувствительность к размеру ПО, нечувствительность к изменению структуры ПО, отсутствие корреляции со структурированностью ПО, отсутствие различия между конструкциями Развилка и Цикл, отсутствие чувствительности к вложенности циклов.
Формальное определение цикломатической сложности – это подсчет линейно независимых частей в графе потока управления полученного из программы. Примерное приближение может быть получено путем подсчета ключевых слов языка и операторов. Можно показать, что это будет достаточно точное приближение во многих случаях. В случае С++ подсчет идет по следующим маркерам - 'if', 'while', 'for', 'switch', 'break', '&&', '||'. Необходимо обратить внимание, что булевские операторы добавляют дополнительные ветвления в код, при том что не все булевское выражение может быть выполнено в зависимости от составляющих частей операнда. Кроме того, обработкаswitchоператора достаточно проблематично: не всеcaseмогут указывать на один блок кода, следовательно, подсчет таких операторов может немного завысить итоговое значение.