Oggi vorrei spendere due righe per raccontarvi un libro, nello specifico il primo testo sul TDD e iOS: Test-Driven iOS Development di Graham Lee. Come avrete intuito, TDD è l’acronimo di Test Driven Development ed è un processo di sviluppo software molto in voga negli ultimi anni. Ne abbiamo già parlato su questo sito, quindi se non conoscete l’argomento vi invito a leggere questo articolo. Passando al libro, credo non sia facile dare un giudizio oggettivo al testo, senza che questo sia influenzato dalla mia idea riguardo il TDD in generale, ma partiamo dall’inizio.
Il libro è molto chiaro nella sua esposizione e tratta un caso d’uso specifico: in particolare saremo guidati nella realizzazione di un’applicazione master/detail che, sfruttando le API di stackoverflow, mostri l’elenco delle domande e relative risposte per un tag selezionato.
Il tutto avviene però con un approccio completamente nuovo rispetto alla “vecchia” maniera di scrivere software, segue infatti l’approccio TDD.
Cosa significa seguire l’approccio Test-Driven Development?
Che si scrivono prima i test e solo successivamente si scrive il codice appena sufficiente per superarli.
Si, avete letto bene.. ho scritto proprio “appena sufficiente”! Già perché è proprio questo che sta alla base del TDD: il codice che supera il test deve *solo* superare il test e non deve far altro, perché altrimenti l’ *altro* non sarebbe coperto da test! Semplice, no?
Non mancano nel libro un’introduzione ai framework principali per usare al meglio TDD e due capitoli finali in cui si va oltre il TDD stesso.
Il mio personale giudizio è che se siete interessati all’argomento è un libro molto utile da leggere, in alcuni casi ritengo personalmente che calchi troppo la mano, ricorrendo addirittura al MethodSwizzling (http://cocoadev.com/wiki/MethodSwizzling) per rendere testabile una classe o creandone delle subclass con metodi specifici per l’introspezione, devo ammettere però che alla fine si ritrova con un codice sul quale si può intervenire tranquillamente a fare refactoring o aggiungere funzionalità senza aver paura di “rompere” qualcosa che era già stato fatto.
Potete acquistare il testo direttamente su Amazon.it in una delle due versioni disponibili:
- versione cartacea, al costo di 20,03 € con spedizione gratuita (Link diretto)
- versione elettronica kindle edition, al costo di 14,38 € (Link diretto)
Buona lettura!
4 Responses to “Test-Driven iOS Development: breve recensione del primo libro specifico sul TDD in iOS”
25 Luglio 2012
Giuseppe FratturaCiao ottimo consiglio, il TDD è un tipo di sviluppo molto utile soprattutto se fatto anche con l’extreme programming.
Conoscete per caso un testo analogo per android?
25 Luglio 2012
LucaNon ho ancora avuto il piacere di leggere il libro che, però, è già nella mia libreria.
Per quanto riguarda il method swizzling comprendo le perplessità. Anche io non sono un grandissimo fan di questa “pratica” e sono convinto che crei più problemi di quanti ne risolva e che è potenzialmente una soluzione poco future proof, ma nel caso di unti test a volte si rivela pratica. Mi spiego con un esempio pratico: supponiamo di testare un metodo di una classe che, sempre per esempio, utilizzi il metodo + [NSDate date] per effettuare una qualsivoglia computazione temporale. Per testare questo metodo in qualche modo abbiamo bisogno di mockare NSDate, un metodo molto pratico è quello con una combinazione di method swizzling e associative references far ritornare la data che ci fa più comoda.
Per quanto riguarda le surclassi per l’introspezione anche in questa cosa sembra una soluzione dolora ma necessaria. Se ci pensiamo lo scopo dell’ OOP e proprio l’information hiding, che fondamentalmente rema contro la testabilità dove vorremmo poter verificare completamente lo stato della class under test.
25 Luglio 2012
Ignaziochai centrato in pieno! ottimo commento!
23 Novembre 2012
Test-Driven iOS Development: breve recensione del primo libro specifico sul TDD in iOS | TCNews24.it[…] il resto dell’articolo cliccando qui Libri e manuali, manuali programmazione, tdd, test-driven development, test-driven ios development […]