Архитектурные метрики

Пост написан по результатам изучения книги Software Architecture Metrics (2022).

Архитектурная метрика — это информация, которую архитектор отслеживает для принятия архитектурных решений и достижения приемлемых значений архитектурных характеристик.

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

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

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

Здесь возникает первый вопрос: что такое хорошая архитектура? И второй: хорошая ли архитектура у нас?

Попробуем ответить на эти вопросы через DORA-метрики (DevOps Research and Assessment), описанные в первой главе. Их можно назвать одними из самых значимых метрик в разработке ПО. Если значения DORA-метрик высокие, можно сказать, что команда разработки работает эффективно. Однако для оценки архитектуры этих метрик недостаточно.

Обратимся к седьмой главе: хорошая архитектура — это баланс архитектурных характеристик системы и их поддержание во времени. Такой баланс в целом определяет качество системы.

Почти во всех главах книги приводятся примеры архитектурных характеристик.

Из третьей главы следует, что главная задача архитектора — делать архитектуру эволюционной, чтобы система могла изменяться и при этом оставаться стабильной. В качестве ключевых характеристик выделяются тестируемость (testability) и развертываемость (deployability). Авторы предлагают эвристику: если поддерживать эти характеристики на высоком уровне, система будет эволюционной и устойчивой; остальные параметры можно улучшать по мере необходимости.

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

В основе всех этих характеристик лежит модульность (modularity). Хорошая архитектура — это прежде всего правильная модульность. Автор четвертой главы утверждает, что модульность влияет на систему примерно на 45%, и предлагает индекс зрелости модульности — MMI (Modularity Maturity Index) — для оценки архитектуры.

Для архитектурного надзора за характеристиками (или, иначе говоря, для защиты их целевых значений) во второй главе вводится понятие функций соответствия (fitness functions). С их помощью отслеживаются значения метрик и оценивается их соответствие целевым ориентирам.

Эти же функции можно использовать для создания собственных метрик или проверки составных показателей. В восьмой главе приводится дополнительное описание и развитие этого подхода.

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