L’architettura software è l’organizzazione basilare di un sistema: ne definisce le fondamenta e crea le condizioni per il suo sviluppo. È un elemento di importanza cruciale: per questo è bene conoscerla.


Perché è importante l’architettura software? Perchéè la base di un sistema software. Se la sua importanza è evidente, non così è la possibilità di fornire una definizione certa. Negli anni, infatti, si sono susseguite diverse interpretazioni. Quella più accreditata, coniata da Paul Clemens e da altri membri del Software Engineering Institute (SEI) presso la Carnegie Mellon University, è la seguente:

“L’architettura software di un sistema è l’insieme delle strutture necessarie per ragionare sullo stesso sistema. Esse comprendono elementi software, le relazioni tra di essi, e le loro proprietà”.

Essa rappresenta e comprende tutte le decisioni progettuali relative alla struttura e al comportamento complessivo del sistema software. “Aiuta le parti interessate a comprendere e analizzare come il sistema raggiungerà qualità essenziali come modificabilità, disponibilità e sicurezza”, specifica la stessa SEI. A occuparsene è un professionista di alto livello come il software architect.

Un’efficace architettura software consente l’evoluzione continua del sistema.

La possiamo anche intendere come un piano che descrive un insieme di aspetti importanti per un SW. Questo significa prendere in considerazione: tutti i tipi di requisiti (prestazioni, sicurezza ecc.); l’organizzazione del sistema e le modalità di comunicazione reciproca tra le parti; la presenza di alcune dipendenze esterne; le linee guida e le tecnologie di implementazione; quali sono i rischi da tenere in considerazione, e molto altro ancora.

Cos’è l’architettura di un software

Sebbene non esista una definizione dettagliata universalmente accettata di architettura software, la maggior parte concorda sui suoi principi fondamentali. Nella sua forma più elementare, può essere descritta come la progettazione e la struttura di sistemi informatici complessi. È il modello ideale per organizzare i singoli componenti software e collegarli in un sistema strutturale robusto e capace di soddisfare i requisiti aziendali.

La IEEE e la American National Standards Institute la definiscono così:

“L’architettura software è l’organizzazione di base di un sistema, espressa dai suoi componenti, dalle relazioni tra di loro e con l’ambiente, e i principi che ne guidano il progetto e l’evoluzione.”                                 (IEEE ANSI 1470-2000)

Proprio come in un progetto di costruzione edilizia, le decisioni prese sull’architettura del software implicano scelte progettuali che riguardano strumenti, standard e framework, come essi dovranno essere utilizzati e come tutti gli elementi dovranno interagire tra loro. Queste decisioni vengono prese all’inizio di un progetto e sono cruciali per il suo successo. Dopotutto, il modo in cui i sistemi software sono concepiti e assemblati avrà un impatto su prestazioni, sicurezza, affidabilità e scalabilità.

Come detto all’inizio, l’architettura software è alla base di un sistema software. Questo consegue che le fondamenta hanno un profondo effetto sulla qualità di ciò che viene costruito sopra. In quanto tali, rivestono una grande importanza in termini di successo dello sviluppo e dell’eventuale manutenzione del sistema.

L’architettura del software significa e comprende anche una serie di decisioni prese per rispondere e soddisfare diverse esigenze. Alcune decisioni primarie provengono dalla progettazione dell’architettura e queste hanno un valore strategico perché influenzano le decisioni successive. Maggiore è la dimensione e la complessità di un sistema software, più si avrà bisogno di un’architettura ben congegnata per avere successo.

Perché è importante avere una corretta architettura

Possiamo cominciare a elencare tre buoni motivi per cui una buona architettura software è così importante quando si tratta di sviluppo software. Innanzitutto essa è prioritaria per la comprensione, la negoziazione e la comunicazione tra tutti gli stakeholder (lato utente, cliente, management, ecc.). Infatti, rende più facile la comprensione dell’intero sistema e quindi rende più efficiente il processo decisionale.

È fondamentale, quindi, lavorare bene sin dall’inizio, perché le prime decisioni hanno un’enorme importanza sul restante progetto e diventano molto difficili da cambiare man mano che si avanza.

Un altro motivo d’importanza è che essa definisce il modello del software e come funzionerà. Avere tale modello, rende possibile anche il suo riutilizzo per altri software; il codice può essere riusato così come i requisiti. In altre parole, l’architettura permette di affrontare i problemi che potranno sorgere quando si tratta di implementazione. Evidenzia anche la struttura organizzativa e rende molto più facile la possibilità di prendere decisioni e di gestire ogni tipo di cambiamento. Inoltre, permette di ottenere una stima migliore dei tempi e dei costi di un progetto.

Se eseguita correttamente, l’architettura software offre un ulteriore vantaggio: la scalabilità. Se gli elementi costitutivi di un sistema sono ben definiti e stabili e funziona come previsto, il modello può essere facilmente ampliato o riutilizzato altrove. Una struttura chiara e ben compresa renderà anche più economico e facile rilevare e correggere eventuali bug nel software esistente.

Ma quando si può parlare di corretta architettura software? È possibile dire che una buona architettura rende tutto più semplice e permette di creare prodotti più facili da sviluppare e da mantenere, riducendo i costi.

L’architettura del software deve offrire doti di resilienza e duttilità, ovvero dovrebbe rispondere positivamente al cambiamento quando si aggiungono funzionalità, mentre le prestazioni non dovrebbero diminuire.

È possibile anche dire che se il software conta su una buona architettura è facile da usare, è flessibile, gli utenti lo adattano abbastanza facilmente, è scalabile, ha prestazioni elevate ed è rapido nel suo funzionamento.

Differenza fra architettura e progettazione

La creazione di un software è un processo complicato, composto da molteplici parti e aspetti. Tra questi vi sono quelli riguardanti lo sviluppo dell’architettura e progettazione del software. Si tratta di due fasi critiche dello sviluppo del software, a volte confuse una con l’altra.

Chiariamo, allora, che l’architettura software si riferisce al processo di traduzione delle caratteristiche del software in una soluzione strutturata per soddisfare i requisiti aziendali e tecnici.

Essa si concentra sullo sviluppo della struttura portante oltre che dell’infrastruttura di alto livello del software. La progettazione del software, invece, si concentra sul design a livello di codice. Affronta problemi riguardanti le funzioni dei singoli moduli, l’ambito delle classi, gli scopi delle diverse funzioni e altri aspetti analoghi.

L’architettura del software riguarda la definizione di una soluzione strutturata che soddisfi gli obiettivi aziendali e tecnici, ottimizzando nel contempo problemi come la sicurezza o le prestazioni.

La progettazione del software è un processo per trasformare i requisiti dell’utente in una determinata forma in grado di aiutare il programmatore nella codifica e nell’attuazione del software. Si può anche definire come un piano di progettazione che funge da punto di riferimento durante tutto il processo di sviluppo e che guida i team nel perfezionamento di attività come codifica, progettazione, integrazione e test.

L’architettura del software mostra la struttura del sistema e nasconde i dettagli di implementazione, concentrandosi su come i componenti interagiscono tra loro. Il design del SW, invece, si concentra sull’implementazione del sistema, spesso approfondendo diversi dettagli.

L’architettura e la progettazione del software sono giustamente trattate come due fasi diverse del processo di sviluppo SW. Ma, più che rilevare le loro differenze, è meglio considerarle come due parti di un unico processo.