Przyszedł czas w mojej karierze, że chciałem w końcu nauczyć się pisać testy. Jednak nie byle jakie testy, ale dobre testy. Na początku nie za bardzo rozumiałem ideę ich pisania. Co one mi tak naprawdę dają? Nie łatwiej jest napisać nową funkcjonalność, odpalić aplikację i sprawdzić czy wszystko działa zgodnie z założeniem? To było naiwne myślenie. W przypadku pisania małego programu w zaciszu domowym to jak najbardziej się sprawdzało. Jednak, gdy dołączymy do wielkiego projektu, składającego się z wielu modułów, to nie ma innego wyjścia jak testy. Gdybyśmy chcieli postawić takie oprogramowanie lokalnie, aby sprawdzić jak działa nasz przyrost to podejrzewam, że graniczyłoby to z cudem! Z tego powodu chciałem opublikować ten artykuł, żeby pokazać Ci zalety pisania i utrzymywania testów!

1. Zweryfikujesz poprawność działania swojej aplikacji

Projektując nową funkcjonalność na pewno będziesz mieć do czynienia z jakimiś danymi. Trzeba będzie je wprowadzić oraz odpowiednio przetworzyć. Wiele przypadków użycia zostanie zakwalifikowanych jako standardowe. Jednak co się stanie, gdy wprowadzimy dane zahaczające o przypadki brzegowe? Jaki to będzie miało wpływ na działanie programu? Czy na pewno przewidzieliśmy każdą możliwą sytuację?

Tutaj na ratunek przychodzą nam testy. Są one źródłem bardzo precyzyjnej, ważnej i szybkiej informacji zwrotnej. Możemy napisać odpowiednio dużo przypadków testowych, które pozwolą nam zweryfikować czy aplikacja zachowuje się w przewidywalny sposób w skrajnych przypadkach. Nawet ogólniej, sprawdzą w ogóle czy oprogramowanie działa poprawnie. Nie ma potrzeby tworzenia plików wykonywalnych, uruchamiania aplikacji, aby zweryfikować poprawność jej działania. Wystarczy uruchomienie odpowiednich testów i natychmiastowo otrzymujemy feedback o działaniu programu. Jest to bardzo wygodna i ekonomiczna forma weryfikacji. A skoro o finansach mowa…

2. Narazisz firmę na mniejsze koszty

Im mniej błędów zostanie popełnionych podczas programowania tym mniejsze koszty zostaną poniesione podczas użytkowania. Nie będzie wtedy istniał efekt kuli śniegowej. Jeżeli deweloper wyłapie jak najwięcej błędów na swojej maszynie deweloperskiej to będzie ich mniej na wyższych środowiskach. Nie trzeba będzie marnować czasu na odrzucenie danego zadania i ponownego jego oprogramowywanie. A jak wiemy “czas to pieniądz”.

To była ta wersja łagodniejsza, gdy błąd zostanie znaleziony na środowisku testerskim. Jednak skutki mogą być dotkliwsze jeśli taki błąd znajdzie się na produkcji. Zwłaszcza jeśli aplikacja obraca prawdziwymi pieniędzmi! W artykule How Much is Poor Quality Software Costing You? można wyczytać, że same błędy w oprogramowaniu w 2018 roku w USA wyniosły 1,28 biliona dolarów! Prawda, że zawrotna kwota? Autor zaznacza, że do policzenia tej wartości zostały wzięte tylko przypadki podane w mediach. Podobno jest to tylko kropla w morzu, ponieważ wiele błędów oprogramowania nie zostało nagłośnionych w gazetach czy telewizji, a na pewno miały wpływ na swoich klientów.

Stąd wniosek, że jeżeli wyłapiesz większość błędów na swoim komputerze podczas dewelopmentu tym mniejsze koszty poniesie twój pracodawca. A Tobie będzie łatwiej uzasadnić swoją podwyżkę 😉.

3. Nie popsujesz bieżącego działania oprogramowania

Możliwe, że dodając nową funkcjonalność będziesz musiał zmodyfikować już istniejący kod. Załóżmy, że Twój projekt nie ma żadnych testów. Zaczynasz programować i nagle istniejąca już funkcjonalność przestaje działać. Poprawiasz ją i… działa, super! Już jesteś gotowy oddać zadanie, ale przypomniało Ci się, aby sprawdzić jeszcze jedną rzecz. I oczywiście co… ona nie działa! Dodanie nowej funkcjonalności sprawiło, że ta stara sprzed roku się rozwaliła. Następuje efekt domina…

Fixing one place breaks other place

Takiego przebiegu wydarzeń można byłoby uniknąć dzięki testom! Jeśli wymagana jest zmiana w istniejącym kodzie to możesz być spokojny, że nic nie zepsujesz. Po prostu puścisz odpowiednie przypadki testowe i sprawdzisz czy wszystko działa jak należy. Takie rozwiązanie oszczędzi ci utraty wielu nerwów!

4. Twoja aplikacja będzie czytelniejsza

To jest naprawdę istotny punkt dla dewelopera! Pisząc testy możesz sprawić, że Twoja aplikacja po prostu będzie wyglądała lepiej. Stanie się wręcz prostsza w utrzymaniu (oczywiście jeśli będziesz pisał dobre testy 😉). API Twojego oprogramowania będzie na pewno przyjemniejsze w użytkowaniu. Tylko w sumie dlaczego tak się dzieje?

Po prostu ma na to wpływ fakt, że jeżeli męczysz się przy pisaniu testów to Twoja aplikacja na bank jest źle zaprojektowana. Możliwe, że została złamana jedna bądź kilka zasad SOLID. Należy ponownie przemyśleć design programu i dokonać refaktoryzacji. W ten sposób zapewnisz przyjemniejszą pracę sobie oraz Twoim kolegom z zespołu!

5. Kodując sporządzisz dokumentację programu

Poprzez odpowiednie nazywanie przypadków testowych jesteś w stanie wygenerować raport dla biznesu, który będzie dla nich zrozumiały. Dodatkowo na rynku dostępne są narzędzia, które pozwolą Ci stworzyć dokumentację użytkownika systemu na podstawie testów. Przyznaj szczerze, że na pewno wolisz programować niż pisać kolejnego Worda… W ten sposób Twój kod jest przetestowany oraz uzyskujesz dokumentację bez żadnego nakładu pracy! Win-win!

Jeśli chodzi o raport dla biznesu to możesz im w ten sposób uzasadnić jak bardzo Twój kod jest niezawodny. Jest to możliwe dzięki metrykom, które jesteś w stanie zmierzyć za pomocą testów. Każdy wie, że biznes kocha cyferki. Dlatego udowodnij im jakość swojego kodu na podstawie tego jakie np. masz pokrycie testami swojego kodu, a na pewno to docenią!

6. Lepiej dogadasz się z kolegami programistami

Pewnie zdarzyło Ci się mieć taką sytuację, w której to dokładnie, krok po kroku, tłumaczyłeś komuś jak ma wykonać dane zadanie. Niestety po zaimplementowaniu tej funkcjonalności przez kolegę nie działała ona tak jak zakładałeś. Wtedy zadajesz sobie pytanie, że może źle coś wytłumaczyłeś albo nie zostałeś do końca zrozumiany? Tutaj również z pomocą przychodzą testy, które pomogą Ci lepiej komunikować się z zespołem. Wystarczy, że napiszesz komuś testy na daną funkcjonalność zamiast tłumaczyć niuanse problemu. Kod nigdy nie kłamie! Jedynym zadaniem drugiej osoby będzie sprawienie, aby napisane przez Ciebie testy przeszły. Znowu nowa funkcjonalność zyskała testy, a Wy bez problemów się ze sobą prawidłowo skomunikowaliście.

Podsumowanie

Jak widzisz testy naprawdę potrafią ułatwić pracę. Nie dość, że dają Ci spokój ducha to także dzięki nim jesteś w stanie wiele rzeczy zautomatyzować. Zachęcam Cię do nauki pisania testów, naprawdę programowanie stanie się przyjemniejsze dla Ciebie oraz dla całego zespołu. Sam skorzystałem ze szkolenia SmartTesting, z którego jestem bardzo zadowolony. Mogę go z czystym sumieniem Tobie polecić!

A jakie jest Twoje nastawienie do testowania? Napisz proszę w komentarzu co Cię powstrzymuje jeszcze przed pisaniem testów bądź co więcej jeszcze dają Ci testy.