Con il crescente aumento di complessità dei sistemi, con lo sviluppo delle metodologie object oriented, con il diverso ruolo della committenza e con l’affinarsi delle tecniche di ingegneria, si sono resi più affidabili modelli di tipo iterativo e incrementale, maggiormente flessibili ed in grado di rappresentare meglio questa crescente complessità.
=> Filosofia della progettazione: dalla teoria alla pratica
Modello a cascata
Il modello a cascata è stato ispirato ai processi dell’industria manifatturiera, si è rivelato utile come metodologia di approccio e il suo studio ha permesso di apprendere alcune “strutture fondamentali” nei concetti di ingegneria del software; nonostante ciò la sua applicazione pratica è da considerarsi obsoleta.
Si può notare come il primo step di ogni modello sia la scomposizione e come spesso questo processo di WBS possa dare esiti simili anche con l’applicazione di diversi modelli. In effetti le differenze nascono non tanto nell’individuare le attività, quanto nel determinarne l’ordine, la priorità, i vincoli, gli attori e le risorse in genere (differenze che si riversano a pieno sulla struttura documentale).
Applicare un modello a cascata, consente di avere un sistema funzionante solo nella fase finale del progetto, e ciò spesso è inaccettabile per il committente, oltre che poco efficiente per lo sviluppatore stesso che potrebbe trovarsi di fronte ad un requisito mal espresso, o a qualsiasi altro problema, in una fase che comporta la rielaborazione di gran parte del lavoro svolto. Lo sviluppo dei modelli RAD ed incrementali rende il lavoro più sicuro.
Il primo modello ricerca infatti una ottimizzazione dei tempi mediante una accurata procedura di analisi preliminare dei requisiti fondamentali e del contesto operativo, abbinando questa logica ad una struttura di rilascio parziale e ricorsiva, il secondo modello invece permette una migliore programmazione ed una ottimizzazione nell’uso delle risorse dedicate.
L’applicazione del modello evolutivo, consente di “avvicinarsi” notevolmente al committente mediante il rilascio di prototipi di crescente completezza. Soprattutto il rilascio del prototipo in fase intermedia (working) risulta critico, perché se da un lato consente di analizzare meglio esigenze e richieste del cliente, dall’altro determina una milestone fondamentale del progetto con due sole vie: sviluppo finale o ri-progettazione.
Modello a spirale
L’introduzione del modello a spirale consente di conservare i punti cardine del modello incrementale permettendo, al contempo, di valorizzare la caratteristica ricorsiva ed iterativa dell’intero processo di realizzazione del software.
Oggi alcuni autori, nonostante le peculiarità cui abbiamo fatto riferimento nella parte iniziale di questo articolo, spingono verso una applicazione dei principi industriali nel mondo del software, in particolare si sta assistendo all’integrazione di logiche di qualità totale e produzione snella.
=> Il ciclo di vita del progetto
Un esempio di metodologia agile è l’Extreme Programming o programmazione estrema (abbreviato in XP), approccio formulato da K. Beck, W. Cunningham e R. Jeffries a partire dal 1996. Uno dei principi, a mio avviso, più innovativi dell’approccio XP, basato su dodici regole divise in quattro aree, sta nel ruolo del cliente che viene visto come membro effettivo del team di sviluppo.
Per completezza, va sottolineato che molti autori vedono poco con piacere l’XP, che in effetti alla prova del campo ha mostrato parecchi limiti. Non esistono ricette miracolose, come abbiamo ribadito in molteplici occasioni, e non ci sono metodologie universalmente valide. In ogni contesto, bisogna tenere a mente che, dal punto di vista pratico, guidare lo sviluppo di un progetto sulla base di modello non adatto può determinare un esito nefasto per il progetto stesso.
Ciclo del software
Per parlare del ciclo di vita del software dobbiamo partire dall’individuazione delle caratteristiche peculiari di questo “prodotto”. Il software, infatti, non si può paragonare al generico prodotto industriale, in quanto si sviluppa e non si costruisce, e si ingegnerizza ma non si fabbrica. Le sue attività difficilmente si possono inquadrare nell’ambito del operation management.
L’ISO/IEC 12207:2008 è uno standard internazionale, che potrebbe definirsi “di prodotto”, in cui si stabilisce la gestione del ciclo di vita del software, e che si propone come standard di riferimento del settore. È interessante l’input generale che ha voluto dare l’ISO, guardando sia al ciclo di Deming che ai principi di integrazione del software con le strutture che lo accoglieranno.
=> Guida al progetto IT: Start-up e Project Management
Processi informatici
Lo standard definisce tutte le attività svolte nel processo di sviluppo, implementazione e manutenzione del software, e suddivide i processi informatici in tre categorie:
- Primari: le cinque attività direttamente legate allo sviluppo software (sviluppo, esercizio, manutenzione, fornitori, acquisti);
- Di supporto: otto attività non legate direttamente allo sviluppo (i processi di qualità, la validazione, gli audit, etc.);
- Organizzativi: sono quattro ed impattano sugli aspetti manageriali e di gestione.
Lo standard evidenzia per ogni processo l’obiettivo primario e le responsabilità, la lista delle sotto attività e la scomposizione di ogni singola attività. Questo approccio è importante perché permette di realizzare una serie di valutazioni, benchmark e confronti su larga e piccola scala.
Modelli di sviluppo del software
A partire dagli anni settanta (quando si inizia a sentire l’esigenza di strutturare “ingegneristicamente” integrando pianificazione controllo e sviluppo documentale) in letteratura si sono presentati molteplici modelli per analizzare lo sviluppo dei progetti informatici, in particolare del software. Da allora i modelli di sviluppo del software sono generati a partire da una base comune: l’individuazione delle attività fondamentali. Da qui i vari modelli cercano di sviscerare caratteristiche e potenzialità dei progetti. Tutti i modelli di sviluppo infatti, proprio a partire dalle attività, individuano soggetti, relazioni e strumenti che legano le varie fasi sino a creare una mappa del progetto, o del processo.
=> Guida al progetto aziendale: definizioni e componenti
Per completezza, illustriamo brevemente i principali modelli di sviluppo del software e le loro peculiarità:
- Modello a cascata: il primo modello di ciclo di vita del software implementato, si caratterizza per l’esecuzione in sequenza delle fasi di analisi, progetto, sviluppo, collaudo e manutenzione;
- Modelli iterativi: si introducono i cicli e si rafforzano le interazioni, si definiscono iterativi tutti i modelli di sviluppo che prevedono processi in grado di ritornare ad una fase del procedimento già affrontata in precedenza. Il principio ispiratore è il ciclo PDCA;
- Modelli RAD: focalizzati alla rapidità dei risultati ed allo sviluppo parallelo dei processi;
- Modelli incrementali: definiti anche evolutivi sono una ulteriore strutturazione dei modelli iterativi, sono particolarmente indicati quando si fa ricorso a prototipizzazione e sviluppo incrementale (alcuni autori considerano anche il modello prototipale);
- Modello a Spirale: formalizzato nel 1988 è una ulteriore evoluzione del modello incrementale.
Articolo di Paolo di Somma