Esistono molte definizioni per ciò che è un'architettura software. Il Software Engineering Institute ha una raccolta di definizioni di architettura software che include definizioni bibliografiche tratto da documenti e articoli nel database SEI, definizioni pubblicate prese da vari libri e altri scritti, definizioni classiche di opere più importanti o influenti, definizioni moderne di opere più recenti e definizioni fornite dalla comunità.
Non esiste una definizione corretta, ma tendo a favorire quelli che menzionano le decisioni. Sento che la definizione di Rational Unified Process cattura al meglio ciò che considero architettura:
An architecture is the set of significant decisions about the organization of a software system, the selection of the structural elements and their interfaces by which the system is composed, together with their behavior as specified in the collaborations among those elements, the composition of these structural and behavioral elements into progressively larger subsystems, and the architectural style that guides this organization---these elements and their interfaces, their collaborations, and their composition.
Sulla base di questa definizione di architettura, è necessario rappresentare tutte le decisioni importanti e le loro motivazioni, gli elementi strutturali e le interfacce di tali elementi strutturali e il modo in cui gli elementi strutturali sono composti insieme per creare sistemi più grandi.
Considererei una decisione importante come costosa (in termini di tempo, impegno o costo monetario) da cambiare. Un esempio potrebbe significare scegliere un determinato linguaggio di programmazione, mirando a un ambiente specifico (ambiente hardware, sistema operativo, dispositivi per scopi speciali), metodi di trasmissione e memorizzazione dei dati. Puoi registrare queste decisioni utilizzando qualsiasi numero di strumenti testuali o grafici, che vanno da un wiki a verbali di riunioni formali e l'uso delle matrici decisionali .
Gli elementi strutturali possono essere catturati usando qualsiasi numero di rappresentazioni. SysML e UML sono comuni. BMPN può essere utile per rappresentare i processi aziendali. Object-Process Methodology può essere utilizzato durante la fase di progettazione del sistema per acquisire gli oggetti e le azioni che compongono il sistema. Se hai un sistema pesante, il Entity-Relationship Modelling è anche utile. Io preferisco usare un linguaggio di modellazione standard e ben documentato perché (idealmente) è una cosa in meno da comunicare alle persone che la usano - chiunque non sia familiare dovrebbe essere in grado di ottenere una quantità significativa di informazioni su come comprendere la notazione di modellazione dalle fonti esistenti. Sebbene sia scritto per UML, le modalità UML di Martin Fowler possono anche essere applicate a questi altri linguaggi di modellazione formale - i tuoi modelli possono variare in fedeltà dagli schizzi ai progetti e può essere avviato prima dello sviluppo e completato dopo il fatto di mostrare le informazioni appropriate al pubblico di destinazione previsto.
Se vuoi saperne di più, ho trovato che Architettura software in pratica e Documentazione architetture software: viste e oltre sono ottime risorse per comprendere il processo di creazione, manutenzione e documentazione dell'architettura dei sistemi software.