L’ingegneria del software ha definito e rappresentato il “ciclo di vita del software”, ossia l’insieme delle attività connesse allo sviluppo di un software, nelle seguenti fasi: Analisi, Progettazione, Implementazione, Collaudo, Rilascio e Manutenzione. Tutte queste fasi, fatta eccezione per l’ultima, la manutenzione, che è una fase post progetto, fanno parte del ciclo di vita di un progetto di sviluppo del software. A seguire vi è una sintetica descrizione degli elementi caratterizzanti le suddette fasi.
Le attività di un progetto software iniziano con lo studio del contesto in cui il prodotto software deve essere utilizzato, delle caratteristiche o requisiti che il software deve possedere, dei costi di massima e degli aspetti logistici relativi alla sua realizzazione. L'analisi ha lo scopo di definire, quanto più dettagliatamente possibile, le esigenze del cliente. La fase di analisi solitamente è composta dalle seguenti sotto-attività: studio di fattibilità, analisi e descrizione del contesto, analisi dei requisiti utente. Le attività prevedono la raccolta di informazioni attraverso la compilazione di questionari e colloqui tra il personale tecnico addetto alla progettazione e sviluppo del software e il personale del committente. La fase si conclude con la realizzazione di un documento, chiamato “specifiche funzionali”, che descrive i requisiti generali del sistema da realizzare.
La progettazione ha lo scopo di definire la soluzione del problema a livello di dettaglio, in questa fase, sulla base dei requisiti definiti nell’analisi, si definisce la struttura del software. Tale attività solitamente viene svolta da una figura chiamata analista programmatore. Anche la progettazione può essere scomposta in più sotto-attività che vanno dal progetto generale al progetto di dettagliodell’architettura da realizzare. In questa fase viene sviluppato un documento che definisce la struttura o architettura di alto livello e le caratteristiche dei singoli componenti o moduli.
L'implementazione comprende lo sviluppo o codifica del prodotto software da realizzare. Comprende l’attività di sviluppo del codice, realizzata dai programmatori, utilizzando un linguaggio di programmazione e altre tecnologie come database, linguaggi di scripting e altro ancora. L’infrastruttura utilizzata per lo sviluppo è detta ambiente di sviluppo. L'implementazione è la concreta realizzazione della soluzione. Il software è solitamente scomposto in moduli realizzati separatamente e poi integrati tra di loro per formare il sistema complessivo, conseguentemente l’attività di implementazione si scompone in attività di sviluppo dei singoli moduli e in attività di integrazione di tali moduli. Il codice scritto viene documentato, solitamente in maniera automatica, attraverso appositi tool. Il prodotto finale di questa fase è un software in una prima versione, definita alfa, a cui segue una seconda versione, beta, ottenuta in una attività di test nella successiva fase di collaudo, fino al rilascio della versione ultima che deve soddisfare le specifiche funzionali richieste dal committente.
Il collaudo o testing, eseguito da esperti chiamati tester, consiste nella misurazione (verifica e validazione) di quanto il software implementato soddisfa i requisiti definiti nell'analisi, il collaudo di fatto valuta la correttezza delle funzionalità del software rispetto alle specifiche. Il test avviene in una infrastruttura di supporto detta ambiente di testing. Anche per il collaudo possono essere individuate le due sotto-attività di collaudo dei singoli moduli e di collaudo del sistema integrato. Possono essere individuate anche delle ulteriori sotto-attività per ogni altra particolare caratteristica del software che interessa collaudare: collaudo funzionale, collaudo delle prestazioni, collaudo di rottura, collaudo di regressione, collaudo di sicurezza, collaudo di accessibilità, collaudo di accettazione ecc... . Se il software non rispetta le specifiche, gli sviluppatori ricevono il compito di risolvere i problemi riscontrati attraverso una attività di debugging (correzione). La gestione delle anomalie di funzionamento solitamente avviene tramite appositi software di ticketing, ovvero sistemi che tracciano in maniera automatizzata i problemi riscontrati e li passano direttamente al team di sviluppo.
Superato il collaudo, il rilascio o deployment consiste nell'installazione del prodotto software nell'infrastruttura di esecuzione utilizzabile dagli utenti, detta anche ambiente di produzione. A seconda della complessità del software realizzato, il rilascio può essere scomposto in varie sotto-attività, può variare infatti dalla semplice copia di un file, alla copia di molti file organizzati in una complessa gerarchia di directory e componenti software, eventualmente distribuiti su hardware differenti.
La manutenzione comprende le attività necessarie a modificare il prodotto software successivamente al rilascio.La manutenzione può essere di tre tipi:
correttiva: consiste nell’eliminazione di errori riscontrati nel tempo;
adattativa: consiste nell’adattare il software a nuovi ambienti di lavoro (sistemi) a causa dell’innovazione tecnologica;
migliorativa: consiste nell’aggiungere nuove funzionalità o nel migliorare quelle esistenti.
La manutenzione in generale coincide sui costi di un software per una stima superiore al 50% dei costi iniziali. Ogni adeguamento al software comporta necessariamente nuovi collaudi relativi alle nuove funzionalità introdotte e al contempo mirati a verificare che le modifiche apportate non abbiano compromesso funzionalità preesistenti (collaudo di regressione).