Podczas opracowywania nie było procesu testowego opartego na testach z powodu bardzo napiętych terminów
To stwierdzenie jest bardzo niepokojące. Nie dlatego, że oznacza to, że opracowałeś bez TDD, albo dlatego, że nie testujesz wszystkiego. Jest to niepokojące, ponieważ pokazuje, że uważasz, że TDD spowolni cię i sprawi, że nie dotrzymasz terminu.
Tak długo, jak widzisz to w ten sposób, nie jesteś gotowy na TDD. TDD nie jest czymś, w co można stopniowo się ulżyć. Albo wiesz, jak to zrobić, albo nie. Jeśli spróbujesz to zrobić w połowie, sprawisz, że będziesz wyglądać źle.
TDD jest czymś, co powinieneś najpierw ćwiczyć w domu. Naucz się tego robić, ponieważ pomaga to teraz kodować . Nie dlatego, że ktoś kazał ci to zrobić. Nie dlatego, że pomoże to później wprowadzić zmiany. Kiedy staje się to czymś, co robisz, ponieważ się spieszysz, jesteś gotowy zrobić to profesjonalnie.
TDD to coś, co możesz zrobić w każdym sklepie. Nie musisz nawet oddawać kodu testowego. Możesz zachować to dla siebie, jeśli inni gardzą testami. Jeśli zrobisz to dobrze, testy przyspieszą Twój rozwój, nawet jeśli nikt inny ich nie uruchomi.
Z drugiej strony, jeśli inni uwielbiają i przeprowadzają twoje testy, powinieneś pamiętać, że nawet w sklepie TDD sprawdzanie testów nie jest twoim zadaniem. Ma na celu stworzenie sprawdzonego działającego kodu produkcyjnego. Jeśli zdarza się, że można to przetestować, nieźle.
Jeśli uważasz, że kierownictwo musi wierzyć w TDD lub że inni koderzy muszą wspierać twoje testy, to ignorujesz najlepszą rzecz, jaką TDD dla Ciebie robi. Szybko pokazuje różnicę między tym, co myślisz, że robi twój kod, a tym, co faktycznie robi.
Jeśli nie widzisz, jak to samo w sobie może pomóc Ci szybciej dotrzymać terminu, oznacza to, że nie jesteś gotowy na TDD w pracy. Musisz ćwiczyć w domu.
To powiedziawszy, miło jest, gdy zespół może użyć twoich testów, aby pomóc im odczytać twój kod produkcyjny, i kiedy kierownictwo kupi nowe narzędzia TDD.
Czy dobrym pomysłem jest napisanie wszystkich możliwych przypadków testowych po przekształceniu zespołu w TDD?
Niezależnie od tego, co robi zespół, nie zawsze dobrym pomysłem jest napisanie wszystkich możliwych przypadków testowych. Napisz najbardziej przydatne przypadki testowe. 100% pokrycia kodu kosztuje. Nie ignoruj prawa zmniejszania się zysków tylko dlatego, że trudno jest dokonać osądu.
Oszczędzaj energię na testowanie, aby uzyskać interesującą logikę biznesową. Rzeczy, które podejmują decyzje i egzekwują zasady. Sprawdź, do diabła z tego. Nudny, łatwy do odczytania kod kleju strukturalnego, który po prostu łączy ze sobą elementy, nie wymaga tak samo testowania.
(1) Czy nadal jest w porządku, czy dobrym pomysłem jest zatrzymanie większości prac rozwojowych i rozpoczęcie pisania całych możliwych przypadków testowych od samego początku, mimo że wszystko działa całkowicie OK (jeszcze!)? Lub
Nie. To jest myślenie „zróbmy kompletne przepisanie”. To niszczy ciężko zdobytą wiedzę. Nie proś kierownictwa o czas na napisanie testów. Po prostu napisz testy. Gdy dowiesz się, co robisz, testy Cię nie spowolnią.
(2) lepiej poczekać, aż wydarzy się coś złego, a następnie podczas naprawy napisz nowe testy jednostkowe, lub
(3) nawet zapomnij o poprzednich kodach i po prostu napisz testy jednostkowe tylko dla nowych kodów i odłóż wszystko do następnego dużego refaktora.
Odpowiem 2 i 3 w ten sam sposób. Kiedy zmieniasz kod, z jakiegokolwiek powodu, naprawdę fajnie jest, jeśli możesz wpaść w test. Jeśli kod jest starszej wersji, obecnie nie przyjmuje testu. Co oznacza, że trudno go przetestować przed zmianą. Cóż, skoro i tak to zmieniasz, możesz zmienić to na coś do przetestowania i przetestować.
To jest opcja nuklearna. To ryzykowne. Wprowadzasz zmiany bez testów. Istnieje kilka kreatywnych sztuczek, aby przetestować starszy kod przed jego zmianą. Szukasz tak zwanych szwów, które pozwalają zmienić zachowanie kodu bez zmiany kodu. Zmieniasz pliki konfiguracyjne, budujesz pliki, cokolwiek trzeba.
Michael Feathers dał nam książkę na ten temat: Skuteczna praca ze starszym kodem . Przeczytaj to, a zobaczysz, że nie musisz spalać wszystkiego, co stare, aby stworzyć coś nowego.