pasjaonline.pl
Programmer_writing_code_with_Unit_Tests
Programmer_writing_code_with_Unit_Tests
Programmer_writing_code_with_Unit_Tests
Programmer_writing_code_with_Unit_Tests
Jak ugryźć testowanie oprogramowania?
autor

d9k

date

Nie mamy czasu na testowanie„. „Testy? Ale po co, przecież mój program działa„. „Naszej firmy nie stać na zatrudnienie testera” – tego typu wypowiedzi wciąż można jeszcze usłyszeć w wielu firmach. Pozorne oszczędności zyskane na pomijaniu etapu testów, mogą w przyszłości zemścić się w postaci błędów wykrytych już po wdrożeniu oprogramowania. Na tym etapie ich usuwanie jest trudne i pociąga za sobą wysokie koszty. Cena ta nie musi być wyłącznie finansowa (np. kara za niedopełnienie umowy w państwowym przetargu). Dużo większym kosztem jest utrata wiarygodności i dobrej opinii.

Tymczasem warto uświadomić sobie, że nie ma bezbłędnego programu. Nawet najlepszym zdarzają się wpadki. Każdy chyba zna „blue screeny”. Chyba najdroższym błędem programistycznym w historii świata jest katastrofa rakiety Ariane 5 (4.06.1996), na skutek nieprawidłowej konwersji liczb. Rakieta była warta 500 milionów dolarów (1).

Jak można zatem zapewnić wysoką jakość produktu? Między innymi testując.

Testować możemy manualnie. By udowodnić działanie swego programu, programista przeważnie przeklikuje kilka razy aplikację. Niestety nie jest to wiarygodny test. Poza przejściem typowych ścieżek warto spróbować celowo „zepsuć” aplikację – wpisać w pola nieprawidłowe wartości, nie uzupełnić wymaganych danych, odłączyć się od sieci, odświeżyć okno przeglądarki, albo… posadzić przed komputerem mało technicznego znajomego. Tego typu testy szybko uświadomią nam, w jaki sposób użytkownicy mogą używać programu.

Do testowania można także podejść bardziej metodycznie, tworząc listy przypadków testowych, czyli procedur, jakie należy wykonać krok po kroku, by sprawdzić daną funkcjonalność.

Przykładowy przypadek testowy:
Środowisko:
Przeglądarka Mozilla Firefox 41.0.1
Kroki:
1. Przejść na stronę http://pasjaonline.pl/
2. Najechać myszą na element menu „Kategorie”
Oczekiwany rezultat:
Pojawienie się menu z kategoriami: Polecane, Top

Podany wyżej przypadek jest dość prosty. Sytuacja komplikuje się, gdy chcemy przetestować nie tylko interfejs, ale także dane, na przykład – pole służące do wpisywania kodu pocztowego. Jako że w Polsce kod pocztowy jest zunifikowany, wiadomo czego powinniśmy się spodziewać – ciągu znaków w formacie dd-ddd, gdzie d to dowolna cyfra 0-9. Zatem pozytywne przypadki testowe do testowania pola na kod pocztowy to np.: 00-0001, 00-999, 99-999. Negatywne to np.: ab-cde, 0-1234, 01-23, 012345, @#$%^, 00--888. (2)

Do jak najlepszego wyznaczania przypadków testowych stosuje się różne metodyki. Jedną z nich jest podział danych na klasy równoważności. Reakcja programu na dane z jednej klasy powinna być identyczna – najprostszym przykładem jest strona dla dorosłych, która pozwala wejść jedynie użytkownikom o wieku powyżej 18 lat: mamy tutaj dwie klasy, wiek <18 i 18<. Z klasami równoważności łączy się druga technika: analiza wartości brzegowych. Koncentruje się ona na wartościach granicznych klas. Dla powyższego przykładu będą to wartości: -1, 0, 1, 17, 18, 19 plus przypadki z klas równoważności: 10, 30. (2)

W ten sposób opisane przypadki są świetną bazą do rozpoczęcia automatyzacji testów, lecz to już temat na większy artykuł.

Źródła:
(1) http://home.agh.edu.pl/~pyrda/doku.php?id=wiki:liczby_zmiennoprzecinowe
(2) Dane testowe, teoria i praktyka, R. Smilgin, A. Piaskowy