Nell'approccio iterativo lo sviluppo è organizzato in una serie di mini-progetti brevi, di lunghezza fissa, chiamati iterazioni. Il risultato di ogni iterazione è un sistema eseguibile, testato e integrato, ance se parziale. Ciascuna iterazione comprende le proprie attività di analisi dei requisiti, progettazione, implementazione e test.
Lo sviluppo è:
In questo tipo di procedimento non vi è fretta di iniziare la codifica, né una fase di progettazione lunga che provi a perfezionare tutti i dettagli della progettazione prima della programmazione. Il risultato di ciascuna iterazione è un sistema eseguibile, ma incompleto. Sarà completo dopo qualche iterazione. Il risultato di un'interazione non è un prototipo, ma un sottoinsieme del sistema finale. Ciascuna iterazione comporta la scelta di un piccolo gruppo di requisiti da sviluppare, una rapida progettazione, implementazione e test. Questo permette dei feedback rapidi (è stata sviluppata un piccola porzione dei requisiti) da parte degli utenti, degli sviluppatori e dei test. Ogni iterazione è un'opportunità per modificare o adattare una migliore comprensione dei requisiti al progetto. Grazie ai feedback il sistema evolve e converge verso i requisiti corretti.
Esempi di processi di sviluppo iterativo ed evolutivo sono: UP (di cui stiamo affrontando l'argomentazione), Extreme Programming (XP) e Scrum.
I vantaggi di questo modello di sviluppo sono:
Fondamentali sono passi piccoli: iterazioni da due a sei settimane, feedback rapido e adattamento.
Un'iterazione di lunghezza fissata (come si vede nell'immagine) è detta timeboxed.
Qui un esempio di un progetto iterativo che utilizza il modello UP, composto da 20 iterazioni prima del rilascio al cliente (dal libro di testo sezione 2.5).
Nei processi iterativi, in ogni iterazione viene stabilito il piano di lavoro per una sola iterazione, questa viene detta pianificazione iterativa o adattiva:
Una volta stabiliti gli obiettivi dell'iterazione essi non cambiano in corso di sviluppo. Il requisiti sono bloccati, il team non può essere interrotto o disturbato durante una iterazione.