To, że jestem fanem TDD wie pewnie każdy kto czyta ten blog. Za szczególnie dobrą jego formę uznaję BDD. W kodzie, który powstaje u nas w firmie staramy się stosować to podejście – nazewnictwo wyrażające intencję twórcy, testy pisane w formie przykładów (często z wykorzystaniem promowanego przez Szczepana Fabera szablonu //given //when //then), skupienie na celu powstawania kodu. Niedawno do naszego zespołu projektowego dołączyli nowi programiści (pracownicy naszego klienta) nieposiadający doświadczenia w TDD. Pierwsze o co zapytali to szczegółowa dokumentacja kodu. Nasze przekonywanie, że testy są kompletne i dokładnie dokumentują kod nie spotkały się ze specjalnym zrozumieniem z ich strony
Doszedłem więc do wniosku, że gdybyśmy mogli wygenerować z naszych testów dokumentację – nawet tylko w formie listy funkcjonalności oferowanych przez nasz kod – to pewnie ich opory byłyby znacząco mniejsze. A że akurat prowadziłem tygodniowe szkolenie poza Warszawą (miałem więc codziennie parę wolnych godzin po pracy), postanowiłem napisać narzędzie, które pomogłoby w tworzeniu testów tak, by:
- jeszcze wyraźniej dawały znać co robią – tak, by nawet niewprawione w TDD oko rozpoznało o co chodzi (po prostu wystarczy czytać zdania…)
- dawały się generować w formie specyfikacji
- pozwalały lepiej myśleć o kodzie zanim jeszcze on powstanie (zapomniana faza ‘think’ z TDD) – w idealnym przypadku pozwalały na przygotowanie całego zbioru przykładów najpierw – np. wraz z kimś z biznesu, implementację pozostawiając na później (klasyczne Acceptance-Test Driven Development)
- dawały aktualną informacje o stanie implementacji w formie raportu (które funkcjonalności jeszcze nie są zaimplementowane, które są i działają, które nie działają)
- dawało się generować testy z pełnotekstowego opisu funkcjonalności
- wspierały IDE tak, by było tam widać całe zdania opisu a nie nazwy metod testowych
Gdy wracałem ze szkolenia podstawowe funkcje były już prawie gotowe. Samolot nie odleciał (Eyafjoell…) więc miałem do tego 7 godzin w pociągu
I tak powstał Tumbler – biblioteka wspomagająca myślenie o testach jako o przykładach, służąca do prowadzenia myślenia o tym CO zrobić a nie JAK. Nie będę tu duplikował dokumentacji, zainteresowanym polecam ją przejrzeć – nie jest tego dużo.
