Posts
56
Comments
208
Trackbacks
115
sabato 23 maggio 2009
CodicePlastico @ Agile Testing Days

Come ha già anticipato Ema, ad ottobre saremo a Berlino per la conferenza Agile Testing Days con una sessione su un tema a noi molto caro: Continuous Integration. Sarà una sessione fortemente pratica: 60 minuti per configurare da zero un build server, che oltre alle solite cose (compilazione dell solution, lancio degli unit test, creazione del pacchetto di setup…) si spingerà ben oltre…pensavamo alla preparazione integrata del caffè e al servizio in camera.
Ci stiamo lavorando da un po’…per ottobre forse ce la si fa ;-)

Comunque ci sarà da divertirsi. Non so se per i contenuti della sessione, ma sicuramente per il mio forte accento anglo-bresciano!!!

A presto
melkio

posted @ sabato 23 maggio 2009 10.47 | Feedback (1)
mercoledì 25 marzo 2009
TDD @xpug-bg

Domani sera si terrà un nuovo incontro dell’XP user group di bergamo.
Questa volta avrò il “grande onore”, insieme ad Ema, di poter annoiare i presenti con una tematica che ci sta molto a cuore: lo sviluppo di applicazioni in TDD.
Sarà una sessione slide-less (forse nemmeno quelle di presentazione) e molto, molto codice (almeno, quanto il tempo ci permetterà).
L’obbiettivo della serata è, ovviamente, quello di introdurre i partecipanti a questo mondo, ma, soprattutto, quello di porre l’accento su aspetti che tante volte vengono sorvolati perchè sembrano secondari (quali il ritmo che il TDD “impone”), ma che, dal nostro punto di vista, rappresentano vantaggi indiscutibili derivanti dall’approccio allo sviluppo con questa metodologia…staremo a vedere!

E' l'esordio come speaker in coppia dello zoccolo duro del team e a parte il fatto che saremo gli unici due bresciani in un “covo” di bergamaschi, si preannuncia una bella serata!!!

posted @ mercoledì 25 marzo 2009 20.58 | Feedback (3)
lunedì 23 marzo 2009
Problemi con IE8

Dopo l’installazione di IE8 sul mio pc ho avuto alcuni problemi con il suo utilizzo:

  1. non era possibile aprire nuove tab cliccando su link di pagine web (la tab veniva effettivamente aperta, ma rimaneva perennemente in stato “connecting…”)
  2. windows explorer, di punto in bianco, ha pensato che era meglio visualizzare il contenuto di ogni folder selezionata in una nuova window

Come al solito San Google è venuto in mio aiuto segnalandomi la soluzione ai miei problemi:

  • Start –> Run –> Cmd (run as administrator)
  • regsvr32 actxprxy.dll

…e si ritorna a lavorare :-)

posted @ lunedì 23 marzo 2009 11.24 | Feedback (5)
mercoledì 18 febbraio 2009
Un test ti allunga la vita…ma mille sono sicuramente meglio

Un’immagine vale sicuramente più di tante parole…abbiamo toccato quota 1000!!!

1000

posted @ mercoledì 18 febbraio 2009 12.16 | Feedback (3)
mercoledì 4 febbraio 2009
[OT] Congratulations…

Oggi leggendo la posta ho ricevuto non una, ma bensì due, buone (e quindi gradite) notizie:

Congratulations on earning your Microsoft Certified Technology Specialist: .NET Framework 3.5, Windows Forms Applications certification! We hope you enjoy the benefits of your certification and of membership in the Microsoft Certified Professional community.”

“Congratulations on earning your Microsoft Certified Professional Developer: Windows Developer 3.5 certification! We hope you enjoy the benefits of your certification and of membership in the Microsoft Certified Professional community.”

Erano due esami in beta che avevo sostenuto lo scorso anno e di cui sinceramente avevo perso le tracce…meglio tardi che mai, soprattutto se l’esito è positivo :-)

E il logo si è rapidamente aggioranto:       

MCPD

posted @ mercoledì 4 febbraio 2009 13.25 | Feedback (5)
lunedì 26 gennaio 2009
VisualStudio e i progetti temporanei

Oggi, giochicchiando con VisualStudio, ho scoperto una feature decisamente interessante, della quale ero assolutamente all'oscuro: la possibilità di creare progetti temporanei (ovvero non salvati sul disco contestualmente alla loro creazione). Quante volte mi è capitato di dover fare una prova veloce, che non necessitava di un progetto vero e proprio, ma che non potevo non fare con VisualStudio? Ecco la soluzione ai miei problemi:

Dalla solita voce Options del menu Tools…

Enable temporary projects 

Altre utili informazioni all’url seguente: http://msdn.microsoft.com/en-us/library/ms165252.aspx

melkio

posted @ lunedì 26 gennaio 2009 22.09 | Feedback (3)
domenica 25 gennaio 2009
Di ritorno dalla III UgiAlt.Net conference

Eccomi di ritorno dalla III UgiAlt.Net conference tenutasi ieri presso la sede di Milano di SourceSense.

Ecco a ruota libera le mie impressioni:
Scrittura delle User Stories e Planning Game: una rapida carrellata nella quale i due moderatori, Emanuele DelBono e Antonio Carpentieri (non lo conoscevo di persona…ottima impressione!!!), hanno introdotto l’argomento delineando le linee guida. Anche se l’utilizzo delle user stories è diventato per il team uno standard, è sempre utile il confronto e la possibilità di interagire con le esperienze sul campo degli altri.
La sessione, in stile open-space, ha permesso a tutti di partecipare. Ottimo

DomainDrivenDesign: la sessione, trattando di un argomento vasto e soprattutto ricco di sfaccettature, ha mancato, secondo il mio modesto parere, di un cappello introduttivo che permettesse a tutti i partecipanti (di provenienza professionale fortemente eterogenea) di inquadrare l’argomento definendo i contorni della discussione. Alcuni spunti sono stati sicuramente utili, ma un po’ confusionari, andando a scapito di un argomento veramente interessante.

Ruby <3 .Net: la sessione, tenuta da Ivan Porto Carrero, ha introdotto il contesto dei DLR e come sfruttarne i vantaggi (duck typing e quant’altro). La mia ritrosia per la libertà che i linguaggi dinamici hanno, probabilmente ha condizionato la mia attenzione in questa sessione (o forse era il dopo pranzo?), ma alcuni spunti di riflessione me li sono portati a casa…DLR + test: ci devo pensare ;-)

Advance UnitTest in the real world: ancora una volta azzeccata la modalità di presentazione con i due moderatori, Emanuele e Claudio, che introducevano l’argomento, lasciando successivamente libero sfogo alle esperienze della sala. La sessione si è fortemente incentrata, o almeno ha preso spunto, dall’introduzione degli unit-test in codice legacy e come approcciare il testing di soluzioni software non pensate per essere testabili. E qui ha fatto capolino la pratica del TDD e il grosso vantaggio che porta nella definizione del design.

Test di accettazione (Fitnesse): tra tutti gli argomenti, questo era quello che mi interesava di più, avendolo sfiorato più e più volte, ma mai approfondito. Jacopo si è dimostrato veramente molto preparato sull’argomento e ha dato spunti interessanti su come/dove utilizzare uno strumento di questo tipo. Sottolinenando che, ovviamente, non è sostitutivo degli unit-test, ma complementare, credo che in taluni contesti sia veramente un ottimo strumento di interazione con il cliente/utente/esperto di dominio. Non avendo una profonda conoscenza dell’argomento e  del tool (FitNesse, appunto) ne vedo, per ora, un utilizzo pratico e concreto in quelle parti di applicazioni che hanno una forte componente algoritmica: l’esperto di dominio definisce su un foglio excel (quindi con uno strumento a lui congeniale) i parameteri di ingresso e i loro valori e i relativi risultati, FitNesse esegue la batteria di test, fornendo in stile wiki i risultati…da valutare

Che altro dire…ottima giornata, ottima compagnia e mi sono pure portato a casa una licenza di Resharper…cosa voglio di più dalla vita?

melkio

posted @ domenica 25 gennaio 2009 10.39 | Feedback (2)
giovedì 15 gennaio 2009
[WPF] Stili e template…un po’ di confusione?

Sempre più spesso mi trovo a che fare con chi, alle prime armi, incontra parecchie difficoltà ad approcciare WPF e capire per esempio la differenza tra stili e template. E tante volte non è semplice nemmeno per me riuscire a far capire bene, partendo da un livello piuttosto basilare, questi concetti.

Girovagando per la rete ho trovato un po’ di risorse introduttive sull’argomento…e quindi, perchè non condividerle ;-)

-melkio-

posted @ giovedì 15 gennaio 2009 16.38 | Feedback (0)
lunedì 5 gennaio 2009
Framework di test: MbUnit vs NUnit

Da un paio di anni la mia scelta sul framework di test da utilizzare nello sviluppo delle applicazioni è ricaduta su MbUnit per vari motivi: soprattutto per la possibilità di eseguire test parametrici e per alcune funzionalità molto utili tipo la possibilità di eseguire i test di integrazione in modalità transazionale tramite l’attributo Rollback, garantendomi la “pulizia” del mio db di test, tra uno unit-test e l’altro.

Ultimamente però, come altri hanno sottolineato anche in un thread sulla mailing list di UgiAlt.Net, ho avvertito la necessità di “guardarmi” un po’ attorno. MbUnit sta prendendo una direzione un po’ strana (la versione 3.0, per esempio, è fortemente accoppiata con Gallio) che non condivido, partendo dalla necessità di un’installazione vera e propria (con tanto di cartella MbUnit in Program Files) per poter usufruire di una semplice dll.
Il primo requisito che un framework di test deve rispettare è la semplicità di start-up e mi sembra che MbUnit si stia sempre più allontanando da questa “strada maestra”.

Dato che oggi ho avuto un po’ di tempo libero ho provato a riguardare NUnit, che avevo abbandonato un paio di anni fa proprio per MbUnit. Siamo arrivati alla versione 2.4.8 (2.5 Beta1) e, con mio sommo piacere, ho appreso che dalla versione 2.4.7 hanno integrato un nuovo namespace (nunit.framework.extension) che espone l’attributo RowTest e quindi la possibilità di eseguire test parametrici.

Molto bene…scarico la versione in beta e provo!!!
Molto male…il namespace nunit.framework.extension della versione 2.5 non contiene gli attributi RowTest e Row…cominciamo bene :-S
Facendo il downgrade alla versione attualmente “in produzione” (la 2.4.8) tutto inizia a funzionare…molto bene.

Una novità, che ho molto apprezzato, è la nuova modalità di “scrivere” gli assert dei nostri metodi di test: il constraint model.
Affiancata alla modalità “classica”, mantenuta per retrocompatibilità, di eseguire asserzioni (n metodi della classe Assert), ora tutto passa attraverso un unico metodo e un insieme di constraints (integrabile a piacere) che, secondo me, rendono il test molto più leggibile:

[NUnit] Assert.That

Da una prima valutazione molto veloce, l’unico “disguido” (di non poco conto) è la mancata integrazione con il runner di ReSharper per l’attributo RowTest.
Indagherò più approfonditamente nei prossimi giorni…comunque l’impressione è assolutamente buona!

melkio

posted @ lunedì 5 gennaio 2009 22.19 | Feedback (0)
venerdì 12 dicembre 2008
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 @ venerdì 12 dicembre 2008 15.20 | Feedback (59)