какие метрики показывают разницу между объектно-ориентированным и процедурным кодом - PullRequest
6 голосов
/ 20 марта 2010

Какие метрики могут помочь указать, что у меня есть процедурный код вместо объектно-ориентированного кода? Я хотел бы иметь набор простых метрик, которые с высокой вероятностью указывают на то, что анализируемый код содержит сценарии процедурных транзакций и модель анемичной области вместо того, чтобы следовать принципам рационального объектно-ориентированного проектирования.

Был бы рад любому набору полезных метрик и инструментов для измерения.

Спасибо, Томас!

Ответы [ 2 ]

1 голос
/ 22 марта 2010

сцепление и сцепление


Метрики, ориентированные на сплоченность и сцепление, должны дать хорошее представление о том, что ваши занятия реальны, а не совокупности функций. Здесь есть очень удобочитаемая статья здесь , которую я цитирую ниже, чтобы указать, почему я считаю сплоченность хорошим показателем:

«Связность относится к взаимосвязанности» компонентов модуля. Компонент с высокой связностью - это компонент с одной основной функцией. Должно быть трудно разделить связующий компонент. Сплоченность может быть классифицирована с использованием порядковой шкалы, которая варьируется от наименее желаемой категории (случайная сплоченность) до наиболее желательной (функциональная сплоченность). "

Классическим измерением когезии является Чидамбера и Кемерера "Отсутствие сплоченности в методах" (LCOM) . Вы также можете взглянуть на Ответ для класса (RFC) , который измеряет связь между методами в классе.

Вы могли бы рассмотреть такие метрики проектирования, как NOC и DIT , но мой собственный опыт заключается в том, что они слишком грубые и легко путаются с классами в сторонней среде.

Вы не сказали, какой язык вы используете, но есть некоторые инструменты, построенные на Eclipse, поэтому быстрый веб-поиск по объектно-ориентированным метрикам на основе Eclipse должен дать что-то полезное

1 голос
/ 20 марта 2010

Некоторые просто с ума сошли

  • Относительное количество интерфейсов, абстрактных классов и т. Д. (Больше ОО)
  • использование переменной-члена для метода (больше OO)
  • количество методов, в которых используется одна и та же переменная-член (больше OO)
  • количество статических переменных и методов (более процедурные, особенно статические методы (применяются некоторые исключения, например, фабрики))
  • строк кода на класс (более процедурный)

Они не гарантируют, что ваш код более или менее процедурный, но могут помочь в этом.

...