Существует ли показатель, аналогичный показателю сложности McCabe, для измерения степени связности подпрограммы, а также того, насколько свободно (или тесно) подпрограмма связана с другим кодом в той же кодовой базе?
Существует ли показатель, аналогичный показателю сложности McCabe, для измерения степени связности подпрограммы, а также того, насколько свободно (или тесно) подпрограмма связана с другим кодом в той же кодовой базе?
Ответы:
Я думаю, что метрика, которую вы ищете, это LCOM4, хотя она больше относится к классам.
Сонар хорошо объясняет это здесь :
... метрика: LCOM4 (Отсутствие методов сплоченности) для измерения степени сплоченности классов. Интерпретация этой метрики довольно проста, так как значение 1 означает, что у класса есть только одна ответственность (хорошо), а значение X означает, что у класса, вероятно, есть обязанности X (плохо), и его следует реорганизовать / разделить.
Здесь нет никакой магии, только здравый смысл. Давайте рассмотрим простой пример с классом Driver. Этот класс имеет два поля: Car и Brain и пять методов: drive (), goTo (), stop (), getAngry () и drinkCoffee (). Вот график зависимости между этими компонентами. Есть три блока связанных компонентов, поэтому LCOM4 = 3, поэтому класс, кажется, имеет три разные обязанности и нарушает принцип единой ответственности.
...
Это отличный инструмент, если вы можете его использовать. :)
brain.setAngry(driver)
? car.applyBreaks(driver)
?
Нестабильность поддерживается в различных инструментах метрики кода.