Metodologie di sviluppo Agile Software Development – 5 Parte – Extreme Programming

Extreme Programming

In questa particolare Metodologia Agile, il principio fondamentale è quello che ogni processo deve essere eseguito in maniera estrema: la revisione del codice andrà eseguita costantemente così come i test d’integrazione. L’approccio seguito nelle implementazioni è di tipo test-driven ovvero basato sui test: la generazione del codice vero e proprio avviene subito dopo aver implementato i test e gli unit test.

La metodologia Extreme è adatta per realtà di sviluppo medio-piccole. Fondamentale è la comunicazione nel team e l’ambiente di lavoro deve favorirne la collaborazione (es. open space).

La metodologia Extreme si basa su sei fasi distinte:

  • Exploration: il committente definisce quali dovranno essere i requisiti che il sistema dovrà avere. Al termine di questa fase verranno prodotti una serie di documenti definiti user story. Questi documenti serviranno agli sviluppatori per stimare la fase di implementazione (in termini di costi e ore). Viene creato un prototipo del sistema da realizzare. Questa fase potrebbe durare qualche settimana o qualche mese.
  • Planning: si definiscono le priorità delle user story e verranno definite le funzionalità che dovranno essere implementate nella prima versione da realizzare. Terminata questa fase, verranno definiti i tempi necessari alla produzione della prima release del software, ed i tempi necessari all’implementazione.
  • Iteration of releases: questa fase è quella interattiva di XP. La fase di planning viene esplosa in piccola parti che vengono implementate in cicli che solitamente durano qualche settimana ciascuno. Vengono scelte le user story da implementare e i test che devono essere condotti per verificarne la corretta implementazione. Al termine di ogni iterazione vengono eseguiti i test, per verificare la corretta implementazione del codice. Se qualche modulo non superasse il test, verrà corretto ed implementato nelle iterazioni successive. Questa fase è sicuramente molto delicata: si potrebbero verificare delle modifiche ai requisiti da realizzare. Tali modifiche si traducono nella variazione delle user-story, fin qui definite.
  • Productization: in questa fase vengono condotti ulteriori test sulla prima release del prodotto, che viene cosi’ rilasciata al cliente finale. Il sistema rilasciato solitamente è un sistema funzionante che presenta però una serie limitata di funzionalità che sono state preventivamente definite con il cliente finale.
  • Manteinance: in questa fase, il prodotto è già funzionante e distruito al cliente finale (vedi fase precedente), mentre una parte del team si occupa di implementare le parti mancanti integrandole, una parte del team viene utilizzata per la correzione di eventuali bachi. Si potrebbero rendere necessarie operazioni di revisione del codice introducendo eventuali altri requisiti (sotto forma di user story).
  • Death: se tutte le user story sono state implementate ed il cliente non necessita ulteriori fasi di implementazione, viene prodotta una breve documentazione del funzionamento generale del prodotto finale.

Di seguito i ruoli consigliati :

  • Programmer: si occupa fondamentalmente dello sviluppo del codice e delle test unit.
  • Customer: è l’utilizzatore finale del prodotto software (che potrebbe non essere il committente). Il customer scrive le user story ed i test funzionali. Fornisce anche i feedback relativi alla raggiungimento dei requisiti.
  • Tester: in collaborazione con il customer (o con il committente) definisce i test funzionali.
  • Tracker: ha il compito di fornire il feedback di tutte le fasi del processo XP. Tiene traccia delle risorse, dei requisiti e degli obiettivi raggiunti.
  • Coach: E’ il responsabile dell’intero progetto XP e deve correggere eventuali digressioni sullo sviluppo da parte del Team.
  • Consultant: E’ un esperto esterno al team, che ha il compito di risolvere eventuali problemi implementativi.
  • Manager: gestisce le decisioni strategiche per il team, verifcandone i feedback, gli stati di avanzamento e i requisiti.