La trave nel mio occhio

Una tragedia annunciata.

Dopo un paio mesi di refactoring e testing di un codice legacy dei più gustosi mi trovo a essere ‘quello che risolve’, la stella, insomma, il padrone del vapore che sa fare cose che gli altri non conoscono (per quanto uno abbia provato a spiegare che è tutta questione di applicare un certo metodo… ma va beh!).

Bug dell’ultimo minuto su codice d’altri che non conosco : “Risolvilo tu!” Ormai nulla mi spaventa e questa richiesta è solo un’altra iniezione alla mia ormai super-muscolosa autostima.

Questo codice è orribile….

Beh, fai come hai già fatto in altri casi simili, circoscrivi l’intera ‘area’ del cambiamento che devi effettuare per fixare il bug con degli unit tests che ti assicurino che dall’esterno il codice modificato sia visto sempre allo stesso modo, insomma, la teoria della scatola chiusa. Quindi dovresti fare una mattinata di costruzione di tests che devono prima di tutto riuscire, poi inizi a toccare quell’unica linea di codice che sai essere la fonte del problema (e come potrebbe non esserlo, stupisce che funzioni il resto!), quando il bug è sistemato -E- tutti i test che hai scritto in precedenza tornano a essere verdi allora passi tutto nell’ambiente di acceptance per controlllare che i tuoi unit test rappresentino effettivamente ogni angolo della scatola. Fatto in precedenza, bug a posto e, a distanza di mesi, zero regressioni. Non solo è il metodo teorico più sicuro che conosci, si è anche dimostrato ottimo quando l’hai messo in pratica e, assieme a XP, è stato ciò che ha creato la tua reputazione, no? Saresti stupido a fare altrimenti… no?

Si però…. però in fin dei conti ci sono due settimane di tempo questa volta, non una giornata scarsa, creare quei tests è una vera scocciatura, sai che dovrai fare un bel po’ di extract method, e creare mezza dozzina di Stubs solo per avere l’impalcatura e avere dei punti d’accesso per creare i tests.

E’ pur vero che è più costoso trovare un errore in fase di acceptance testing che non trovarlo in fase di unit testing.. ma tanto TU sei la stella no? Mica ti potrai sbagliare così tanto, e poi anche fosse… due settimane.

E così faccio il fix senza scrivere i tests, ci sto attento, controllo ‘a mente’ che tutto torni e in mezza giornata (20 minuti di programmazione effettiva) mando tutto in acceptance.

Mi sono risparmiato un sacco di lavoro e la mia autostima non è per niente diminuita, anzi, mi stanno scoppiando i muscolazzi tanto sono pompato.

I criceti di acceptance tanto faranno il loro lavoro no? Non sono automatizzati, ma è come se lo fossero… no? Sono in tre o quattro e hanno solo quello da fare, visita tutte le pagine e controlla il test-book.. entro domani avranno sviscerato lo sviscerabile.

Sono in una botte di ferro.

Se proprio, per qualche assurdo motivo, esce fuori che avevo dimenticato di ‘vedere’ un qualche lato del codice che ho modificato, alzeranno la bandierina e io lo sistemerò in due minuti. Insomma, anche questo è feedback, anche questo è TDD!! Anzi, meglio, io faccio il D, e altri fanno il TD, grande ottimizzazione! Sono un genio assoluto, la mia autostima è così solida che si proietta e rassicura l’intero continuum spazio-tempo attorno a me, i bicchieri se cadono non si rompono, anzi, non cadono affatto, nessuno si prende l’influenza e il prezzo del petrolio scende in picchiata (ma solo se ci sono io nei pressi).

Il giorno dopo non ci sono notizie dai criceti… Vuol Dire Che Va Tutto Bene.

Due giorni dopo giunge l’ok :qui è tutto a posto, avanti così.

Troppo facile… + cinque metri cubi di helio. Ora ho altro da fare, devo pensare a portare il verbo nel mondo, quella faccenda è sicuramente chiusa per sempre… no?

Passa un altro giorno, poi una settimana, poi dieci giorni… quel giorno siamo tutti caldi per il rilascio finale, il più robusto rilascio della storia… grazie anche a me e a Godzilla, il mio ego, ormai mostruoso.

Era venerdì ovviamente :

– “Ah, abbiamo un bug riportato da acceptance… ci dai un’occhiata tu?”

– “Ci date un’occhiata voi -Oscuro Signore-”

– “Si, scusi, ci date un’occhiata voi Oscuro Signore?”

– “E sia!”

Spendo un paio d’ore solo per rintracciare la fonte del problema: sono passati dieci giorni e nè io, nè acceptance si ricorda più del bug 5325, quindi la descrizione è diversa e io inizio a guardare nel posto sbagliato. Dopo lunga analisi finalmente mi ritrovo a guardare quella stessa famosa linea di codice… e lì inizio a ricordare, ma poco, quella componente non è mia e non l’ho nemmeno ristrutturata, quindi la collective code ownership è un lontano fantasma che urla vendetta.

Soprattutto non c’è uno sputo di test a ricordarmi i dettagli. Da qualche parte.. da Godzilla, giunge un sibilo, come di aria che esce a gran velocità. Ma non ci faccio caso.

Con grossa fatica, e buttando un pomeriggio, che sarebbe stato meglio sfruttato su google, mi raccapezzo e scopro che non dovevo usare strAlF1, ma intBka1 (quella che sembra hungarian notation in quel codice è ormai solo un sottile mezzo di mistificazione, si tratta in entrambi i casi di stringhe). La modifica faceva quel che doveva fare, ma con la stringa sbagliata.

Amen, ormai non c’è tempo di scrivere degli unit tests, l’ultima volta che ho applicato quell’aureo sistema mi ci è voluta una giornata intera, ora è quasi sera e mancano 40 ore lavorative al rilascio, di certo non voglio fregarmi il week-end, ergo : metto una pezza al codice e una a Godzilla e me ne vado a casa.

Lunedì (1 day to release):

“Questa è la versione sistemata.. ma quelli di acceptance devono darmi -subito- prova e risultato dei loro tests.”

Entro sera due notizie :

– Da acceptance dicono che sono al 70% dei tests e che finora è tutto ok.”

– Pare che una mail di nove giorni fa dicesse qualcosa tipo : il fix non funziona, anzi è peggio. Ma a quanto pare qualcuno nella catena l’ha interpretata come : qui è tutto a posto, avanti così! Adoro il sistema del telefono senza fili, è per questo che deve essere adottato da tutti coloro che si occupano di applicazioni business critical fortemente integrate.

“Fessi di acceptance che non sanno scrivere le mail!” Dico io, e tutti : Amen Signore! Amen!

Martedì :

“Il sistema è online e siamo al 99% OK e quasi pronti al live.”

“Il restante 1% è KO e non si può procedere se non viene risolto -ORA- : pare che una delle sei pagine iniziali del portale non sia visibile…”

“Non potrebbe essere quella modifica che avevi fatto tu…”

“Come osi dubitare… e poi quella pagina non passa da quel codice no?”

“Beh, sì, è la prima che ci passa.”

“Ma me l’avreste detto fosse stato così, e poi figurati.. quella pagina non ha l’attributo B, se la si facesse passare dal mio codice modificato si pianterebbe tutto…. oh c…”

“La tua modifica non tiene conto dell’assenza di B?”

“Certo che no! Non c’era scritto da nessuna parte!”

“Oh c….”

“Ma come, ma una cosa del genere non me la dite… ma quelli di acceptance non l’hanno testata quella pagina?”

Tutto inutile, Godzilla ormai si chiama Spinky, la lucertola col sederino rosa.

“Pare che acceptance fosse così rassicurata dal fatto che tutto andasse bene in tutte le pagine interne che hanno dato per scontato che la pagina iniziale fosse a posto.”

Qualcuno sta battendo una pacca sulle spalle di Spinky :

“Tu non lo sapevi, non era colpa tua… dai che ci possiamo fare un work-around e tutto andrà a posto.”

“Eh, dannazione, ma proprio la pagina iniziale dovevano saltare nei loro controlli?!” E tutti : “Amen, Signore! Amen!”

Ma quale signore, magari secondo gli altri, per me sono la lucertola con il sedere rosa : anche detto, un fesso.

Per risparmiare mezza giornata di testing ho impiegato due settimane e ho consegnato del software fallato. Non sarebbe capitato se fosse stato un software più gestibile, meno soggetto a burocrazia e telefoni senza fili vari, ma è proprio per questi contesti che secondo me sono necessarie certe pratiche, fosse facile non ci sarebbe bisogno di un metodo.

Secondo me non è un caso che gli esercizi di TDD li si chiami Kata. E’ un po’ come un’arte marziale orientale, finchè si tratta di tirare pugni a un sacco tutte quelle scene e quegli strani allenamenti non sembrano giustificati, un pugno lo sai tirare anche senza quella roba, ma è quando ti ritrovi preso di sorpresa (tempi brevi), in condizione di svantaggio (poco potere nel sistema), senza alleati (sei l’unico responsabile di successo e fallimento del progetto) che quegli strani gesti di colpo assumono un significato.

Da allora, un mese fa circa, me lo ripeto spesso, oltre che a tenere a bada spinky.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s