Подтвердить что ты не робот

Что такое абстракция против графика неустойчивости?

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

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

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

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

alt text

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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