Extreme Programming (XP)

1. Introduzione

La programmazione software rappresenta una delle attività più complesse dello scenario informatico.

Da sempre la realizzazione di software affidabile e funzionale è stato uno degli obiettivi maggiormente inseguiti delle più grandi aziende del panorama ICT internazionale, e per ben riuscire in questo scopo sono state elaborate moltissime teorie, scritti migliaia di testi, ed è risultato necessario persino creare una nuova branca dell’ingegneria, appunto l’ingegneria del software.

Da questo lavoro, tutte le problematiche dello sviluppo sono state apparentemente affrontate, portando alla definizione di diverse metodologie di sviluppo software. Tuttavia, ad oggi, non si può dire che esista una metodologia più completa o affidabile delle altre, tanto che molte di esse sono state dimenticate col passare del tempo.

Negli ultimi anni una nuova metodologia sembra essersi largamente diffusa, evolvendo al punto tale da potersi definire matura. Stiamo parlando della metodologia che va sotto il nome di Extreme Programming, e nota anche come XP.

Elaborata da Kent Beck, Ward Cunningham e da Ron Jeffries verso la fine degli anni 90, sta diffondendosi tramite la rete, maturando sempre più ampi consensi, grazie alla sua natura estremamente dinamica.

Questa metodologia rientra nelle cosiddette metodologie agili, dove con questo termine si classificano quelle metodologie di sviluppo che hanno alla loro base una elevata reattività ai cambiamenti di requisiti, e un continuo scambio di informazioni tra il cliente e il committente, per ottenere un risultato meglio aderente alle sue reali necessità.

2. Principi e regole fondamentali

Un insieme di regole ben preciso delinea le caratteristiche della metodologia in questione.
Proviamo ad accorparle per riassumerle come segue :

  • la progettazione avviene con il supporto del cliente (o di un suo referente) che contribuisce in maniera continuativa allo sviluppo, verificando e testando, che il prodotto rispecchi le necessità espresse; se il cliente è disponibile, si possono stabilire degli incontri periodici, magari settimanali, per stabilire lo stato di avanzamento dei lavori;
  • progettare entità modulari e minime; in questo modo si potranno effettuare refactoring continui dei moduli senza coinvolgere le altre parti che la usano, integrando continuamente i cambiamenti che intervengono e se necessario riscrivendo anche parti fondamentali del modulo;
  • test continui sul codice, su ogni unità o modulo realizzato, in modo da intervenire prima possibile per sistemare i bachi trovati;
  • il gruppo di lavoro deve convivere in uno spazio comune (open workspace) per poter meglio interagire; ognuno può contribuire alla stesura di codice, su qualunque parte del progetto (proprietà collettiva del codice); la programmazione va fatta rigorosamente a coppie, con intervalli stabiliti di tempo in cui alternarsi alla tastiera, se possibile formando coppie con livelli di skill differenti o non equivalenti; lavorare non più di 40 ore settimanali (e non meno possibilmente); tutti devono seguire delle linee comuni e degli standard di scrittura del codice, per consentire l’interazione di persone diverse sulla stessa porzione di codice;
  • ogni mattina va fatta una riunione per stabilire cosa si è fatto rispetto al giorno prima, verificare difficoltà incontrate e decidere cosa si farà durante la giornata; queste riunioni sono caratterizzate dal fatto che coinvolgono tutto il gruppo, durano poco (5-10 minuti al massimo) e si svolgono in piedi (non ci devono essere sedie), per evitare di rilassarsi (ciò consente di andare dritti al punto);
  • la documentazione tecnica deve essere ridotta e concreta; per il resto delle informazioni si fa riferimento al codice che ovviamente deve essere ben dettagliato e commentato;

Ci sono tante altre sfaccettature di queste “regole” che per il momento non è necessario dettagliare.

3. Ambiti applicativi

La metodologia trova il suo miglior terreno di applicazione in gruppi piccoli, composti al massimo da una decina di persone, di cui alcuni con uno skill notevole, in cui esista una figura carismatica del project manager che porti avanti i fili di questa trama; inoltre il gruppo deve elaborare se non tutta l’intera soluzione da realizzare, quantomeno un blocco “chiuso” che non abbia necessità di parti esterne realizzate da altri gruppi o aziende.

4. Vantaggi e svantaggi della metodologia

La parola d’ordine è produttività. E con questa metodologia, la produttività è certamente elevata. Tuttavia non è garantito il risultato, molto è legato alla figura del project leader e alla sua personalità.

La metodologia resta comunque una valida alternativa su progetti dinamici, in cui si evidenzi da subito che i requisiti sono o non ben definiti o suscettibili di numerose variazioni in corso d’opera.
E’ applicabile avendo a disposizione risorse dinamiche e motivate.

Per la parte relativa alla programmazione a coppie, è stato stimato un sostanziale aumento dei tempi di sviluppo, circa il 40%, quando sul progetto vi siano risorse con skill bassi. Questo se da un lato può comportare uno svantaggio non indifferente, dall’altro lato può risultare utile in progetti futuri, in cui la risorsa poco esperta, lavorando a coppie con una esperta, riesca velocemente a colmare buona parte del gap, acquisendo esperienza sul campo, e studiando/assimilando le tecniche della persona più esperta, in una sorta di full-immersion-training-on-the-job (passatemi il termine).

Inoltre questo divario di tempo sullo sviluppo viene in parte riassorbito dall’aumentata produttività del team, rispetto all’utilizzo delle classiche metodologie non-agili (metodologie pesanti e metodologie iterative).

5. Strumenti per la gestione

Come detto più volte, l’Extreme Programming è una metodologia. Questo vuol dire che non si lega ad un prodotto o un insieme di prodotti specifici. Esistono tuttavia in commercio soluzioni che consentono la gestione completa del ciclo di sviluppo software con XP.

Mi limito a segnalare XPlanner, una suite open source.
Non l’ho mai provata, lo farò spero a breve.

N.B. : questo post è in-progress, verrà aggiornato ancora.
revision-0 : 2007-10-09 14.25
Annunci
Extreme Programming (XP)

Certificazioni – Brainbench C# Certification

Ente Certificatore : Brainbench (www.brainbench.com)
Nome Certificazione : Brainbench C# Certification
Costo : Free (15$ se si richiede il certificato cartaceo)
Modalità esame : Online, 40 domande, 3 minuti per domanda, a risposta singola
Score minimo : >2,74 standard certification, >3,99 master certification (il massimo è 5)
Certificazione conseguita : si (3.61)
Livello di difficoltà (1-5) : 3
Utilità tecnica (1-5) : 3
Annotazioni : più che una certificazione, è un livello di certificazione

Innanzitutto devo spiegare la mia assenza negli ultimi giorni. Ho iniziato nuove attività e la sera arrivo cotto, per cui sto dedicando meno tempo allo studio, ma solo per un fatto fisiologico.
Ripresi i giri tornerò in gran forma.

Quella di cui vi parlo oggi è una buona opportunità per certificare le proprie competenze su un insieme di argomenti.
Il sito che vi propongo, offre la possibilità di conseguire centinaia di certificazioni, anche su tematiche non inerenti l’informatica (financial, languages, management…).
Il concetto è quello di proporre al candidato un test online, da cui evincere un punteggio (quindi un livello) di conoscenza della materia.
In sè il concetto è buono, dato che vengono indicate le conoscenze richieste per sostenere l’esame, quindi le si può studiare prima.
Inoltre, per chi voglia studiare un corso prima, vengono proposti dei corsi a pagamento, sia sul sito stesso che su altri siti partner.
Il costo degli esami singoli è di 49$, che comprende anche la spedizione del certificato (l’azienda è negli USA). Ci sono anche esami free (ed è questo il caso di quello che ho fatto io), nel senso che i 49$ ce li mette un sito sponsor a cui ti devi registrare (io mi sono iscritto ad un sito sponsor che propone i cosiddetti panel, cioè in pratica dei sondaggi, per i quali vieni anche pagato), ma in quel caso se vuoi il certificato cartaceo devi sborsare 15$ (circa 11€) per la spedizione (che è comunque differita di un mese e mezzo circa). Il certificato cartaceo comunque non è obbligatorio.
Oppure ci si può iscrivere al sito, pagando una sottoscrizione mensile (99$, minimo tre mesi) o annuale (199$), in quel caso nel periodo di sottoscrizione si possono sostenere tutti gli esami che si vuole, e la spedizione del certificato è compresa nel prezzo. Chiaramente non ci vuole la calcolatrice scientifica per capire che ti conviene (e sul sito ti spingono) ad una subscription annuale…
Il sito comunque, a prescindere dalla sottoscrizione, mette a disposizione una pagina con i dati del tuo ID e degli esami sostenuti, così nel CV si possono mettere queste informazioni per farle verificare a chi le legge.
Unica pecca, è il fatto che gli esami sostenuti hanno “validità” triennale, poi bisogna risostenere l’esame. In teoria è giusto, in pratica forse un pò meno (se fra tre anni avrò fatto 20 esami, prima o poi li devo rifare di nuovo tutti e 20).
Ritengo sia una buona opportunità. Infatti a tempo debito, anche io conto di fare una subscription annuale.
Ultima nota : per chi sta valutando l’idea di un lavoro all’estero (USA/GB) ho scoperto che parecchie aziende ne tengono conto, quindi non è proprio malvagia come (livello di) certificazione.

Certificazioni – Brainbench C# Certification