Non è certo chi sia stato il vero ideatore, ma nel 1988 compaiono una presentazione di Barry Boehm, (“A Spiral Model of Software Development and Enhancement”, da cui è tratta l’immagine che segue), e il metodo Evo (evolutivo) di Tom Gilb.
La spirale parte dal centro, con un insieme di obiettivi e requisiti iniziali per il progetto. Ogni ciclo di lavorazione (o iterazione) corrisponde a un periodo di lavoro, e comporta lo svolgimento di una serie di attività:
- gestione dei requisiti
- analisi
- design
- codifica
- test
Cioè le stesse attività che, in un processo di sviluppo a cascata, sono considerate come delle fasi da svolgersi in sequenza rigida, una dopo l’altra. Nel processo iterativo, in ogni iterazione (in ogni ciclo della spirale) vengono svolte le medesime (tipologie di) attività. Sembra oneroso e poco sensato? Sembra, ma non lo è.
L’articolazione di un progetto iterativo è guidata non da una rigida seguenza di fasi predefinite, ma da una gestione sistematica dei rischi di progetto, per arrivare alla loro progressiva diminuzione.
All’inizio di un progetto di sviluppo software, i rischi sono tipicamente molto elevati. Manca la chiarezza sui requisiti, le scelte sulle tecnologie e sulla strutturazione del sistema (le scelte architetturali) sono ipotesi non ancora consolidate. In alcuni casi, sono state scelte tecnologie innovative, per le quali manca però una sufficiente esperienza nel gruppo di progetto. In altri, anche a fronte di tecnologie conosciute, esistono incertezze legate alla necessità di fare fronte a un numero di utilizzatori contemporanei molto elevato, o a volumi di dati mai gestiti in precedenza.
Ogni iterazione, in un progetto iterativo, ha lo scopo di ridurre i rischi di progetto.
Inizialmente, tramite la costruzione di prototipi. Prototipi di interazione (interfacce utente), per affrontare i rischi legati all’incertezza sui requisiti. Prototipi architetturali
(realizzazione e test di aspetti infrastrutturali), per affrontare i rischi legati alla scelta delle tecnologie ed i dubbi sulla strutturazione del sistema.
Successivamente, quando i rischi principali sono stati messi sotto controllo, ogni iterazione ha lo scopo di costruire, in modo progressivo, nuove porzioni del sistema, via via integrate con le precedenti, e di verificarle con il committente e le altre parti interessate.
Viene gestito in modo sistematico il cambiamento di requisiti in corso d’opera, ed in particolare la valutazione di nuovi requisiti espressi dal committente e dalle altre parti interessate al sistema come effetto dell’uso del sistema stesso (delle sue parti già rese disponibili agli utilizzatori).
Diffusione del processo iterativo
I processi di sviluppo software attuali sono tutti di natura iterativa. Qualche esempio:
- Unified Process e derivati (tra cui RUP – Rational Unified Process)
- processi agili (XP, Scrum, …)
Vantaggi
Gestione sistematica e progressiva riduzione dei rischi di progetto.
Rispetto al processo di sviluppo a cascata, in generale, maggiore produttività dei progetti (costi e tempi inferiori).
Svantaggi
Due punti di attenzione:
- La pianificazione dei progetti condotti in modo iterativo è più complessa. Il piano di un processo iterativo evolve durante tutta la durata del progetto stesso, e richiede un controllo sistematico degli avanzamenti.
- Un punto cruciale per il successo di un progetto iterativo è la collaborazione sistematica tra committenti (e altri stakeholder) e gruppo di progetto.