Як архітектурне проектування робиться в спритних умовах?


59

Я читав Принципи спритного архітектора , де вони визначали наступні принципи:

Принцип № 1 Команди, що кодують систему, проектують систему.
Принцип №2. Побудуйте найпростішу архітектуру, яка може працювати.
Принцип №3 У разі сумнівів, кодуйте це.
Принцип № 4 Вони будують його, вони тестують його.
Принцип № 5 Чим більше система, тим довше злітно-посадкова смуга.
Принцип № 6 Системна архітектура - це співпраця ролей.
Принцип №7 Не існує монополії на інновації.

У статті йдеться про те, що більша частина дизайну архітектури робиться на етапі кодування, а до цього лише проектування системи. Це добре.

Отже, як робиться дизайн системи? Використовуєте UML? Або документ, який визначає інтерфейси та основні блоки? Може щось інше?


11
Ви не "робіть дизайн" в UML. Ви робите дизайн, а потім використовуєте UML, щоб записати його або повідомити.
tdammers

4
@tdammers: якщо бути точним, ви намагаєтеся використовувати UML, щоб записати його і помітити, що UML недостатній.
Док Браун

Відповіді:


77

Відмова від відповідальності: я є архітектором в гнучкому середовищі , але, як Мольтке каже: «Ні один план битви не витримує контакт з ворогом». Іншими словами, практичність означає, що точної літери керівництва не завжди можна дотримуватися.

Більшість піднятих вище балів дотримуються як найкраща команда. Однак принципу 1 (Командам, що кодують систему проектування системи) насправді важко дотримуватися, коли команда складається з десятків (або сотень) розробників, розбитих на різні континенти та часові пояси . Це не має нічого спільного з навичками або ставленнями розробників, тим більше, що логістична проблема їх усіх присутніх, щоб зібрати вимоги клієнтів та зрозуміти існуючі складні системи.

Отже, як робиться дизайн системи? Використовуєте UML? Або документ, який визначає інтерфейси та основні блоки? Може щось інше?

Часто архітектор ідентифікує основні компоненти, потім визначає інтерфейси між ними (включаючи нефункціональні вимоги, такі як безпека, швидкість та надійність) та делегує внутрішнє проектування компонентів окремим командам . Це хороший компроміс між тим, щоб дозволити командам проектувати власні компоненти, не вимагаючи, щоб усі знали все про систему.

Кожна організація має власний набір стандартів архітектурних конструкцій, і це часом змінюється від проекту до проекту в межах організації. Цей дизайн зроблений до того, як команда розпочне кодування або якомога раніше і зазвичай містить (і не є повним списком):

  1. Розширені вимоги та визначення сфери застосування. Сюди входять випадки використання чи історії користувачів, які складають бізнес-вимоги вищого рівня. Мені особисто подобається використовувати RFC 2119 для нефункціональних вимог. Дизайн заснований на та відстежується на них. Хоча це може не відповідати загальному визначенню дизайну, вони часто так само важливі.
  2. Огляд, що складається з мережевої або компонентної діаграми високого рівня та сторінки тексту. Це для дуже широкої аудиторії, від вищого керівництва до розробки та якості. Це рідко використовується UML або визначена нотація через широку аудиторію.
  3. Деталі про окремі компоненти, часто зосереджуючись на інтерфейсах або API між ними, як згадувалося вище. Інтерфейси можуть бути вказані як підписи методів на цільовій мові з деталями попередньої умови та післяумови. Компоненти можуть мати мережеві діаграми, такі як показ компонування віртуальних машин у хмарі або центрі обробки даних та їх мережеві механізми. Реляційні бази даних, як правило, мають діаграми взаємозв'язок особи.
  4. Перелік архітектурних ризиків та їх пом'якшення, якщо вони відомі. Як і вимоги, вони демонструють дизайнерські рішення та компроміси.

Коротше кажучи, конструкція системи в умовах спритного процесу точно така ж, як у традиційного процесу водоспаду. Однак у спритних умовах менше дизайну робиться наперед, а більше - делегується командам компонентів . Ключовим є визначення того, наскільки глибоко слід пройти спочатку, які рішення відкласти та визначити, коли рішення потрібно приймати. Рішення, що впливають на декілька команд розвитку, слід приймати раніше, особливо масштабність та безпеку. Такі рішення, як додавання додаткових мов до вже інтернаціоналізованого продукту, можна відкласти до дуже пізнього часу.

Після створення первинного проекту архітектор працює з кожною з команд і переглядає їхні проекти. Якщо для одиниці роботи потрібні додаткові зміни в дизайні чи дизайні (наприклад, спринт спринту), архітектор прагне забезпечити його до моменту початку роботи одиниці роботи. Архітектор також несе відповідальність за повідомлення будь-яких змін постраждалим командам або зацікавленим сторонам.


3
Це чудова відповідь на те, якою повинна бути роль архітектора в команді Agile, однак вона насправді не відповідає на питання про те, що таке дизайн системи до початку спринтської розробки та найкращих практик для цього.
maple_shaft

@maple_shaft Я розширив свою відповідь, щоб приділити більше уваги дизайну.
актон

3
Для чого це важливо, тому що інший архітектор, який працював у спритних умовах протягом кількох років у великих багатонаціональних установках, це спот-оф.
Rex M

12

Відмова: Я не спритний тренер / архітектор - це те, що я бачив у спритних проектах, над якими працював, і думаю, що це працює добре.

Я не думаю, що Agile цілком визначає те, як ти займаєшся архітектурою - agile фокусується на розробці методології та практики. З іншого боку, UML - це лише мова для передачі вашої архітектури, яка не є спритною (ви використовуєте її, якщо вона відповідає вашому проекту та вашій команді).

Одним із принципів архітектури, який дійсно застосовується, є прийняття рішення в останній можливий відповідальний момент - це означає його штраф, якщо ви не прийняли всіх рішень на початку проекту, тим більше, що на цій стадії у вас є найменша інформація. З часом ви можете приймати рішення, які "розвивають" архітектуру. Так, це може виглядати як деяка переробка, але це також пов’язано з тим, що ви дізналися нові речі про навколишнє середовище, вимоги, що можливо, що ні, і т.д.

Головне, чого ви хотіли б уникнути, - це гниль архітектури - де код насправді не відповідає жодній конкретній архітектурі і є лише заплутаним безладом. Основна відмінність порівняно з розвивається архітектурою полягає в тому, що в останньому ви періодично приймаєте чіткі рішення та документуєте їх із зрозумілих причин, а потім виконайте, щоб переконатися, що ваш код слідує за ним.


0

Виконуючи тест-керування, ви створюєте тестовий код, який тестує ваші модулі ізольовано (= наскільки це можливо незалежно від інших модулів)

Щоб полегшити створення тестового коду, ви вводите інтерфейси для інших модулів, які можна легко знущати.

Таким чином, в якості побічного впливу ви автоматично отримуєте архітектуру, де з'єднання між модулями є якомога меншим.

На мою думку, tdd - це також архітектурна робота.


Так, TDD - це архітектурна робота, але на компонентах програмного забезпечення. Моє питання насправді, як створюється архітектура масштабного проекту, використовуючи спритні принципи.
BЈович
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.