È interessante leggere la varietà di risposte diverse qui sul ruolo di un architetto del software e su come l'architettura del software gioca nel progetto. Serve solo a mostrare quante diverse scuole di pensiero esistono sul concetto.
Le tipiche "personalità" vengono in mente quando si discute il concetto di qualità del sistema. Sono gli attributi qualitativi di un sistema che un architetto si sforza di ottimizzare. Questi sono intrinsecamente soggettivi e difficili da definire. Ciò inoltre li rende difficili da testare poiché il risultato non è sempre perfettamente chiaro. Per rendere le cose ancora più complicate, l'ottimizzazione di una qualità può essere una svantaggio di un'altra qualità, quindi spesso devono essere forniti i compromessi e le motivazioni per cui stiamo decidendo di progettare gli uni sugli altri (ad esempio Performance vs. Sicurezza). Questi rientrano nella categoria più ampia di Requisiti Non Funzionali.
Questi sono un sottoinsieme di tutti i Requisiti Funzionali e Non Funzionali che hanno qualche tipo di influenza o influenza sulle decisioni architettoniche e di progettazione di un sistema. Alcuni di questi requisiti potrebbero anche essere requisiti non funzionali derivati dagli attributi di qualità del sistema, altri potrebbero essere requisiti funzionali derivati dall'azienda o dal proprietario del prodotto.
Chiamarli in un'architettura è importante per la tracciabilità delle decisioni di progettazione rispetto ai requisiti. Un'architettura è molto più che la semplice descrizione di un sistema da uno o più punti di vista, ma anche una serie di argomenti e motivazioni in base al perché determinate decisioni sono state prese rispetto ad altre.
Chi è responsabile per i requisiti non funzionali?
Questa è una domanda scottante che entra nelle menti di molte persone e la risposta potrebbe essere diversa a seconda della tua organizzazione, del modo in cui organizzi i progetti e se usi le metodologie Waterfall o Agile.
In definitiva, la risposta è che i Requisiti Non Funzionali non possono provenire da un singolo stakeholder, tuttavia devono essere raccolti e suscitati da un numero di diversi stakeholder e quindi combinati in un singolo documento o in un backlog. Ad esempio:
NF1: The ABC service shall respond to requests in no longer than 5 seconds
NF2: The ABC service shall be synchronous and should not respond to or consume messages until a response is formed for the prior message.
Nei due esempi sopra, possono essere derivati da diverse fonti. Il primo requisito potrebbe provenire dal business. Si stanno interfacciare con una stanza di compensazione che ha un severo requisito SLA per i partecipanti alla rete.
Il secondo esempio è più di un dettaglio tecnico, ma nondimeno definisce alcuni attributi del sistema che devono essere seguiti. Le decisioni progettuali specifiche su come soddisfare questo requisito sono lasciate aperte, solo il requisito è descritto. Questo requisito può essere realizzato dall'architetto quando si considerano le qualità del sistema relative all'integrità dei dati nel sistema. In alternativa, l'architetto può realizzare attributi, vincoli e limiti di un sistema di interfacciamento a cui l'architettura deve tenere conto e difendersi. In tal caso, forse il mandato per la sincronicità si riduce a un fallimento per i messaggi che devono essere correttamente tradotti quando si interfaccia con un altro sistema di backend.
L'azienda o il cliente potrebbero non aver realizzato questo requisito senza l'assistenza dell'architetto.
Cosa viene prima? Architettura o requisiti?
Sapendo che i Requisiti Funzionali sono tipicamente derivati dall'azienda o dal cliente e che i Requisiti Non Funzionali possono provenire da molte fonti, e considerando che Requisiti Architettonicamente Significativi sono importanti per definire l'Architettura, è chiarire che i requisiti, almeno ad un livello elevato, sono un input importante per l'architettura delle applicazioni e il design delle soluzioni.