I'm test driven

Search

  • Blogroll

  • Chi sono su LinkedIn

    License

    This blog is licensed under a Creative Commons License

    I fondamenti dell’Agilità e…i temi di wordpress.com

    September 26th, 2006 by Enri

    [iterazione 2 (27/9)]

    Come già il buon FRANK ha notato, ultimamente il blog ha subito mutazioni di look giornaliere e da far girare la testa…

    Tutto nasce dal post sul TDD e gli Unit Test che con il tema vecchio di wordpress, veniva visualizzato in modo poco chiaro. Da lì è cominciata la ricerca del tema, che per ostinazione somigliava più a quella del Santo Graal che ad un semplice cambio di look del sito. Sono infatti caduto nel problema del “Best is the enemy of Good“(TM), cambiando di giorno in giorno il tema senza mai esserne soddisfatto, al punto che il mio amico Simone è arrivato a dirmi “l’agile enri disagilizzato da un tema!”… Di seguito la mia breve autodifesa: Read the rest of this entry »

    Posted in Agile, chaos, holacracy | 12 Comments »

    Ridurre i costi!

    July 7th, 2006 by Enri

    A volte quando parlo di agilità mi rendo conto di inviare un numero eccessivo di messaggi, lasciando che il messaggio principale si perda tra tutti gli altri: la riduzione dei costi per il committente e quindi una maggiore competività per il fornitore! Ecco riassunto questo aspetto in sei punti fondamentali:

    • Possibilità di stabilire un tetto di spese limitato perché negoziato frequentemente e monitorato su base costante.
    • Forte riduzione del rischio che il cliente si ritrovi in mano funzionalità che non utilizzerà MAI o molto raramente –> in questo modo risparmia un sacco di soldi, infatti è qui che si registrano gli sprechi più incredibili.
    • Garanzia che il cliente spenderà soldi solo per ciò che realmente gli serve nel momento in cui viene rilasciato (non ciò che gli serviva sei mesi fa)!
    • Il cliente non attende il termine del progetto (tipicamente quindi mooolto a lungo) per cominciare a vedere un ritorno dell’investimento fatto, ma ogni settimana è in grado di misurare il ritorno economico delle nuove funzionalità rilasciate!
    • Possibilità per il cliente di decidere in ogni momento di far cambiare completamente rotta al progetto: se sono cambiate le condizioni “ambientali” rispetto al documento di analisi di un anno fa, perché continuare su quella strada?
    • Con un approccio agile, i diritti del committente diventano questi!

    Read the rest of this entry »

    Posted in Agile, Quality, Contratti agili | 15 Comments »

    Metodi Agili poco agili?

    July 3rd, 2006 by Enri

    Riporto tre link ad una discussione molto interessante che sta scorrendo su Internet relativamente al tema di cui sopra ed in particolare riguardo una delle pratiche fondamentali dell’extreme programming: il Test Driven Development e lo stress posto sui test. Penso sia degno di una lettura sia da parte degli agili-scettici, sia da parte di chi invece si ritenga un agilista.

    In particolare il sasso è stato gettato dal seguente post:

    Carlo Pescio critica il TDD

    Le risposte di agilisti di primo ordine quali Marco Abis (tra i comments del post) e soprattutto Francesco Cirillo non si sono fatte attendere:

    Francesco replica I

    Francesco replica II

    Anche se i post non sono brevissimi consiglio vivamente una lettura, non ve ne pentirete! :)

    P.S.: purtroppo la discussione in alcuni tratti ha preso una piega un po’ troppo polemica…penso comunque rimangano ottimi spunti di riflessione.

    Posted in Agile, Extreme Programming, Test Driven Development (TDD) | 1 Comment »

    Qualità, holon, valori, frustrazione

    June 29th, 2006 by Enri

    Chi mi segue da questa piccola finestra (la puntata precedente è comunque qui) sa che da circa un mese non mi è più “permesso” di scrivere codice in PP: il mio attuale e unico collega infatti è allergico alle coppie. Non solo, purtroppo io ed il mio collega abbiamo anche principi prospettive di visione del codice molto differenti, direi addirittura opposte. Ma non è del mio collega (per altro simpatico e di vecchia data) che vi voglio parlare, quanto invece delle mie reazioni e dei miei peccati in questo mese.

    Nell’ultimo mese e fino a qualche giorno fa ho prodotto software di bassa qualità, voglio cercare di capire il perché con voi. Sicuramente e per onestà nei miei confronti il motivo principale è la scarsissima conoscenza dei tool utilizzati. Ma questo lo sapete già. Più interessante è invece come il rapporto tra me ed il mio collega, i miei timori e il disallineamento di valori hanno influenzato la mia capacità di creare qualità.

    Read the rest of this entry »

    Posted in Management, Agile, PairProgramming, Quality, Diario di bordo, holacracy, Values | 9 Comments »

    Agilità e velocità

    June 13th, 2006 by Enri

    Questo post doveva essere una risposta al commento di Tom al post precedente, ma vista la sua lunghezza ho preferito renderlo indipendente.

    Hei, non tirarti indietro !

    Non far parlare il profeta al posto tuo.:)

    …ops mi hai beccato.

    Il discorso è tutt'altro che banale. Personalmente credo che le metodologie agili migliorino la produttività, intesa soprattutto come ritorno economico del committente e come accorciamento dei tempi con i quali il fornitore è in grado di andare in produzione con qualcosa di valore. Pensiamo ad esempio alle iterazioni brevi per dirne una soltanto. Inoltre uno dei punti cardine delle metodologie agili è proprio il voler eliminare tutto ciò che è utile a solo una delle parti in gioco (ad esempio a chi giova scrivere una montagna di documentazione interna, o quali vantaggi porta al committente pagare ed aspettare due mesi un documento di analisi super-dettagliato che copre un anno intero di sviluppo stimato?).

    Ritengo però allo stesso modo pericoloso mettere al centro del processo di sviluppo il valore della velocità. Questo valore infatti porta a molte malattie, tra le quali ad esempio la bassa qualità (=bassa velocità a medio-lungo termine), una relazione tra committente e fornitore non schietta ma volta a nascondere la realtà, il voler sviluppare senza cercare il feedback dall'utente, a diminuire la comunicazione all'interno del team ecc. ecc. Tutto questo paradossalmente abbassa la velocità.

    L'agilità pone al centro del processo i test, e questo ovviamente non è casuale: si sa da tempo che la fase più costosa dell'intero processo di sviluppo è la fase di manutenzione, che spesso fa rima anche con estensione. Porre al centro del processo i test, e farsi guidare da essi, riduce fortemente il costo di quella fase. Non solo: abbiamo tutti avuto esperienza di quanto sia difficile far evolvere un'applicazione mal scritta già dopo un mese o due dalla sua nascita se si sottovaluta l'importanza della qualità del design.

    Entra qui in gioco dalla finestra la scelta del tool / linguaggio da utilizzare. Credo che tutti i programmatori Java si guardino ormai intorno per trovare qualcosa che sia più produttivo, e permetta di costruire cose ormai ritenute semplici, in un tempo ragionevole. I javisti più convinti guardano a Trails, altri ad APEX, altri a Ruby on Rails. Credo comunque (soprattutto dopo l'ultimo progetto che sto sviluppando :) ) che una delle caratteristiche più importanti di un tool/linguaggio sia la sua intriseca testabilità. Se per avere questa testabilità devo rinunciare ad un po' di produttività per le cose semplici, pazienza. Al contrario non avrebbe senso se la rinuncia alla produttivà avesse un peso molto grande, per il tipo di applicazione da sviluppare.
    E' questo il motivo per il quale personalmente sono ben impressionato da RoR: grande testabilità e alta produttività.

    Personalmente tengo gli occhi ben aperti sulle scelte che faccio (siano di tool o siano di natura meno tecnica), chiedendomi sempre se in fondo non mi stia guidando il falso valore della "comodità", cioè il voler evitare quella "due dilligence" (dovuta cura) di cui parla Martin, cioè quel duro lavoro quotidiano, e quell'attenzione che pratiche come TDD richiedono. E' facile confondere (forse perché il confine è sottile) la ricerca della produttività con la ricerca di una soluzione di comodo che renda il lavoro meno brain intensive. Meglio dare l'impressione di essere un po' più lenti, ma sapendo cosa si sta rilasciando: "rilasciare una feature che non funziona è molto peggio di una che non c'è". Non solo: una feature in produzione che non funziona diventa una palla al piede di tutto il processo di sviluppo, rallentandolo inevitabilmente.

    L'importante è avere principi e valori efficaci che ci guidano nelle scelte, è chiaro poi che lo stesso paradigma "sperimenta ed adatta" ed il principio del mutuo beneficio, prevedano scelte che spesso devono vedersela con dei trade-off.

    Posted in Management, Agile | 5 Comments »

    Critica agli agilisti…e controcritica.

    June 12th, 2006 by Enri

    Vorrei riportare in modo più chiaro e visibile quanto già scritto da un commento di Tom, e dalla mia risposta, riguardo una recente critica agli agilisti ed all'agilità mossa da Cedric, nonché della risposta data da Robert Martin quest'oggi a tale critica.

    Ritengo entrambi i post degni di una lettura.

    Posted in Agile | 5 Comments »

    Milano XPUG chiama, Torino risponde

    June 12th, 2006 by Enri

    Venerdì sera dopo aver postato i miei ultimi mini-articoli sul mio blog, li ho segnalati alla lista di discussione xp-it.

    Sabato mattina con molto piacere ho trovato nella posta da leggere una mail di Gabriele Lana, coordinatore dell'XP User Group Milano, fondato da Francesco Cirillo. Gabriele oltre a fare i complimenti a me e a tutta la community, ha proposto una collaborazione tra la nostra piccola comunità e la loro (più ampia), sostanzialmente in tre possibili modalità:

    • Il vostro gruppo potrebbe partecipare ai nostri incotri (sarebbe meraviglioso) [due mercoledì al mese]
    • Il vostro gruppo potrebbe "saltuariamente" venire a trovarci, e in quelle occasioni potremmo metterci d'accordo per organizzare qualcosa di particolare
    • Potremmo collaborare a distanza, potreste partecipare alla nostra lista, potresti creare un feed aggregato dei vostri blog (solo titolo/link) da forwardare in lista, ecc…

    Ovviamente ciò non poteva che farmi piacere, fermo restando che personalmente non mi è facile andare a Milano così spesso. Per questo motivo ho proposto una collaborazione assidua a distanza (ad esempio tramite la loro mailing list ed i nostri blog), cercando di cogliere allo stesso tempo le occasioni "particolari" delle quali si potrebbe approfittare per incontrarsi tutti insieme.

    La prima di queste sarà la Java Conference 2006 che si terrà il 27 ed il 28 Giugno a Milano, alla quale mi sono già iscritto per il 27 Giugno (il mio CEO ancora non lo sa :) ), e alla quale spero non sarò l'unico nostro rappresentante. Interverranno tra gli altri anche James Gosling e Francesco Cirillo, quindi anche per questo motivo penso sarà molto interessante.

    Spero e credo fortemente possa essere l'inizio di una collaborazione proficua per entrambi i gruppi, soprattutto per le persone davvero molto valide che compongono l'xpug milanese.

    Complimenti a tutta la community! ;)

    Posted in Agile, Extreme Programming | No Comments »

    Condividere i valori e pair programming

    June 9th, 2006 by Enri

    Ho sentito parlare più volte dell’importanza delle condivisione dei valori all’interno di un team. Fino a qualche giorno fa non ne avevo avuto esperienza diretta all’interno del team di sviluppo, e soprattutto non l’avevo vissuta sulla mia pelle. Negli ultimi due giorni ho invece avuto la fortuna di sperimentarlo, grazie ad una pratica che mi ha permesso di confrontarmi in modo molto stretto con il mio collega sviluppatore: il pair programming. Read the rest of this entry »

    Posted in Agile, Extreme Programming, PairProgramming, Diario di bordo, Communication, Values | No Comments »

    Quando applicare una pratica

    June 9th, 2006 by Enri

    E' ormai un mese scarso da quando ho cominciato a lavorare ad un nuovo progetto. Si tratta sostanzialmente di un progetto di integrazione, che coinvolge tre sistemi: SAP, Microsoft Access e un applicativo legacy in Visual Basic che legge dai database Access.

    Ciò che dobbiamo fare io ed il mio collega è di portare dei dati da SAP (struttura IDOC) ad un database Access, così da rendere automatica l'allineamento dei dati da SAP all'applicativo che li visualizza e che viene utilizzato per produrre della reportistica.

    Lo strumento che utilizziamo per fare integrazione dei dati è BIS di Seeburgher. Il progetto si è da subito rivelato "interessante" per vari motivi:

    • non so nulla nè ho mai avuto esperienza di BIS
    • conosco molto poco o nulla di SAP
    • non ho mai utilizzato Microsoft Access
    • non conosco nulla del dominio

    Forse mi sono trovato per la prima volta nella situazione tipica in cui si trovano (molti) manager quando devono presentare un'offerta (ovviamente time/material) al committente.

    Ovviamente i propositi di inizio progetto sono per me i soliti, che ormai conoscete:

    • coinvolgere in ogni fase dello sviluppo il committente/l'esperto di dominio
    • pianificare ogni settimana
    • iterazioni brevi con funzionalità pronte per il deploy
    • grande attenzione ai test

    Immediatamente mi sono reso conto che in questo progetto, questi propositi erano tutt'altro che facili da raggiungere. Ad esempio le pianificazioni: come stimare qualcosa che non si conosce nè nel cosa nè nel come?

    Le prime due settimane sono trascorse cominciando a prendere confidenza con gli strumenti, effettuando piccole prove su dati comunque "reali". La collaborazione è stata molto sul piano tecnico con chi conosce gli strumenti e poco/nulla sul piano del dominio. Il committente reale non è stato coinvolto nelle pianificazioni: quale credibilità avremmo avuto nei confronti del cliente se avessimo fatto e comunicato delle stime praticamente casuali?

    Ad oggi invece siamo riusciti ad introdurre una approccio iterativo con il cliente, reintroducendo le tanto care carte, e la nostra lavagna (anche se un po' anomala). La cosa interessante che ho notato è stata che ho ripreso a sentire l'esigenza delle carte solo dal momento in cui ero in grado di effettuare delle stime e quindi di pianificare. Le carte hanno cercato me quando mi hanno visto pronto, non viceversa: non ho dovuto forzare nulla. Allo stesso modo per il planning game e l'introduzione dei business test (non ancora automatici) definiti dall'esperto di dominio per guidarci nell'iterazione corrente.
    Questo mi fa pensare a tre cose:

    • è importante tenere sempre le orecchie aperte per sentire quando una pratica può rivelarsi utile e praticabile
    • è importante avere interiorizzato valori e principi per farsi trovare pronti quando le pratiche chiamano
    • in alcuni progetti, soprattutto quando vi sono le condizioni su elencate, può essere necessaria una specie di iterazione zero, nella quale si affrontano più problemi tecnici che problemi di dominio

    Per quanto il progetto in sè sia tutt'altro che stimolante, tuttavia come sempre nell'informatica (e non solo) la quantità di cose che si imparano non dipende solo dalle situazioni nelle quali ci si viene a trovare, ma anche e soprattutto dalle capacità di riflessione e di osservazione di chi le vive, oltre che da come le si interpretano e da come si decide di re-agire ad esse.

    Posted in Agile, Extreme Programming, Diario di bordo, Communication | 3 Comments »

    E’ un test di unità?

    May 15th, 2006 by Enri
    From: Michael Feathers <mfeathers@…>
    Date: Tue Sep 6, 2005 3:50 pm
    Subject: Unit Test Rulz

    I've used these rules with a large number of teams. They encourage good design and rapid feedback and they seem to help teams avoid a lot of trouble. —

    A test is not a unit test if:

    1. It talks to the database
    2. It communicates across the network
    3. It touches the file system
    4. It can't run correctly at the same time as any of your other unit tests
    5. You have to do special things to your environment (such as editing config files) to run it.

    Tests that do things things aren't bad. Often they are worth writing, and they can be written in a unit test harness. However, it is important to be able to separate them from true unit tests so that we can keep a set of tests that we can run fast whenever we make our changes.

    Michael Feathers

    www.objectmentor.com

    Posted in Agile, Extreme Programming, Test Driven Development (TDD) | 13 Comments »

    « Previous Entries