chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

Kilka słów o tym dlaczego pisanie testów jednostkowych to strata naszego czasu

Ta wersja
blog.piotrnalepa.pl/2017/05/04/kilka-slow-o-tym-dlaczego-pisanie-testow-jednostkowych-to-strata-naszego-czasu
Opublikowano
Autor
, Staff Software Engineer
Kategorie
DSP2017, Inne
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 9 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

Pisząc kod aplikacji w JavaScript czy w innym języku programowania często spotykamy się z podejściem, w którym wymagane jest pisanie testów jednostkowych przed rozpoczęciem pisania kodu aplikacji. Uważam, że to podejście się nie sprawdza.

Sekcja 1Kiedy pisanie testów jednostkowych jest zbędne?

Każdy kto pisał testy jednostkowe, to wie że napisanie testów które dobrze przetestują kod (który napisaliśmy) zajmuje trochę czasu. Często bywa tak, że zajmuje to drugie tyle czasu ile poświęciliśmy na pisanie kodu. To jest kompletna strata czasu, który może być lepiej spożytkowany.

Jest to kompletna strata czasu w przypadku, gdy pracujemy nad jakimś prototypem aplikacji, bądź po prostu na szybko sprawdzamy jak działa nowa technologia. Na szczęście, nie spotkałem się z podejściem, że ktoś wymaga pisania kodu testów do wszystkiego co robimy. W moim przypadku, odpuszczam pisanie testów jednostkowych tylko wtedy, gdy wiem, że nie planuję poświęcić dużo czasu jakiemuś prototypowi. Przez ten czas mógłbym wymyślić zupełnie inny prototyp, który lepiej spełni założenia.

Nie da się ukryć, że czasem bywa tak iż poświęca się czas potrzebny na pisanie testów w celu szybszego dostarczania nowych funkcjonalności aplikacji. Dzięki temu, tzw. biznes jest szczęśliwy, bo mają kolejny punkt na liście to-do odhaczony. A dług technologiczny rośnie.

Poza tym, pisanie testów jednostkowych jest nudne!

Sekcja 2A może jednak powinniśmy pisać testy?

Z drugiej strony pisanie testów jednostkowych może nam uratować skórę. Gdy już pracujesz nad jakimś produktem profesjonalnie, to wskazane jest, aby pisać testy. Na przykład, gdy napiszesz testy jednostkowe w JavaScript to możesz być pewien/pewna, że coś zostało przetestowane. Lecz czy zostało to poprawnie przetestowane to już inna bajka. Bo testy jednostkowe łatwo można napisać tak, że niby coś testują, ale jednak jakby nie do końca. Wtedy takie rzeczy wychodzą podczas procesu zwanego code review.

Pytanie, kiedy pisanie testów jednostkowych ułatwi nam życie i sprawi, że czas poświęcony na ich pisanie nie będzie straconym czasem?

Po pierwsze, testy jednostkowe same w sobie sprawdzają tylko i wyłącznie jeden komponent/element aplikacji. Pisząc taki test, możemy mieć zabezpieczenie, że w określonych sytuacjach kod zachowa się w taki a nie inny sposób. Testy jednostkowe nie powiedzą nam, czy dany kod przy współpracy z innymi komponentami/elementami będzie działał poprawnie. Wiedząc, że mamy testy dla wybranego elementu aplikacji, możemy w miarę bez obaw zająć się refaktorowaniem kodu (jeśli jest potrzeba). Dzięki nim, możemy być pewni, że jeśli zepsujemy zachowanie komponentu wprowadzając nowy bądź ulepszony kod, to podczas uruchamiania testów to wyjdzie.

Druga rzecz, pisanie testów bardzo ułatwia pisanie kodu, który jest czytelny i nie zawiera zbędnego kodu. Dzięki temu, możemy zmniejszyć ryzyko, że do finalnej wersji aplikacji wejdzie kod, który jest nieużywany, bądź nieczytelny. Nie ma nic gorszego niż powrót do takiego kodu po dłuższej przerwie i zacząć się zastanawiać: Co autor miał na myśli? Tym bardziej, jeśli nad danym kawałkiem pracuje wiele osób na przestrzeni czasu. Warto likwidować ryzyko straty czasu na ponowne zrozumienie niezrozumiałego kodu.

Po trzecie, pisząc testy jednostkowe zwiększamy pewność, że napisaliśmy kod który spełnia w jakimś stopniu wymagania projektowe aplikacji.

Sekcja 3Podsumowanie

Swego czasu na MeetJS Katowice, prowadziłem prezentację dotyczącą tematu testowania kodu JavaScript. W jej trakcie opisałem co się dzieje, gdy piszemy testy a co się dzieje gdy ich nie piszemy. Myślę, że warto sobie przejrzeć slajdy z tej prezentacji.

Podsumowując, testy jednostkowe warto pisać wszędzie tam, gdzie możesz wrócić do danego kawałka kodu w przyszłości. Unikniesz wtedy nieoczekiwanych problemów związanych z czytelnością kodu czy też dodawaniem nowych funkcji. Natomiast, nie przejmowałbym się nimi w przypadku szybkich prototypów lub w trakcie sprawdzania nowych technologii, które ewentualnie mógłbyś/mogłabyś wykorzystać w swoich priorytetowych projektach.

Tak jest na przykład ze mną i projektem League Managera. To jest prototyp, nad którym ciągle trwają prace, aby zaimplementować bazowe funkcjonalności i wcale nie jest powiedziane, że będę potem wracał do tego kodu.

Jeśli masz jakieś ciekawe sugestie czy chcesz się podzielić doświadczeniem w kwestii pisania testów jednostkowych to zapraszam do komentowania. Warto uświadomić niektórych programistów, że warto to robić.

Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!