L'ingegneria del software sta abbandonando modelli di sviluppo rigidi e burocratizzati, spesso cause di ritardi nelle consegne e di insoddisfazione dei committenti. Sono Diego Purpo e insieme scopriremo lo Sviluppo Agile.
Ci sono alcuni fattori che hanno maggiormente pesato sull'insuccesso dei progetti software: ad esempio la stima di costi e risorse, richiede spesso sforzi importanti di analisi e il progetto può risultare irrigidito o burocratizzato da troppi orpelli non sempre utili. Si abbassa la capacità di reazione al cambiamento e le modifiche richieste dal committente in fase di sviluppo fanno slittare i tempi.
Nel febbraio del 2001, alcuni tra i maggiori progettisti software e guru del calibro di Martin Fowler, padre dei design pattern, e Ward Cunningham, inventore del wiki, si riunirono per trovare assieme una soluzione per superare gli ostacoli della progettazione classica.
Nasce il Manifesto dello Sviluppo Software Agile, i cui principi sono:
- persone e interazioni più che processi e strumenti;
- software funzionante più che documentazione;
- collaborare con i clienti più che definire il contratto;
- rispondere ai cambiamenti più che aderire al progetto.
Quel gruppo di pensatori è oggi noto come Agile Alliance
Sorgono così molteplici metodologie agili, tutte basate sugli obiettivi espressi dal manifesto:
- limitare il rischio di fallimento;
- soddisfare il cliente;
- abbattere i costi di sviluppo;
L'aspetto comune ai metodi agili è lo sviluppo delle applicazioni per iterazioni. Ogni iterazione è un mini progetto indipendente che ha come scopo il rilascio di una nuova versione del software con l'aggiunta di poche funzionalità.
Un'iterazione non dura più di 2 mesi e prevede tutte le fasi tipiche di un progetto: pianificazione, raccolta dei requisiti, analisi, implementazione, test, documentazione. Ad ogni iterazione il software si avvicinerà sempre più alle richieste del cliente.
La comunicazione con il committente, in tempo reale e possibilmente di persona, riduce il numero di documenti scritti da produrre. Diminuisce così il rischio di incomprensioni e si passa meno tempo ad elaborare concetti chiari in forma scritta.
Ogni metodologia può essere descritta come insieme di pratiche agili, buone norme da da applicare in fase di progettazione e sviluppo. Tra queste Pair Programming, Customer Involvement, Refactoring, Reverse Engineering sono le più diffuse.
Ogni metodologia inoltre non descrive solo gli aspetti implementativi o gli approcci al design, ma, spesso, definisce anche:
- la struttura dei luoghi di lavoro;
- la composizione dei team;
- addirittura lo spirito che deve muovere gli attori del progetto.
Le metodologie agili sono tante e tutte hanno portato vantaggi competitivi e snellimento della produzione nelle software house che le hanno utilizzate, ma alcune di queste, altamente apprezzate, si sono maggiormente affermate e diffuse.
In primis, l'Extreme Programming, forse la metodologia agile più conosciuta. Altro successo è Scrum.
I detrattori degli approcci agili denunciano una progettazione spesso limitata e troppa carenza di struttura e di documentazione. C'è chi sostiene, inoltre, che tali metodi, per funzionare, richiedano team di soli sviluppatori senior molto responsabili, oppure di un forte cambiamento culturale dell'azienda. Altro aspetto imputabile è complessità nelle negoziazioni contrattuali.
In definitiva, il movimento agile mira a fornire strumenti per creare ambienti di sviluppo dinamici, atti a rispondere velocemente ed a costi sostenibili alle mutevoli richieste di mercato, che nell'era di internet è ormai sempre più rapido.
In un settore dove la domanda principale è il cambiamento, saper rispondere bene ed in tempi brevi equivale ad un notevole vantaggio competitivo.