Что такое Абстрактность по сравнениюГрафик нестабильности?

StackOverflow https://stackoverflow.com/questions/1031135

Вопрос

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

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

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

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

alt text

Это было полезно?

Решение

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

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

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

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

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

Ка :Афферентные связи :Количество классов за пределами этой категории, которые зависят от классов внутри этой категории.

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top