Waterfall, Incrementale o Agile?

Questo articolo fa parte di una serie di mie riflessioni sull’innovazione technology-driven, cominciata qui.

Le metodologia di sviluppo progettuale che più si sono affermate nel tempo sono, in alternativa fra loro, Waterfall, Incrementale o Agile.

Secondo wikipedia, “In ingegneria del software, il modello a cascata (waterfall model in inglese) è il più tradizionale modello di ciclo di vita del software. Secondo questo modello, il processo di realizzazione del software è strutturato in una sequenza lineare di fasi o passi, sequenziali; ogni fase produce un output che è usato come input per la fase successiva; ogni fase del processo viene documentata.

Questo modello riprende la sequenza di passi tipica della produzione manifatturiera, e fu il primo a essere applicato a partire dagli anni ‘70 quando lo sviluppo del software cominciò a essere concepito come attività industriale.

Waterfall

Il modello è stato progressivamente abbandonato dall’industria del software, ma rimane un importante riferimento teorico.”

La critica principale che si muove a questa metodologia è che qualunque errore concettuale si faccia nelle fasi iniziali, ad esempio nell’analisi dei requisiti, si deve attendere la fase di rilascio per avere un feedback dagli utenti ed è necessario ripercorrere tutto il ciclo per correggerlo. Questo metodo è inoltre troppo rigido per i linguaggi di programmazione che si sono affermati a partire dagli anni ‘80, con i quali non si tende più a sviluppare un’unica procedura che prevede dalla A alla Z tutte le funzioni, ma sistemi complessi di service providers e service users che dialogano sulla base di messaggi.

Ovviamente queste considerazioni si traslano anche in ambienti in cui lo sviluppo del software è solo uno dei componenti del progetto di innovazione.

Incrementale

La metodologia di tipo incrementale parte dai punti di debolezza della metodologia a cascata e lavora sul concetto di rischio, ovvero cerca di identificare in fase iniziale l’insieme di circostanze avverse che possono pregiudicare il processo di sviluppo e la qualità del software. Sempre secondo wikipedia

“La caratteristica principale del modello è quella di essere ciclico e non lineare, ogni ciclo di spirale si compone di quattro fasi, il raggio rappresenta il costo accumulato e la dimensione angolare il progresso nel processo. La prima fase identifica gli obiettivi e le alternative, poi le alternative si valutano nella seconda fase in cui vengono evidenziate le potenziali aree di rischio. La terza fase consiste nello sviluppo e nella verifica del prodotto, infine la quarta fase consiste nella revisione dei risultati delle tre fasi precedenti e pianificazione dell’iterazione successiva.

Il modello a spirale è un modello di processo del software che abbina la natura iterativa della prototipazione e gli aspetti controllati e sistematici del modello sequenziale lineare, consentendo un rapido sviluppo di versioni via via più complete del software, fino ad arrivare ad un prototipo operativo, sulla base del quale validare con l’utente il soddisfacimento dei requisiti e procedere all’industrializazione.

Il modello a spirale è utilizzato per progetti di grandi dimensioni poiché permette di raffinare ad ogni giro il materiale precedentemente elaborato ed approvato dal cliente; all’inizio probabilmente sarà sola documentazione cartacea contenente gli intenti e lo scopo finale, poi si costruiranno, se ritenuti opportuni, dei prototipi da verificare e validare, e così via fino a giungere al prodotto conclusivo.”

Sebbene più flessibile e meno rischiosa della precedente, questa metodologia mantiene la caratteristica di non consentire alcun rilascio effettivo fino alla conclusione del progetto.

A superare questo vincolo mirano le metodologie cosiddette Agile.

Proseguendo con wikipedia, “il termine Metodologie Agili fu coniato nel 2001 quando venne formulato l’Agile Manifesto.

La gran parte dei metodi agili tenta di ridurre il rischio di fallimento sviluppando il software in finestre di tempo limitate, chiamate iterazioni che, in genere, durano qualche settimana. Ogni iterazione è un piccolo progetto a sé stante e deve contenere tutto ciò che è necessario per rilasciare un piccolo incremento nelle funzionalità del software: pianificazione, analisi dei requisiti, progetto, implementazione, test e documentazione ….

I principi su cui si basa una metodologia leggera che segua i punti indicati dall’Agile Manifesto, sono solo quattro:

  1. le persone e le interazioni sono più importanti dei processi e degli strumenti (ossia le relazioni e la comunicazione tra gli attori di un progetto software sono la miglior risorsa del progetto);
  2. è più importante avere software funzionante che documentazione (bisogna rilasciare nuove versioni del software ad intervalli frequenti, e bisogna mantenere il codice semplice e avanzato tecnicamente, riducendo la documentazione al minimo indispensabile);
  3. bisogna collaborare con i clienti oltre che rispettare il contratto (la collaborazione diretta offre risultati migliori dei rapporti contrattuali);
  4. bisogna essere pronti a rispondere ai cambiamenti oltre che aderire alla pianificazione (quindi il team di sviluppo dovrebbe essere pronto, in ogni momento, a modificare le priorità di lavoro nel rispetto dell’obiettivo finale).

In sintesi, l’Agile Manifesto, sottolinea l’importanza dei su citati principi fermo restando il valore di processi, strumenti, documentazione, contratti e pianificazione.”

Un modo efficace per capire le differenze fondamentali fra i due approcci metodologici Waterfall e Agile, è pensare ad un progetto come ad un triangolo con ai vertici i vincoli di tempi/costi e obiettivi da raggiungere (Schedule, Cost e Scope in inglese).

Le metodologie tradizionali, fissano uno scope e poi stimano i tempi e costi necessari per raggiungerlo.

Agile vs waterfall

Le metodologie Agile, fissano un tempo ed un ammontare di risorse, ed in base a questo definiscono lo scope.

Prosegue qui

disclaimer

Annunci

2 Comments

  1. Rosa Avallone

    Salve Dr. Tauro

    mi chiamo Rosa Avallone e sono una studentessa di informatica.

    Ho trovato molto interessante un articolo del suo blog sui modelli di processo software:

    WATERFALL, INCREMENTALE O AGILE?

    Se posso, avrei qualche domanda da farle:

    1. Nel modello waterfall, al termine di ogni fase viene prodotto un milestone con relative deliverable? Un milestone scandisce la fine di una fase sottoponendo a controllo di qualità i vari deliverable prodotti in quella fase? Questo controllo di qualità dei deliverable è diverso dalle attività di verifica e convalida prevista in ogni fase?

    2. I concetti di milestone e deliverable si applicano a tutti i tipi di processo e non solo al modello waterfall?

    3. Il modello a spirale è iterativo o incrementale? (Alcuni testi lo definiscono un meta-modello)

    4. Nell’ultimo ciclo di spirale, la fase 3 ( Detailed design, Code, Integration, Test, Implementation) prevede un ciclo produttivo di tipo waterfall? Il sistema, nell’ultimo ciclo, viene sviluppato completamente in modo lineare?

    5. I prototipi realizzati in ogni ciclo del modello a spirale sono prototipi throw-away?

    6. Per studiare il rischio ad ogni iterazione viene costruito un prototipo. Tale prototipo viene scartato una volta studiato un certo rischio, oppure viene fatto evolvere ad ogni iterazione ed utilizzato per lo studio di eventuali rischi nelle iterazioni successive?

    7. Con il modello a spirale l’utente deve attende la fine dell’intero processo per avere il sistema, similmente al modello waterfall?

    8. In un modello a spirale il numero di cicli non è fisso, ma dipende dal progetto. Giusto?

    9. Ogni ciclo di spirale corrisponde ad una fase di produzione del software (fattibilità, requisiti, progettazione, implementazione, test). Giusto?

    10. Lo stesso ciclo di spirale può essere eseguito più volte? Nel senso che si può, ad esempio, tornare più volte sui requisiti prima di passare al ciclo della progettazione?

    Grazie
    Cordiali Saluti

    Mi piace

    1. Luigia Tauro

      Provo a risponderle in via schematica:
      1. Nel modello waterfall, al termine di ogni fase viene prodotto un milestone con relative deliverable? Un milestone scandisce la fine di una fase sottoponendo a controllo di qualità i vari deliverable prodotti in quella fase? Questo controllo di qualità dei deliverable è diverso dalle attività di verifica e convalida prevista in ogni fase?
      Le milestone sono momenti di verifica, che vanno previsti durante ogni fase, per controllare l’andamento delle attività. A seconda della durata e della complessità di ogni fase, si decide il numero di milestone da inserire: abbastanza da poter intercettare ritardi e deviazioni; senza eccedere per non dedicare troppo tempo all’attività di controllo

      2. I concetti di milestone e deliverable si applicano a tutti i tipi di processo e non solo al modello waterfall?
      Si, per waterfall e incrementale. Nelle metodologie agili il ciclo di sviluppo è molto ridotto nel tempo e si utilizzano altri meccanismi di verifica.

      3. Il modello a spirale è iterativo o incrementale? (Alcuni testi lo definiscono un meta-modello)
      A mio avviso è iterativo, non incrementale, in quanto il prodotto realmente utilizzabile si ottiene solo alla fine.

      4. Nell’ultimo ciclo di spirale, la fase 3 ( Detailed design, Code, Integration, Test, Implementation) prevede un ciclo produttivo di tipo waterfall? Il sistema, nell’ultimo ciclo, viene sviluppato completamente in modo lineare?
      Dipende da come sono stati realizzati i proptotipi: idealmente si dovrebbe riutilizzare e raffinare in ogni ciclo il prototipo del ciclo precedente.

      5. I prototipi realizzati in ogni ciclo del modello a spirale sono prototipi throw-away? Vedi sopra.

      6. Per studiare il rischio ad ogni iterazione viene costruito un prototipo. Tale prototipo viene scartato una volta studiato un certo rischio, oppure viene fatto evolvere ad ogni iterazione ed utilizzato per lo studio di eventuali rischi nelle iterazioni successive? Vedi sopra

      7. Con il modello a spirale l’utente deve attende la fine dell’intero processo per avere il sistema, similmente al modello waterfall?
      Si

      8. In un modello a spirale il numero di cicli non è fisso, ma dipende dal progetto. Giusto?
      Ci sono almeno i 4 cicli di base presentati nell’articolo.

      9. Ogni ciclo di spirale corrisponde ad una fase di produzione del software (fattibilità, requisiti, progettazione, implementazione, test). Giusto?
      Corretto, tuttavia ad ogni fase viene realizzato un prototipo, che potrebbe richiedere progettazione e implementazione.

      10. Lo stesso ciclo di spirale può essere eseguito più volte? Nel senso che si può, ad esempio, tornare più volte sui requisiti prima di passare al ciclo della progettazione?
      Si

      Mi piace

Dimmi la tua ...

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...