Quando si formalizza l'architettura del sistema è importante comprendere non solo il valore dietro ciò che l'architettura porterà sul tavolo, ma anche capire e apprezzare ciò che dovrebbe essere.
L'obiettivo primario del software o dell'architettura tecnica è quello di identificare i requisiti non funzionali che vengono realizzati dagli attributi di qualità che guideranno l' architettura di sistema .
Sui requisiti non funzionali:
Un requisito non funzionale è un requisito che specifica i criteri che possono essere utilizzati per giudicare il funzionamento di un sistema, piuttosto che comportamenti specifici. Sono in contrasto con i requisiti funzionali che definiscono comportamenti o funzioni specifici. Il piano per l'implementazione dei requisiti funzionali è dettagliato nella progettazione del sistema. Il piano per l'implementazione di requisiti non funzionali è dettagliato nell'architettura del sistema.
In linea di massima, i requisiti funzionali definiscono cosa dovrebbe fare un sistema e i requisiti non funzionali definiscono come dovrebbe essere un sistema. ... I requisiti non funzionali sono spesso chiamati "attributi di qualità" di un sistema. Altri termini per requisiti non funzionali sono "qualità", "obiettivi di qualità", "requisiti di qualità del servizio", "vincoli" e "requisiti non comportamentali"
Ovviamente identificare i requisiti architettonicamente significativi ha senso quando si lavora su un progetto greenfield, tuttavia quando si lavora con un software esistente, è meglio essere il più disciplinati possibile. Non vorrai che la tua architettura software sia influenzata dal sistema esistente.
L'architettura software per essere autorevole deve davvero essere 3 cose.
Dichiarativo
Questa è la parte della documentazione in cui dichiari NON CHE COSA È, ma come DOVREBBE ESSERE. Lo facciamo attraverso l'uso di varie viste architettoniche del sistema. Definiamo i componenti che dovrebbero essere, il modo in cui interagiscono e quindi facoltativamente eseguiamo il drill down in ciascun componente per viste più granulari che dichiarano come dovrebbe essere progettato il sistema.
Questa è una distinzione importante. La progettazione del sistema dovrebbe essere limitata dall'architettura del sistema, in realtà sono cose separate ma correlate.
Fondamento logico
La logica della tua architettura software è ciò che fornisce legittimità e autorità alle decisioni sull'architettura che sono state prese. Forse è stata presa la decisione di utilizzare un listener di eventi Pub / Sub su MQ per aver avviato un processo batch e lo hai disegnato?
Perché è stata presa questa decisione? Spieghiamo perché nella sezione Rationale e ricolleghiamo la nostra spiegazione a Requisiti non funzionali, Obiettivi degli attributi di qualità o Requisiti significativi dal punto di vista architettonico. (Ad esempio, i lavori devono essere asincroni e ripetibili, la manutenibilità come attributo di qualità determina che, in caso di errore di un lavoro batch, i lavori possono essere riavviati tramite un messaggio MQ, il sistema deve avere una perdita di messaggi zero con comunicazione asincrona, ecc. ..)
rischi
Ora che hai dichiarato come dovrebbe essere l'architettura e l'hai provata con la tua logica, ora puoi identificare i rischi sullo stato attuale del sistema in cui questo non si attesta.
(Ad esempio, la convalida lato server viene duplicata sul codice Javascript lato client. Questa è una violazione del principio DRY e questo è in contrasto con l'attributo di qualità di manutenibilità. Non ci sono requisiti non funzionali definiti attorno alle prestazioni in quest'area quindi non è una motivazione per l'attuale comportamento del sistema)
I rischi possono anche rappresentare lo stato in cui lo stato corrente si sta attualmente discostando dall'architettura. Questi rischi possono essere affrontati dal team di sviluppo ora, attraverso il loro piano di progetto o aggiungendolo nel backlog.