In tutta onestà, ha aggiunto "In divertimento" a tale affermazione.
Fino ad oggi, tendo ad iniziare con la modellazione di sistemi usando l'approccio "sostantivo e verbo", ma ho scoperto negli anni che TDD ci insegna che questo approccio attira l'attenzione sulla cosa sbagliata. In questo senso, il blogger ha un punto. Tuttavia, non sono sicuro che sia l'approccio alla colpa, piuttosto che il modo in cui le nostre menti funzionano.
Se vuoi provare una piccola sfida qui, smetti di leggere e prova a modellare il gioco Monopoli, usando la lingua inglese, quindi torna qui.
Sospetto che la tentazione sia di guardare immediatamente agli oggetti con cui interagiamo molto - la tavola, gli spazi, le carte, i dadi, i pezzi - ma non è quello il punto in cui va la maggior parte della logica. La maggior parte di questi oggetti sono completamente stupidi. Dati, se vuoi.
Ma non appena inizi a scrivere test, ti rendi conto di quale oggetto è di gran lunga il più importante in qualsiasi gioco: le regole.
Ricorda quel piccolo pezzo di carta che hai letto una volta quando hai iniziato il gioco e non interagisci più fino a quando non si verifica una disputa? La versione computerizzata non funziona in questo modo. Ogni singola cosa che il giocatore prova a fare, un computer consulta le regole e verifica se è autorizzato a farlo o meno.
Quando ci pensi, fai la stessa cosa ma poiché ci vuole tempo per leggere le regole basate sulla carta e il tuo cervello ha un ragionevole sistema di memorizzazione nella cache, consulta le regole nella tua testa. Probabilmente un computer troverà di nuovo facile leggere le regole, a meno che non siano archiviate nel database, nel qual caso potrebbe anche memorizzarle nella cache.
Ed è per questo che TDD è così popolare per guidare il design. Perché tende a indirizzare rapidamente la tua idea sui luoghi giusti:
Quando penso che scriverò alcuni test per il mio gioco Monopoly. Potrei guardare il mio set e provare a trovare gli oggetti. Quindi, abbiamo questi pezzi. Scriverò alcuni test per quelli.
Forse avrò una classe base MonopolyPiece e ogni tipo di pezzo deriverà da quelli. Inizierò con il DogPiece. Primo test ... ahh. In realtà, non c'è logica qui. Sì, ogni pezzo sarà disegnato in modo diverso, quindi potrei aver bisogno di un DogDrawer, ma mentre sono fuori dal gioco, voglio solo scrivere "D" sullo schermo. Alla fine renderò l'interfaccia utente.
Scopriamo alcune logiche effettive da testare. Ci sono molte di queste case e hotel, ma non hanno bisogno di test. Soldi, no Carte di proprietà, no. E così via. Anche la scheda non è altro che una macchina a stati, non contiene alcuna logica.
Scoprirai subito che hai tre cose in mano. Le carte Chance e Community Chest, una coppia di dadi e un set di regole. Queste saranno le parti importanti da progettare e testare.
L'hai visto arrivare quando hai scritto i nomi e i verbi?
Esiste, in effetti, un ottimo esempio in Principi e pratiche di Agile Principles di Robert Martin dove cercano di distribuisci un'app di Bowling Score Card usando TDD e trova tutti i tipi di cose che pensavano fossero ovvie classi che non valevano la pena di preoccuparsi.