Формалізуючи архітектуру системи, важливо, щоб ви розуміли не тільки значення, яке архітектура внесе до столу, а й розуміти та оцінювати, якою вона має бути.
Основними цілями програмного забезпечення або технічної архітектури є виявлення нефункціональних вимог , які реалізуються атрибутами якості, які керуватимуть архітектурою системи .
Про нефункціональні вимоги:
Нефункціональна вимога - це вимога, яка визначає критерії, за допомогою яких можна судити про функціонування системи, а не про особливості поведінки. Вони протиставляються функціональним вимогам, що визначають конкретну поведінку чи функції. План реалізації функціональних вимог детально описаний у проекті системи. План реалізації нефункціональних вимог детально описаний в архітектурі системи.
Загалом, функціональні вимоги визначають, що система повинна робити, а нефункціональні вимоги визначають, якою має бути система. ... Нефункціональні вимоги часто називають "атрибутами якості" системи. Інші терміни нефункціональних вимог - це "якості", "цілі якості", "вимоги до якості обслуговування", "обмеження" та "не поведінкові вимоги"
Звичайно, визначення архітектурно значущих вимог має сенс, коли ви працюєте з проектом «greenfield», проте, працюючи з існуючим програмним забезпеченням, найкраще бути максимально дисциплінованими. Ви не хочете, щоб на вашу архітектуру програмного забезпечення впливала існуюча система.
Для створення авторитетної архітектури програмного забезпечення дійсно потрібно 3 речі.
Декларативний
Це частина документації, де ви декларуєте НЕ ЩО ТАКЕ, а як ОБОВ'ЯЗКОВО. Ми робимо це завдяки використанню різних архітектурних поглядів системи. Ми визначаємо компоненти, які мають бути, як вони взаємодіють, а потім необов'язково детально переглядаємо кожен компонент для отримання більш детальних подань, які заявляють, як повинна бути спроектована система.
Це важлива відмінність. Дизайн системи повинен обмежуватися архітектурою системи, вони насправді є окремими, але пов'язаними з цим речами.
Обґрунтування
Обґрунтування вашої архітектури програмного забезпечення - це те, що забезпечує легітимність та повноваження прийнятим архітектурним рішенням. Можливо, було прийнято рішення використовувати слухач подій Pub / Sub через MQ для запуску пакетного завдання, і ви його діаграмуєте?
Чому було прийнято таке рішення? Ми пояснюємо, чому в розділі "Обгрунтування" і пов'язуємо наше пояснення з нефункціональними вимогами, цілями атрибутів якості або архітектурно значущими вимогами. (Наприклад, завдання повинні бути асинхронними та повторюваними. Обслуговуваність як атрибут якості призводить до того, що у разі відмови пакетної роботи завдання можуть бути повторно ініційовані за допомогою MQ-повідомлення. Система повинна мати нульову втрату повідомлення з асинхронним зв’язком тощо. ..)
Ризики
Тепер, коли ви оголосили, якою має бути архітектура, і довели це своїм обгрунтуванням, тепер ви можете визначити ризики щодо поточного стану системи, де це не дотримується.
(Напр., Перевірка валідації на стороні клієнта коду JavaScript на стороні клієнта. Це порушення принципу DRY, і це суперечить атрибуту якості технічного обслуговування. У цій області немає визначених нефункціональних вимог навколо продуктивності, тому там немає обґрунтування для поточної поведінки системи)
Ваші ризики можуть також визначити, де поточний стан зараз відхиляється від архітектури. Ці ризики можуть вирішити команда розробників зараз, або через свій проектний план, або додавши це у відставання.