681734-01

Testy automatyczne

Dwa tygodnie temu byłem na konferencji IT. Na jednej z prelekcji padło pytanie: „Kto w firmie, w której pracuje ma pokrycie testami na poziomie przynajmniej 10%”. Cztery osoby się zgłosiły. Do poziomu 40% dotrwałem tylko ja.

Można pisać oprogramowanie bez testów. Nawet będzie działać. Tylko co jeśli okaże się że trzeba zrobić zmianę w jakiejś metodzie, która napisana jest w najczęściej używanym komponencie w projekcie. Pewnie zapytamy twórce komponentu o to czy nasze zmiany nic nie popsują. Co zrobimy jeśli osoba ta nie pracuje już w firmie? Pewnie zmarnujemy wiele godzin na znalezienie wszystkich scenariuszy użycia.

Gdyby w projekcie utrzymywane były testy automatyczne nie byłoby tego problemu bo po zmianie funkcjonalności wystarczyłoby je uruchomić. Same testy nie przewidzą wszystkich scenariuszy użycia, to optymistyczne założenie idealnego świata. Dobrze napisane pokryją za to większość a na pewno te, które rzeczywiście mogą się wydarzyć.

Istnieje ideologia Test First mówiąca o tym że testy powinno się pisać przed samą funkcjonalnością. Nie chodzi tu tylko o to żeby wymusić pisanie testów w ogóle bo po napisaniu kodu można „przypadkowo” zapomnieć. Takie podejście jest bardzo dobrym narzędziem do wychwytywania błędów projektowych. Podczas pisania testu może okazać się że nasze założenia są błędne a to co sobie założyliśmy jest niewykonalne. Nie marnujemy w ten sposób czasu na pisanie funkcjonalności, która nie zostanie nigdy ukończona.

Pisanie testów automatycznych ma też swoje wady. Juz przy pisaniu funkcjonalności wymagają pewnego nakładu pracy. Trzeba także pamiętać o sprawdzeniu czy nic się nie popsuło przy każdej zmianie kodu. Praca ta jednak opłaca się w przyszłości.

Testy automatyczne wymagają pewnego nakładu pracy ale jest on znacznie mniejszy niż ten, który trzeba włożyć w edycję kodu nie pokrytego testami. Jeśli w projekcie nie ma dokumentacji to przypadki testowe mogą za nią służyć. Zalet w tym podejściu jest więcej niż wad.

Obrazek z Freepik

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *