Modello di registro delle decisioni di arc42
1. Introduzione e obiettivi
Requisiti, breve descrizione dei fattori determinanti, estratto (o riepilogo) dei requisiti. I tre (al massimo cinque) principali obiettivi di qualità per l'architettura che hanno la priorità più alta per le parti interessate principali. Una panoramica delle parti interessate importanti con le loro aspettative sull'architettura.
1.1 Panoramica dei requisiti
Contenuto
Breve descrizione dei requisiti funzionali, dei fattori determinanti, estratto (o riepilogo) dei requisiti. Link ai documenti dei requisiti (che si spera esistano) con informazioni su dove trovarli.
Motivazione
Dal punto di vista degli utenti finali, un sistema viene costruito o modificato per migliorare il supporto alle attività aziendali o per migliorare la qualità.
Formato
Breve descrizione testuale, magari in forma tabellare di casi d'uso. Se esistono documenti dei requisiti, questa panoramica dovrebbe fare riferimento a tali documenti.
Mantieni questo estratto il più breve possibile. Bilancia la leggibilità di questo documento con la possibile ridondanza con i documenti dei requisiti.
1.2 Obiettivi di qualità
Contenuto
I tre (al massimo cinque) principali obiettivi di qualità per l'architettura il cui soddisfacimento è più cruciale per le parti interessate principali. Intendiamo davvero obiettivi di qualità per l'architettura. Non confonderli con gli obiettivi del progetto. Non sono necessariamente identici. Lo standard ISO 25010 offre un'ottima panoramica dei potenziali argomenti di interesse.
Motivazione
Dovresti conoscere gli obiettivi di qualità delle parti interessate più importanti, perché influenzano le decisioni architetturali fondamentali. Sii molto concreto su queste qualità ed evita le parole di moda. Se, da architetto, non sai come verrà valutata la qualità del tuo lavoro …
Formato
Una tabella con i principali obiettivi di qualità e scenari concreti, in ordine di priorità.
1.3 Parti interessate
Contenuto
Panoramica esplicita delle parti interessate del sistema, cioè di tutte le persone, i ruoli o le organizzazioni che
devono conoscere l'architettura
devono essere convinte dell'architettura
devono lavorare con l'architettura o con il codice
hanno bisogno della documentazione dell'architettura per il proprio lavoro
devono prendere decisioni sul sistema o sul suo sviluppo
Motivazione
Dovresti conoscere tutte le parti coinvolte nello sviluppo del sistema o influenzate da esso. Altrimenti, potresti avere spiacevoli sorprese più avanti nel processo di sviluppo. Queste parti interessate determinano l'estensione e il livello di dettaglio del tuo lavoro e dei suoi risultati.
Formato
Tabella con nomi dei ruoli, nomi delle persone e le loro aspettative sull'architettura e sulla sua documentazione.
2. Vincoli
Qualsiasi cosa che limita il team nelle decisioni di progettazione e implementazione o nelle decisioni sul processo correlato. A volte valgono per intere organizzazioni e aziende, al di là dei singoli sistemi.
Contenuto
Tutti i requisiti che vincolano gli architetti software nella loro libertà rispetto alle decisioni di progettazione, implementazione o di processo di sviluppo. Questi vincoli a volte valgono per intere organizzazioni e aziende, al di là dei singoli sistemi.
Motivazione
Gli architetti dovrebbero sapere esattamente dove sono liberi nelle loro decisioni di progettazione e dove devono rispettare i vincoli. I vincoli devono sempre essere affrontati, ma possono essere negoziabili.
Formato
Semplici tabelle di vincoli con spiegazioni. Se necessario, puoi suddividerli in vincoli tecnici, vincoli organizzativi e politici e convenzioni (per esempio linee guida di programmazione o di controllo di versione, convenzioni di documentazione o di denominazione)
3. Contesto e ambito
Delimita il tuo sistema dai partner di comunicazione (esterni) (sistemi vicini e utenti). Specifica le interfacce esterne. Mostralo dal punto di vista aziendale/di dominio (sempre) o dal punto di vista tecnico (facoltativo)
Contenuto
L'ambito del sistema e il contesto, come dice il nome, delimitano il tuo sistema (cioè l'ambito) da tutti i partner di comunicazione (sistemi vicini e utenti, cioè il contesto del sistema). In questo modo specificano le interfacce esterne.
Se necessario, distingui il contesto aziendale (input e output specifici del dominio) dal contesto tecnico (canali, protocolli, hardware).
Motivazione
Le interfacce di dominio e le interfacce tecniche verso i partner di comunicazione sono tra gli aspetti più critici del tuo sistema. Assicurati di comprenderle appieno.
Formato
Varie possibilità:
Diversi diagrammi di contesto
Elenchi di partner di comunicazione e delle loro interfacce.
3.1 Contesto aziendale
Contenuto
Specifica di tutti i partner di comunicazione (utenti, sistemi IT, …) con spiegazioni di input e output specifici del dominio o di interfacce. Facoltativamente puoi aggiungere formati specifici del dominio o protocolli di comunicazione.
Motivazione
Tutte le parti interessate dovrebbero comprendere l'ambiente del sistema e quali dati vengono scambiati.
Formato
Qualsiasi tipo di diagramma che mostri il sistema come scatola nera e specifichi le interfacce di dominio verso i partner di comunicazione.
Oppure (in aggiunta) una tabella. Il titolo della tabella è il nome del tuo sistema, le tre colonne contengono il nome del partner di comunicazione, l'input e l'output.
3.2 Contesto tecnico
Contenuto
Interfacce tecniche (canali e mezzi di trasmissione) che collegano il sistema al suo ambiente. In aggiunta, una mappatura dell'input/output specifico del dominio sui canali, cioè una spiegazione di quale input e output usa quale canale.
Motivazione
Molte parti interessate prendono decisioni architetturali in base alle interfacce tecniche tra il sistema e il suo contesto. In particolare i progettisti di infrastruttura o hardware decidono queste interfacce tecniche.
Formato
Per esempio un diagramma di deployment UML che descrive i canali verso i sistemi vicini, insieme a una tabella di mappatura che mostra le relazioni tra canali e input/output.
4. Strategia della soluzione
Riepilogo delle decisioni fondamentali e delle strategie di soluzione che plasmano l'architettura. Può includere tecnologia, scomposizione di primo livello, approcci per raggiungere i principali obiettivi di qualità e decisioni organizzative pertinenti.
Contenuto
Un breve riepilogo e una spiegazione delle decisioni fondamentali e delle strategie di soluzione che plasmano l'architettura del sistema. Questo include
decisioni tecnologiche
decisioni sulla scomposizione di primo livello del sistema, per esempio l'uso di pattern architetturali o pattern di progettazione
decisioni su come raggiungere i principali obiettivi di qualità
decisioni organizzative pertinenti, per esempio la selezione di un processo di sviluppo o la delega di determinati compiti a terze parti.
Motivazione
Queste decisioni sono le pietre angolari della tua architettura. Sono il fondamento di molte altre decisioni di dettaglio o regole di implementazione.
Formato
Mantieni breve la spiegazione di queste decisioni chiave.
Motiva ciò che hai deciso e perché lo hai deciso, in base all'enunciato del problema, agli obiettivi di qualità e ai principali vincoli. Fai riferimento alle sezioni seguenti per i dettagli (sezione 5 per i dettagli strutturali, sezione 8 per le questioni trasversali).
Puoi usare un elenco o una tabella di approcci alla soluzione.
5. Vista a blocchi costruttivi
Scomposizione statica del sistema, astrazioni del codice sorgente, mostrata come gerarchia di scatole bianche (contenenti scatole nere), fino a un livello di dettaglio appropriato.
Contenuto
La vista a blocchi costruttivi mostra la scomposizione statica del sistema in blocchi costruttivi (moduli, componenti, sottosistemi, classi, interfacce, pacchetti, librerie, framework, livelli, partizioni, tier, funzioni, macro, operazioni, strutture dati, …) e le loro dipendenze (relazioni, associazioni, …)
Questa vista è obbligatoria per qualsiasi documentazione architetturale. Per analogia con una casa, è la planimetria.
Motivazione
Mantieni la panoramica del tuo codice sorgente rendendo comprensibile la struttura attraverso l'astrazione.
Questo ti permette di comunicare con le parti interessate a livello astratto senza rivelare i dettagli di implementazione.
Formato
La vista a blocchi costruttivi è una raccolta gerarchica di scatole nere e scatole bianche (vedi la figura sotto) e delle loro descrizioni.
5.1 Scatola bianca dell'intero sistema
Qui descrivi la scomposizione del sistema complessivo usando il seguente modello di scatola bianca. Contiene
un diagramma di panoramica
una motivazione per la scomposizione
descrizioni a scatola nera dei blocchi costruttivi contenuti. Per questo sono offerte le seguenti alternative:
usa una tabella per una panoramica breve e pragmatica di tutti i blocchi costruttivi contenuti e delle loro interfacce
usa un elenco di descrizioni a scatola nera dei blocchi costruttivi secondo il modello di scatola nera (vedi sotto). A seconda del tuo strumento, questo elenco potrebbe essere composto da sottocapitoli (file di testo), sottopagine (wiki) o elementi annidati (strumenti di modellazione).
(facoltativo:) interfacce importanti che non sono descritte nel modello di scatola nera di un blocco costruttivo, ma che sono molto importanti per comprendere la scatola bianca.
Poiché ci sono tanti modi di specificare le interfacce, non forniamo un modello specifico per esse.
Nel migliore dei casi bastano esempi o semplici firme.
5.2 Livello 2
Qui puoi specificare la struttura interna di (alcuni) blocchi costruttivi del livello 1 come scatole bianche.
Devi decidere quali blocchi costruttivi del tuo sistema sono abbastanza importanti da giustificare una descrizione così dettagliata. Preferisci la rilevanza alla completezza. Specifica i blocchi costruttivi che sono importanti, sorprendenti, rischiosi, complessi o volatili. Lascia fuori le parti ordinarie, semplici, noiose o standardizzate del tuo sistema
5.2.1 Scatola bianca del blocco costruttivo 1
...descrive la struttura interna del blocco costruttivo 1.
Usa il modello di scatola bianca (vedi sopra).
6. Vista a runtime
Comportamento dei blocchi costruttivi come scenari, che coprono importanti casi d'uso o funzionalità, interazioni alle interfacce esterne critiche, esercizio e amministrazione, e comportamento in caso di errori ed eccezioni.
Contenuto
La vista a runtime descrive il comportamento concreto e le interazioni dei blocchi costruttivi del sistema sotto forma di scenari delle seguenti aree:
importanti casi d'uso o funzionalità: come li eseguono i blocchi costruttivi?
interazioni alle interfacce esterne critiche: come collaborano i blocchi costruttivi con utenti e sistemi vicini?
esercizio e amministrazione: avvio, partenza, arresto
scenari di errore ed eccezione
Nota: il criterio principale per scegliere i possibili scenari (sequenze, flussi di lavoro) è la loro rilevanza architetturale. Non è importante descrivere un gran numero di scenari. Dovresti piuttosto documentare una selezione rappresentativa.
Motivazione
Dovresti capire come (le istanze dei) blocchi costruttivi del tuo sistema svolgono il loro lavoro e comunicano a runtime. Includerai gli scenari nella documentazione soprattutto per comunicare la tua architettura alle parti interessate che sono meno attive o meno esperte nella lettura e comprensione dei modelli statici (vista a blocchi costruttivi, vista di deployment).
Formato
Esistono molte notazioni per descrivere gli scenari, per esempio
elenco numerato di passi (in linguaggio naturale)
diagrammi di attività o diagrammi di flusso
diagrammi di sequenza
BPMN o EPC (catene di processi a eventi)
macchine a stati
ecc.
6.n Scenario di runtime n (1, 2, 3 ecc.)
Inserisci un diagramma di runtime o una descrizione testuale dello scenario.
Inserisci una spiegazione degli aspetti notevoli delle interazioni tra le istanze dei blocchi costruttivi raffigurate in questo diagramma.
7. Vista di deployment
Infrastruttura tecnica con ambienti, computer, processori e topologie. Mappatura dei blocchi costruttivi (software) sugli elementi dell'infrastruttura.
Contenuto
La vista di deployment descrive:
l'infrastruttura tecnica usata per eseguire il tuo sistema, con elementi dell'infrastruttura come ubicazioni geografiche, ambienti, computer, processori, canali e topologie di rete, nonché altri elementi dell'infrastruttura, e
la mappatura dei blocchi costruttivi (software) su tali elementi dell'infrastruttura.
Spesso i sistemi vengono eseguiti in ambienti diversi, per esempio ambiente di sviluppo, ambiente di test, ambiente di produzione. In tali casi dovresti documentare tutti gli ambienti pertinenti.
Documenta la vista di deployment in particolare quando il tuo software viene eseguito come sistema distribuito con più di un computer, processore, server o container o quando progetti e costruisci i tuoi processori e chip hardware.
Dal punto di vista software, è sufficiente catturare gli elementi dell'infrastruttura necessari per mostrare il deployment dei blocchi costruttivi. Gli architetti hardware possono andare oltre e descrivere l'infrastruttura a qualsiasi livello di dettaglio abbiano bisogno di catturare.
Motivazione
Il software non funziona senza hardware. Questa infrastruttura sottostante può e influenzerà il tuo sistema e/o alcuni concetti trasversali. Pertanto devi conoscere l'infrastruttura.
Formato
Il livello più alto dei diagrammi di deployment è già incluso nella sezione 3.2 come contesto tecnico con la tua infrastruttura come un'unica scatola nera. In questa sezione ingrandisci quella scatola nera con diagrammi di deployment aggiuntivi.
UML offre diagrammi di deployment per esprimere quella vista. Usali, magari con diagrammi annidati, quando la tua infrastruttura è più complessa.
Quando le tue parti interessate (hardware) preferiscono un altro tipo di diagramma al diagramma di deployment UML, lascia che usino qualsiasi tipo che possa mostrare nodi e canali dell'infrastruttura.
7.1 Infrastruttura di livello 1
Descrivi (di solito in una combinazione di diagrammi, tabelle e testo):
la distribuzione di un sistema su più ubicazioni, ambienti, computer, processori ecc., nonché le connessioni fisiche tra di essi
importante giustificazione o motivazione di questa struttura di deployment
caratteristiche di qualità e/o di prestazioni dell'infrastruttura
mappatura degli artefatti software (blocchi costruttivi) sugli elementi dell'infrastruttura
Per più ambienti o deployment alternativi, copia quella sezione di arc42 per tutti gli ambienti pertinenti. **
7.2 Infrastruttura di livello 2
Può includere la struttura interna di (alcuni) elementi dell'infrastruttura del livello 1.
Copia la struttura del livello 1 per ogni elemento selezionato.
8. Concetti trasversali
Normative generali e di principio e approcci di soluzione rilevanti per più parti (→ trasversali) del tuo sistema. I concetti sono spesso correlati a più blocchi costruttivi. Includi argomenti diversi come modelli di dominio, pattern e stili architetturali, regole per l'uso di una tecnologia specifica e regole di implementazione.
Contenuto
Questa sezione descrive concetti trasversali (pratiche, pattern, normative o idee di soluzione). Tali concetti sono spesso correlati a più blocchi costruttivi. Possono riguardare molti argomenti diversi.
Motivazione
I concetti sono la base dell'integrità concettuale (coerenza, omogeneità) dell'architettura. Pertanto sono un contributo importante alla qualità interna del tuo sistema.
Questo è il posto che abbiamo creato nel modello per una specifica coerente di tali concetti.
Molti di questi concetti sono correlati o influenzano più blocchi costruttivi.
Formato
Il formato può variare:
documenti di concetto con qualsiasi struttura
implementazioni di esempio, in particolare per concetti tecnici
estratti di modelli trasversali o scenari che usano le notazioni delle viste architetturali
Struttura di questa sezione
Scegli solo gli argomenti più necessari per il tuo sistema e assegna a ciascuno un titolo di livello 2 in questa sezione (per esempio 8.1, 8.2 ecc.).
- Non cercare di coprire tutti gli argomenti del diagramma sopra menzionato.
Contesto
Alcuni argomenti all'interno di un sistema sono spesso correlati a più blocchi costruttivi, elementi hardware o processi di sviluppo. Può essere più facile comunicare o documentare tali argomenti trasversali in un unico punto centrale invece di ripeterli nella descrizione dei blocchi costruttivi, degli elementi hardware o dei processi di sviluppo correlati.
Certi concetti possono essere rilevanti per tutti gli elementi del sistema, altri solo per alcuni.
9. Decisioni architetturali
Decisioni architetturali importanti, costose, critiche, di ampia portata o rischiose, inclusi i fondamenti.
Contenuto
Decisioni architetturali importanti, costose, di ampia portata o rischiose, inclusi i fondamenti. Per "decisioni" intendiamo la scelta di un'alternativa in base a criteri dati.
Decidi a tua discrezione se documentare le decisioni architetturali in questa sezione centrale o se preferisci documentarle a livello locale (per esempio all'interno del modello di scatola bianca di un blocco costruttivo). Evita testo ridondante. Fai riferimento alla sezione 4, che contiene già le decisioni più importanti della tua architettura.
Motivazione
Le parti interessate del tuo sistema dovrebbero essere in grado di comprendere e risalire alle tue decisioni.
Formato
ADR (registri delle decisioni architetturali) per ogni decisione importante
elenco o tabella, ordinati per importanza e conseguenze, oppure
più dettagliato in sezioni separate per ogni decisione
Contesto (sugli ADR)
I pezzi di documentazione più piccoli sono più facili da leggere, scrivere e mantenere. Riguardo alle decisioni architetturali, i team di sviluppo spesso conoscono:
la decisione, perché per esempio è visibile nel codice sorgente, ma
mancano della motivazione dietro quella decisione (vedi Nygard 2011)
Pertanto dovresti documentare alcune decisioni importanti con la loro motivazione e il loro ragionamento
La nostra proposta per le decisioni
Mantieni una raccolta di decisioni architetturalmente significative, cioè decisioni che influenzano struttura, caratteristiche di qualità, dipendenze (in particolare esterne) e interfacce importanti o tecniche di costruzione (grazie a Michael Nygard per questa proposta).
10. Requisiti di qualità
Requisiti di qualità come scenari, con un albero della qualità per fornire una panoramica di alto livello. I più importanti obiettivi di qualità dovrebbero essere già descritti nella sezione 1.2 (obiettivi di qualità).
Contenuto
Questa sezione contiene tutti i requisiti di qualità pertinenti.
I più importanti di questi requisiti sono già stati descritti nella sezione 1.2 (obiettivi di qualità), quindi dovresti solo fare riferimento a essi qui. In questa sezione 10 dovresti includere anche requisiti di qualità meno importanti che non creano rischi elevati se non vengono raggiunti pienamente (ma che sono utili da avere).
Motivazione
Poiché i requisiti di qualità influenzano molto le decisioni architetturali, dovresti sapere quale qualità è davvero importante per le parti interessate, in modo concreto e misurabile.
Ulteriori informazioni
Vedi il completo modello di qualità Q42 su https://quality.arc42.org.
10.1 Panoramica dei requisiti di qualità
Contenuto
Una panoramica o un riepilogo dei requisiti di qualità.
Motivazione
Spesso ti trovi di fronte a decine (persino centinaia) di requisiti di qualità dettagliati. In questa sezione di panoramica dovresti cercare di riassumerli, per esempio descrivendo categorie o argomenti (come suggerito da ISO 25010:2023 o Q42)
Se queste descrizioni riepilogative sono già accurate, sufficientemente specifiche e misurabili, puoi saltare la sezione 10.2.
Formato
Usa una semplice tabella con la categoria o l'argomento e una breve descrizione del requisito di qualità su ogni riga. Oppure usa una mappa mentale per strutturare questi requisiti di qualità.
Nella letteratura è descritta anche l'idea degli alberi degli attributi di qualità, che hanno il termine generale "qualità" come radice e raffinano il termine "qualità" in una struttura ad albero. [Bass+21] ha introdotto a questo scopo il termine "Quality Attribute Utility Tree".
10.2 Scenari di qualità
Contenuto
Gli scenari di qualità concretizzano i requisiti di qualità e permettono di decidere se sono (nel senso dei criteri di accettazione) soddisfatti. Assicurati che gli scenari siano specifici e misurabili.
Due tipi di scenari sono particolarmente utili:
Gli scenari d'uso (chiamati anche scenari applicativi o scenari di caso d'uso) descrivono la reazione a runtime del sistema a un determinato stimolo. Questo include anche scenari che descrivono l'efficienza o le prestazioni del sistema. Esempio: il sistema reagisce a una richiesta di un utente entro un secondo.
Gli scenari di modifica descrivono l'effetto desiderato di una modifica o estensione del sistema o del suo ambiente immediato. Esempio: viene implementata una funzionalità aggiuntiva o cambiano i requisiti per un attributo di qualità, e si misura lo sforzo o la durata della modifica.
Formato
Le informazioni tipiche negli scenari dettagliati includono:
Forma breve (preferita nel modello Q42):
Contesto/sfondo: che tipo di sistema o componente e qual è l'ambiente o la situazione?
Origine/stimolo: chi o che cosa avvia o innesca l'azione, la reazione o il comportamento.
Metrica/criterio di accettazione: la risposta, inclusa la scala o la metrica
La forma lunga degli scenari (preferita dal SEI e da [Bass+21]) è più dettagliata e include le seguenti informazioni:
ID dello scenario: un identificatore univoco per lo scenario.
Nome dello scenario: un nome breve e descrittivo per lo scenario.
Origine: l'entità (utente, sistema o evento) che avvia lo scenario.
Stimolo: l'evento o la condizione scatenante a cui il sistema deve rispondere.
Ambiente: il contesto operativo o le condizioni in cui il sistema sperimenta lo stimolo.
Artefatto: il blocco costruttivo o altro elemento del sistema che è influenzato dallo stimolo.
Risposta: il risultato o il comportamento che il sistema mostra in risposta allo stimolo.
Misura della risposta: il criterio o la metrica con cui viene valutata la risposta del sistema.
Vedi anche
Dal gennaio 2023 arc42 offre un modello di qualità pragmatico che suggerisce di etichettare i requisiti di qualità con hashtag o etichette come #flexible, #efficient, #usable, #operable, #testable, #secure, #safe, #reliable.
11. Rischi e debito tecnico
Rischi tecnici noti o debito tecnico. Quali potenziali problemi ci sono nel sistema o intorno a esso? Con che cosa ha difficoltà il team di sviluppo?
Contenuto
Un elenco prioritizzato dei rischi tecnici o del debito tecnico individuati
Motivazione
"La gestione del rischio è la gestione dei progetti per adulti" (Tim Lister, Atlantic Systems Guild.)
Questo dovrebbe essere il tuo motto per una scoperta e una valutazione sistematiche dei rischi e del debito tecnico nell'architettura, di cui le parti interessate della gestione (per esempio project manager, product owner) avranno bisogno come parte dell'analisi complessiva del rischio e della pianificazione delle misure.
Formato
Elenco di rischi e/o debito tecnico, magari con misure proposte per minimizzare, mitigare o evitare i rischi o ridurre il debito tecnico.