Jak zaimplementować test driven development za pomocą kodu starszego?

Sytuacja: miliony linii kodu, ponad stu programistów i częste usterki. Chcemy uniknąć powtarzania defektów i chcemy poprawić projekt kodu (kto nie?).

Test Driven Development (pierwszy test jednostkowy, potem kod) brzmi idealnie: napisz przypadek testowy dla każdej funkcji.

Ale przy tak dużej ilości napisanego kodu, jak można zaimplementować TDD? Od czego zacząć-od funkcji niskiego poziomu?

Czy za późno na rozpoczęcie TDD?

Author: Wikis, 2010-07-08

2 answers

Zacznij od efektywnej pracy z kodem starszym .

To nie jest tak naprawdę TDD, jeśli zaczynasz od kodu starszego - ale wszystkie Twoje kodowanie może być TDD. Jak rozwiązać nowy problem, napisz do niego test. Jeśli nie możesz, ponieważ starsze klasy są zbyt trudne do przetestowania, zacznij pisać dla nich testy, odcinając bity i pokrywając bity testami.

Refakturuj nisko wiszący owoc .

Aby uniknąć powtarzania się usterek: podając przykładową usterkę, napisz test, który to demonstruje. Może to być stosunkowo szeroki test, który po prostu symuluje Aktywność Użytkownika; jeszcze nie test jednostkowy. Upewnij się, że test się nie powiedzie. Zrób swoje badania; dowiedzieć się, dlaczego test zawodzi. Teraz-to jest ważne - przed naprawieniem błędu napisz test jednostkowy, który demonstruje błąd. Napraw błąd, a teraz masz dwa testy, przynajmniej jeden szybki, które chronią Cię przed regresjami.

 23
Author: Carl Manaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 13:56:17

Ponieważ Carl zasugerował jedną książkę, zasugeruję inną: Roy Osherove ' s Art of Unit Testing ma cały rozdział na temat "pracy z kodem dziedziczonym". Nie czytałem jeszcze tego rozdziału, ale pierwsze 5 rozdziałów jest znakomite i nie mogę się doczekać.

 2
Author: orbfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-08 16:32:39