- Bardzo dbamy o jakość – podkreśla skrupulatnie Programista- kładziemy duży nacisk na tworzenie unit testów! Wszystkie procedury mamy pokryte testami!
- Oooo super! – patrzę z szacunkiem - dużo czasu poświęcacie na przygotowanie testów?
- Noo … - słyszę pewne wahanie w głosie - no niestety, kosztuje to dużo czasu…. Przygotowanie testów, same testy no i poprawki po testach… To zajmuje najwięcej czasu. W sumie na jedną procedurę to tak tydzień schodzi...Ale coś za coś! Warto!
- Oj.. to dużo.. Ale rozumiem, że wyniki obiecujące? Znajdujecie dużo błędów? Opłaca się ten dodatkowy czas?
- No pewnie że się opłaca! - żachnął się Programista - Znajdujemy dużo błędów! Ostatnio znaleźliśmy ze 20!
Super, prawda?
Tylko jak się potem okazało 18 z tych błędów to były błędy w środowisku testowym, danych testowych i procedurach testowych. Tydzień czasu by znaleźć dwa błędy aplikacji?
Tak, testy jednostkowe są bardzo kosztowne a zyski są w sumie niewielkie. Większość znajdowanych błędów to błędy w samych danych testowych albo w procedurach testowych. Jak już uda się doprowadzić do sytuacji, gdy testy działają bez zarzuty – wtedy wchodzi nowa modyfikacja i znów trzeba poświęcać czas na dostosowanie rozbudowanych testów jednostkowych. Koszty rosną a jakość kodu nie zwiększa się dramatycznie. W takich sytuacja doskonale rozumiem managerów i klientów, którzy testy jednostkowe uważają za bardzo kosztowną fanaberię programistów.
Czy Unit Testy są wobec tego potrzebne?
Testy jednostkowe jak sama nazwa wskazuje są nieodłącznym elementem etapu programowania :). Etap programowania jest etapem, na którym powstaje stosunkowo najwięcej błędów. Na szczęście usterki te z reguły są bardzo łatwe do naprawy.
Pod warunkiem, że je znajdziemy od razu, jeszcze podczas programowania!
Jeśli programista pracując nad procedurą od razu tworzy testy jednostkowe – natychmiast ma informacje o wystąpieniu błędu oraz o miejscu jego wystąpienia. Naprawa takiego błędu to często kwestia minut czy nawet sekund! Jeśli zaś programista pominie testy jednostkowe i błąd przedostanie się do następnego etapu – to może się zdarzyć jeden z dwóch scenariuszy:
1. Błąd zostanie znaleziony przez testera
Ze względu na „odległość” testera od kodu - analiza miejsca wystąpienia usterki może zająć sporo czasu. Także przy działającym już całym systemie naprawa błędu możne nastręczać trudności, może spowodować wytworzenie nowych błędów w innych modułach czy powiązanych funkcjonalnościach. Dodatkowo będzie potrzebna przeprowadzenie re-testu. Zamiast kilku minut poświęconych podczas programowani na naprawę – poświęcimy na ten sam błąd przynajmniej kilka godzin pracy programisty i testera. Trzeba również doliczyć pracę managera koordynującego proces.
2. Błąd przeniknie na system produkcyjny
Oprócz kosztów takich jak w punkcie 1 – dojdzie obsługa przygotowania poprawki i wdrożenia jej na produkcję. Będą musiały zostać powtórzone wszystkie etapy testów nie tylko funkcjonalne ale i akceptacyjne. Dodatkowo ucierpi nasz wizerunek. Przedostanie się błędu do systemu produkcyjnego to najgorsza możliwa opcja.
Dlatego tak istotne jest, by jak najwięcej błędów usunąć w trakcie etapu programowania. A do tego potrzebujemy Testów Jednostkowych.
Co nam dają Testy Jednostkowe.
1. Dają natychmiastową informację o poprawności działaniu programu.
2. W przypadku błędu – mamy od razu informację o typie błędu i miejscu jego wystąpienia dzięki czemu naprawa jest prawie natychmiastowa
3. W przypadku modyfikacji istniejącej procedury dzięki testom jednostkowym możemy łatwo i szybko sprawdzić, czy nasze zmiany nie zmieniły istniejących funkcjonalności
4. Dzięki testom jednostkowym można przeprowadzić dużo więcej testów, niż jest to możliwe w innych rodzajach testów.
5. Testy jednostkowe mogą wykryć błędy niemożliwe do znalezienia za pomocą innych rodzajów testów.
6. Testy Jednostkowe idealnie nadają się do automatyzacji a co za tym idzie umożliwiają szybkie sprawdzanie całego systemu pod kątem regresji.
Zalety testów jednostkowych są niemożliwe do przecenienia! Nie ma absolutnie żadnej innej metody by wyeliminować tyle błędów jeszcze przed etapem testów oraz upewnić się, że nowa wersja aplikacji nie spowodowała usterek w działających modułach systemu.
Dorze wykonane testy jednostkowe są kluczowe do wydania wysoko jakościowej aplikacji wolnej od błędów.
Brzmi zachęcająco, prawda? Tyko te koszty i czasochłonność..
A co jeśli..?
A co jeśli powiem, że czas przygotowania testów jednostkowych i ich koszty mogą zostać drastycznie zmniejszone a ich jakość i skuteczność wykrywania błędów – wielokrotnie zwiększone? Czy wtedy byłoby warto wdrożyć Unit Testy w proces tworzenia oprogramowania?
W następnym artykule opowiem, jak radzić sobie z typowymi problemami utrudniającymi przygotowanie Testów Jednostkowych. Przygotowanie Testów stanie się łatwe, przyjemne i oczywiste!
Komentarze
Prześlij komentarz