Posts
66
Comments
819
Trackbacks
113
My life with TDD

Da almeno due anni il mio approccio allo sviluppo è fondamentalmente cambiato…per fortuna aggiungerei, ma questo è un altro discorso ;-)
Lo stravolgimento maggiore, sotto tutti i punti di vista, è sicuramente stato dettato dall’adozione del TDD come metodologia di sviluppo.

Parlando con alcuni clienti e con alcuni amici “del mestiere”, mi sono accorto che l’efficacia del TDD e i benefici che ne conseguono dalla sua adozione non sono per tutti così evidenti. In effetti, ora che ci penso, anche io quando ne ho sentito parlare per la prima volta non ne sono stato convinto appieno. Ecco quindi la necessità/desiderio di portare la mia esperienza per “formalizzare” quelli che per me sono stati (e sono tutt’ora) i benefici maggiori che ho riscontrato “strada facendo”

Partiamo dal presupposto che, come tutte le cose nuove, l’adozione del TDD come metodologia di sviluppo ha un costo in termini di acquisizione delle nozioni di base e sopprattutto dell’attualizzazione e della messa in opera di tali concetti nella realtà. Detto questo voglio rimarcare un punto fondamentale: il TDD non è un costo!!!
Affermare che la scrittura del solo codice “produttivo” (non dico di produzione, perchè per me i test lo sono) costa meno che la scrittura incrementale di test e codice insieme è assolutamente errato e sono pronto a provare il contrario.
Sperando che questa sia la posizione condivisa da tutti…proseguiamo.

Come primo vantaggio, basilare, che l’adozione del TDD come metodologia di sviluppo è proprio la possibilità di avere sempre, in tempo reale, il nostro codice allineato con una (più o meno) ampia batteria di test. Demandare a “sviluppo” terminato la scrittura del codice di test è per me un costo, talvolta anche inutile e soprattutto un’utopia.
La mia batteria di test mi garantisce, in ogni momento del ciclo di vita dello sviluppo del mio progetto, di poter sostenere modifiche, anche importanti, ai comportamenti definiti in partenza, con una ragionevole sicurezza di non avere errori di regressione su funzionalità ormai consolidate.

Un altro aspetto è l’approccio allo sviluppo che il TDD ti “impone”: l’avanzare per piccoli passi imposta un ritmo che evita il proliferare di “generalizzazioni accessorie e derive intellettuali” tipiche (almeno per me) dello sviluppo tradizionale. Molte volte mi sono trovato a sovra-ingegnerizzare una soluzione perchè non avevo nulla che frenasse la mia “furia” inventiva.
Attenzione bene: non sto dicendo che con l’approccio “tradizionale” non sia possibile confinare e ritmare correttamente lo sviluppo, sto solo affermando, con ragionevole certezza, che il TDD ti aiuta a concentrarti solo sull’aspetto implementativo, senza demandare allo sviluppatore la preoccupazione di “contenersi”. Insomma un validissimo aiuto.

Ma l’aspetto preponderante, che mi fa consigliare e spingere sempre di più questo approccio ai miei clienti, è sicuramente la qualità del codice che si riesce ad ottenere in modo del tutto naturale. Il TDD impone (involontariamente, ed è per questo che è naturale) una forte attenzione al design della nostra applicazione.
Per fare in modo che ogni componente del nostro eco-sistema sia facilmente testabile singolarmente e in relazione agli altri (cosa a cui il TDD ambisce) otteniamo con assoluta naturalezza un codice “semplice e pulito”, facilmente manutenibile e soprattutto che soddisfa parecchi paradigmi della programmazione OO (e della buona programmazione, aggiungerei).

Giusto per puntualizzare e evitare possibili flame, voglio sottolineare che TDD non significa non avere bug nelle proprie applicazioni. Nella mia esperienza lo sviluppo in TDD ha significato (e significa tutt’ora) una forte diminuzione dei bug “scappati al mio controllo”, rilasciati in produzione e soprattutto una velocità di risposta alla segnalazione delle anomalie senza paragoni.

Che ne pensate? Qual è la vostra esperienza a riguardo?
-melkio-

posted on venerdì 12 dicembre 2008 15.20 Print
Comments
Gravatar
# re: My life with TDD
Mario Duzioni
12/12/2008 16.26
  
"i benefici che ne conseguono dalla sua adozione non sono per tutti così evidenti"
Al momento sono uno di quelli... :-(

"il TDD non è un costo"
Beh, il TDD è un costo, come lo è anche la scrittura del resto del codice. Semplicemente come tutti i costi di produzione, bisogna rapportarlo ai benefici complessivi (e quindi ai ricavi).
Questo non per smentirti, ma piuttosto per sottolineare *uno* dei criteri di valutazione per l'adozione di qualsiasi strumento.

Magari, per quel che mi riguarda, prima o poi riuscirò a capire meglio anch'io gli aspetti che però al momento forse non riesco a vedere.
Un buon design non credo sia merito del TDD e sinceramente non penso che il design debba essere una conseguenza dell'adozione del TDD, che è una metodologia prima di tutto implementativa (giusto?).
Più esplicitamente: fai TDD in fase di implementazione e se il design ti scaturisce dal TDD, IMHO c'è qualcosa che non va... :-/

Altro argomento interessante... giorni di fuoco! (sarà il freddo????)

Ciao!

P.S. Riesci a dare una "slargatina" alla textbox dei commenti? ;-)
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 16.35
  
"con una ragionevole sicurezza di non avere errori di regressione su funzionalità ormai consolidate."
Questo è un boomerang e ho già visto bug dovuti a questa "certezza" (se passa i test, sono a posto).
Il problema è che certe modifiche possono inficiare i test e "chi testa i test"?

IMHO i test sono come la serializzazione. Su alcune cose calza a pennello, su altre è un bagno di sangue.
La generalizzazione per cui il test è possibile progettare qualsiasi cosa con l'approccio test-driven mi sembra utopico (ancora di più dei test fatti dopo) o esorbitantemente costoso.

In sostanza sono un sostenitore del test, ma non come "filosofia di sviluppo" aka metodologia perché non è applicabile con le stesse premesse at tutti i moduli di un progetto / a tutti i progetti.
Gravatar
# re: My life with TDD
Alessandro Melchiori
12/12/2008 16.50
  
@Mario: correggo il tiro "il TDD non è un costo *ulteriore* rispetto alla scrittura del resto del codice" ;-)
Per quanto riguarda il discorso design concordo con te: TDD non è una condizione necessaria e sufficiente per far nascere e crescere la nostra applicazione sotto la stella del buon design. Si può scrivere assolutamente del buon codice anche senza TDD, ma secondo me, sfruttando/seguendo le linee guida di questa metodologia, quello che sembra impervio diventa molto più semplice e lineare (IMHO)

E la finestrella dei commenti non te la allargo ;-)

@Raf: diventa un boomerang se i test non sono scritti bene. Ho sottolineato più volte che TDD non è la panacea di tutti i mali e soprattutto che non è così lineare l'associazione TDD -> applicazione corretta.
Diciamo che potrebbe valere la regola "TDD buono -> applicazione corretta e no errori di regressione"
Per quanto riguarda il discorso che il TDD "calza a pennello" solo in taluni contesti, dammi la possibilità di dissentire (e questo lo scrivo sul CV): in tutti i contesti in cui l'ho applicato mi ha portato enormi benefici. E non parlo dei "soliti gestionali", ma anche in progetti di ricerca e sviluppo (es.: algoritmi di triangolazione ottica o di elaborazione di immagini) in cui si sapeva da dove si partiva, si sapeva dove si voleva arrivare, ma nessuno mai aveva definito quale strada seguire.
Gravatar
# re: My life with TDD
Omar Damiani
12/12/2008 17.03
  
Io, da completo ignorante del TDD, non posso aggiungere nulla salvo il fatto che non vedo l'ora di poter vedere un'idea sviluppata con TDD, esattamente come ai tempi "qualcuno" mi ha fatto vedere cos'era il DDD

Altrimenti rimane tutta teoria...e io non ho mai capito come "sviluppare a partire dai test".

Ma ripeto...non spiegarmelo a parole che sarebbe l'ennesima lezione accademica...

;)
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 17.07
  
@Alessandro. Per quanto ti industri di trovare i test giusti, non è matematicamente possibile prevedere in anticipo ogni possibile input della tua blackbox. Se così fosse non esisterebbero le vulnerabilità. Ne consegue che la scrittura di buoni test è molto soggettiva e impredicibile. Per cui l'affermazione "se i test non sono scritti bene" mi sembra un "aggiustatutto" :) ... chi e come testa i test?

Per quanto riguarda il discorso dei contesti, per esempio il test di una controllo grafico è fattibile ma è un bagno di sangue. Ci sono di mezzo problematiche come l'effetto ottico o le ombre, etc. che per riprodurle in un test ti costa 100 volte di più dell'applicazione.
La problematica è ben nota nella ISO9001. Laddove hai bisogno di "validazione" (che è una cosa totalmente differente dal test nella normativa) è necessario collaudare sul campo, cioè il test anticipato non è fattibile se non a costi non ragionevoli.
Gravatar
# re: My life with TDD
Alessandro Melchiori
12/12/2008 17.37
  
@Omar: quando vuoi a venire a trovarmi in ufficio (e non lo sto dicendo per tirarmela) ti faccio vedere l'ultima applicazione che ho sviluppato con Emanuele (e stiamo terminando in questo periodo) sviluppata completamente in TDD. Ti posso assicurare che se non avessimo approcciato lo sviluppo seguendo questa metodologia (in relazione ad altre metodologie agili) non avremmo potuto soddisfare le continue (e per continue intendo anche meno che settimanali) change-request che il contesto (leggi il cliente) ci imponeva.

@Raf: hai detto assolutamente bene...non è possibile a priori conoscere tutte le casistiche e qui come in tutte le cose l'esperienza la fa da padrone. Quanto meglio riesci a centrare le più probabili vulnerabilità, tanto più riesci a limitare i danni a monte. Ma TDD, come ho espressamente sottolineato nel post, non è sinonimo di zero errori. Il grosso vantaggio è che è una metodologia che si basa fortemente sull'agilità (nel senso letterale del termine), e in modo molto agile ti da la possibilità di rafforzare la tua batteria di test nel caso venissero trovate nuove anomalie, dandoti la garanzia che le modifiche apportate non interferiscano con altre funzionalità (ovviamente coperte da test). Lo sviluppo è un processo iterativo, con o senza TDD...
Gravatar
# re: My life with TDD
Matteo Baglini
12/12/2008 17.46
  
Ciao Ale,
mi conosci e sai che anch'io sono a favore del TDD e che lo applico ovunque mi è permesso (cliente,codebase legacy,ecc).
L'unico neo del TDD secondo me sta nel "TDD buono -> applicazione corretta e no errori di regressione", con questo voglio dire che è uno strumento molto potente ma altrettanto diffice da apprendere e da applicare con successo e se viene utilizzato in maniera errata: BOOM! il risultato è solo tempo perso!
Tempo fa parlando con un amico (IMHO un bravissimo dev) mi desse che in un pomeriggio si era messo a fare TDD e che aveva capito qual'era lo scopo di questa metodologia, gli ho chiesto di raccontarmi ciò che aveva capito e come immaginavo, era completamente fuori strada.
Spesso il TDD viene interpretato come la sola scrittura del test prima del codice, una cosa tipo: "scrivo i test prima invece di scriverli dopo, che c'è di strano? che ci combina il design?"
Mentre il TDD ti impone, come hai detto te, la scrittura delle sole le funzionalità che ti servono e di modellarle dal punto di vista del client, con un approccio top-down.
Aimè per applicare correttamente il TDD bisogna avere una buona conoscenza di OOP, OOD, Pattern, ma soprattutto del concetto di responsabilità delle classi, conoscenze che pochi dev hanno veramente.
Non solo, sempre per applicare correttamente il TDD bisogna _impegnarsi_ a fondo a scrivere test unitari, altra impresa apparentemente facile che in realtà non lo è.
In fine aggiungo che il valore del TDD non lo vedi ad inizio progetto, ma lo vedi soprattutto a progetto avanzato quando i requisiti cambiano e la tua codebase pure.

PS: ho scritto di getto...speriamo bene ;-)
Gravatar
# re: My life with TDD
Alessandro Melchiori
12/12/2008 18.07
  
@Matte: concordo con tutto quanto hai scritto e se rileggi attentamente il mio post non troverai assolutamente scritto che adottare il TDD come metodologia di sviluppo sia semplice. Come ti ho detto spesso, anche se da alcuni anni è diventato il mio modus-operandi, alcune cose non mi sono proprio "fluide", ma non demordo, anche perchè i vantaggi che riesco comunque ad ottenere sono di gran lunga maggiori degli svantaggi.
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 18.21
  
@Alessandro. Resta il problema che un approccio nel quale "tanto c'è il test" è rischioso come per l'utente che apre tutti gli attachment perché "tanto c'è l'antivirus".
Certo se il team è piccolo è tutto controllabile. Ma quando il gruppo è grosso, si fa presto ad andare fuori controllo. Cioè i test a posteriori sono inevitabili anche con TDD.

A questo punto mi chiedo se non abbia più senso un approccio mixed nel quale i moduli palesemente testabili seguano questo approccio e il resto venga fatto in modo tradizionale.
Il controllo grafico è solo una delle casistiche in cui è necessaria validazione e il test è inadeguato.
Gravatar
# re: My life with TDD
Luca Minudel
12/12/2008 18.28
  
@melkio

mi trovo molto in sintonia con l'esperienza di TDD che hai descritto

dici "il TDD non è un costo!!!", aggiungo che può essere una metrica, quando il tempo di sviluppo di una user story in TDD è minor di quello senza TDD è il segno che uno ha "scollinato" cioè ha acquisito la pratica di tdd


@Raffaele
"chi e come testa i test?"
come dimostra touring non si può dimostrare che non ci sono bug
tieni conto che scrivendo il test prima del codice è di per se il test del test.
Gravatar
# re: My life with TDD
Luca Minudel
12/12/2008 18.33
  
@Raffaele bis
"un approccio mixed nel quale i moduli palesemente testabili seguano questo approccio e il resto venga fatto in modo tradizionale."

il TDD (incentrato sugli unit test) ha come primo scopo di migliorare il disegno (e quello di testare il metodo è secondario), per questo conviene applicarlo sempre perché il disegno del codice si fa sempre

il discorso che fai ha senso riguardo i test di integrazione che invece sono più orientati a testare le funzionalità
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 18.34
  
@Luca. Può anche non essere possibile "scollinare"! Non ce la vedo proprio come metrica.

"scrivendo il test prima del codice è di per se il test del test"
Come puoi affermare una cosa del genere?
Non c'è nulla di più facile di sbagliare sia la logica del test che la sua implementazione che a volte è persino più complessa di quello che vuoi testare.

Invece di voler coprire il 100% dei casi con TDD, bisognerebbe piuttosto cercare di caratterizzare la tecnica e definire quali sono i casi al di fuori dei quali non ha senso applicarla:
- io ritengo che non sia possibile o conveniente usarla nei 100% dei casi
- e se non è sempre possibile usarla e vuoi usare quella metodologia, è necessario definire quando non è possibile utilizzarla. Diversamente rimane una valutazione oggettiva e quindi con un possibile accumulo di errore.
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 18.51
  
@Luca bis :).
"il TDD (incentrato sugli unit test) ha come primo scopo di migliorare il disegno"
I test specifici per il disegno o quelli di funzionalità sono ben differenti.
Ad esempio il test del contesto d'uso è fondamentale per il disegno mentre la funzionalità può prescindere dal contesto.

C'è un effort e un risultato differente per questi *due* tipi di test e il test del disegno a volte non è neppure possibile (come posso testare di essere all'interno di un canale VPN?)
Gravatar
# re: My life with TDD
Alessandro Melchiori
12/12/2008 19.02
  
@Raf: TDD, come tu ben saprai, non è solamente "test", anzi forse il fatto di avere dei test è un aspetto marginale...sicuramente il primo che salta all'occhio ma forse non il principale. TDD fa emergere un buon design, che in applicazioni "corpose" con team "corposi" non è un aspetto da sottovalutare...anzi, ora che ci penso, è un aspetto da non sottovalutare mai.
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 19.38
  
@Alessandro. Siamo daccordo, ma visto che il test è al centro, sarebbe bene definire le regole: qual'è il contesto dove ha senso, che tipo di test (funzionale piuttosto che di disegno), etc. etc.
Così facendo possiamo anche trovare altri tecnicismi che aiutino a colmare le lacune dove il test non è possibile/non è conveniente.
Insomma cerco regole più precise perché non credo che partendo dal test si possano coprire tutti gli scenari. Non mi sembra così assurda come cosa ...
Gravatar
# re: My life with TDD
Luca Minudel
12/12/2008 20.07
  
@Raffaele


il tdd è solo uno dei modi di fate test e forse si chiama più design che test

all'interno di questi questi presupposti le considerazioni corrette che fai "non sono applicabili" al tdd mentre le trovo le critiche che fai le condivido applicate a molti aspetti del testing nel senso più ampio e generale

essendoudi-allineati su quello che si intende per tdd è + difficile capirsi e confrontarsi



Gravatar
# re: My life with TDD
makka
12/12/2008 20.36
  
Scusa ma "TDD non è la panacea di tutti i mali"
l'ho già sentita!
blogs.ugidotnet.org/.../84502.aspx
Gravatar
# re: My life with TDD
Raffaele Rialdi
12/12/2008 22.04
  
@Luca. Considerato che in TDD i test servono proprio per mandare avanti il progetto da una fase all'altra mi sembra che le critiche che ho posto siano applicabili non solo ai test ma all'intera metodologia
In TDD i test vengono usati come "riprova" che tutto sta viaggiando bene ma:
- se il test non è adeguato si prendono fischi per fiaschi
- se il test non è mirato alla funzionalità o al disegno, si rischia una ambiguità dei risultati
- se il test non è possibile o non descrive sufficientemente gli aspetti del problema, è inutile
Perché non stabilire quali sono le condizioni per cui un test è adeguato a TDD per l'approvazione della fase?
Ripeto: dire "test" mi sa troppo di moda e poco di approccio scientifico.
Gravatar
# re: My life with TDD
Luca Minudel
13/12/2008 1.08
  
@Raffaele

In TDD i test _NON_ vengono usati come "riprova" che _tutto_ sta viaggiando bene

i test unitari state based e quelli interaction based sono utili (in ordine di importanza cominciando dalla cosa più importante) a :
1 - guidare il design
2 - ridurre l'over design
3 - abilitare refactoring continui
4 - evitare bug di regressione

ci sono anche quelli di integrazione e accettazione tuttavia le discussioni di questo post riguardano i primi - per i quali la verifica di correttezza _non_ è un obiettivo



probabilmente vedendolo in azione avresti una idea di quello che veramente è



i test che danno maggiori benefici quando si inizia con i metodi agili sono quelli unitari, cioè il primo grupopo che ho indicato
Gravatar
# re: My life with TDD
LudovicoVan
13/12/2008 1.10
  
Personalmente vedo due seri problemi nel TDD: il primo e' che nella retorica del TDD (anche se questo e' un problema in realta' piuttosto diffuso) si perde la distinzione fra qualita' esplicita e implicita, cioe' fra i requisiti del cliente e i requisiti tecnici impliciti: si parla di qualita' tout court e si intende solo qualita' tecnica, cioe' cio' che e' propriamente ausiliario; il secondo problema e' che non sono d'accordo che TDD puo' fare disegno: disegno e test sono due livelli di astrazione diversi con obiettivi diversi, e non ne faccio solo una questione concettuale perche' ho riscontrato questa "anomalia" anche nella pratica, e cioe' nella necessita' di fare disegno a monte. In sintesi, la ritengo una metodologia come minimo alquanto discutibile, sia nei concetti che nell'efficacia pratica.

-LV
Gravatar
# re: My life with TDD
Raffaele Rialdi
13/12/2008 2.19
  
@Luca. Mi risulta che il successo del test ti permetta di andare alla fase successiva, come sono di solito le metodologie iterative.
Possiamo disquisire sul termine "test" o "esito del test" ma il succo è quello.
E continuo a ripetere che fino a che non si definiscono regole per i test, non c'è modo di chiamare "metodologia" una cosa che ha il test come strumento regina. Tanto più che ci sono obiettivi precisi (tra cui quelli che hai citato) e che perciò non possono essere slegati da come deve essere scritto un test e se questo è applicabile.
Ho visto (poche) volte TDD in azione e può anche darsi che non fosse applicata al meglio, ma ti assicuro che mi ha convinto ancora di meno.
Non per questo dico che non possa funzionare in certi casi, ma ripeto ci vogliono regole per definire dove è applicabile e dove no.
Gravatar
# Re: My life with TDD
Roberto Messora
13/12/2008 8.36
  
Ale,
il TDD è una metodologia come ben affermi, tutte le metodologie, hai anche giustamente affermato che il TDD ha un costo di apprendimento, ed è perfettamente naturale che sia così.
detto questo (anzi ripetuto a pappagallo quello che hai già scritto), la considerazione è che non tutti i progetti possono avvalersi di TDD, per una semplicissima motovazione: il team.
quando il team è eterogeneo, pensare di progredire con il progetto in TDD puro è banalmente impossibile, proprio perchè anche volendo perseguire l'omogeneizzazione del team stesso verso TDD, inevitabilmente il "costo" di apprendimento farà sì che alla fine l progetto sarà un ibrido di TDD ed altro (con altro un mix delle varie metodologie più o meno standard proprie del bagaglio culturale dei vari membri non TDD).
Ovviamente a questo punto il tema è: lavorerò con lo stesso team anche in futuro in altri progetti? oppure ogni progetto avrà un suo team di volta in volta composto da figure totalmente diverse (ho esempi in cui per ogni progetto ci sono team totalmente diversi). se ho la possibilità di far crescere il team nel tempo allora probabilmente si potrà arruvare a fare progetti interamente TDD, altrimenti la cosa è semplicemente un'utopia.

saluti
Gravatar
# re: My life with TDD
Alessandro Pulvirenti
13/12/2008 9.20
  
Ciao Ale (ti chiami come me è questo è già un buon punto di partenza) 

Io, ultimamente ho sviluppato, da solo, un programma che conteneva circa 150.000 linee di codice C# con più di un migliaio di classi e ti dico che è una cosa pesante da gestire nel senso che, se solo si deve fare una piccola modifica in ogni classe, (anche aggiungere un semplice commento all’inizio del file) si porta via tanto tempo.

Se avessi utilizzato la metodologia TDD il codice da gestire sarebbe stato 150.000 moltiplicato N e questo sarebbe diventato impossibile da gestire!

Anche perché ci sarebbero stati più bug nel codice dei test che nell’applicazione.

Penso che non tutti i programmi siano adatti a questa metodologia, e penso che si dovrebbe applicare nelle giuste quantità.

Dove non è adatta o non è conveniente:
1) Nel testare l’interfaccia grafica;
2) Nel testare le applicazioni dipendenti dal contesto che in genere sono quelle in cui l’interazione la fa da padrone (come testare un videogioco in cui il personaggio che gioca sia in un ambiente 3D o in un altro);
3) Quando, per testare X righe di codice, bisogna scrivere 10 X righe di codice o più.

Dove conviene inserirlo?
1) In tutte le elaborazioni in cui si conosce bene il punto di partenza e il punto di arrivo;
2) Nelle applicazioni da cui dipende la vita delle persone e che devono avere un’affidabilità del 100%.
3) Nei punti chiave dell’applicazione e tralasciare le altre parti.

Ogni metodologia ha i suoi limiti di applicabilità e se si conoscono bene si riesce a prendere il meglio da ognuna ed evitare gli inconvenienti.

Ricordo che non tutte le applicazioni debbono essere indipendenti da:
• L’interfaccia grafica;
• Il database;
• Il processore;
• Il sistema operativo;
• Ecc.

Quindi non ha senso utilizzare metodologie e pattern in tali applicazioni se non è previsto… e così bisogna utilizzare la TDD nelle applicazioni e nelle parti in cui ha senso applicarle e non nelle altre.

Spero d’aver contribuito alla discussione.
Ciao
Gravatar
# re: My life with TDD
Luca Minudel
13/12/2008 10.41
  
@Raffaere

"Mi risulta che il successo del test ti permetta di andare alla fase successiva, come sono di solito le metodologie iterative"

Ti risulta male , ammettere di non sapere una cosa è il primo passo x impararla :D
Gravatar
# re: My life with TDD
Luca Minudel
13/12/2008 10.46
  
@Alessandro Pulvirenti

"Se avessi utilizzato la metodologia TDD il codice da gestire sarebbe stato 150.000 moltiplicato N e questo sarebbe diventato impossibile da gestire!"

ho lavorato in code-base delle dimensioni che dici e dall'esperienza pratica è l'esatto contrario di quello che dici

visto che espreimi il giudizio di qualcosa che non hai provato (e come dice Raffa magari hai visto in azione ma probabilmente da qualcuno che lo stava ancora imparando) la tua posizione è frutto del preconcetto

anyway ... se noon ti convince non imparalo , xkè criticare chi lo usa con soddisfazione e con successo ????
Gravatar
# re: My life with TDD
Raffaele Rialdi
13/12/2008 11.19
  
@Luca.
Da quello che ho letto (si, ho letto perché mi documento prima di parlare) le modifiche vengono fatte man mano che i test danno esito positivo. Cioè è un processo iterativo basato sui test.
Se invece rispondi così per fare battute, allora possiamo pure piantarla qui.
Gravatar
# re: My life with TDD
Mario Duzioni
13/12/2008 11.21
  
Inserisco il commento adesso, ma era di ieri sera (il sito era in aggiornamento...).
Spero di non sovrappormi a cose già dette nel frattempo... :-(

Premesso (e questo me lo scrivo sulla carta d'identità :-D), che ancora una volta sono concorde con tutto quanto esposto da Raf.

Mi faccio coraggio e sparo anche alcuni dei miei personali "blocchi" di fronte al TDD: correggimi se sbaglio (posso contare solo sulla mia singola esperienza di una sessione seguita al primo, stupendo, Agile Day), ma il concetto di TDD, ovviamente banalizzando, è di scrivere il test, verificare che non passi e scrivere codice fino a quando il test non passa.
Ovviamente quando però parto con la scrittura del codice per far passare il test, mi ritrovo a scrivere altri test "nested" (almeno, così fece quella persona), lasciando aperte le varie implementazioni "parent".

Questi sono entrambi due aspetti che *personalmente* reputo meno "robusti" per i seguenti motivi:
1) quando pensi e poi scrivi l'implementazione di una certa parte applicativa, reputo *fondamentale* "alzare lo sguardo" e guardare quel singolo pezzo di codice come parte del contesto di cui fa parte (attenzione: questo non significa non disaccoppiare o non rispettare l'isolamento...). Se fai TDD, invece, per metodologia stessa *devi* ignorare tutto ciò che sta oltre lo "scope" del test.
2) tu scrivi "l'avanzare per piccoli passi", ma come scrivevo poco sopra, il fatto di lasciare "rosso" un test per passare necessariamente ad uno, o più, nested per poi riscalare a ritroso il sentiero, non lo condivido per niente perchè mi da l'impressione (da non praticante, quindi solo teorica) di lasciare n implementazioni "aperte".
Preferisco mooolto di più scrivere codice e consumare il tasto Application per richiamare Extract Method. :-)

Cmq, ribadisco... sono solo pensieri sinceri di chi non ha esperienza in tal campo (ma sono i motivi che mi bloccano la voglia di provare).
Gravatar
# re: My life with TDD
Alessandro Melchiori
13/12/2008 11.28
  
@Roby: "...quando il team è eterogeneo, pensare di progredire con il progetto in TDD puro è banalmente impossibile, proprio perchè anche volendo perseguire l'omogeneizzazione del team stesso verso TDD, inevitabilmente il "costo" di apprendimento farà sì che alla fine l progetto sarà un ibrido di TDD ed altro (con altro un mix delle varie metodologie più o meno standard proprie del bagaglio culturale dei vari membri non TDD)."

Ti rispondo dicendoti che il rischio di cui parli è presente sempre. Ti faccio un esempio: nel team ci sono persone che sanno cos'è un DomainModel e un ORM e altre che non vivrebbero senza DataSet. All'inizio si decide congiuntamente la "strategia tecnologica" da utilizzare, ma nel corso del progetto il rischio di grosse deviazioni c'è, ed è direttamente proporzionale all'eterogeneità del team.
Anzi ti dirò di più, essendo il TDD una metodologia è completamente svincolata da qualsiasi scelta tecnologica e mi garantisce la possibilità, avendo un'ampia parte della mia codebase coperta da test, di fare un copioso refactoring qualora mi accorgessi che alcune parti sono un mix tra entity e dataset.
Che ne pensi? Non mi dire che non ti è mai capitato ;-)
Gravatar
# re: My life with TDD
Alessandro Melchiori
13/12/2008 11.34
  
@Mario: potrei stare a parlarti del BDD e potrei dirti che è la risposta alla tua domanda...ma non lo faccio (anche perchè non è così semplice)
Quello che ti dico è che, come in tutte le cose, ci vuole esperienza e applicazione e il TDD non esula da questo contesto. Non pensare che utilizzando TDD tutti i tuoi problemi si risolvano in un click...ne servono almeno una decina ;-)
Gravatar
# re: My life with TDD
Raffaele Rialdi
13/12/2008 11.45
  
@Alessandro. In team grossi capita spesso di avere forti differenze tra le persone. È impossibile pensare di applicare una metodologia che richieda un livello omogeneo di conoscenza della metodologia stessa.
È la metodologia che deve garantire che le differenze nel team vengono livellate e non viceversa!

DataSet e ORM nello stesso codice? La vita reale è fatta di compromessi quindi capita di vedere queste cose e non per queste faccio lo schifiltoso. Se non è possibile cambiare il codice, si fa anche convivere il dataset con orm. Ricordiamoci che i costi del cliente vengono prima e che ovviamente i costi sono quelli del ciclo di vita completo del software e non della prima consegna.
Gravatar
# re: My life with TDD
Matteo Baglini
13/12/2008 16.03
  
@Raf: "...si fa anche convivere il dataset con orm...Ricordiamoci che i costi del cliente vengono prima e che ovviamente i costi sono quelli del ciclo di vita completo del software e non della prima consegna."
Ma se una applicazione è così eterogenea il suo sviluppo è più complesso, quindi i costi di sviluppo sono maggiori già in partenza.
Se vuoi che il tuo DM funzioni in maniera identica sia se passa dall'ORM sia dai DataSet come ti comporti?
Banalmente crei un'astrazione sull'accesso ai dati che ti permette di lavorare in maniera omogenea.
Il bello del TDD è che ti guida a creare in modo corretto (dal punto di vista del design) questa astrazione.
Gravatar
# re: My life with TDD
LudovicoVan
13/12/2008 16.10
  
> Il bello del TDD è che ti guida a creare in modo corretto (dal punto di vista del design) questa astrazione.

Ma questo e' un mito, che nasconde un fraintendimento.

-LV
Gravatar
# re: My life with TDD
Luca Minudel
13/12/2008 16.50
  
@Raffaele

la battuta c'era - mi piace scherzare e lo faccio alla leggera perchè so la reciproca stima e rispetto che ci lega

la parte seria è che ti assicuro che hai frainteso come funziona il TDD - se fosse come dici avanzerei obiezioni credo simili alle tue

il tdd essendo fortemente basato sulla pratica è una delle cose che leggerla da un libro o vederla da chi sta iniziando ad applicarla autonomamente senza la guida di un vero esperto è come non conoscerla

se dicessi cose sul linguaggio assembler, sul hacking e sulla sicurezza dove sei esperto ti accorgeresti in un attimo anche tu di cosa ho franteso alla grande allo stesso modo in cui lo noto nelle tue affermazioni

ti invito a visitare a Milano Matteo Vaccari (ci trovi Ganci e Carpentieri) alla Sourcesense o a venirmi a trovare a Stoccolma tra qualche mese e dopo aver visto le cose dal vivo sono sicuro solleverai obienzioni sensate e magari suggerimenti utili
Gravatar
# Re: My life with TDD
Roberto Messora
13/12/2008 16.58
  
mah...
posso sbagliarmi ovviamente, ma le risposte che date mi danno l'idea che avete soprattutto lavorato con team omogenei, perchè la realtà nei team disomogenei è del tutto diversa.
ho lavorato in un'importante banca e vi posso garantire che realizzare un porting da asp ad asp.net in 6 mesi con persone che non si erano mai viste prima (eravamo in 7), con differenti livelli di skill (c'era ad esempio una persona che lavorava professionalmente da nemmeno un anno), non è qualcosa che puoi affrontare dicendo "bene queste sono le regole e le metodologie, bisogna adattarsi". in quel caso ad esempio mi sono dovuto adattare a sviluppare in vb.net (che personalemente non apprezzo), perchè la maggior parte dei componenti del team aveva skill in quel senso, e abbiamo lavorato con un classico dal di classi idratate da dataset. il progetto è stato un successo, nel senso che il portale è andato in produzione quando doveva andare e nessuno degli utilizzatori finali si è accorto della differenza.
ogni progetto fa storia a sé, sia in termini di requisiti, sia in termini di vincoli, stakeholders e team. Non è in nessun modo possibile pensare di approcciare ogni progetto allo stesso modo, a meno che non ci sia stabilità nell'ambiente di lavoro e nella committenza (ad esempio il dipartimento IT di un'azienda che ha come cliente solo l'azienda stessa e le persone del team sono più o meno sempre le stesse).
il tdd non è un costo in assoluto, è un costo in alcuni progetti, mentre è un vantaggio in altri. e non è nemmeno l'unico modo per stare dietro a progetti con rilasci frequenti, visto che proprio in questo periodo sto lavorando ad un progetto che ha rilasci ogni 10 gg circa, non facciamo TDD, avendo cmq una batteria di test di regressione. e facciamo cmq design.
Ribadisco la mia posizione in senso di gestione dei progetti: noi facciamo molto bene il nostro lavoro soprattutto se scegliamo bene e con giudizio gli strumenti e le metodologie in relazione al progetto ed al suo contesto, e non se applichiamo lo stesso modello sempre e comunque.
questo ovviamente implica che dobbiamo conoscere n metodologie ed m strumenti differenti, compito impegnativo certo, ma nessuno ha detto che il nostro lavoro sia facile.

saluti
Gravatar
# re: My life with TDD
Raffaele Rialdi
13/12/2008 20.02
  
@Matteo. Prima di tutto voglio ricordare che non sono affatto un estimatore del dataset e nel 2005 (data management workshop) sono stato tra i primi a parlare di orm in una sessione UGI.
Non tutte le applicazioni nascono da zero. Se ti trovi davanti ad un progetto iniziato in quel modo, ti adegui cercando il miglior compromesso. Voglio dire che non si può avere la puzza sotto il naso solo perché esteticamente non è bello. Guardiamo al sodo e cerchiamo di trovare la migliore soluzione per il cliente che non necessariamente coincide con la soluzione architetturalmente migliore.
I costi in partenza quindi ci sono già stati e non puoi pensare di buttare via tutto e ricominciare.
Il TDD ti può certamente guidare in questi casi ma fino a che qualcuno non butta giù delle regole su quando si può usare e quando no, rimane una roba fumosa e basta.

@Luca. Lo scherzo ci sta ma se poi non spieghi non è più uno scherzo.
Io non so quanto fossero skillate le persone da cui ho visto TDD, ma mi sono documentato come faccio per mia abitudine e quanto ti ho scritto è ripetuto fino alla nausea anche su wikipedia, sito agile movement, etc. Quindi non credo proprio di aver scritto cose sbagliate.
Il problema è che qui nessuno a parole sta dando delle motivazioni concrete alle mie obiezioni.

@Roberto. Quoto ovviamente. L'eterogeneità dei team è una cosa normalissima e il compromesso è fondamentale, anche nell'uso di linguaggi o tecnologie differenti dalle più appropriate.
Nei team grossi l'omogeneità è al limite dell'utopia per quello che è la mia esperienza.
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 4.10
  
@Raffaele


"Quindi non credo proprio di aver scritto cose sbagliate."

appplico pratiche agili da 6 anni, faccio parte di un team agile da 3 anni, sono certificato da un istruttore di fama internazionale, ho partecipato a scuole europee

capisco che hai letto wikipedia, ma se non ti fidi della mia esperienza di agilista quando ti dico che mom è corretta l'interpretazione che dai del tdd ( che uso tutti i giorni ) non so cosa altro posso dirti

potrei provare qui a entrare nel merito, ho provato a farlo in sintesi nel primo post, se quello non è bastato evidentemente servirebbe almeno una bella parlata a voce

devo accontentarmi di metterti solo la pulce nell'orecchio - consideralo un segno di fiducia nella tua intelligenza e curiosità
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 4.19
  
@Raffaele

"L'eterogeneità dei team è una cosa normalissima"

anche la cattiva programmazione è una cosa normalissima - quando comeprofessionista puoi offrire una alternativa economicamente più vantaggiosa sicuramente trovi molti imprenditori interessati alla alternativa

ecco perchè molte aziende si stanno adoperando per avere team omogenei di gente skillata - perché conviene

ecco perchè nokia, samsung e anche ricsson si stanno adoperando per adattare pesantemente tecniche agili e nel mondo sempre più aziende stanno cambiando ilmodo di programmare

non c'è più da difendere se funziona o no , sono i fatti a dimostrarlo perchè è il mercato che lo chiede, il punto ormai è diventato "come farlo bene e nel modo giusto"

Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 4.22
  
questo non significa che risolve tutti i mali.

dato un problema specifico si può vedere se i metodi agili possono aiutare a risolverlo o no.

ma parlando in via teorica come in questo post, sembra che la posizione che pesa dipiù sono le numerose aziende che alla prova dei fatti sono soddisfatte e spingono per ampliare la adozione di queste pratiche
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 4.24
  
quindi se descrivi un problema posso pensarci e provare a dirti se le pratiche agili possono dare un aiuto a risolverlo oppure no
Gravatar
# Re: My life with TDD
Roberto Messora
14/12/2008 11.35
  
Luca, perdonami, stai facendo dellampolemica che reputo fine a se stessa.
Non capisco perchè ti ostini a portare esempi: nessuno sta deicendo che i metodi agili (che ustilizzo anche io fra l'altro) non siano vantaggiosi, quindi non capisco tutte queste puntualizzazioni.
Io vedo ancora troppo spesso progetti e team che partono da idee preconcette, dove ognuno va per la sua strada e alla fine chi ci rimette è il cliente.
Il TDD _NON_ è l'unico strumento che possa rendere un progetto di successo. Punto.
L'unico strumento che può rendere un progetto di successo è il buon senso e la buona gestione.
Ci sono decine di modi per essere agili, ognuna è una sfumatura dell'altra: c'è chi non fa pair programming, c'è chi non fa TDD (come me ad esempio), c'è chi fa TDD, c'è chi fa XP puro, c'è chi utilizza gli use case, c'è chi utilizza le user stories, c'è chi è orientato al MDD (come Ambler ad esempio).
La verità è che come ho già detto ognuno di noi dovrebbe conoscere quanti più strumenti e metodologie possibili.
In modo da poterle utilizzare all'uopo secondo quelle che sono le esigenze del progetto.
Quello che desumo da questo thread è che la nostra categoria è ancora troppo legata ai tecnicismi e veramente troppo poco orientata alla gestione di progetto, questo sinceramente mi preoccupa non poco.
il TDD è un tecnicismo, che va padroneggiato, come vanno padroneggiati altri tecnicismi, ma non è l'unico e non sarà mai l'unico (tanto è vero che esistono mille altre metodologie tecniche di evoluzione di una soluzione software).
Fra l'altro quello che mi stupisce è che al primo posto nelle metodologie agili c'è "Individuals and interactions over processes and tools" e invece tutte le volte che si parla di agilismo emergono solo e soltanto i processi e gli strumenti.
senza tacere di uno dei principi conseguenti ovvero il team che si autoorganizza, e mi domando come possa autoorganizzarsi un team a cui viene imposta una metodologia.
Fuori dai denti ti dico che l'agilismo come movimento mi sembra si stia sclerotizzando su processi e strumenti e stia perdendo la sua forza basata proprio sulla rottura di schemi precostituiti.

saluti
Gravatar
# re: My life with TDD
Raffaele Rialdi
14/12/2008 11.49
  
@Luca
La mia lettura non è certo quella di Wikipedia. Ho letto un libro su metodologie agili che parlava anche di TDD.
Ho detto invece che il processo iterativo è talmente noto da essere presente su wikipedia. La cosa è ben diversa.

Io non metto in dubbio che tu sia preparatissimo sull'argomento. Quello che dico è che ho portato delle obiezioni e mi sento solo dire "vieni a vedere" invece di motivazioni concrete che controbattano le mie obiezioni.
Se ci sono soluzioni ai punti che ho sollevato, sono molto curioso di conoscerle.

"eterogeneità". Io vado in giro e tutto questa ricerca di avere team omogenei non la vedo affatto. Ad ogni modo è comunque utopica questa ricerca perché ci sono persone che tornano a casa la sera e si leggono un libro su Linq e altre a cui non gliene può fregare di meno.... e questo è perfettamente normale.
Quando ci sono 60, 100 persone in un team non avrai mai un team omogeneo e la metodologia deve dare risposte a queste differenze. Se la metodologia invece pretende omogeneità e forti skill sulla metodologia stessa, IMHO è destinata a grossi errori.

"difendere se funziona o no". Stai generalizzando. Io non ti sto dicendo che non funziona mai. Io voglio vedere regole per discernere i casi in cui può essere applicata e i casi in cui non può.
Nokia ed Ericsson non fanno testo in quanto aziende grosse. L'efficacia dipende dal tipo progetto e non da quanto sono famose, altrimenti sembra solo un advertising.
E poi il mercato chiede l'isola dei famosi, quindi lasciami dire che "la moda" è tutto fuorché un indicatore serio.

"non significa che risolve tutti i mali". Luca, ci vogliono regole che definiscano quali tipi di test (di disegno o funzionalità), come redigerli, cosa fare quando questo non è possibile o non è conveniente.
I casi li ho già scritti in questo lunghissimo post.
Tanto per citarne uno nuovo, ho svilppato un controllo in cui la "morbidità" delle figure disegnate è un requisito primario. La cosa è complessa ed è ho dovuto scrivere una lunga serie di algoritmi per cercare la soluzione. Purtroppo il risultato non è misurabile matematicamente e l'eventuale confronto con degli schemi di riferimento sarebbe costato settimane di lavoro.
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 15.48
  
@Raffaele

> mi sento solo dire "vieni a vedere"

è che l'argomento è complesso e discutendone x iscritto non se ne viene fuori. spero alla prima occasione che ci incontriamo di parlarne a voce (magari è l'idea per un panel a un evento MS/Ugi). in alternativa porta un caso singolo e limitato e postalo su www.extremeprogramming.it e riceverai molti feedback curiosi

> "eterogeneità". Io vado in giro e tutto questa ricerca di avere team omogenei non la vedo affatto

i team dove i manager hanno capito che conviene sono mediamente più omogenei nel senso che adottano le medesime pratiche, lo stesso processo, applicano la stessa soluzione a problemi simili, condividono le scelte tecnologiche e le mantengono in modo consistente, scelgono assieme, e comunicano per tenersi aggiornati, pur avendo diversa esperienze/conoscenze/seniority la diversità di conoscenze di ogniuno è usata e sfruttata senza creare diversità di ruoli e compiti - di team come questi ce ne sono e nei paesi più avanzati nell'informatica stanno crescendo come funghi

> Io voglio vedere regole per discernere i casi in cui può essere applicata e i casi in cui non può.

hai fatto un ottimo punto

non sono ferratissimo su questo argomento - trovi molti articoli validi su questo tema
un esempio in cui non conviene molto un approccio agile è un progetto sw per un cliente che opera in un mercato/business stabile con cambiamenti rari (che quindi non ci saranno fino alla fine del progetto) e per una applicazione sw che è stata già fatta più volte su quel dominio con quella tecnologia quindi i requisiti non possono cambiare e non ci saranno sorprese

> Purtroppo il risultato non è misurabile matematicamente e l'eventuale confronto con degli schemi di riferimento sarebbe costato settimane di lavoro.


un test che garantisce con certezza che il tuo lavoro è corretto al 100% non esiste, concordo con te.
le cose che potresti fare quando vuoi seguire un approccio TDD in questo caso sono
- scrivede degli unit test di interazione cioè che verificano che gli eventuali oggetti che vengono usati nel calcolo degli algoritmi si chiamano effettivamente nell'ordine e nel modo che ti aspetti (almeno con l'input di in un caso significativo cioè un test case con dei "dati di ingresso" di un caso tipico)

- probabilmente la lunga serie di algoritmi che hai scritto usa/è composto con altri algoritmi più piccoli, puoi fare degli unit test di stato cioè verificare per ogniuno che dato un input producono l'output che ti aspetti (tipicamente per i valori estremi, i casi particolari e un punto centrale/tipico del domonio)

- infine puoi scrivere un test di integrazione che usa tutta la parte non-gui del tuo codice e verifica che ad esempio data una linea, un cerchio e una immagine a tua scelta producein output proprio quello che ti aspetti per i tuoi algoritmi

come divevo questo non garantisce che il tuo lavoro è corretto al 100% o che esiste un altro algoritmo migliore, ma garantisce che dopo aver fatto una modifica al codice del progetto che usa il controllo, quando accade che uno dei test scritti fallisce c'è un problema da risolvere (o si è volutamente cambiato l'algoritmo ossia "le specifiche" e i test vanno aggiornati o molto più spesso c'è almeno un bug)


il solo fatto di scrivere questi test ti spingerà a strutturare il disegno del codice in modo migliore, più facile da capire, evolvere, modificare


un ultimo suggerimento che mi viene in mente, se non lo hai già fatto immagina l'applicazione di metodi agili a tutto il team che lavora al progetto per cui hai sviluppato il controllo invece che unicamente allo sviluppo del controllo che hai realizzato
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 16.20
  
@Roberto

> Non capisco perchè ti ostini a portare esempi

perchè nell'approccio agile teoria e pratica si findono come nelle nella medicina, nella biologia o nella finisca sperimentale - e imho funziona

> Io vedo ancora troppo spesso progetti e team che partono da idee preconcette

concordo - trovo che un talebano XP è più simile a un talebano waterfall che a un agilista

> Ci sono decine di modi per essere agili, ognuna è una sfumatura dell'altra: c'è chi non fa pair programming, c'è chi non fa TDD (come me ad esempio


okkio che x questa strada ci si mette in pericolo - in letteratura il termime usato è ScrumBut XpBut

un coach che ha già guidato più team XP e un team che padroneggia le pratiche come pair e TDD può in casi specifici scegliere quando fare pair e quando no (difficilmente ... quasi mai non si scrivono test unitari e non si fa refactoring, resta il quasi cmq)

ad esempio negli ultimi 3 mesi ho completato user story per 2 funzionalità complicate e rischiose e la data era fissa nel senso che le date dei GP non si cambiano - ho scelto di fare pair e tdd e test di integrazione perché senza ogni tanto mi perdevo, non riuscivo da solo a mantenere la concentrazione e l'attenzione al 100% cosi a lungo per cosi tanti dettagli e senza test reintroducevo problemi che avevo risolto prima e poi mi qualche volta "dimenticavo" le scelte di specifica/implementazione (ce ne erano da fare molte decine e differivano per dettagli minimi quasi indistinguibili)
durante i test di integrazione meno critici ci dividevamo, durante gli spike e le esplorazioni per indagare soluzioni differenti ci dividevamo, durante sviluppi semplice che non richiedevano grossi sforzi ci dividevamo.
le pratiche collettive richiedono molta disciplina e quando si lavora da soli come sai anche tu in quanto navigato, responsabile e senior, capita di partire per la tangente quindi anche queste deroghe si prendono ascoltando l'opinione di una seconda persona non alla tastiera e quindi predisposta a guardare la big-picture invece che farsi distrarre dai dettagli


un team che sta imparando a diventare agile, che non ha la guida di un coach con già diverse esperienze su più team agili, quando sceglie di applicare una pratica che non padroneggia non ha modo di distinguere quando non sta applicando correttamente una pratica perché deve ancora farla propria o quando in quel momento conviene non applicarla e il team rischia la deriva.


i metodi agili si basano su processi che si adattano al caso specifico facendo retrospective e quartly meeting. la padronanza delle pratiche e della metodologia o la guida di un coach/istruttore esperto è un presupposto necessario.
ignorare per tutto il progetto o peggio per tutti i progetti una pratica che non si conosce e non si padroneggia significa cadere nel preconcetto abbastanza comune del "noi qui siamo diversi" e "qui da noi non serve" invece del più utile "abbiamo una cosa nuova da imparare" e "questa difficoltà possiamo superarla invece che subirla"
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 16.23
  
typo: quando sceglie di _NON_ applicare
Gravatar
# re: My life with TDD
Raffaele Rialdi
14/12/2008 16.34
  
@Luca
"eterogeneità". Il continuo ricambio nei team rende poco stabile l'omogeneità. E le esperienze comunicate purtroppo dipendono troppo dalla recettività del singolo.
Idealmente quello che dici è fantastico. Nella pratica, soprattutto per quello che è il mercato del lavoro italiano, è al limite dell'utopico.

Test su algoritmi critici. Certo puoi eseguire tanti test a contorno, ma purtroppo non sono sufficienti a darti una garanzia anche se parziale. Questo è uno di quei casi in cui il test a posteriori funziona bene e qualunque cosa fai prima rischia di essere solo tempo buttato via. L'evidenza della validazione in ISO9001 è un passo fondamentale. Basta farlo e documentarlo e non c'è nulla di terribile.

Voglio sottolineare che nelle metodologie tradizionali il test c'è eccome. Io dico che spesso conviene farlo dopo perché non hai modo di farlo via unit testing e quindi è impossibile costruirlo a priori.

Inoltre ho spesso eseguito anche unit testing a posteriori e la mia esperienza è che conoscendo l'algoritmo che hai già scritto puoi costruire test migliori. A priori è possibile che una delle casistiche venga ignorata o sottovalutata.

Comunque, onde evitare di spammare il blog di Alessandro, rimanderei la discussione alla prima occasione.
Gravatar
# Re: My life with TDD
Roberto Messora
14/12/2008 17.06
  
Luca,
vedo che siamo sempre in disaccordo, tu parli troppo di pratiche e di processi, a mio avviso questo è un limite.
come ti dicevo noto che anche nel mondo dell'agilismo ci si sta sclerotizzando in questo senso, in genere questo è il primo passo verso l'insuccesso.
che poi nel tuo team le cose funzionino non c'entra davvero nulla, proprio perchè il tuo team, dal punto di vista del materiale "umano", è stato in grado di adattarsi ad una serie di metodologie che funzionano in quell'ecosistema.

saluti
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 17.18
  
@Roberto

indirizzo anche te a www.extremeprogramming.it

magari è il mio modo di comunicare che non è efficace qindi il suggerimento è di confrontarti anche con altri agilisti

il metodo empirico, le pratiche e le persone che isieme fanno emergere il processo sono punti focali dei metodi agili

non è obbligatorio essere d'accordo con questo - magari basta renderne atto e sapere che quanto si stà perseguendo non ha a che fare con l'agile

Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 17.56
  
> si stà perseguendo non ha a che fare con l'agile

mi spiego

se dici
- sono soddisfatto col modo di lavorare che ho e con l'esito dei miei processi e non credo che lavorare in Agile mi aiuti/serva

rispetto questa posizione al 100% e non ho difficoltà a crederti


- i metodi agili non funzionano o non servono o non sono utili in generale

potrebbe essere una intuizione vera, magari dalle tue critiche possono esserci spunti per migliorare e evolvere i metodi agili o anche superarli - in questo caso è utile fornire delle casistiche significative e delle argomentazioni a supporto della tesi e magari coniugarle con la casistica e le argomentazioni che vengono usate ora e sono comunemente accettate


- applico i metodi agili e secondo me vanno applicati in questo modo e non in quello

ho interpretato cosi la tua affermazione e ho notato delle differenze rispetto alla comprensione dei metodi agili che ho e le ho annotate

cosi come accade nello sport o in ogni disciplina ogniuno riconosce delle persone come guide-coach-riferimenti affidabili, è con loro che potresti confrontarti
il suggerimento è avere dei riferimenti in carne e ossa più che libri con cui è possibile vedere le cose in pratica e provarle cosi come uscire sul campo con un istruttore i mountain-bike funziona 100 volte meglio che leggere 100 libri sull'argomento
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 18.41
  
@Alessandro Pulvirenti

> spero d’aver contribuito alla discussione.

nei metodi agili la pratica ha un ruolo centrale e da ogni experience report si possono trarre indicazioni utili. quindi imho si :)


mi sono trovato d'accordo con le tue affermazioni, in 3 punti mi è sembrato di leggere una cosa differente da quanto è capitato di osservare a me
provo a ripostarle qui



> 2) Nel testare le applicazioni dipendenti dal contesto che in genere sono quelle in cui l’interazione la fa da padrone (come testare un videogioco in cui il personaggio che gioca sia in un ambiente 3D o in un altro);

ho sentito parlare di un intero dell'agile dedicato allo sviluppo di videogiochi
linko il primo esempio che trovo: http://www.agilegamedevelopment.com/
qui in ugi vc'era qualcuno che lo faceva


> 3) Nei punti chiave dell’applicazione e tralasciare le altre parti.

questo è un approccio pragmatico condivisibile e magari desiderabile
nella pratica ammetto che ho visto questa affermazione usata il più delle volte come scusa per tralasciare punti che conviene coprire con i test.
più raramente ho visto fare questa affermazione a proposito, quelle volte è stato da parte di coach molto esperti/capaci



> Ricordo che non tutte le applicazioni debbono essere indipendenti da: • L’interfaccia grafica; ...
il basso accoppiamento è un attributo del buon disegno, poter testare in modo unitario una classe senza chiamare in causa GUI o db è cosa buona sempre.
rendere a priori una applicazione generica in modo che sia sempre possibile passare ad esempio da SqlServer a Oracle o da WebForm a WPF come dici tu non è necessario per tutte le applicazioni
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 18.52
  
@Roberto

sull'esempio del progetto sulla banca che hai riportato: concordo con l'approccio che hai seguito e descritto nel post
a londra molrte banche di affari si stanno atrezzando per avere team omogenei, diciamo pure agili, perché credono che siano più produttivi


mi scuso se "spammo" questo post di melkio - è che qui ci sono tante opinioni differenti e interessanti e persone capaci

non ho resistito alla tentazioni di confrontare le opinioni diverse
Gravatar
# Re: My life with TDD
Roberto Messora
14/12/2008 19.23
  
Luca,
permettimi di puntualizzare ancora una volta.
l'agilismo si basa su 4 principi da cui ne derivano un'altra decina di corollario.
quello che noto dalle tue risposte è una certa incoerenza, nel senso che continui a rimandare al sito più in vista dell'agilismo, dove quei principi sono la prima cosa che viene messa in evidenza. ma dall'altra parte affermi anche con forza alcune metodologie che ricadono nella categoria "processes and tools".
qui non stiamo discutendo dell'agilismo, mi sembra che tu stia facendo un po' di confusione in termini.
io stesso adotto l'agilismo, ergo su questo fronte sfondi una porta aperta.
io sto contestando, e penso a ragione, il fatto che tu stia calcando la mano su alcuni specifici processi e strumenti.
il TDD è uno strumento, ed in quanto strumento va in secondo piano in un ambito agile, lo afferma in maniera netta e chiara il primo principio dell'agilismo stesso.
ribadisco che mi sembra tu stia confondendo l'agilismo con alcuni processi e strumenti che permettono di essere agili, rendendoli intercambiabili, come fossero sinonimo. secondo me è un errore notevole.
e se mi parli anche di discussioni che vedono in malo modo "xp but", bene, sono totalmente in disaccordo pure con questi, perchè, seppur non le abbia seguite, mi suonano come "non sono pure ergo non sono agili". questo approccio a mio modo di vedere è totalmente sbagliato e dannoso.
il fondamento dell'agilismo è basato sul materiale umano del team e sul rapporto con il cliente, _NON_ è fondato sugli strumenti e sui processi, o meglio _NON_ è fondato su particolari strumenti e processi.
e questo lo dicono i primi 4 principi fondati dell'agilismo.
io mi reputo un agilista, e proprio per questo aborro la china che prende la sclerotizzazione dell'agilismo in merito ai processi e agli strumenti.
spero sia chiaro il mio pensiero.

saluti
Gravatar
# re: My life with TDD
LudovicoVan
14/12/2008 20.08
  
A parte che sono d'accordo sulla questione agilita' =/= processi e strumenti, tant'e' che continuo a ribadire la necessita' di ritrovare il giusto focus sul concetto di "qualita'", nessuno ha risposto/commentato su questo punto:

> non ne faccio solo una questione concettuale perche' ho riscontrato questa "anomalia" anche nella pratica, e cioe' nella necessita' di fare disegno a monte.

Mi riferisco al fatto che non puoi semplicemente sederti a tavolino, leggere la specifica e partire a scrivere il test: ti tocca comunque fare disegno. E questo tende a invalidare il concetto stesso di TDD proprio nei sui punti fondamentali.

-LV
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 20.45
  
@Roberto

ora il tuo punto di vista mi è davvero più chiaro e cosi credo di capire meglio quanto scrivi (rileggerò sicuramente i tuoi reply per capirli meglio ora)

permettimi di provare a chiarire alcune terminologie dei metodi agili che possono aiutarci a capirci



il sito a cui rimando www.extremeprogramming.it è un forum in cui puoi trovare altri interlocutori agili con cui confrontarti e una varietà di posizioni quella che ho scritto (la verità in tasca non cel'ho e posso sbagliare pure io, insieme è + facile imbroccarla giusta) - probabilmente lo stai confondendo con l'altro sito http://agilemanifesto.org/

> l'agilismo si basa su 4 principi
i 4 che citi sono valori non principi, i principi sono 12 (secondo l'agile manifesto generale, mentre per l'XP in specifico ci sono 6 valori e 14 principi secondo Kent Beck )

> il TDD è uno strumento
il TDD è una pratica e non uno strumento
senza le pratiche i valori e i principi di prima restano solo astrazioni teoriche, per questo le pratiche sono molto importanti

con la parola 'strumenti' (tool) la terminologia agile intende i tool software non le pratiche come il tdd

il TDD in particolare è una pratica fondamentale per XP cioè è necessario averne padronanza e di default si impiega, solo un coach esperto in base al feedback dalle retrospective può valutare per un preciso progetto in una specifica iterazione per una data user story se derogare; e anche quando il coach stà formando un team agile può decidere da che pratica cominciare la formazione e l'adozione e in questo caso _non_ è detto che la prima sia il TDD, di sicuro _non_ va tralasciata

> (l'agilismo) _NON_ è fondato su particolari strumenti e processi
su strumenti no, su pratiche come il tdd si e sia XP che scrum hanno un processo base del quale serve avere padronanza e solo in seguito adattare. come dicevo in fase di formazione il processo si inizia a imparare e applicare un pezzo alla volta



se ti interessano riferimenti per approfondire la cosa chiedi pure
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 20.55
  
@LudovicoVan

questo schema http://www.extremeprogramming.org/map/code.html mostra come prima di cominciare la scrittura del codice c'è una fase di design (qui con le crc card maa carta e penna o a parole o davanti all'editor se c'è già del codice va cmq bene)
anche in ogni momento durante la scrittura del codice quando una cosa non è chiara conviene fermarsi e fare design (con CRC, a carta e penna o a parole) e ricominciare solo quando è diventato chiaro come procedere

il tdd non è in contrasto con questo modo di procedere anzi questo modo di fare è suggerito già dalla nascita di xp




Gravatar
# re: My life with TDD
LudovicoVan
14/12/2008 22.25
  
Luca, le CRC sono per tutt'altro che documentazione di design, nascono in particolare per favorire la comunicazione con il cliente in sede di analisi OO, cioe' siamo alla specifica non al design: due livelli non solo di dettaglio ma proprio di astrazione diversi.

Posso capire l'intento, e cioe' quello di fare disegno minimale, ma non posso che confermare i miei dubbi su quelli che per me sono fraintendimenti di base.

Con questo non voglio mettere in dubbio che tu stia partecipando a progetti di successo, ma mi piacerebbe molto vedere direttamente come lavorate, perche' la mia impressione generale (sull'agilita' ecc.) e' che i progetti/processi che funzionano sono tali e quali a quelli classici *proprio in cio' che conta davvero*, ed e' il vocabolario piu' che altro ad essere stato riscritto e spesso stravolto.

-LV
Gravatar
# re: My life with TDD
Luca Minudel
14/12/2008 23.38
  
le crc (di rado) e pennarello e lavagna (più spesso) le uso per fare design in team

certo la comprensione dei requisiti va affrontato prima

avvere user story piccole e rilasciare spesso aiuta ad accorgersi presto quando ci sono errori o fraintendimenti - resta comunque la necessità di capire il dominio
anche la vcinanza con il cliente aiuta molto
Gravatar
# Re: My life with TDD
Roberto Messora
15/12/2008 1.31
  
Luca, da quello che scrivi mi rendo conto che siamo proprio in disaccordo sulla natura dell'agilismo.
soprattutto non capisco la distinzione che fai fra strumento e pratica, visto che per l'agilismo si parla cmq di favorire le persone "over" sia strumenti, ma anche processi, e il tdd, quando lo definisce una pratica, ricade comunque nei processi (processi e pratica sono sinonimi).
da quello che scrivi mi risulta chiaro che tu consciamente associ l'agilismo a determinate pratica in maniera abbastanza indissolubile, quando invece io credo che questo legame debba necessariamente essere più lasco.
non metto in dubbio che dati i principi dell'agilismo, certe attività siano bene o male codificate, ma ribadisco che noto una certa sclerotizzazione in questo, cose che ovviamente non mi piace affatto.
credo che siamo arrivati a capirci alla fine, nel senso che oguno di noi ha evidenziato una serie di spetti che ne hanno tratteggiato il quadro "filosofico" chiamiamolo così.
semplicemente non siamo d'accordo l'uno con l'altro.

saluti
Gravatar
# Pensieri sul TDD (IMHO)
Pingback/TrackBack
15/12/2008 10.12
  
Pensieri sul TDD (IMHO)
Gravatar
# SubText 2.1 supporta fino a 58 commenti per post!
Technology Experience (Reborn)
15/12/2008 12.01
  
SubText 2.1 supporta fino a 58 commenti per post!
Gravatar
# re: My life with TDD
jack
02/08/2009 16.09
  
Gucci GG Monogram Lomg Wallet - Bow Tie 167464-1000 Online Sale Louis Vuitton Cosmetic Pouch M47515 Online Sale Gucci Abbey Wallet 141410-1000 Online Sale Gucci Horsebit Flap Wallet 146207-9791 Online Sale Louis Vuitton Pochette Wallet M61734 Online Sale UGG Women's Goldeneye black 5199 BLACK Online Sale Louis Vuitton Porte - Monnaie Accordeon M58007 Online Sale Tiffany&Co Loving Heart Charm AC031 Online Sale Gucci Mini Flap Rench Wallet 181644-9643 Online Sale Gucci Checkbook Wallet 05479-1000 Online Sale Gucci Key Holder 170383-1000 Online Sale Mont Blanc Fountain Pen-Meisterstuck 01518-SN8 Online Sale Louis Vuitton Zipped Compact Wallet N61668 Online Sale Louis Vuitton Zipped Compact Wallet M61667 Online Sale Louis Vuitton Tulum GM M40075 Online Sale Louis Vuitton Porte Tresor International M61217 Online Sale Tiffany&Co MAN IN THE MOON Pendant NET100 Online Sale Gucci Abbey Medium Messenger Bag With Single Adjustable Strap 131326-1000 Online Sale Louis Vuitton Astrid Wallet M61781 Online Sale Mont Blanc Ballpoint Pen-Boheme 09926-SN28 Online Sale Mont Blanc Ballpoint Pen-Starwalker 08857-SN24 Online Sale Mont Blanc Ballpoint Pen-Solitaire 38254-SN6 Online Sale Louis Vuitton Keepall 55 M41414 Online Sale Louis Vuitton Reade PM M91088 RED Online Sale Tiffany&Co 5 Sevillana Bracelet BRT082 Online Sale Louis Vuitton Sac Chasse M41140 Online Sale Tiffany&Co DONUT CHAIN Bracelet BRT060 Online Sale Tiffany&Co Equus Ring RN024 Online Sale Louis Vuitton Trolley 50 Bosphore M23259 Online Sale
Gravatar
# re: My life with TDD
kidsjobs
12/10/2009 4.01
  
SDDDDDDDDDDSAYour boxer is very brainy dog training way and you ought commence boxer dog training after he comes the age of 13 to 16 weeks. He is very energetic and playful and will be your loyal pet. Once he grows a desiring for you, his friendship will reach till the end. The individuality of your Boxer is his deficiency for a lot of attention and training. His intelligence will be useful in your training but at the same time, he will exercise it for receiving what puppy training he wants. Your Boxer dog can be accustomed to generate him a good guard dog. Though the Boxer dog arises to be aggressive, he is more playful than other dogs. If Boxer dog training is given properly, he may be controlled from being aggressive and doing harm to teach dog tricks.
Because of his intelligence, your Boxer may not heed with you after you ask him to do a definite thing. The best advice below these circumstances is to save patience. Boxer dog training must commence after he comes the age of 6 weeks and your training ought consist of socializing, playing, training and obedience training. But the training process must be progressed to with dog behavior training so that he will have a movement to listen.The overall rate of success of these weight loss software which are always competing with each else is many or less the same. And the most humorous portion is that these software everybody fail at the equivalent hurdle despite making genuinely tall claims to lose weight.When you activate off or enroll within a weight loss program that has been hyped up towards the atmosphere, you shall activate losing weight fast and for the former ten days or 14 days, you shall be losing weight at a rapid pace to find how to lose weight. And otherwise suddenly you shall beaten the dreaded plateau and most weight watchers allegation that during this plateau fat loss slackens down or belly fat, gradually becomes stagnant or stops completely! And the obese specified gets stuck at that point despite persisting with the exert program and dominated diet.What are some accessible jobs for kids? The most of jobs for 14 year olds, look to fast nourishment bistros for work. Some children may get jobs in the retail commerce like apparel stores or other jobs at the malls. But there is a group of children aged 13 to 16 that have a hard time finding jobs for 16 year olds.What if your child doesn't desire to work in a bistro or can't? What are some accessible jobs for children age 13 to 16? children this age can be a large help around the house - somebody else's house. Cutting lawn, shoveling snowfall, doing light backyard work can make a kidager some good money throughout the year.
Gravatar
# wow gold
wow gold
15/10/2009 4.38
  
However mean your aion gold life is, meet it and live it as taking away cheap wow gold along with the wind,just live together with aion kina; do not shun it and call it hard names when you see Warhammer Gold. It is not so bad as you are,maybe you buy wow gold on the way to Metin2 yang E-shop. It looks poorest when you are richest,so you have to buy cheap wow gold.The faultfinder named Aion Kinawill find faults in paradise of cheap aion gold.Love your life every time of sharing cheapest wow gold, poor as it is. You may perhaps have some pleasant for world of warcraft gold, thrilling, glorious cheap aion kinahours, even in a poorhouse withaion kina together. The setting sun is reflected from being buy aion kinagold among the windows of the alms-house as brightly as from the rich man's abode; the snow melts before its door as early in the spring. I do not see wow gold for salebut a quiet mind may live as contentedly there, and have as cheering thoughts, as in a palace as you Buy Warhammer Gold.The town's poor seem to me often to live the most independent lives of any,and cheerup for Wow Gold. May be they are simply great at www.game4power.com enough to receive without misgiving. Most think that they are above being supported by the aion kina guide town; but it often happens,take cheap aion gold for instance that they are not above supporting themselves by dishonest means of cheap aion kina. Which should be more disreputable. Cultivate poverty like a garden herb, like sage. Do not trouble yourself much to get new things just as wow gold cheap, whether clothes or friends, Turn the old, return to them. Things do not change anything; we change. Sell your clothes and keep your thoughts just for aion kina news time.

Gravatar
# re: My life with TDD
asdfasfadf
12/11/2009 7.55
  
香榧,绍兴诸暨香榧
the best wow Private servers and a good wow private server , enjoy your wow server life.Vinyl floor tile,Vinyl floor tile provider seo
实验室设备,各类实验室设备。杭州鲜花,杭州鲜花在线预定
各种商务英语培训,外贸英语学习网站,英语口语训练基地,英语培训学校,英语口语培训老师,赴美带薪实习计划,我们都能帮你实现。塑胶地板,杭州印刷
四(三苯基膦)钯贵金属催化剂、医药碘化铑中间体及原料药的研究和生产,目前已形成数个系列、数十个品种的有色及贵金属催化剂、铂系列抗肿瘤医药中间体等产品,公司目前产品有三苯钯炭基膦氯铑、醋酸铑、醋酸铑铑炭、碘化铑、(1,5-环辛二烯)三苯基膦氯化铑、二(三苯基膦)二氯化钯、三(二亚苄基丙酮)二钯,铂炭、四(三苯基膦)钯、dppe二氯化钯、1,1'-二(二苯膦基)二茂铁二氯化钯二氯化钯、氯亚铂酸钾、钯炭、醋酸钯、铑炭、钌炭、钌炭二(三苯基膦)二氯化钯、雷尼镍、硝酸钯、顺铂、卡铂、三(二亚苄基丙酮)二钯奥沙利铂等数个系列辛酸铑数十种产品
杭州杭州写字楼写字楼,杭州写字楼出租,杭州写字楼出租,杭州写字楼租凭,杭州写字楼租凭,杭州办公楼出租,求租办公楼杭州办公楼租凭厦有着优秀的物业配置:配有客梯、货梯、智能布线、防雷接地系统、杭州办公楼,计算机控制中心、互联网专线、IP电话、语音专线、杭州办公楼出租,局域网、大型发电机等公用设施,杭州办公楼租凭,中国电信、中国联通、写字楼出租,网通、铁通的电话和有线宽带服务均已接入我大厦并投入运行,办公楼出租,并配有大型停车场、各楼层独立的公共休闲区及配套员工餐厅等,求租写字楼聘请了有资质的优秀物业管理公司进行管理,adsfgfhgfhg
Gravatar
# Tramadol.
Tramadol.
21/11/2009 17.12
  
Tramadol.
Gravatar
# Amaryl.
Amaryl.
22/11/2009 6.02
  
Amaryl. Amaryl drug interaction.
Gravatar
# Cialis.
Link buy cialis cheap.
22/11/2009 11.07
  
Levitra cialis viagra comparison. Cialis positive side. Buy cialis. Cialis. Cheapest cialis. Cialis and pill splitting.
Gravatar
# Cialis.
Cialis st.
22/11/2009 17.13
  
Metaprolol cialis. Generic cialis apcalis price comparison. Cialis.
Gravatar
# Study of celebrex.
Celebrex side effects.
22/11/2009 19.03
  
Stories about celebrex. Celebrex. Side effects of celebrex.
Gravatar
# Protonix 40mg.
Protonix.
23/11/2009 6.20
  
Protonix pharmacy class. What is protonix. Protonix.
Gravatar
# Amaryl medicine.
Amaryl side effects.
24/11/2009 8.07
  
Amaryl. Amaryl drug interaction. Amaryl side effects.
Gravatar
# Free cialis.
Cialis.
25/11/2009 2.22
  
Cialis. Cheap generic cialis.
Gravatar
# Buying brand name roche valium.
Valium.
25/11/2009 4.45
  
Valium side effects. No prescription generic valium. Valium withdrawal. Order valium online. Can you overdose a dog with valium. Valium patient advice including side effects. Canada valium. Suicide valium. Valium.
Gravatar
# Ephedra.
Ephedra appeite suppress.
25/11/2009 11.17
  
Pennsylvania ephedra lawyers. Denver ephedra attorney. Ephedra yellow jackets. Delaware ephedra lawyers. Ephedra.
Gravatar
# re: My life with TDD
jdfknh
06/01/2010 7.11
  
3rf Make iPhone Ringtone
Custom iPhone Ringtone
Create iPhone Ringtone
Transfer iPhone

Transfer iPhone 3G
Transfer iPhone to PC
Transfer iPhone to Computer
Transfer iPhone Music

Transfer iPhone Photos
Transfer iPhone Video
Backup iPhone
Backup iPhone 3G
Gravatar
# royal degree
royal degree
12/01/2010 15.55
  
sres late paper scaled
Gravatar
# ww.honeyreplica.com
replica handbags
14/01/2010 8.44
  
genayiv0114
Our U.S. Veterans Administration replica

handbags
</br>is a tremendously successful model of American Replica Handbags</br>socialized medicine. And for

anyone replica watches</br>over 65 who condemns

socialized cartier replica watches</br>many

medicine, I would replica watches</br>simply

ask you Wholesale replica handbags</br>how

to pull out your Medicare card Replica Louis

Vuitton
</br>and replica

designer handbags
</br>burn it. Darrell and Bernice Smith Louis Vuitton

handbags
</br>object to the lack of real tort reform in the new replica cartier watches</br>bill, a

significant replica breitling

watches
</br>cost-driver. Darrell related <a href=http://www.rolex-watches-

replica.com>replica rolex watches</br>several outrageous cases replica omega watches</br>where

appropriate care replica watches</br>at top-

flight Harvard hospitals was Omega replica

watches
</br>unjustly attacked in the courts because the Chanel Handbags</br>law allows this Hermes Handbags</br>litigation-as-Lotto

process.
I wish Gucci Handbags</br>that more Gucci replica

handbags
</br>people could listen to gucci handbags</br>
Alexander Wang

</br>the academic doctors — the ones replica prada</br>who

practice Prada

handbags
</br>and teach — replica hermes</br>about

health reform. Otherwise, we can Bottega Veneta

handbags
</br>listen to the pocket-lining naysayers who would make Ebenezer

Scrooge proud. Despite the many replica

burberry
</br>lies that continue to be perpetuated about this legislation, we may

now be headed in the right direction, maybe — Burberry

handbags
</br>at least enough in the Jimmy Choo replica

handbags
</br>right direction to warm the hearts of Jimmy Choo

handbags
</br>an old politician and a medical school professor on a cold Boston

trolley.
Gravatar
# dioxide working comment news
dioxide working comment news
06/02/2010 4.16
  
absolute academies changes scientists microblogging oscillation cost
Gravatar
# re: My life with TDD
chea ugg bailey button boots
07/02/2010 2.35
  
YS0207A9 A friend walk in when the rest of the world walks out.Sometimes in ugg adirondack boots sale life, You find a special friend; Someone who changes your cheap ugg elsey boots life just by being part of it. Someone who makes you laugh until you can't stop ugg broome boots sale ; Someone who makes you believe that there really is good in the world. Someone discount ugg ultra short boots who convinces you that there really is an unlocked door just waiting for you to open it. This is Forever moncler jackets Friendship.when you're down, and the world seems dark and empty, Your forever friend lifts you up in spirits and makes that dark and empty world suddenly seem bright and full. Your forever cheap ugg boots friend gets you through the hard times,the sad times,and the confused times. If you turn and walk away, Your forever http://www.edhardy-buy.com/ friend follows, If you lose you way, Your forever friend guides you and cheers you on. Your forever friend holds your hand and tells you that everything is going to be

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 1 and 5 and type the answer here: