2009-06-23 4 views
18

Недавно я использовал NDepend, и он подготовил хороший отчет о моих сборках .net и связанных с ним pdbs.Что такое абстракция против графика неустойчивости?

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

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

Существует очень хорошая статья here, которая говорит об этом, но что еще в дополнение к этому мне нужно, «как я могу это контролировать? [Контроль абстрактности со стабильностью]

alt text

ответ

25

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

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

Роберт К. Мартин article по метрикам OO описывает эти концепции в более количественных терминах.

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

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

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

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

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

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

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

0

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

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

Но в любом случае вы должны иметь сильное представление о показателях нестабильности и абстрактности, прежде чем пытаться понять их совместную работу. Вы можете найти некоторые примеры того, что нестабильность означает, в этой статье: How to Use Module Coupling and Instability Metrics to Guide Refactoring

Существует родственная статья получения запроса CQLinq, измеряющую неустойчивость всех модулей приложения: How to Measure Module Coupling and Instability Using NDepend

Смежные вопросы