Sviluppo lineare e iterativo

Le esigenze di mercato hanno determinato nel tempo il proliferare di differenti modelli per il processo di sviluppo software. Una rassegna in 4 parti cominciando dal modello a cascata, iterativo e a spirale.

Avatar di Riccardo Florio

a cura di Riccardo Florio

Sviluppo lineare e iterativo

Il modello antesignano è il cosiddetto modello a cascata che organizza lo sviluppo del software in un flusso sequenziale lineare, in cui ogni nuova fase del processo inizia solo se la fase precedente è stata completa. In questo modello, tipicamente, l’output di una fase rappresenta l’input per la fase successiva. Si tratta di un approccio ancora seguito e valido nei progetti in cui si hanno a disposizione requisiti chiari e molto ben documentati, dove la definizione del software da realizzare è stabile e, in generale, i tempi previsti per il progetto sono brevi.

Il principale vantaggio del modello a cascata è che favorisce la suddivisione in dipartimenti e il controllo, ma non lascia molto spazio alla riflessione o alle revisioni e necessita la disponibilità di risorse e competenze per supportare il prodotto finale.

Scegliere un modello del ciclo di vita di sviluppo di tipo iterativo significa, invece, iniziare l’attività di sviluppo senza che siano stati definiti tutti i requisiti. Lo sviluppo inizia specificando e implementando solo un sottoinsieme dei requisiti software, e viene poi esaminato al fine di individuare ulteriori requisiti. Questo processo viene quindi ripetuto, producendo una nuova versione del software. A ogni iterazione, vengono apportate modifiche di progettazione e aggiunte nuove capacità funzionali, ottenendo una versione più evoluta e migliorata, fino al raggiungimento della soluzione finale.La chiave per il successo nell’uso di un ciclo di sviluppo software iterativo è la convalida rigorosa dei requisiti e la verifica e test di ogni versione del software rispetto a tali requisiti all’interno di ogni ciclo del modello. Il vantaggio di questo approcio è di mettere a disposizione una soluzione operativa e funzionante già in una fase molto precoce di sviluppo e questo rende più facile l’individuazione di difetti funzionali o di progettazione. 

Per contro, si tratta di un modello applicabile solo a progetti di sviluppo software di ampia portata ovvero che offrono la possibilità di scomporre il sistema software complessivo in moduli di servizio più piccoli, incrementabili progressivamente.Gli scenari per i quali questo modello si dimostra particolarmente idoneo sono quelli in cui i requisiti del sistema finale sono chiaramente definiti e compresi pur lasciando spazio affinchè alcune funzionalità o miglioramenti richiesti possano evolvere nel tempo.

Si dimostra particolarmente efficace nelle situazioni in cui il mercato impone vincoli temporali (per esempio di conformità normativa) o nei casi in cui ci si deve confrontare con una nuova tecnologia che richiede di essere appresa dal team di sviluppo mentre si trova già impegnato a lavorare sul progetto. 

È anche adatto alle situazioni in cui non sono disponibili, all’interno dell’azienda, le risorse con le competenze necessarie e si decida di acquisirle su base contrattuale per lo sviluppo di iterazioni specifiche.