При формализации архитектуры системы важно, чтобы вы понимали не только то значение, которое лежит в основе архитектуры, но также понимали и ценили то, чем она должна быть.
Основные цели программного обеспечения или технической архитектуры - определить нефункциональные требования , которые реализуются с помощью атрибутов качества, которые будут определять архитектуру системы .
По нефункциональным требованиям:
Нефункциональное требование - это требование, которое определяет критерии, которые можно использовать для оценки работы системы, а не для конкретного поведения. Они контрастируют с функциональными требованиями, которые определяют конкретное поведение или функции. План выполнения функциональных требований подробно описан в проекте системы. План реализации нефункциональных требований подробно описан в архитектуре системы.
В целом, функциональные требования определяют, что должна делать система, а нефункциональные требования определяют, как должна быть система. ... Нефункциональные требования часто называют «атрибутами качества» системы. Другими терминами для нефункциональных требований являются «качества», «цели качества», «требования к качеству обслуживания», «ограничения» и «не поведенческие требования»
Конечно, определение архитектурно значимых требований имеет смысл, когда речь идет о новом проекте, однако при работе с существующим программным обеспечением лучше всего быть максимально дисциплинированным. Вы не хотите, чтобы существующая система влияла на вашу программную архитектуру.
Архитектура программного обеспечения, чтобы быть авторитетной, должна состоять из трех вещей.
декларативный
Это часть документации, в которой вы заявляете НЕ ЧТО ТАКОЕ, а как вещи ДОЛЖНЫ БЫТЬ. Мы делаем это с помощью различных архитектурных представлений системы. Мы определяем компоненты, которые должны быть, как они взаимодействуют, и затем мы дополнительно углубляемся в каждый компонент для более детальных представлений, которые объявляют, как должна быть разработана система.
Это важное различие. Проектирование системы должно быть ограничено архитектурой системы, на самом деле это отдельные, но связанные вещи.
обоснование
Обоснование вашей архитектуры программного обеспечения - это то, что обеспечивает легитимность и авторитетность принятых архитектурных решений. Возможно, было принято решение использовать прослушиватель событий Pub / Sub поверх MQ для запуска пакетного задания, и вы это представляете?
Почему было принято это решение? Мы объясняем, почему в разделе «Обоснование», и связываем наше объяснение с нефункциональными требованиями, целями атрибутов качества или архитектурно значимыми требованиями. (Например, задания должны быть асинхронными и повторяемыми, ремонтопригодность как атрибут качества определяет, что в случае сбоя пакетного задания задания могут быть повторно инициированы через сообщение MQ, система должна иметь нулевую потерю сообщения при асинхронной связи и т. Д. ..)
риски
Теперь, когда вы объявили, какой должна быть архитектура, и подтвердили ее с помощью своего Обоснования, теперь вы можете идентифицировать Риски для текущего состояния системы, где это не соблюдается.
(Например, проверка на стороне сервера дублируется на коде Javascript на стороне клиента. Это нарушение принципа СУХОЙ, и это противоречит качественному признаку ремонтопригодности. В этой области не определены функциональные требования к производительности, поэтому Обоснование текущего поведения системы)
Ваши риски могут также определить, где текущее состояние в настоящее время отклоняется от архитектуры. Эти риски могут быть устранены командой разработчиков в настоящее время, либо через план проекта, либо добавив его в очередь.