Moje doświadczenie z przejściem
Przez wiele lat nie rozumiałem, że nie mam wystarczająco dużo czasu na napisanie testów jednostkowych dla mojego kodu. Kiedy pisałem testy, były rozdęte, ciężkie rzeczy, które tylko zachęciły mnie do myślenia, że powinienem pisać testy jednostkowe tylko wtedy, gdy wiedziałem, że są potrzebne.
Ostatnio zachęciłem mnie do korzystania z Test Driven Development i uznałem, że jest to kompletna rewelacja. Jestem teraz głęboko przekonany, że nie mam czasu, aby nie pisać testów jednostkowych .
Z mojego doświadczenia wynika, że rozwijając się z myślą o testowaniu, otrzymujesz czystsze interfejsy, bardziej skoncentrowane klasy i moduły oraz ogólnie bardziej SOLIDNY , testowalny kod.
Za każdym razem, gdy pracuję ze starszym kodem, który nie ma testów jednostkowych i muszę coś ręcznie przetestować, ciągle myślę „byłoby o wiele szybciej, gdyby ten kod miał już testy jednostkowe”. Za każdym razem, gdy próbuję dodać funkcjonalność testu jednostkowego do kodu z wysokim sprzężeniem, ciągle myślę „byłoby to o wiele łatwiejsze, gdyby zostało napisane w sposób oddzielony”.
Porównywanie i kontrastowanie dwóch stacji eksperymentalnych, które popieram. Jeden istnieje już od jakiegoś czasu i ma dużo starszego kodu, a drugi jest stosunkowo nowy.
Dodając funkcjonalność do starego laboratorium, często chodzi o to, aby dostać się do laboratorium i spędzić wiele godzin pracując nad implikacjami potrzebnej funkcjonalności i jak mogę dodać tę funkcjonalność bez wpływu na żadną inną funkcjonalność. Kod po prostu nie jest skonfigurowany do testowania w trybie off-line, więc prawie wszystko musi być opracowane online. Gdybym spróbował opracować off-line, skończyłbym z większą ilością fałszywych obiektów, niż byłoby to uzasadnione.
W nowszym laboratorium zwykle mogę dodać funkcjonalność, rozwijając ją offline przy biurku, kpiąc sobie tylko z tych rzeczy, które są natychmiast potrzebne, a następnie spędzając tylko krótki czas w laboratorium, rozwiązując wszelkie pozostałe problemy, które nie zostały usunięte -linia.
Moja rada
Wygląda na to, że dobrze zacząłeś. Za każdym razem, gdy wprowadzasz duże zmiany w procesie programowania, musisz upewnić się, że wszyscy są zaangażowani w podejmowanie tej decyzji, a najlepiej, że większość ludzi się na to zdecydowała. Z twojego pytania wynika, że masz rację. Jeśli ludzie nie mają entuzjazmu do tego pomysłu, skazany jest albo na niepowodzenie, albo na generowanie złej woli.
O ile nie możesz przedstawić przekonującego uzasadnienia biznesowego, nie zaleciłbym gruntownej implementacji testów jednostkowych i specyfikacji dla całego systemu. Jak wspomniałem powyżej, jeśli system nie jest zaprojektowany z myślą o testowaniu, napisanie testów automatycznych może być bardzo trudne.
Zamiast tego poleciłbym zacząć od małego i zastosować zasadę harcerza :
Zawsze zostawiaj kemping czystszy, niż go znalazłeś.
Jeśli podczas wdrażania czegoś na tej podstawie kodu można zidentyfikować konkretne testy wymagane do przetestowania istniejącego zachowania i przejścia ze starego na nowe, to zarówno udokumentowano zmianę specyfikacji, jak i rozpoczęto wdrażanie testów jednostek dla Twój system.
Moduły, których nie dotykasz, nie przechodzą testów jednostkowych, ale jeśli ich nie dotykasz, to prawdopodobnie dlatego, że są już dokładnie przetestowane w użyciu i nie wymagają żadnych zmian lub nigdy nie są używane.
To, czego chcesz uniknąć, to marnowanie całego ciężaru prac programistycznych na pisanie, które nigdy nie będą potrzebne ( YAGNI działa tak samo dobrze dla kodu testowego, jak i kodu produkcyjnego * 8 '), nigdy nie będzie ponownie używane i demoralizujące ludzi do myśląc, że testy są bezużyteczne.
streszczenie
Zacznij od małego, stopniowo buduj zaufanie do testów i zyskaj wartość biznesową dzięki opracowywaniu testów, kiedy i gdzie przynoszą one największe korzyści Twojemu zespołowi.