Что такое абстракция против графика неустойчивости?
Недавно я использовал NDepend, и он подготовил хороший отчет о моих сборках .net и связанных с ним pdbs.
Самое интересное, что я нашел в отчете, - это абстракция против графика неустойчивости. Я хотел понять это в деталях, я прочитал их документы и онлайн-метрики, но это могло только помочь в некоторой степени.
В первую очередь я хочу понять, как правильно оценить график и методы контроля абстрактности со стабильностью.
Там очень хорошая статья здесь, которая говорит об этом, но что еще в дополнение к этому мне нужно," как я могу это контролировать? [контроль абстрактности со стабильностью] '
![alt text]()
Ответы
Ответ 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