Nieco ponad rok temu miałem szczęście, że mogłem zrobić 9-miesięczną przerwę w pracy. Zdecydowałem, że w tym czasie doskonalę swoje umiejętności w języku C #. Zacząłem pracować nad wieloma projektami i zmusiłem się do śledzenia TDD.
To był dość pouczający proces.
Na początku było ciężko, ale z czasem nauczyłem się pisać bardziej testowalny kod (który, jak się okazuje, jest bardziej kodem SOLID), a w trakcie tego procesu doskonaliłem umiejętności projektowania OO.
Teraz wróciłem do siły roboczej i zauważam coś dziwnego.
Wolę nie stosować się do TDD.
Uważam, że TDD spowalnia mnie i sprawia, że trudniej jest zaprojektować czystą aplikację.
Zamiast tego zastosowałem nieco (masowo) inne podejście:
- Wybierz pionowy kawałek pracy
- Opracuj działający prototyp
- Refaktoryzuj, aż wszystko będzie ładne i uporządkowane
- Usiądź i doceń pięknie napisany przeze mnie SOLIDNY i testowalny kod.
Być może zauważyłeś, że krok 1 nie „zdefiniował publicznej powierzchni mojego testowego celu”, a krok 2 nie „przetestował bejesusa z tej publicznej powierzchni”. Być może zauważyłeś również, że żaden z kroków nie obejmuje testowania. Piszę testowalny kod, ale go jeszcze nie testuję ... jeszcze.
Teraz chciałbym wyjaśnić, że tak naprawdę nie rezygnuję z żadnych testów. Kod, który piszę, działa . Działa, ponieważ testuję to ręcznie.
Chciałbym również wyjaśnić, że nie rezygnuję też ze wszystkich testów automatycznych. To jest mój proces jest inny. I dlatego zadaję to pytanie.
TDD w teorii. Nie w praktyce.
Mój proces ewoluował nieco i osiągnąłem równowagę między TDD a brakiem testów, które uważam za bardzo produktywne i racjonalnie bezpieczne. Wygląda to następująco:
- Wykonaj działający pionowy kawałek pracy z myślą o testowaniu, ale nie pisz żadnych testów.
- Jeśli później (np. Miesiąc później) ten kawałek wymaga modyfikacji
- Napisz testy jednostkowe, testy integracyjne, testy behawioralne itp., Które gwarantują, że fragment pracy jest poprawny
- Zmodyfikuj kod
- Jeśli ten kawałek nie wymaga modyfikacji,
- Nic nie robić
Po prostu przenosząc ciężar pisania testów przed napisaniem kodu na przed modyfikacją kodu, byłem w stanie stworzyć znacznie więcej działającego kodu. A kiedy zaczynam pisać testy, piszę o wiele mniej, ale pokrywam prawie tyle samo gruntu (wyższy ROI).
Podoba mi się ten proces, ale obawiam się, że może nie być dobrze skalowany. Sukces zależy od tego, czy programiści starają się pisać testy przed zmianą. I to wydaje się dość dużym ryzykiem. Ale TDD ma takie samo ryzyko.
Czy więc zamierzam [BT] DD do diabła, czy jest to powszechna forma pragmatycznego kodowania i testowania?
Chciałbym dalej pracować w ten sposób. Co mogę zrobić, aby ten proces działał na dłuższą metę?
Uwaga:Jestem jedynym programistą w moich projektach i jestem odpowiedzialny za wszystko: zbieranie wymagań, projektowanie, architekturę, testowanie, wdrażanie itp. Podejrzewam, że właśnie dlatego mój proces działa.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development