Processi di sviluppo - modelli plan-based, metodi agili e Scrum
In questa pagina 8
Definizione (processo software). Un processo software è un insieme strutturato di attività richieste per sviluppare un sistema software. Un modello di processo è una rappresentazione astratta di un processo, che ne descrive una parte da un punto di vista particolare.
Una descrizione di processo elenca le attività (specificare un modello dei dati, costruire l'interfaccia) e il loro ordine, e può includere i prodotti (risultati delle attività), i ruoli (responsabilità delle persone) e le condizioni pre e post (che cosa è vero prima e dopo un'attività o un prodotto).
Processi plan-driven e processi agili
| plan-driven (basati su un piano) | agili | |
|---|---|---|
| pianificazione | tutte le attività pianificate in anticipo, progresso misurato sul piano | incrementale, il piano cambia con facilità |
| requisiti | specificati in dettaglio prima | cambiano, si raccolgono per incrementi (storie) |
| documentazione | abbondante | solo quella necessaria |
| cambiamento | costoso, da evitare | atteso e accolto |
| ideale quando | requisiti stabili e capiti, sistemi critici, grandi gruppi distribuiti | requisiti incerti o che cambiano, prodotti commerciali, gruppi piccoli e vicini al cliente |
Nella pratica i due tipi non esistono isolati: la maggior parte dei processi ha elementi di entrambi, e non esiste un processo giusto o sbagliato, ma processi con priorità e vantaggi diversi. Tre "bestie" (incertezza, irreversibilità, complessità, vedi la nota di apertura) spiegano perché è difficile pianificare tutto in anticipo.
Modelli plan-based
Modello a cascata (waterfall)
Definizione. Un modello plan-driven con fasi separate e distinte, svolte in sequenza, ciascuna da completare prima di passare alla successiva.
Fasi: analisi e definizione dei requisiti progetto del sistema e del software realizzazione e unit test integrazione e test di sistema operazione e manutenzione.
- Problema principale: la difficoltà di accogliere i cambiamenti una volta iniziato il lavoro: il partizionamento è rigido e non si incorpora il feedback del cliente. È adatto solo se i requisiti sono ben capiti e i cambiamenti di progetto in corso d'opera saranno molto limitati.
- Si usa soprattutto in grandi progetti di ingegneria dei sistemi sviluppati in più sedi, e nei software critici per la sicurezza (safety critical): lì il difetto diventa un pregio, perché dà ai gruppi una mappa dello sviluppo affidabile e comune.
Modello a V
Il modello a V (V-model) è la cascata con i livelli di test associati: ogni fase di sviluppo a sinistra ha il livello di test corrispondente a destra, e i test si progettano insieme alla fase.
| fase di sviluppo | livello di test corrispondente |
|---|---|
| requisiti | test di accettazione |
| analisi | test di sistema |
| progetto | test di integrazione |
| realizzazione | test unitari |
Tempo e definizione del progetto scendono a sinistra, test del progetto salgono a destra. Le frecce tratteggiate collegano ogni fase al suo test: un difetto dei requisiti emerge solo all'accettazione, per questo la validazione dei requisiti serve presto (il costo di un difetto cresce fino a 100 volte).
Sviluppo incrementale
Definizione. Specifica, sviluppo e validazione si sovrappongono: si sviluppa una versione iniziale, la si mostra al cliente e la si fa evolvere in incrementi che si costruiscono su quelli precedenti. Può essere plan-driven o agile.
- Vantaggi: il costo di accogliere i cambiamenti e la quantità di analisi e documentazione da rifare sono molto inferiori alla cascata; è più facile ottenere il feedback del cliente (che vede le dimostrazioni); consegna e messa in opera sono più rapide, e il cliente trae vantaggio dal software prima.
- Problemi: il processo non è visibile ai responsabili (non conviene produrre documenti per ogni versione, quindi mancano dati per misurare i progressi); la struttura tende a degradarsi a ogni incremento, a meno di fare refactoring a ogni modifica, e incorporare i cambiamenti diventa via via più difficile e costoso.
Integrazione e configurazione (riuso)
Il sistema è assemblato da componenti esistenti, integrati e configurati (COTS, commercial off-the-shelf): applicazioni standalone da configurare, pacchetti di oggetti per un framework a componenti (.NET, J2EE), servizi web remoti. Fasi: specifica dei requisiti, scoperta e valutazione dei componenti, raffinamento dei requisiti (adattandoli a ciò che esiste), configurazione dei sistemi, adattamento e integrazione dei componenti. Vantaggi: costi e rischi ridotti, consegna più veloce. Svantaggi: si scende a compromessi sui requisiti (il sistema può non soddisfare del tutto gli utenti) e si ha meno controllo sull'evoluzione dei componenti riusati. È l'approccio standard di molti sistemi gestionali.
Nella pratica i grandi sistemi usano un processo che include elementi di tutti questi modelli. Esempi: la cascata per il software critico, l'incrementale per la maggior parte dei prodotti commerciali, il riuso per i sistemi aziendali. Altri modelli plan-based noti: il modello a spirale (cicli ripetuti di pianificazione, analisi dei rischi, sviluppo, valutazione) e il Unified Process (processo iterativo guidato dai casi d'uso e dall'architettura, in fasi: ideazione, elaborazione, costruzione, transizione); sono citati qui per completezza, il corso non li approfondisce.
Gestire il cambiamento
Il cambiamento è inevitabile nei grandi progetti: cambia il business, nascono tecnologie, cambiano le piattaforme. I costi del cambiamento sono la rianalisi del lavoro fatto e l'implementazione della nuova funzione. Per ridurre il costo del rifacimento:
| approccio | idea | strumento |
|---|---|---|
| anticipare il cambiamento (change anticipation) | attività che prevedono i cambiamenti | prototipi |
| tolleranza al cambiamento (change tolerance) | processo progettato per assorbire i cambiamenti con poca fatica | sviluppo e consegna incrementali |
Prototipazione
Un prototipo è una versione iniziale del sistema per dimostrare concetti e provare opzioni di progetto. Si usa per i requisiti (raccolta e validazione), per il progetto (esplorare opzioni, per esempio l'interfaccia) e per il test. Benefici: usabilità migliore, aderenza ai bisogni degli utenti, progetto migliore, manutenibilità migliore, minore sforzo di sviluppo. Si basa su strumenti e linguaggi rapidi, può tralasciare funzioni, controllo degli errori e requisiti non funzionali (affidabilità, sicurezza), e si concentra sulle aree non ben capite. I prototipi vanno gettati (throw-away): non sono una buona base per un sistema di produzione perché è spesso impossibile accomodare i requisiti non funzionali, mancano di documentazione e la struttura è degradata dai cambiamenti rapidi.
Consegna incrementale
Il sistema non si consegna in una volta: sviluppo e consegna sono scomposti in incrementi, ciascuno con una parte delle funzioni; le priorità più alte sono nei primi incrementi; quando inizia lo sviluppo di un incremento i suoi requisiti si congelano, mentre quelli dei successivi possono evolvere.
| sviluppo incrementale | consegna incrementale | |
|---|---|---|
| che cosa | si sviluppa e si valuta (da cliente/utente) ogni incremento prima del successivo | si consegna un incremento utilizzabile dagli utenti reali |
| tipico di | metodi agili | sistemi in produzione; difficile per sistemi che ne sostituiscono altri (gli incrementi hanno meno funzioni) |
Vantaggi: valore al cliente a ogni incremento; i primi incrementi fanno da prototipo; minore rischio di fallimento totale; le funzioni a più alta priorità sono più provate. Problemi: la maggior parte dei sistemi richiede risorse di base comuni a più parti, non garantibili con incrementi; i requisiti non sono definiti in dettaglio finché l'incremento non è realizzato, e questo va contro i contratti che includono la specifica completa.
Miglioramento del processo
Si capiscono i processi esistenti e li si cambia per migliorare la qualità del prodotto e ridurre costi e tempi. Due approcci: maturità del processo (migliorare processo e gestione del progetto, introducendo buone pratiche) e approccio agile (sviluppo iterativo, meno overhead, consegna rapida di funzionalità). Il ciclo di miglioramento:
- misura di uno o più attributi del processo o del prodotto (tempo di calendario di un'attività, sforzo in giorni di lavoro, numero di difetti scoperti): forma una baseline per valutare i miglioramenti; è possibile solo se il processo è definito;
- analisi: si individuano debolezze e colli di bottiglia (anche con mappe del processo);
- cambiamento: si introducono i cambiamenti e il ciclo ricomincia. Le misure servono a valutare i miglioramenti, ma devono guidarli gli obiettivi.
Livelli di maturità (SEI)
| livello | caratteristica |
|---|---|
| 1 iniziale | processo essenzialmente non controllato |
| 2 gestito/ripetibile | procedure di gestione del prodotto definite; piani di progetto documentati |
| 3 definito | standardizzazione organizzativa; ogni progetto ha un processo adattato da un insieme definito |
| 4 gestito quantitativamente | metodi quantitativi (statistica) per controllare i sottoprocessi |
| 5 in ottimizzazione | le misure guidano il miglioramento continuo; i processi si adattano ai cambiamenti di impresa |
Metodi agili
Manifesto
I metodi agili nascono dal bisogno di rispondere al cambiamento. Principi del manifesto agile:
- priorità massima: soddisfare il cliente con la consegna rapida e continua di software di valore;
- accogliere requisiti che cambiano, anche a sviluppo avanzato: i processi agili sfruttano il cambiamento a vantaggio del cliente;
- persone del business e sviluppatori lavorano insieme ogni giorno;
- consegnare software funzionante frequentemente, da un paio di settimane a un paio di mesi (meglio la scala più corta);
- progetti attorno a individui motivati: dare ambiente e supporto e fidarsi;
- il metodo più efficace per comunicare è la conversazione faccia a faccia;
- software funzionante è la misura principale del progresso;
- sviluppo sostenibile: ritmo costante e indefinito;
- attenzione continua all'eccellenza tecnica e al buon progetto;
- semplicità, l'arte di massimizzare il lavoro non fatto;
- le migliori architetture e requisiti emergono da gruppi che si auto-organizzano;
- a intervalli regolari il gruppo riflette su come migliorare e adegua il proprio comportamento.
Metodi: Extreme Programming (XP), DSDM, Scrum, Feature Driven Development, Crystal, Agile Modeling, Lean Software Development. Non sono cowboy coding: XP e gli altri sono difficili da fare e da gestire, perché richiedono disciplina (test, integrazione, comunicazione).
Parole d'ordine: test first, integrazione continua, programmazione a coppie, proprietà collettiva del codice, coinvolgimento quotidiano del cliente. Un modo di dire cosa sono: un modo diverso di organizzare lo sviluppo, centrato sulla massimizzazione di un flusso costante di valore per il cliente, che usa meccanismi di coordinamento delle uscite e vincoli endogeni.
Extreme Programming (XP)
Valori: semplicità, comunicazione, feedback, coraggio. Spinte: concentrarsi sul valore, flusso costante di attività, nessun difetto.
Dodici pratiche: gioco della pianificazione (planning game), rilasci brevi (small releases), metafora, progetto semplice, sviluppo guidato dai test (Software testing - progettazione dei casi di test e JUnitIl testing esegue il programma con dati artificiali per mostrare che soddisfa i requisiti (validation testing) e per scoprirne i difetti (defect testing), ma può rivelare la presenza di errori e non la loro assenza; il test di sviluppo comprende unit test (singole classi e metodi), test dei componenti (le interfacce) e test di sistema (le interazioni); i casi di test si ricavano con le classi di equivalenza (una per partizione) e i valori limite (ai bordi delle partizioni), più linee guida per sequenze e input anomali; JUnit automatizza i test con @Test, fixture @Before/@After (@BeforeClass/@AfterClass), le asserzioni (assertEquals con atteso per primo), eccezioni attese, timeout e @Ignore; nel TDD il test si scrive prima del codice (red, green, refactor) e i test automatici diventano la suite di regressione; seguono i test di rilascio (black box sui requisiti, prestazioni) e dell'utente (alpha, beta, accettazione).Software testing - progettazione dei casi di test e JUnit →), refactoring, programmazione a coppie, proprietà collettiva del codice, integrazione continua, settimana di 40 ore (sustainable pace), cliente sul posto (on-site customer), standard di codifica.
Ruoli:
| ruolo | che cosa fa |
|---|---|
| cliente | definisce le funzioni e le priorità, scrive le storie (con gli sviluppatori) e i test di accettazione |
| sviluppatore | analisi, progetto, test, codifica e integrazione; stima la difficoltà delle storie (story point); lavora in coppia (due programmatori, una tastiera) e condivide il codice |
| responsabile (manager) | negozia con il cliente l'applicazione delle pratiche agili; aiuta cliente e sviluppatori a formare un gruppo coeso; facilita |
Storie dell'utente (user stories): descrivono le funzioni con brevi storie (simili ai casi d'uso UML), una per scheda. Ogni storia: comprensibile a cliente e sviluppatori, in linguaggio naturale, testabile (il test lo scrive il cliente), indipendente dalle altre quanto possibile, di non più di due settimane di lavoro (altrimenti si spezza). Una scheda ha: titolo (1-3 parole), priorità (importanza per il cliente), story point (stima dello sviluppatore), test di accettazione, descrizione.
Esempio (biblioteca). Titolo: Prenotare un documento. Priorità: 2. Story point: 3. Test di accettazione:
TestPrenotazione. Descrizione: un iscritto con tessera valida può prenotare un documento in prestito; quando una copia torna disponibile riceve un avviso e ha 48 ore per ritirarla; se non la ritira la prenotazione passa al successivo.
Stima: inizialmente su esperienza e intuizione, poi raffinata; per storie grandi o incerte si fa uno spike solution (esperimento di al massimo un giorno). Lo story point è l'unità, collegata a una quantità di sforzo (per esempio una giornata di una coppia); se la storia richiede più di due settimane il cliente la scompone. Test di accettazione: scritti dal cliente dopo ogni storia, almeno uno per storia; solo dopo averli superati tutti si inizia una nuova storia.
Equilibrio dei poteri: il cliente decide che cosa fare e in quale ordine (gli sviluppatori danno il parere, la parola finale è del cliente); gli sviluppatori decidono quanto lavoro serve (il cliente dà il parere, la parola finale è degli sviluppatori). Funziona solo in un clima di fiducia reciproca. La metafora è un modo convenzionale, condiviso da sviluppatori, cliente e manager, di guardare al sistema: una lingua franca.
Tradizionale, cowboy e XP a confronto
| tema | ingegnere tradizionale | cowboy coder | XP |
|---|---|---|---|
| analisi e progetto | devono essere completi prima di scrivere codice | non servono | non servono completi prima di scrivere codice |
| documentazione | completa e pervasiva | nessuna | scrivere codice comprensibile e solo la documentazione necessaria |
| scadenza | lavorare freneticamente (programmare è difficile) | lavorare freneticamente (è divertente) | al massimo 40 ore a settimana, ritmo costante, mente fresca |
| proprietà del codice | il codice è mio e nessuno lo tocca | idem | il codice è del gruppo, tutti lo possono modificare purché i test restino verdi |
| integrazione | alla fine, difficile, protocolli dettagliati | alla fine, "5 minuti" | almeno ogni giorno, così alla fine non ci sono problemi |
| cliente | vede solo versioni finite e pulite | vede solo la versione finale | costantemente esposto al prodotto e al gruppo, possibilmente con un rappresentante in sede |
| codice funzionante | se non è rotto, non toccarlo | anche se è rotto, non toccarlo | anche se non è rotto, fare refactoring con i test |
| pianificazione | pianificare tutto per non cambiare | non pianificare e non cambiare | pianificare ciò che si prevede e prepararsi a cambiare |
| cambiamento | il cambiamento è un male | idem | il cambiamento è umano, prepararsi |
Controllo endogeno ed esogeno
Controllo nel processo contro controllo del processo; endogeno (incorporato nella struttura, per esempio una sbarra a 2,05 m che ferma i veicoli troppo alti, un sensore a infrarossi che accende la luce solo se c'è qualcuno) contro esogeno (aggiunto dall'esterno: un cartello che avvisa "veicoli oltre 2 m non possono passare", una regola scritta). Il controllo endogeno è molto più efficace, ma può essere difficile da ottenere: i metodi agili cercano un processo adattivo con il controllo incorporato (come nell'integrazione continua, che esegue i test a ogni modifica, e nel cliente sul posto) invece che aggiunto (un piano e regole scritte). È uno dei principi del lean management (controllo visivo e altro).
Scrum
Definizione. Scrum è un framework agile che organizza il lavoro in iterazioni brevi a durata fissa (gli sprint) con ruoli, eventi e artefatti precisi. Il nome viene dalla mischia del rugby: tutta la squadra spinge insieme verso lo stesso obiettivo.
Valori: coraggio (fare la cosa giusta e affrontare i problemi difficili), concentrazione (focus: sul lavoro dello sprint e sugli obiettivi del team), impegno (commitment: ciascuno si impegna personalmente per gli obiettivi), rispetto (tra persone capaci e indipendenti), apertura (openness: il team e gli stakeholder sono trasparenti su lavoro e sfide).
Ruoli
| ruolo | responsabilità |
|---|---|
| Product Owner (PO) | massimizza il valore del prodotto: tiene e ordina per priorità il product backlog, decide cosa si fa prima |
| Scrum Master | responsabile che il team segua Scrum e rimuova gli impedimenti; facilita, non comanda |
| Team (di sviluppo) | auto-organizzato e multifunzionale, realizza l'incremento nello sprint |
Il ciclo (modello Scrum)
- Il Product Backlog (elenco ordinato di tutto ciò che si vuole nel prodotto: storie, difetti, miglioramenti) alimenta lo sprint.
- Sprint planning (riunione di pianificazione): il team sceglie quali voci del product backlog realizzare nello sprint e le scompone in compiti: nasce lo Sprint Backlog.
- Sprint: durata fissa (di solito da una a quattro settimane); il team lavora con il daily scrum: riunione brevissima in piedi (circa 15 minuti, "stand-up not sit-down"), in cui ognuno dice cosa ha fatto, cosa farà e che ostacoli ha.
- Sprint review: alla fine si mostra l'incremento (funzioni complete, potenzialmente rilasciabili) agli stakeholder e si raccoglie il feedback, che aggiorna il product backlog.
- Sprint retrospective: il team riflette sul processo (che cosa è andato bene, che cosa migliorare) e decide miglioramenti per lo sprint seguente.
| artefatto | contenuto |
|---|---|
| Product Backlog | tutto ciò che serve al prodotto, ordinato per priorità dal PO |
| Sprint Backlog | le voci scelte per lo sprint più il piano per realizzarle |
| Incremento | il risultato dello sprint, utilizzabile |
| Burndown chart | lavoro rimasto nel tempo: si vede se lo sprint è in linea |
Pratiche (dalle slide)
- Task board (task board): la lavagna con colonne (da fare, in corso, fatto) e foglietti: il progresso è visibile a tutti.
- Retrospective: gruppo che discute apertamente di ciò che non va (e lo corregge).
- Planning poker: stima di gruppo delle storie: ogni membro sceglie in segreto una carta con la sequenza (0, 1/2, 1, 2, 3, 5, 8, 13, 20, 40, 100, "?", "pausa caffè") e si scoprono insieme (c'è sempre qualcuno che mostra la carta troppo presto); se i numeri differiscono molto chi ha dato il valore più alto e più basso spiega le sue ragioni e si rivota. La scala non lineare riflette l'incertezza delle stime grandi. Più giocatori danno più punti di vista.
- Metriche: si usano per migliorare, non per controllare le persone.
- Daily scrum: riunione in piedi, breve.
Velocità e pianificazione. La velocità è la somma degli story point completati in uno sprint; la media degli sprint passati serve a prevedere quanto si potrà prendere nel prossimo, senza promesse non fondate. Esempio: in tre sprint il team ha completato 18, 22 e 20 punti, quindi la velocità media è 20; il product backlog ha storie da 5, 8, 3, 13, 5, 2 punti (totale 36); nel prossimo sprint si scelgono le più prioritarie per un massimo di circa 20 punti (per esempio 8 + 5 + 3 + 2 = 18), e il resto va agli sprint successivi (circa due sprint in totale).
Scrum e XP
Scrum e XP sono complementari. Scrum copre l'organizzazione (product backlog, sprint backlog, daily scrum, sprint planning, retrospective, review, burndown chart, ruoli di PO e Scrum Master); XP copre le pratiche tecniche (TDD, programmazione a coppie, refactoring, standard di codifica, integrazione continua, progetto semplice, metafora, rilasci piccoli, proprietà collettiva); alcune pratiche sono in comune (team, cliente sul posto, planning game simile allo sprint planning, test del cliente). Molti gruppi usano Scrum per organizzare il lavoro e le pratiche di XP per realizzarlo.
Come scegliere il processo
| fattore | tende al plan-driven | tende all'agile |
|---|---|---|
| requisiti | stabili e ben capiti | incerti o in cambiamento |
| criticità | sistemi critici, vincoli normativi, certificazione | prodotti commerciali, tempi di mercato |
| dimensione e distribuzione | molti gruppi, in sedi diverse | gruppi piccoli e vicini |
| contratto | specifica completa nel contratto | contratto per incrementi, cliente nel gruppo |
| documentazione richiesta | molta | minima |
| tipo di sistema | grande sistema di lunga vita | prodotto che evolve in fretta |
Una scelta pratica per un progetto d'esame (gruppo piccolo, requisiti dati, tempo breve): iterativo con consegne piccole, TDD per le parti con logica, requisiti scritti brevemente ma con identificatori per poter collegare i test ai requisiti, e retrospettiva a ogni iterazione.
Domande d'esame
1. Confrontare cascata e sviluppo incrementale: vantaggi, svantaggi e quando si usa ciascuno. Traccia. Cascata: fasi distinte in sequenza, ottimo coordinamento e mappa chiara per sistemi grandi o critici con requisiti stabili; il cambiamento è difficile e costoso e il feedback arriva tardi. Incrementale: specifica, sviluppo e validazione si sovrappongono, il cambiamento costa meno e il cliente vede e usa presto; ma il processo è poco visibile e la struttura si degrada senza refactoring.
2. Quali sono ruoli, eventi e artefatti di Scrum? Come si usa il planning poker? Traccia. Ruoli: Product Owner, Scrum Master, team. Eventi: sprint planning, daily scrum, sprint review, retrospective. Artefatti: product backlog, sprint backlog, incremento (burndown). Planning poker: ognuno sceglie in segreto una carta (0, 1/2, 1, 2, 3, 5, 8, 13, 20, 40, 100), si scoprono insieme, chi è agli estremi spiega e si rivota fino alla convergenza.
3. Confrontare l'approccio tradizionale e XP su documentazione, integrazione e proprietà del codice. Che cosa significa controllo endogeno? Traccia. Tradizionale: documentazione completa, integrazione alla fine, codice individuale. XP: codice comprensibile e solo la documentazione necessaria, integrazione almeno giornaliera, codice di proprietà collettiva con test verdi. Endogeno: il controllo è parte della struttura del processo (integrazione continua, cliente sul posto), a differenza dell'esogeno aggiunto dall'esterno (regole scritte, piani).
Versione ripasso
- Processo software: insieme strutturato di attività: specifica, progetto e realizzazione, validazione, evoluzione. Descrizione = attività, prodotti, ruoli, condizioni pre e post. Plan-driven: tutto pianificato in anticipo, progresso misurato sul piano. Agile: pianificazione incrementale, cambiamento accolto. Nella pratica si mescolano: non c'è un processo giusto.
- Cascata: requisiti progetto realizzazione e unit test integrazione e test di sistema operazione e manutenzione. Problema: il cambiamento (partizionamento rigido). Adatta: requisiti capiti e stabili, grandi sistemi in più sedi, safety critical (mappa comune).
- Modello a V: accettazione requisiti, sistema analisi, integrazione progetto, unit realizzazione.
- Incrementale: specifica, sviluppo e validazione sovrapposti. Pro: cambio meno costoso, feedback, consegna presto. Contro: processo poco visibile, la struttura si degrada senza refactoring.
- Integrazione e configurazione (riuso, COTS): requisiti, scoperta e valutazione, raffinamento dei requisiti, configurazione, adattamento e integrazione. Pro: meno costi e rischi, consegna veloce. Contro: compromessi sui requisiti, meno controllo.
- Cambiamento: anticipare (prototipi: concetti e opzioni, da gettare, tralasciano gli NFR) e tollerare (consegna incrementale: priorità alte nei primi incrementi, requisiti dell'incremento in corso congelati). Sviluppo incrementale = valutazione per incremento (agile); consegna incrementale = incremento usabile dagli utenti. Problema: risorse di base comuni, contratti con specifica completa.
- Miglioramento: misura (baseline) analisi cambiamento; guidano gli obiettivi, non le misure. Maturità SEI: 1 iniziale, 2 gestito, 3 definito, 4 gestito quantitativamente, 5 in ottimizzazione.
- Manifesto agile: cliente soddisfatto con consegne continue; accogliere il cambiamento; business e sviluppatori insieme ogni giorno; software funzionante frequente (settimane-mesi) e come misura del progresso; individui motivati; conversazione faccia a faccia; ritmo sostenibile; eccellenza tecnica; semplicità (lavoro non fatto); gruppi auto-organizzati; riflessione periodica. Non è cowboy coding.
- XP: valori = semplicità, comunicazione, feedback, coraggio. 12 pratiche: planning game, rilasci brevi, metafora, progetto semplice, TDD, refactoring, programmazione a coppie, proprietà collettiva, integrazione continua, 40 ore, cliente sul posto, standard di codifica. Ruoli: cliente (funzioni, priorità, storie, test di accettazione), sviluppatore (stima in story point, coppie), responsabile.
- Storia dell'utente: comprensibile, testabile, indipendente, al massimo due settimane; scheda con titolo, priorità, story point, test di accettazione, descrizione. Spike (al massimo un giorno) per stime incerte. Almeno un test di accettazione per storia, superati tutti prima di una nuova storia. Il cliente decide cosa e in che ordine, gli sviluppatori quanto lavoro: serve fiducia.
| tema | tradizionale | cowboy | XP |
|---|---|---|---|
| analisi e progetto | completi prima del codice | non servono | non completi prima del codice |
| documentazione | completa | nessuna | codice comprensibile, solo il necessario |
| scadenza | lavoro frenetico | lavoro frenetico | 40 ore, ritmo costante |
| codice | mio | mio | del gruppo, test verdi |
| integrazione | alla fine | alla fine | almeno ogni giorno |
| cliente | solo versioni finite | solo la finale | sempre coinvolto |
| cambiamento | male | male | umano, prepararsi |
- Controllo endogeno (nella struttura: sbarra a 2,05 m, integrazione continua, cliente sul posto) più efficace dell'esogeno (cartelli, regole, piani), ma più difficile da ottenere. Principio del lean management.
- Scrum: framework a sprint di durata fissa (1-4 settimane). Valori: coraggio, concentrazione, impegno, rispetto, apertura. Ruoli: Product Owner (valore, ordina il product backlog), Scrum Master (facilita, rimuove impedimenti), Team (auto-organizzato). Eventi: sprint planning sprint (con daily scrum, ~15 minuti in piedi: che ho fatto, che farò, ostacoli) sprint review (mostra l'incremento, feedback) retrospective (migliorare il processo). Artefatti: product backlog, sprint backlog, incremento, burndown chart.
- Pratiche: task board (da fare, in corso, fatto); planning poker con carte 0, 1/2, 1, 2, 3, 5, 8, 13, 20, 40, 100, ?, pausa caffè (si scoprono insieme, estremi spiegano, si rivota; scala non lineare per l'incertezza); metriche per migliorare, non per controllare.
- Velocità = story point completati per sprint; media degli ultimi per prevedere (18, 22, 20 20; backlog 5, 8, 3, 13, 5, 2 = 36: sprint con 8 + 5 + 3 + 2 = 18, il resto dopo).
- Scrum e XP: complementari; Scrum = organizzazione, XP = pratiche tecniche (TDD, coppie, refactoring, integrazione continua, standard).
| Scrum | XP |
|---|---|
| product backlog, sprint backlog | storie dell'utente, story point |
| sprint planning, daily scrum, review, retrospective | planning game, rilasci piccoli |
| Product Owner, Scrum Master, team | cliente, sviluppatore, responsabile |
| burndown chart | integrazione continua, ritmo sostenibile |
| (non prescrive pratiche tecniche) | TDD, coppie, refactoring, standard di codifica, metafora |
- Esempio di storia (biblioteca): Prenotare un documento, priorità 2, 3 story point, test di accettazione
TestPrenotazione: l'iscritto prenota, riceve l'avviso al ritorno di una copia e ha 48 ore per ritirarla, poi passa al successivo. - Prototipo, in sintesi: versione iniziale per provare requisiti, interfaccia e opzioni; benefici: usabilità, aderenza ai bisogni, progetto e manutenibilità migliori; veloce, senza controllo errori né NFR; da gettare (nessuna documentazione, struttura degradata).
- Scegliere: plan-driven per requisiti stabili, sistemi critici, grandi gruppi distribuiti, contratto con specifica; agile per requisiti incerti, mercato, gruppi piccoli, cliente nel gruppo.
- Errori tipici: credere che agile significhi nessuna documentazione o nessun piano; usare la cascata con requisiti instabili; consegnare un prototipo come prodotto; confondere sviluppo e consegna incrementale; misurare le persone con la velocità; sprint senza retrospettiva; storie troppo grandi e non testabili.