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.
Potem zacząłem używać Test Driven Development i odkryłem, że jest to pełne odkrycie. 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.
Dla jasności, a ponieważ @ naught101 poprosił ...
Zwykle pracuję nad oprogramowaniem do kontroli eksperymentalnej i akwizycji danych, z pewną analizą danych ad hoc, więc połączenie TDD z kontrolą wersji pomaga dokumentować zarówno zmiany w podstawowym sprzęcie eksperymentalnym, jak i zmiany wymagań w zakresie gromadzenia danych w czasie.
Jednak nawet w sytuacji rozwijania kodu eksploracyjnego widziałem znaczącą korzyść z kodyfikacji założeń, a także możliwość zobaczenia, jak te założenia ewoluują w czasie.