2010-07-08 12 views
12

Sytuacja: miliony linii kodu, ponad sto programistów i częste defekty. Chcemy uniknąć defektów powtarzających się i chcemy poprawić projekt kodu (kto nie?).W jaki sposób można wdrożyć rozwój oparty na testach przy pomocy starszego kodu?

Test Driven Development (test pierwszego urządzenia, następnie kod) brzmi idealnie: napisać test case dla każdej funkcji.

Ale z tak dużą ilością kodu, jak można wdrożyć TDD? Gdzie zaczynasz - z funkcjami niskiego poziomu?

Czy jesteśmy zbyt spóźnieni, aby rozpocząć TDD?

Odpowiedz

21

Zacznij od Working Effectively with Legacy Code.

To nie jest naprawdę TDD, jeśli zaczynasz od starszego kodu - ale całe twoje kodowanie może być TDD. W miarę rozwiązywania nowego problemu napisz test na to. Jeśli nie możesz, ponieważ klasy spuściznowe są zbyt trudne do przetestowania, zacznij pisać testy dla nich, odcinanie bitów i pokrywanie bitów testami.

Refactor the Low-Hanging Fruit.

Aby uniknąć powtarzających się wad: podać przykładową wadę, napisz test, który ją demonstruje. Może to być stosunkowo szeroki test, który symuluje aktywność użytkownika; jeszcze nie test jednostkowy. Upewnij się, że test się nie powiódł. Wykonaj swoje badania; dowiedzieć się, dlaczego test się nie udaje. Teraz - to jest ważne - przed naprawieniem błędu napisz test jednostkowy demonstrujący błąd. Napraw błąd, a teraz masz dwa testy, przynajmniej jeden z nich, który chroni przed regresją.

+2

+1: Kluczem jest * nie * próba kompleksowego modernizowania testów jednostkowych. – Richard

+1

@Carl - ładne podsumowanie. Szczególnie podoba mi się, jak masz test jednostkowy i tekst systemowy z defektu. – Wikis

+0

@Richard - Jestem zdziwiony - czy to nie jest przeciwieństwo tego, co mówi Carl? – Wikis

2

Ponieważ Carl zasugerował jedną książkę, zasugeruję następną: Roy Osherove's Art of Unit Testing ma cały rozdział na temat "Praca ze starszym kodem". Nie przeczytałem jeszcze tego rozdziału, ale pierwsze 5 rozdziałów jest znakomitych i nie mogę się doczekać.

+0

FYI Cieszyłem się porównywaniem przez Osherove definicji dla starszego kodu: "kod źródłowy odnoszący się do nieobsługiwanej już technologii" "dowolna starsza aplikacja w ramach konserwacji" "Kod działa" "Kod, który nie ma testów" (z książki Feathersa) – orbfish

+0

@Carl dzięki za link C2, to jest zabawne. – orbfish

+0

@ Orbfish - Dzięki za cynk. Być może po przeczytaniu wrócisz i podzielisz się spostrzeżeniami? – Wikis

Powiązane problemy