Odkryłem, że TDD działa słabo, jeśli chodzi o systemy wschodzące. Jestem programistą gier wideo, a ostatnio wykorzystałem TDD do stworzenia systemu, który wykorzystuje wiele prostych zachowań do stworzenia realistycznie wyglądającego ruchu dla bytu.
Na przykład istnieją zachowania odpowiedzialne za odsuwanie cię od niebezpiecznych obszarów różnego rodzaju i takie, które są odpowiedzialne za przenoszenie cię w interesujące obszary różnych typów. Połączenie wyników każdego zachowania tworzy końcowy ruch.
Elementy systemu zostały zaimplementowane z łatwością, a TDD przydał się tutaj do określenia, za co powinien odpowiadać każdy podsystem.
Miałem jednak problemy, gdy chodziło o określenie interakcji między zachowaniami, a co ważniejsze, w jaki sposób zachodzą one w czasie. Często nie było właściwej odpowiedzi i chociaż moje wstępne testy zakończyły się pomyślnie, QA mogła nadal znajdować przypadki, w których system nie działał. Aby znaleźć właściwe rozwiązanie, musiałem powtarzać kilka różnych zachowań, a jeśli za każdym razem aktualizowałem testy, aby odzwierciedlić nowe zachowania, zanim sprawdziłem, czy działają w grze, być może raz po raz wyrzucałem testy. Więc usunąłem te testy.
Powinienem być może mieć silniejsze testy, które uchwyciły odkryte przypadki QA, ale kiedy masz taki system, który opiera się na wielu systemach fizyki i rozgrywki, a masz do czynienia z zachowaniami z czasem, staje się to trochę koszmar dokładnie sprecyzować, co się dzieje.
Niemal na pewno popełniłem błędy w moim podejściu i, jak powiedziałem, dla wnętrzności systemu TDD działało znakomicie, a nawet wspierało kilka optymalizujących refaktorów.