Modelli di processo
Transcript
Modelli di processo
Il processo di sviluppo Processo di sviluppo software = framework all'interno del quale si svolgono le attività necessarie per produrre software di alta qualità. E' il modo in cui viene organizzato e praticato lo sviluppo dei sistemi software. Coloro che, individualmente o in gruppo, lavorano allo sviluppo o alla modifica di un software, adottano necessariamente un certo approccio nel modo di relazionarsi con i propri clienti / utenti, nell'organizzare il proprio lavoro, nella scelta delle tecniche da utilizzare. Adottano un processo. In modo consapevole o meno, ogni sviluppatore (o gruppo di sviluppatori) software ha un proprio processo di sviluppo - un proprio modo di lavorare. Basato sulla propria esperienza, sulla propria cultura, e sul contesto culturale ed organizzativo in cui si trova ad operare. La storia dei successi (e soprattutto degli insuccessi) dei progetti di sviluppo software ha insegnato che ogni processo di sviluppo ha i propri pregi ed i propri limiti. E che un processo di sviluppo inadeguato alla concrete esigenze dello specifico progetto può condurre al fallimento del progetto stesso, o comunque all'insoddisfazione dei clienti / utenti e degli stessi sviluppatori. 1 Il processo di sviluppo A Common Process Framework Common process framework Framework activities work tasks work products milestones & deliverables QA checkpoints Umbrella Activities 2 Il processo di sviluppo Un generico processo di sviluppo software è costituito da uno o più set di Attività portanti (Framework Activities), cioè dalle attività necessarie per garantire l'avanzamento del processo di produzione del software. Le attività portanti rappresentano il fondamento del processo di sviluppo, in quanto comprendono le attività direttamente legate alla realizzazione del prodotto software. Fra queste possiamo citare: ¾ la suddivisione del prodotto in moduli ¾ la codifica ¾ il controllo di avanzamento ¾ la verifica del livello qualitativo del software ¾ il bug fixing 3 Il processo di sviluppo Alle attività portanti si affiancano le Attività ausiliarie (Umbrella Activities), che rappresentano l'insieme di tutte le attività non direttamente collegate alle fasi produttive, ma che concorrono con esse al raggiungimento dell'obiettivo. ¾ Software project management ¾ Formal technical reviews ¾ Software quality assurance ¾ Software configuration management ¾ Document preparation and production ¾ Reusability management ¾ Measurement ¾ Risk management 4 Capability Maturity Model Il Modello di Maturità delle Capacità (CMM - Capability Maturity Model) individua un insieme di capacità corrispondenti al livello di maturità di processo di una software house. Misura esclusivemente la validità di processo, dunque non fornisce una valutazione della validità tecnica e/o architetturale del prodotto dell'azienda. Il CMM è stato elaborato dal Software Engineering Institute nel 1993, sulla base del processo di sviluppo descritto nello standard Mil-Std-498, sviluppato negli Stati Uniti in ambito militare.. Il CMM prevede 5 livelli di valutazione, ad ognuno dei quali sono associate più Key Process Areas (KPA); ogni livello comprende tutte le caratteristiche dei livelli precedenti. 1. Livello Iniziale: il processo di svluppo è definito di volta in volta Æ risulta confuso, spesso non è nemmeno definito Æ la riuscita del progetto dipende dalle capacità individuali degli sviluppatori KPA: nessuna! 5 Capability Maturity Model 2. Livello Ripetibile: nell'azienda esistono processi basilari per la gestione dei progetti, al fine di tenere sotto controllo costi, tempi e soddisfacimento dei requisiti. Æ le metodologie usate in progetti di successo precedenti vengono ripetute in progetti successivi. KPA: – Gestione – Garanzia di qualità del sw – Gestione dei sottocontratti (Outsourcing) – Controllo e sorveglianza del progetto – Pianificazione del progetto – Gestione dei requisiti 6 Capability Maturity Model 3. Livello Definito: il processo è conforme ad uno standard aziendale definito, stabile e documentato sia per quanto riguarda le attività portanti che per quanto riguarda le attività ausiliarie. KPA: – Revisioni – Coordinamento dei gruppi – Ingegneria del prodotto sw – Gestione integrata del sw – Programmi di addestramento – Definizione del processo azindale – Obiettivo primario del processo aziendale 4. Livello Gestito: sia il prodotto sia il processo software sono valutati quantitativamente e qualitativamente sulla base di misure dettagliate. KPA: – Gestione della qualità del software – Gestione quantitativa del processo 7 Capability Maturity Model 5. Livello Ottimizzato: utilizzo di tecnologie e metodologie innovative al fine di raggiungere un livello ottimo di gestione del processo software e sviluppo del prodotto. KPA: – Gestione del cambiamento nel processo – Gestione del cambiamento tenologico – Prevenzione dei difetti 8 Modelli di processo La strategia adottata da un’azienda per gestire il processo di sviluppo software (comprendente metodologie, tecniche e strumenti) è denominata Modello di Processo o Paradigma di Ingegneria del Software dell’azienda. Qualunque modello di processo adotti un’azienda, esistono elementi comuni. problem definition technical development status quo solution integration 9 Modelli di processo (L. Raccoon, “The chaos model end the chaos lifecycle”, ACM Software Engineering Notes, vol.20 n.1, 1995) Lo status quo dello sviluppo software viene modificato attraverso delle iterazioni che prevedono: • La definizione del problema • Lo sviluppo tecnico • L’integrazione della soluzione Una iterazione produce un nuovo status quo che può essere modificato con successive iterazioni. Il ciclo di Raccoon è indipendente dal modello di processo e dalla tecnologia adottata; le attività portanti ed accessorie descritte in precedenza si possono facilmente ascrivere ad una delle fasi. Ad esempio, codifica e bug fixing appartengono alla fase di sviluppo tecnico, mentre la redazione di documentazione di progetto appartiene alla fase di integrazione. 10 Modelli di processo Possiamo osservare che il ciclo di Raccoon si applica a più livelli di dettaglio: a livello dell’intera applicazione, a livello di progettazione dell’infrastruttura di base, di progettazione di componenti, fino allo sviluppo di parti di codice. Qualunque siano il modello di processo e le tecnologie adottate, le fasi di definizione del problema, sviluppo tecnico e integrazione della soluzione coesistono ad un certo livello di dettaglio. Durante il cammino verso lo sviluppo di un’applicazione completa, le quattro fasi si applicano ricorsivamente dalla raccolta dei requisiti utente fino ai più piccoli dettagli implementativi. Æ Il risultato è una visione frattale del processo di sviluppo software! 11 Modelli di processo – Il Modello Sequenziale Lineare Il Modello Sequenziale Lineare trae origine dal Modello a Cascata, originariamente proposto da Royce nel 1970. (W.Royce, "Managing the Development of Large Software Systems", Proceedings of IEEE Wescon, 1970) System/information engineering analysis design code test 12 Modelli di processo – Il Modello Sequenziale Lineare Il progetto è organizzato in una sequenza di fasi, ciascuna delle quali produce un output che costituisce l'input per la fase successiva. All'inizio di ciascuna fase si verifica la qualità del lavoro effettuato nella fase precedente, con possibilità di ricicli per modifica Le fasi individuate da Royce prevedono: • Strutturazione e modellazione del sistema e dei dati Il modello sequenziale lineare prevede una fase iniziale di macro-analisi durante la quale vengono esaminati tutti i requisiti e viene progettata l’infrastruttura dell’applicazione e dei dati. Il processo viene raffinato nelle due fasi successive di analisi e progettazione. • Analisi dei requisiti Prevede la definizione dettagliata (e relativa documentazione) di funzionalità, prestazioni, interfacce del software. 13 Modelli di processo – Il Modello Sequenziale Lineare • Progettazione La fase di progettazione traduce i requisiti utente in una modellazione del software, ossia in una documentazione che consenta di valutare la qualità del software prime che inizi la codifica. Si articola in modellazione di architettura, struttura dati, interfacce ed algoritmi di elaborazione. • Codifica • Testing Il modello sequenziale lineare si applica sia alla realizzazione iniziale di un software, sia alla sua manutenzione, cioè alla revisione del software stesso al fine di correggere errori o soddisfare le mutate esigenze del committente. 14 Modelli di processo – Il Modello Sequenziale Lineare Diffusione del processo a cascata E' probabilmente il processo di sviluppo software più diffuso al mondo, anche perché segue il modello della catena di montaggio tipico della produzione industriale della prima metà del novecento. Ma è considerato irrimediabilmente obsoleto, ed è raro trovare esperti che lo raccomandino ancora. I settori economici per i quali la qualità e produttività dei progetti di sviluppo software sono più critici hanno da tempo abolito la pratica dello sviluppo a cascata, in quanto troppo rischioso. Vantaggi 9 E' molto semplice da capire, quasi intuitivo (anche per chi non ha mai sviluppato software): prima si raccolgono tutti i requisiti, poi si fa tutta l'analisi, poi tutto il design, poi tutta la codifica, ... 9 E' semplicissimo organizzare il piano di progetto (non che sia facile pianificare le date di conclusione delle fasi, ma non ci sono dubbi sulla sequenza delle fasi stesse). 9 Si adatta perfettamente a logiche organizzative e politiche del personale basate su una divisione del lavoro accentuata. 15 Modelli di processo – Il Modello Sequenziale Lineare Svantaggi 9 E' altamente rischioso. Le prime verifiche concrete, in termini di risultati visibili e comprensibili da committenti e utenti, arrivano verso la fine del progetto, nel periodo finale della fase di test. E se ci si accorge che qualcosa non funziona (accade...), ossia che il sistema realizzato non corrisponde ai requisiti, impliciti ed espliciti, i tempi ed i costi del progetto possono crescere in misura notevole. 9 Si basa su alcune assunzioni, il più delle volte sbagliate: 1. Che sia possibile, nella fase iniziale del progetto, chiarire tutti i requisiti del sistema. E che sia possibile farlo senza discutere con il committente e le parti interessate nel merito delle soluzioni concrete, senza verificare l'accordo con la presentazione di prototipi utilizzabili. Questa assunzione sbagliata può provocare due effetti: - che si raggiunga un accordo sulla carta, ma che non ci sia un accordo effettivo sul merito di problemi (e che non ci si renda conto della cosa fino alla verifica finale) 16 Modelli di processo – Il Modello Sequenziale Lineare - che si raggiunga la "paralisi dell'analisi", con il progetto che non riesce a chiarire alcune aree di ambiguità e l'impossibilità per il committente e le parti interessate di fornire i chiarimenti richiesti. 2. Che una volta ottenuto l'accordo sui requisiti (tipicamente, con la produzione di alcuni documenti testuali che specificano, in termini astratti, le funzionalità del sistema), i requisiti stessi non cambino più fino alla fine del progetto. Può essere vero, per progetti molto, molto brevi. Ma non è certamente vero per progetti di complessità media o elevata. 3. Che sia possibile definire i requisiti, e stimare tempi e costi del progetto, senza possedere la competenza necessaria sugli aspetti tecnici ed implementativi. Questo non è in sé un limite del processo di sviluppo a cascata, ma della sua attuazione concreta in organizzazioni nelle quali esiste una forte divisione del lavoro. In molte realtà, la definizione dei requisiti viene effettuata da persone, nel ruolo di analisti, che non hanno le competenze tecniche necessarie allo sviluppo software. Oppure che avevano, anni addietro, competenze tecniche, ma basate sull'utilizzo di tecnologie diverse da quelle utilizzate nel progetto. E che non sono quindi in grado, da sole, di produrre stime attendibili. 17 Modelli di processo – Il Modello Sequenziale Lineare Possiamo quindi concludere che raramente un progetto reale si adatta allo schema sequenziale. Nota: Royce era consapevole dei limiti del modello a cascata, e il suo articolo originale proponeva dei correttivi, che purtroppo hanno avuto una diffusione assai limitata. 18 Modelli di processo – Il Modello Incrementale Il Modello Incrementale è una derivazione del processo di sviluppo a cascata. 19 Modelli di processo – Il Modello Incrementale (B. Boehm, “Software Engineering Economics”, Prentice-Hall 1981) Il modello incrementale prevede che, una volta completata la fase di analisi, venga effettuata una attività di design dell'architettura del sistema. Vengono, cioè, effettuate le scelte "di alto livello" relative a: • strutturazione del sistema in macroparti distinte (sottosistemi) • responsabilità di ciascun sottosistema • modalità di dialogo tra i diversi sottosistemi (interfacce). A questo punto vengono definite delle priorità di realizzazione, sulla base di due aspetti: • priorità di natura funzionale (relativa alle esigenze dei committenti e delle parti interessate) • priorità di natura architetturale (se un sottosistema A necessita del sottosistema B per funzionare, B ha una priorità superiore) Sulla base delle priorità definite, il progetto viene articolato in una serie di sottoprogetti realizzativi, ciascuno dei quali produrrà uno o più sottosistemi (parti del sistema complessivo). 20 Modelli di processo – Il Modello Incrementale I sottoprogetti realizzativi potranno essere condotti in sequenza rigida (uno dopo l'altro), oppure essere condotti parzialmente in parallelo (con sovrapposizioni temporali). Diffusione del processo incrementale Viene spesso utilizzato, in progetti di complessità medio-grande, come variante di un processo a cascata, in quanto costituisce un modo di ridurne i rischi. Vantaggi 9 Rispetto al processo a cascata, permette di arrivare a consegnare qualcosa di concreto prima di aver completato l'intero sistema. In questo modo si ottengono feedback (riscontri) concreti, con indicazioni utilizzabili anche nei sottoprogetti realizzativi ancora in corso o successivi. E si riducono i rischi di insuccesso. 9 L'articolazione del piano di progetto è più complessa (rispetto al processo di sviluppo a cascata), ma permette una maggiore flessibilità nell'assegnazione delle persone ai compiti progettuali, quando i sottoprogetti vengono pianificati con una parziale sovrapposizione temporale. 21 Modelli di processo – Il Modello Incrementale Svantaggi Condivide con il processo a cascata le due assunzioni - erronee - che: • sia possibile definire tutti i requisiti alla partenza del progetto, senza entrare con i committenti e le altre parti interessate nel merito delle soluzioni concrete • i requisiti non cambino dopo che sono stati concordati 22 Modelli di processo – Il Modello Prototipale Il principale limite del modello a cascata è che l’utente deve attendere fino al termine della fase di sviluppo prima di poter valutare il prodotto. Se il committente non è in grado di definire con sufficiente chiarezza i propri requisiti, il modello a cascata si rivela inadeguato. Il Modello Prototipale pone l’accento sul ruolo centrale del committente nella definizione dell’applicazione, e pertanto agevola la definizione dei requisiti. listen to customer build/revise mock-up customer test-drives mock-up 23 Modelli di processo – Il Modello Prototipale Il modello prototipale prevede: • Una prima fase di raccolta dei requisiti analoga a quella del modello a cascata, ma più rapida ed informale, volta a definire dei requisiti di massima. • Una fase di progettazione del prototipo, sulla base dei requisiti (incompleti) raccolti nella fase precedente. La progettazione è in genere incentrata sull’interfaccia utente. • Una fase di realizzazione di un prototipo. Il prototipo deve soddisfare i requisiti noti al momento dello sviluppo, ma per la sua realizzazione non si è tenuti a rispettare alcune caratteristiche fondamentali del software di qualità: es. prestazioni, qualità del codice, riusabilità, manutenibilità. Lo scopo del prototipo è solo quello permettere al committente di valutare l’aderenza dell’applicazione alle proprie necessità. Il feedback dell’utente relativamente al funzionamento del prototipo genera un successivo ciclo durante il quale il prototipo viene raffinato. 24 Modelli di processo – Il Modello Prototipale Una volta raggiunto l’accordo con il committente riguardo alla definizione delle specifiche, è necessario passare ad una fase di ingegnerizzazione del prodotto, al fine di poter consegnare un prodotto di qualità. Dal momento che il prototipo è stato realizzato per approssimazioni successive senza particolare attenzione alla sua architettura, la fase di ingegnerizzazione prevede di gettare via il prototipo! Vantaggi 9 Il committente vede crescere il prodotto, quindi è molto improbabile consegnare un prodotto finale che non soddisfi il committente. 9 Lo sviluppatore è molto agevolato nella fase di negoziazione dei requisiti 9 I tempi di sviluppo sono molto rapidi (in apparenza!) Svantaggi 9 La tentazione di considerare il prototipo come un prodotto è molto forte… sia l’utente che lo sviluppatore tendono a farlo. Il risultato è che spesso si rinuncia all’ingegnerizzazione del prodotto, e si consegna un’applicazione funzionante, ma di scarsa qualità. 25 Modelli di processo – Il Modello Prototipale 9 Il committente ha per le mani in tempi rapidi un oggetto funzionante, che soddisfa le sue esigenze, ed è portato a pensare che con pochi ritocchi sia possibile trasformarlo in un prodotto realmente operativo. Le difficoltà (ed i conseguenti costi) della fase di ingegnerizzazione sono percepiti con difficoltà dal committente Æ si generano inevitabilmente dei contrasti. 26 Modelli di processo – Il Modello a Spirale Il Modello a Spirale prevede uno sviluppo del software in versioni crescenti. Pla nning Risk Analysis Customer Communic a tion Engineering Customer Evaluation Construc tion & Relea se 27 Modelli di processo – Il Modello a Spirale (Barry Boehm, "A Spiral Model of Software Development and Enhancement", in Computer, vol.21 n.5, 1988) Il modello a spirale è il più diffuso modello di sviluppo di tipo Iterativo. La spirale parte dal centro, con un insieme di obiettivi e requisiti iniziali per il progetto. Ogni ciclo (o iterazione) comporta l'effettuazione di una serie di attività, dette task regions: • Comunicazione con il cliente • Pianificazione • Analisi dei rischi • Progettazione • Costruzione e rilascio • Valutazione da parte del cliente Le task regions, nel loro insieme, comprendono le fasi tradizionali del modello sequenziale lineare: • analisi dei requisiti • progettazione 28 Modelli di processo – Il Modello a Spirale • codifica • test Cioè le stesse attività che, in un processo di sviluppo a cascata, sono considerate come delle fasi da svolgersi in sequenza rigida, una dopo l'altra. Nel processo iterativo, in ogni iterazione (in ogni ciclo della spirale) vengono svolte le medesime tipologie di attività. L'articolazione di un progetto iterativo è guidata non da una rigida sequenza di fasi predefinite, ma da una gestione sistematica dei rischi di progetto, per arrivare alla loro progressiva diminuzione. All'inizio di un progetto di sviluppo software, i rischi sono tipicamente molto elevati. Manca la chiarezza sui requisiti, le scelte sulle tecnologie e sulla strutturazione del sistema (le scelte architetturali) sono ipotesi non ancora consolidate. In alcuni casi, sono state scelte tecnologie innovative, per le quali manca però una sufficiente esperienza nel gruppo di progetto. In altri, anche a fronte di tecnologie conosciute, esistono incertezze legate alla necessità di fare fronte a un numero di utilizzatori contemporanei molto elevato, o a volumi di dati mai gestiti in precedenza. 29 Modelli di processo – Il Modello a Spirale Ogni iterazione, in un progetto iterativo, ha lo scopo di ridurre i rischi di progetto. Inizialmente, tramite la costruzione di prototipi. Prototipi di interazione (interfacce utente), per affrontare i rischi legati all'incertezza sui requisiti. Prototipi architetturali (realizzazione e test di aspetti infrastrutturali), per affrontare i rischi legati alla scelta delle tecnologie ed i dubbi sulla strutturazione del sistema. Successivamente, quando i rischi principali sono stati messi sotto controllo, ogni iterazione ha lo scopo di costruire, in modo progressivo, nuove porzioni del sistema, via via integrate con le precedenti, e di verificarle con il committente e le altre parti interessate. Sotto questo profilo, esiste più di un'affinità con il processo di sviluppo incrementale; ma anche una differenza significativa. Un processo iterativo, infatti, prevede il cambiamento di requisiti in corso d'opera. Prevede, in particolare, la "nascita" di nuovi requisiti espressi dal committente e dalle altre parti interessate al sistema come effetto dell'utilizzo del sistema stesso (delle sue parti già rese disponibili agli utilizzatori). 30 Modelli di processo – Il Modello a Spirale Vantaggi 9 Gestione sistematica dei rischi di progetto, attraverso iterazioni volte alla loro progressiva riduzione. 9 Rispetto al processo di sviluppo a cascata, salvo eccezioni, maggiore qualità dei prodotti, e maggiore produttività dei progetti (costi e tempi inferiori). Svantaggi 9 La pianificazione dei progetti condotti in modo iterativo è più complessa, e meno "banale". All'inizio del progetto è impossibile prevedere esattamente il numero delle iterazioni, la durata di ogni singola iterazione, i suoi obiettivi specifici. Il piano di un processo iterativo evolve durante tutta la durata del progetto stesso, e richiede un controllo sistematico degli avanzamenti. 9 Un punto cruciale per il successo di un progetto iterativo è la collaborazione sistematica tra committenti (e altre parti interessate) e gruppo di progetto. Da un lato, il gruppo di progetto deve fornire in modo sistematico visibilità sugli avanzamenti, in termini di prodotti concreti da valutare. Dall'altro, se i committenti (e le altre parti interessate) non forniscono periodicamente 31 Modelli di processo – Il Modello a Spirale riscontri concreti ai prototipi ed alle porzioni di sistema realizzate dal gruppo di progetto, la progressiva riduzione dei rischi non ha luogo. Il modello a spirale è una strategia realistica per lo sviluppo di sistemi software di grandi dimensioni. Quanto più il successo dei progetti software è critico per gli obiettivi di un'organizzazione, tanto più è probabile che il processo di sviluppo adottato abbia caratteristiche di natura iterativa. I modelli iterativi sono particolarmente adatti allo svilupo di sistemi objectoriented. 32 Modelli di processo – Extreme Programming I Processi Agili sono stati sviluppati a partire dalla seconda metà degli anni ’90. Traggono origine dal Manifesto for Agile Software Development, che recita: "Stiamo scoprendo approcci migliori per sviluppare il software, praticandoli ed aiutando altri a praticarli. Grazie a questo lavoro siamo arrivati a ritenere importanti: • Gli individui e le loro interazioni, più che i processi e gli strumenti • Il software funzionante, più che una documentazione onnicomprensiva • La collaborazione con il cliente, più che la negoziazione dei contratti • Il rispondere ai cambiamenti, più che seguire un piano Cioè, mentre i concetti riportati a destra sono importanti, riteniamo che quelli riportati a sinistra siano più importanti.” Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas. © 2001, the above authors. This declaration may be freely copied in any form, but only in its entirety through this notice.". 33 Modelli di processo – Extreme Programming Nella loro maggioranza, i proponenti dei processi agili rigettano come burocratici ed inefficaci gli approcci tradizionali dell'ingegneria del software. Più interessante, però, è il fatto che molti degli autori più rilevanti del software engineering "tradizionale" (ad esempio Barry Boehm, Tom De Marco, Grady Booch) guardano ai processi agili come un fenomeno positivo. Tra i processi agili, il più diffuso è Extreme Programming (XP). (Kent Beck, ”Extreme Programming Explained”, Addison-Wesley 2000) XP è una disciplina di sviluppo software basata su valori di semplicità, comunicazione e feedback continuo. XP si basa su una serie di pratiche (Practices). Le pratiche si integrano tra loro nel contesto di XP, ma è opportuno osservare che ciascuna di esse ha senso anche se applicata in modo autonomo, eventualmente nel contesto di un diverso processo di sviluppo. 34 Modelli di processo – Extreme Programming 35 Modelli di processo – Extreme Programming Whole Team XP rifiuta la suddivisione dei compiti in ruoli rigidi, e vede ogni persona coinvolta nel processo di sviluppo come parte integrante di una entità denominata “Whole Team”. Il committente fa parte del team e lavora fianco a fianco con gli sviluppatori per l’intera durata del progetto. Il committente fornisce i requisiti e stabilisce le priorità; definisce inoltre i test di accettazione del prodotto, coadiuvato dagli analisti del team. Normalmente il team prevede anche un “coach” che ha l’incarico di mantenere il team focalizzato sull’obiettivo. Planning Game XP pone l’accento su come indirizzare il progetto verso l’obiettivo finale, man mano che ci si avvicina ad esso, piuttosto che sulla definizione esatta dell’obiettivo finale in fase di analisi del progetto. XP prevede due diversi tipi di pianificazione: Release Planning – fase nella quale il committente presenta al team i propri requisiti, che vangono valutati in termini di costi e difficoltà di realizzazione; la 36 Modelli di processo – Extreme Programming stima è necessariamente imprecisa. In questa fase il team realizza un canovaccio di project plan, che sarà rivisto nelle fasi successive. Iteration Planning – XP costruisce il codice mediante iterazioni di durata prefissata: due settimane. L’obiettivo è produrre software funzionante (anche se non completo) al termine di ogni iterazione. Durante Iteration Planning, il committente presenta al team le features richieste per le due settimane successive; il team le valuta in termini di costi e fattibilità e definisce un piano per l’iterazione. Gli obiettivi non pienamente soddisfatti al termine dell’iterazione non sono presi in considerazione. In questo modo il committente vede crescere il prodotto ed è in grado di controllare il progetto attraverso le varie iterazioni. Customer Tests Il committente, insieme ad ogni feature richiesta, deve obbligatoriamente definire i test di accettazione. Il team costruisce delle procedure di test automatici che devono essere eseguiti ad ogni iterazione. 37 Modelli di processo – Extreme Programming Small Releases Attraverso il meccanismo delle iterazioni, il team si pone l’obiettivo di realizzare quanto più frequentemente possibile delle release parziali del prodotto da consegnare agli utenti finali. Simple Design Attitudine a scegliere costantemente la soluzione "più semplice" ad un dato problema, senza porsi il problema di anticipare i futuri cambiamenti. XP propone di mantenere il design della soluzione sempre adatto alle funzionalità correnti del sistema. Questo è possibile perché anche l’architettura del sistema è considerata in costante evoluzione, attraverso degli incontri mirati previsti per l’intera durata del progetto (in ogni iterazione e nelle fasi di realizzazione delle Small Releases). Questa attività di costante revisione dell’architettura è denominata Refactoring. Pair Programming In XP, tutta l’attività di stesura di codice è svolta da coppie di programmatori che lavorano fianco a fianco sulla stessa macchina. Questa pratica fa sì che 38 Modelli di processo – Extreme Programming tutto il codice sorgente sia costantemente monitorato e validato da almeno un programmatore, con il risultato di produrre codice meglio progettato, più efficiente, meno incline agli errori. Può sembrare inefficiente avere due programmatori che fanno il lavoro di unosolo, ma alcune ricerche specifiche provano che due programmatori che lavorano in coppia producono gli stessi risultati (in termini di tempo e feature soddisfatte) che produrrebbero lavorando singolarmente, ma realizzano codice intrinsecamente migliore. Il Pair Programming ha anche l’effetto di diffondere la conoscenza attraverso il team, se le coppie cambiano durante lo sviluppo del progetto. Test-driven Development In XP il processo di sviluppo deve essere ossessivamente guidato dai test: i test di feature devono essere realizzati (o quanto meno definiti) prima di sviluppare il relativo codice, e devono essere eseguiti con esito positivo al 100% ogni volta che un programmatore modifica una singola riga di codice sorgente. XP incoraggia anche i programmatori stessi a definire dei test per il modulo software da loro realizzato. 39 Modelli di processo – Extreme Programming Continuous Integration In un progetto XP l’integrazione dei vari moduli software che compongono la soluzione è garantita dalla generazione continua di “build” (8-10 volte al giorno, contro il ciclo di build settimanale adottato dalla maggior parte delle software house). Inoltre, la costruzione del build è a carico del team, non di terze persone meno coinvolte nel processo di sviluppo. In questo modo, a fronte di un carico di lavoro notevole per gli sviluppatori del team, si ha la garanzia che il prodotto sia costantemente funzionante e si evitano gli errori (spesso molto subdoli) dovuti all’integrazione fra moduli. Collective Code Ownership Nei progetti XP, ogni coppia di programmatori può liberamente modificare porzioni di codice scritte da altri: la proprietà del codice è dell’intero team, e non esistono moduli di esclusiva pertinenza di alcune persone. In questo modo l’intero codice riceve le attenzioni di più programmatori, e risulta migliore e meno incline agli errori. La Collective Code Ownership potrebbe rappresentare un problema se le persone fossero costrette a lavorare alla cieca su codice che non conoscono. 40 Modelli di processo – Extreme Programming XP evita questo problema mediante la pratica di Pair Programming e l’esecuzione continua di test. Coding Standard XP incoraggia l’adozione di stili e standard di codifica comuni per tutti gli sviluppatori, in modo che tutto il codice sembri scritto da una sola persona. In questo modo ogni porzione di codice appare familiare a tutti gli sviluppatori. Il codice sorgente deve essere quanto più possibile autoesplicativo; XP sconsiglia l’utilizzo di documentazione interna di progetto. Metaphor I team XP sviluppano una visione comune del funzionamento generale del sistema attraverso l’uso di metafore. In termini meno poetici, XP promuove l’adozione di terminologia comune all’intero team, univocamente compresa da tutti i suoi membri, in modo da evitare incomprensioni. 41 Modelli di processo – Extreme Programming Sustainable Pace Attraverso questa pratica (detta anche “40-hour week”) XP promuove un livello di sollecitazione e impegno sostenibile da tutti i membri del team per un periodo di durata indefinita. Il ricorso a lavoro straordinario per far fronte a necessità contingenti è sconsigliato, in quanto riduce la produttività del team nel lungo periodo. 42 Modelli di processo – Extreme Programming In sintesi, l’impostazione generale del processo XP è: 43 Modelli di processo – Extreme Programming Diffusione di XP Ancora limitata, almeno in Italia, ma in crescita. Vantaggi 9 E' un processo molto efficiente, e in grado di fare fronte al cambiamento di requisiti. Il sottotitolo del testo di Kent Beck è "Embrace Change": abbracciare il cambiamento. 9 Fornisce risultati migliori, in termini di qualità del prodotto, rispetto a molti progetti condotti con altri approcci, grazie alle pratiche sistematiche e quotidiane di testing e di continuous integration. 9 Porta ad una assunzione di responsabilità collettiva da parte del gruppo di lavoro, e favorisce la creazione di team coesi. 9 E' molto apprezzato da chi lo pratica. Svantaggi 9 XP è inadatto a contesti progettuali in cui sia richiesta una tracciatura sistematica dei requisiti. 44 Modelli di processo – Extreme Programming 9 L'adozione di XP (dell'insieme completo delle pratiche XP) richiede trasformazioni profonde degli assetti organizzativi e delle politiche del personale, in quanto modifica in modo sostanziale ruoli consolidati a livello organizzativo. Può anche richiedere una trasformazione degli aspetti logistici, in quanto richiede che il gruppo di lavoro (tipicamente costituito da circa una decina di persone) operi in una singola locazione. E' molto più semplice adottare XP per una software house (in particolare, per una software house appena nata) che non per il settore sistemi di una grande organizzazione. 9 XP richiede che le persone siano capaci di lavorare in gruppo: non tutti sono in grado di farlo. 9 Richiede inoltre l'utilizzo di strumenti di sviluppo evoluti, per programmare, testare, ristrutturare il codice in modo realmente produttivo. 45