niedziela, października 21, 2007

TDD [Test Driven Development] - genialne, ale trudne :-)

W czwartek i piątek mieliśmy warsztaty z TDD - Test Driven Development [lub jak kto woli Test Driven Design].

Spodobało mi się bo jest genialne.... i trudne ;-)

Dlatego w ramach treningu postanowiłem napisać sobie jakiś prosty program używając TDD. Wybór padł na grę w życia. Prosta, ale nie trywialna

I jak na razie utknąłem ;-)

Zacząłem od testu na to, że pole gry jest puste. "Sfailowałem" go, a później naprawiłem kod tak by go przechodził [czyli w rzeczywistości by metoda isFieldEmpty() zwracała zawsze false].
Następny był test podawania rozmiaru [raczej nie najlepszy, ale innego pomysłu nie miałem]. "Sfailwoałem" i naprawiłem.
Kolejny był test ilości żywych komórek. Dodałem w międzyczasie metodę put(x,y) i znowu test nie przechodził, naprawiłem go.
I znowu test, tym razem ilości żywych komórek po dodaniu 2. I znowu nie przeszedł [wbrew pozorom o to właśnie chodzi :-)], naprawiłem.

I tak dalej i dalej.

Do teraz mam 12 testów i leżą mi testy dla ilości żywych sąsiadów dla 2 sąsiednich komórek oraz testy na pierwszy warunek "żywości" i "nieżywości" komórek.
Chyba wiem w czym tkwi problem - nie testuje tego co trzeba :-) ale nie wiem co powinienem przetestować.........

W tym tkwi właśnie trudność - zamiast myśleć o tym jak rozwiązać problem muszę myśleć jak przetestować rozwiązanie problemu. Wydaje się, że najzdrowiej byłoby w tym celu w trakcie pisania testu w ogóle porzucić myśli o implementacji testowanego kodu. Ale to trudne. To wbrew temu czego się uczyłem. Nie myśleć o algorytmie, ale co najwyżej o zewnętrznym zachowaniu. Trudne.
Ale się nauczę ;-)


Podobne postybeta
Delete Driven Development ;-)
assertEquals > assertThat ;-)
Życie
Przepis na szybkie programy ;-)
Piszemy serwis społecznościowy w Google App Engine