Passa al contenuto principale

Metodo Agile

Metodologia agile

È una locuzione utilizzata per indicare un metodo di sviluppo di un prodotto e/o servizio adottando un approccio incrementale e iterativo, ha avuto origine dal ASD (Agile Software Development) per lo sviluppo di software (ingegneria del software) ma i suoi principi, pubblicati (Kent Beck, Robert C. Martin, Martin Fowler e altri) dall’interno del Manifesto per lo sviluppo agile del software (Manifesto for Agile Software Development) e i suoi principi possono essere applicati ad altre attività industriali.

Questo è meno strutturato e focalizzato rispetto al waterfall model (modello a cascata) che si pone l’obiettivo di consegnare al cliente, in tempi brevi e frequentemente (early delivery / frequent delivery) mentre la metodologia agile si basa sul lavoro di piccoli team di sviluppo (poli-funzionali e auto-organizzati) che procedono in modo iterativo (contenente o indicante ripetizione) e incrementale, secondo l’ingegneria del software, con una pianificazione adattiva e il coinvolgimento diretto e continuo del cliente in tutte le fasi del processo di sviluppo.

Il coinvolgimento del cliente in tutte le fasi del processo di sviluppo consente di ridurre il rischio di fallimento perché il prodotto e/o servizio viene sviluppato in piccoli progetti iterativi (finestre di tempo limitate) che contengono tutto ciò che è necessario per procedere alla fase successiva che, secondo l’ingegneria del software, sono:

  • pianificazione (planning);
  • analisi dei requisiti;
  • progettazione;
  • implementazione;
  • test (o prove) e documentazione;
  • valutazione.

La metodologia agile preferisce una comunicazione in tempo reale a quella documentale e il team agile è composto dai progettisti (o programmatori) ed i loro clienti (ad esempio product manager, business analysts, ecc.).

La metodologia agile è stata formalizzata dall’Agile Alliance (Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham - inventore di Wiki, 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) pubblicando (2001) il Manifesto per lo sviluppo agile del software.

Gli obiettivi che si era prefissato l’Agile Alliance era la piena soddisfazione del cliente, l’adempimento contrattuale, l’abbattimento dei costi e dei tempi di sviluppo del software aumentandone la qualità definendone:

  • Valori: su cui si basa una metodologia agile:
    • individui;
    • interazioni;
    • software funzionante;
    • collaborazione col cliente;
    • rispondere al cambiamento;
  • Pratiche: quelle applicabili e dipendono essenzialmente dalle necessità dell’azienda e dall’approccio del project manager (benefici e conseguenze) come ad esempio:
    • automazione: utilizzare strumenti per l’automatizzare per il maggior numero possibile di attività collaterali;
    • coinvolgimento del cliente;
    • comunicazione stretta (comunicazione interpersonale);
    • consegne frequenti;
    • cultura di Team (One-team culture);
    • facilitated Workshop;
    • formazione di una squadra e Proprietà del codice;
    • gerarchia;
    • iterative development;
    • miglioramento della conoscenza;
    • modellizzazione;
    • pair programming (coppie di programmatori che si alternano);
    • prioritization (priorità degli obiettivi);
    • progettazione e documentazione;
    • refactoring (ristrutturazione);
    • reverse engineering;
    • semplicità;
    • test (ad esempio il Rapid Testing o il Pair Testing):
      • test funzionali;
      • test unitari;
      • test indiretti;
    • test Driven Development;
    • timeboxing (suddividere il progetto in intervalli temporali ben precisi);
    • versioning (controllo della versione).

Le metodologie agili prevedono un framework iterativo e incrementale e un forte scambio di informazioni e di pareri tra l’azienda e il committente; sulla base di questo presupposto sono stati sviluppate altre metodologie e framework agili:

  • AUP (Agile Unified Process): è un approccio allo sviluppo di applicazioni software che utilizza tecniche e concetti agili rimanendo fedele al processo RUP (Rational Unified Process);
  • Adaptive Software Development: è composta da un insieme di regole per lo sviluppo di software ed inserite nel Agile Project Management (approccio alla gestione dei progetti basato su principi iterativi e incrementali, con l’obiettivo di promuovere la collaborazione, la flessibilità e la creazione continua di valore per il cliente) secondo i seguenti concetti base sono tre:
    • Leadership-Collaboration Management;
    • From Processes to Pattern;
    • Peering into the Future;
  • Crystal: famiglia di metodologie agili che parte dall’osservazione che seguire delle regole rigide è difficile per le persone, le modalità lavorative non organizzate sono quelle più funzionali;
  • DSDM (Dynamic Systems Development Method): insieme di framework per definire e distribuire uno standard industriale per il framework RAD (Rapid Application Development);
  • XP (eXtreme Programming): è una metodologia di sviluppo del software mirata a migliorare la qualità del codice, la responsività al cambiamento dei requisiti del cliente (cicli brevi con pubblicazioni frequenti), la produttività e introdurre punti di controllo nei quali i nuovi requisiti possono essere adottati;
  • Feature Driven Development: è una metodologia agile che propone una robusta fase di analisi e progettazione integrata con un modello di sviluppo agile;
  • Lean software development (lean production): è un sistema di produzione basato sui principi lean, quindi, volto alla riduzione gli sprechi fino a eliminarli mirando alla qualità totale;
  • Scrum: è un framework agile per la gestione del ciclo di sviluppo del software, iterativo ed incrementale, concepito per gestire progetti e prodotti software o applicazioni di sviluppo.