Metodologie di sviluppo Agile Software Development

Metodologie di Sviluppo Agile

Con questo articolo, inziano una serie di post in cui cercherò di trattare alcuni principi delle metodologie di sviluppo software.  In particolare, partendo dalle metodologie tradizionali, arriveremo ad affrontare le metodologie Agile.

La metodologia Agile basa i suoi principi su un documento definito Manifesto Agile.

Lo sviluppo di progetti software di complessità crescente rende necessaria la definizione di linee guida che permettano di organizzare il lavoro per tutto il processo di sviluppo. Inizialmente, tutto era basato su Modelli a Processo Prescrittivo: una serie di processi, spesso concatenati e dipendenti uno dall’altro che, a partire dall’analisi, conducono il team  alla distribuzione del software realizzato. In questa categoria troviamo i Modelli a Cascata (Waterfall Model), i Modelli a Processo Incrementale, i Modelli a Processo Evolutivo.

Vediamo rapidamente quali sono le caratteristiche che contraddistingono questi differenti modelli.

  • Modelli a Cascata (Waterfall Model): ispirati a processi di tipo manifatturiero. Il flusso di sviluppo passa da una fase all’altra in maniera sequenziale. L’output prodotto dalla fase precedente, finisce come input della fase successiva. Nell’ipotesi di poter suddividere in steps successivi la pianificazione, possiamo ad esempio definire le seguent fasi di attività: comunicazione, pianificazione, modellazione, costruzione e rilascio. Questo tipo di struttura sequenziale, necessita di uno sforzo piuttosto estenso nella fase di progettazione: i difetti nell’implementazione saranno più facilmente eliminabili durante le fasi di prototipazione, piuttosto che nella fase di rilascio del progetto. In questo modello, è fondamentale la Documentazione del progetto: la perdita di un componente del Team comporta la perdita di conoscenza implementativa, e rende difficile l’inserimento di nuovi partecipanti.
  • Modelli a Processo Incrementale: a differenza del modello precedente, le attività sono suddivise in steps di dimensione minore. Possiamo pensare a questo tipo di modello come la realizzazione del core dell’applicazione finale e successivamente una serie di steps di raffinamento in cui vengono implementate le funzionalità mancanti. Sempre rispetto al modello precedente, abbiamo l’aggiunta della possibilità di sviluppo in maniera parallela tra diversi membri del Team: mentre una parte del team può sviluppare il core, un’altra parte potrebbe dedicarsi allo sviluppo delle funzionalità aggiuntive. Fondamentale risulta l’iterazione con il cliente finale, al quale potrebbe essere consegnata una versione funzionante minimal, per poi perfezionarla successivamente.
  • Modelli a Processo Evolutivo: utilizzati nello sviluppo di applicativi in cui i dettagli implementativi non sono ancora del tutto chiari a priori. Questo tipo di modello consente di mostrare al cliente un prototipo del programma finale e successivamente raffinarlo fino ad arrivare alla versione completa. Un ruolo fondamentale è rappresentato dalla fase di Prototipazzione, in cui viene realizzato un prototipo, raffinato nel corso del tempo, analizzando le specifiche esigenze del cliente finale.

Ricapitolando, il Modello a Cascata impone delle rigidità implementative legate fondamentalmente alla necessità di conoscere a priori le caratteristiche e i requisiti del software che dovrà essere realizzato. I Modelli a Processi Incrementali permette di suddividere lo sviluppo in piccolo steps che integrati tra loro rappresentano il software finale. I Modelli Evolutivi introducono i concetti di iterazione incrementale, permettendo di realizzare il core dell’applicazione e di implementazioni successive dei singoli componenti aggiuntivi.

In questo contesto, sono nate le metodologie Agile, che riprendono alcuni concetti dei modelli precedenti, ad esempio quelli legati all’iterazione incrementale.