СиППО (9) (Ответы на все вопросы)
Описание файла
Файл "СиППО (9)" внутри архива находится в папке "Ответы на все вопросы". Документ из архива "Ответы на все вопросы", который расположен в категории "". Всё это находится в предмете "системное и прикладное программное обеспечение (сппо)" из 6 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "системное и прикладное программное обеспечение (сппо)" в общих файлах.
Онлайн просмотр документа "СиППО (9)"
Текст из документа "СиППО (9)"
9. Метрики объектно-ориентированных программ.
Набор метрик Чидамбера и Кемерера
В 1994 году С. Чидамбер и К. Кемерер (Chidamber и Кетегег) предложили шесть проектных метрик, ориентированных на классы. Класс — фундаментальный элемент объектно-ориентированной (ОО) системы. Поэтому измерения и метрики для отдельного класса, иерархии классов и сотрудничества классов бесценны для программного инженера, который должен оценить качество проекта.
Набор Чидамбера-Кемерера наиболее часто цитируется в программной индустрии и научных исследованиях. Рассмотрим каждую из метрик набора.
1) Взвешенные методы на класс WMC (Weighted Methods Per Class)
Допустим, что в классе С определены п методов со сложностью с1...,c2,..., сn. Для оценки сложности может быть выбрана любая метрика сложности (например, цикломатическая сложность). Главное — нормализовать эту метрику так, чтобы номинальная сложность для метода принимала значение 1. В этом случае
Количество методов и их сложность являются индикатором затрат на реализацию и тестирование классов. Кроме того, чем больше методов, тем сложнее дерево наследования (все подклассы наследуют методы их родителей). С ростом количества методов в классе его применение становится все более специфическим, тем самым ограничивается возможность многократного использования. По этим причинам метрика WMC должна иметь разумно низкое значение.
2) Высота дерева наследования DIT (Depth of Inheritance Tree)
DIT определяется как максимальная длина пути от листа до корня дерева наследования классов. Для показанной на рис. 14.3 иерархии классов метрика DIT равна 3.
Рис. 14.3. Дерево наследования классов
Соответственно, для отдельного класса DIT, это длина максимального пути от данного класса до корневого класса в иерархии классов.
По мере роста DIT вероятно, что классы нижнего уровня будут наследовать много методов. Это приводит к трудностям в предсказании поведения класса. Высокая иерархия классов (большое значение DIT) приводит к большей сложности проекта, так как означает привлечение большего количества методов и классов.
3) Количество детей NOC (Number of children)
Подклассы, которые непосредственно подчинены суперклассу, называются его детьми. Значение NOC равно количеству детей, то есть количеству непосредственных наследников класса в иерархии классов. На рис. 14.3 класс С2 имеет двух детей — подклассы С21 и С22.
С увеличением NOC возрастает многократность использования, так как наследование — это форма повторного использования.
Однако при возрастании NOC ослабляется абстракция родительского класса. Это означает, что в действительности некоторые из детей уже не являются членами родительского класса и могут быть неправильно использованы.
Кроме того, количество детей характеризует потенциальное влияние класса на проект. По мере роста NOC возрастает количество тестов, необходимых для проверки каждого ребенка.
Метрики DIT и NOC — количественные характеристики формы и размера структуры классов. Хорошо структурированная объектно-ориентированная система чаще бывает организована как лес классов, чем как сверхвысокое дерево. По мнению Г. Буча, следует строить сбалансированные по высоте и ширине структуры наследования: обычно не выше, чем 7 ± 2 уровня, и не шире, чем 7 + 2 ветви [22].
4) Сцепление между классами объектов СВО (Coupling between object classes)
СВО — это количество сотрудничеств, предусмотренных для класса, то есть количество классов, с которыми он соединен. Соединение означает, что методы данного класса используют методы или экземплярные переменные другого класса.
Другое определение метрики имеет следующий вид: СВО равно количеству сцеплений класса; сцепление образует вызов метода или свойства в другом классе.
Данная метрика характеризует статическую составляющую внешних связей классов.
5) Отклик для класса RFC (Response For a Class)
Введем вспомогательное определение. Множество отклика класса RS — это множество методов, которые могут выполняться в ответ на прибытие сообщений в объект этого класса. Формула для определения RS имеет вид
,
где {Ri} — множество методов, вызываемых методом г, {М} — множество всех методов в классе.
Метрика RFC равна количеству методов во множестве отклика, то есть равна мощности этого множества:
RFC – card{RS}.
Приведем другое определение метрики: RFC — это количество методов класса плюс количество методов других классов, вызываемых из данного класса.
Метрика RFC является мерой потенциального взаимодействия данного класса с другими классами, позволяет судить о динамике поведения соответствующего объекта в системе. Данная метрика характеризует динамическую составляющую внешних связей классов.
6) Недостаток связности в методах LСOM (Lack of Cohesion in Methods)
Каждый метод внутри класса обращается к одному или нескольким свойствам (экземплярным переменным). Метрика LCOM показывает, насколько методы не связаны друг с другом через свойства (переменные). Если все методы обращаются к одинаковым свойствам, то LCOM = 0.
Введем обозначения:
❑ НЕ СВЯЗАНЫ — количество пар методов без общих экземплярных переменных;
❑ СВЯЗАНЫ — количество пар методов с общими экземплярными переменными.
❑ Ij— набор экземплярных переменных, используемых методом Мj
Очевидно, что
НЕ СВЯЗАНЫ = card {Iij | Ii Ij = 0},
СВЯЗАНЫ = card {Iij | Ii Ij 0}.
Тогда формула для вычисления недостатка связности в методах примет вид
Можно определить метрику по-другому: LCOM — это количество пар методов, не связанных по свойствам класса, минус количество пар методов, имеющих такую связь.
Рассмотрим примеры применения метрики LCOM.
Пример 1: В классе имеются методы: M1, M2, М3, М4. Каждый метод работает со своим набором экземплярных переменных:
I1={a, b}; I2={а, с}; I3={х, у}; I4={т, п}.
В этом случае
НЕ СВЯЗАНЫ = card (I13, I14, I23, I24, I34) = 5; СВЯЗАНЫ = card (I12) = 1.
LCOM = 5-1=4.
Метрики Лоренца и Кидда
Коллекция метрик Лоренца и Кидда — результат практического, промышленного подхода к оценке ОО-проектов
Метрики, ориентированные на классы:
М. Лоренц и Д. Кидд подразделяют метрики, ориентированные на классы, на четыре категории: метрики размера, метрики наследования, внутренние и внешние метрики.
Размерно-ориентированные метрики основаны на подсчете свойств и операций для отдельных классов, а также их средних значений для всей ОО-системы. Метрики наследования акцентируют внимание на способе повторного использования операций в иерархии классов. Внутренние метрики классов рассматривают вопросы связности и кодирования. Внешние метрики исследуют сцепление и повторное использование.
1) Размер класса CS (Class Size)
Общий размер класса определяется с помощью следующих измерений:
❑ общее количество операций (вместе с приватными и наследуемыми экземплярными операциями), которые инкапсулируются внутри класса;
❑ количество свойств (вместе с приватными и наследуемыми экземплярными свойствами), которые инкапсулируются классом.
Рекомендуемое значение CS <= 20 методов.
2) Количество операций, переопределяемых подклассом, NOO (Number of Operations Overridden by a Subclass)
Переопределением называют случай, когда подкласс замещает операцию, унаследованную от суперкласса, своей собственной версией.
Рекомендуемое значение NOO <= 3 методов.
3) Количество операций, добавленных подклассом, NOA (Number of Operations Added by a Subclass)
Подклассы специализируются добавлением приватных операций и свойств. С ростом NOA подкласс удаляется от абстракции суперкласса. Обычно при увеличении высоты иерархии классов (увеличении DIT) должно уменьшаться значение NOA на нижних уровнях иерархии.
Для рекомендуемых значений CS = 20 и DIT = 6 рекомендуемое значение NOA <= 4 методов (для класса-листа).
4) Индекс специализации SI (Specialization Index)
Обеспечивает грубую оценку степени специализации каждого подкласса. Специализация достигается добавлением, удалением или переопределением операций:
SI = (NOO x уровень) /Mобщ,
где уровень — номер уровня в иерархии, на котором находится подкласс, Мобщ — общее количество методов класса.
Пример расчета индексов специализации приведен на рис. 14.5.
Рис. 14.5. Расчет индексов специализации классов
Чем выше значение SI, тем больше вероятность того, что в иерархии классов есть классы, нарушающие абстракцию суперкласса.
Рекомендуемое значение SI<= 0,15.
Операционно-ориентированные метрики:
Эта группа метрик ориентирована на оценку операций в классах. Обычно методы имеют тенденцию быть небольшими как по размеру, так и по логической сложности. Тем не менее реальные характеристики операций могут быть полезны для глубокого понимания системы.
5) Средний размер операции OSAVG (Average Operation Size)
В качестве индикатора размера может использоваться количество строк программы, однако LOC-оценки приводят к известным проблемам. Альтернативный вариант — «количество сообщений, посланных операцией».
Рост значения метрики означает, что обязанности размещены в классе не очень удачно. Рекомендуемое значение OSAVG <= 9.
6) Сложность операции ОС (Operation Complexity)
Сложность операции может вычисляться с помощью стандартных метрик сложности, то есть с помощью LOC- или FP-оценок, метрики цикломатической сложности, метрики Холстеда.
М. Лоренц и Д. Кидд предлагают вычислять ОС суммированием оценок с весовыми коэффициентами. Поскольку операция должна быть ограничена конкретной обязанностью, желательно уменьшать ОС. Рекомендуемое значение ОС <= 65 (для предложенного суммирования).
7) Среднее количество параметров на операцию NPAVG (Average Number of Parameters per operation)
Чем больше параметров у операции, тем сложнее сотрудничество между объектами. Поэтому значение NPAVG должно быть как можно меньшим.
Рекомендуемое значение NPAVG = 0,7.