Что такое граф абстрактности и нестабильности? - PullRequest
19 голосов
/ 23 июня 2009

Я недавно использовал NDepend, и он дал хороший отчет о моих сборках .net и связанных pdbs.

Самым интересным, что я нашел в отчете, был график абстрактности и нестабильности. Я хотел понять это в деталях, я читал их документы и онлайн-метрики, но это могло помочь только до определенной степени.

Прежде всего, я хочу понять, как правильно оценивать график и методы контроля абстрактности со стабильностью.

Есть очень хорошая статья здесь , в которой говорится об этом, но что еще в дополнение к этому мне нужно, - как мне это контролировать? [управление абстрактностью со стабильностью] '

alt text

Ответы [ 2 ]

26 голосов
/ 19 августа 2009

Абстрактность - это мера жесткости программной системы. Чем выше абстракция, тем меньше жесткость (или больше гибкость) и наоборот. Если компоненты системы зависят от абстрактных классов или интерфейсов, такую ​​систему легче расширять и изменять, чем если бы она напрямую зависела от конкретных классов.

Стабильность - это мера толерантности к изменениям, а также то, насколько хорошо система программного обеспечения позволяет вносить изменения, не нарушая их. Это определяется путем анализа взаимозависимостей компонентов системы.

Статья Роберта Мартина о метриках ОО описывает эти понятия в более количественном выражении.

Выдержка из статьи:

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

Ca: Afferent Couplings: количество классов вне этой категории, которые зависят от классов в этой категории.

Ce: эфферентные связи: количество классов в этой категории, которые зависят от классов вне этой категории.

I: нестабильность: (Ce ÷ (Ca + Ce)): этот показатель имеет диапазон [0,1]. I = 0 обозначает максимально стабильную категорию. I = 1 обозначает максимально нестабильную категорию.

A: Абстрактность: (# абстрактных классов в категории ÷ всего # классов в категории). Этот диапазон метрик равен [0,1]. 0 означает бетон, а 1 - полностью абстрактный.

В любой программной системе, особенно большой, баланс имеет решающее значение. В этом случае система должна сбалансировать абстрактность со стабильностью, чтобы быть «хорошей». Положение на графике A-I показывает это. Пожалуйста, прочитайте статью для объяснения.

1 голос
/ 12 августа 2015

И абстрактность, и нестабильность могут быть использованы отдельно для оценки вашего кода. Вы заранее знаете, каким должен быть абстрактный или стабильный модуль. Например, вы хотите, чтобы уровень представления был умеренно абстрактным и высокостабильным, потому что от него зависят более низкие модули. С другой стороны, вы хотите, чтобы уровень инфраструктуры был очень конкретным (низкая абстрактность) и очень нестабильным, потому что он должен реализовывать то, что требуют верхние уровни.

Как только это станет ясно, вы можете объединить абстрактность и нестабильность в один граф, и это граф нестабильности-абстрактности. Вы хотите, чтобы ваш код демонстрировал настолько много абстрактности, насколько он стабилен, чтобы сбалансировать потребности для поддержки будущих изменений требований.

Но в любом случае, вы должны иметь четкое представление о метриках нестабильности и абстрактности, прежде чем пытаться понять их совместную работу. В этой статье вы найдете несколько примеров того, что означает нестабильность: Как использовать метрики связности модулей и нестабильности для проведения рефакторинга

Есть связанная статья, получающая запрос CQLinq, который измеряет нестабильность всех модулей в приложении: Как измерить связь модулей и нестабильность с помощью NDepend

...