Testowanie

Testowanie cz. I – Wstęp

By on 29 grudnia 2016

Coraz częściej można spotkać się z błędami w grach i aplikacjach użytkowych. Dobry developer powinien zadbać o jakość oprogramowania, dlatego dziś w paru słowach skupimy się na opisie kilku metod testowania aplikacji.

Podejście manualne jest najbardziej elementarną metodą polegającą na ręcznym testowaniu aplikacji bezpośrednio na dedykowanej platformie. Jakość aplikacji w tej metodzie jest określana przez nieprawidłowości znalezione podczas obsługi aplikacji, np. graczowi zdarzy się wyjść poza tekstury, gra nie reaguje prawidłowo na żyroskop w telefonie, czcionka w menu jest za mała do odczytania na dużej rozdzielczości. Przykłady można by mnożyć w nieskończoność. Łączy je to że mogą być wykryte jedynie wzrokowo, albo są ciężkie do przetestowania w emulatorze i pojawiają się podczas używania na rzeczywistym sprzęcie. Z oczywistych względów niestety często zasoby sprzętowe do testowania są ograniczone, wówczas często stosuje się taktykę skrajności, gdzie aplikację testuje się na skrajnych konfiguracjach sprzętu np. najmniejsza i największa wielkość ekranu telefonu. Podczas testowania manualnego nie można zapomnieć, że nie tylko testujemy błędy aplikacji, ale również user experience, czyli dbamy żeby aplikacja prezentowała się atrakcyjnie, była funkcjonalna, ergonomiczna i użyteczna.

Kolejne podejścia mają wspólne określenie testów automatycznych.

Jedną z grup testów automatycznych są testy jednostkowe. W testach tych sprawdzamy np. zachowanie się składowych obiektów. Testy te są odseparowane od interfejsu i skupiają się na poprawności zwracanych wartości. Załóżmy że chcemy przetestować funkcję odpowiadającą za liczenie przeciwprostokątnej w trójkącie. Wówczas tworzymy zestawy danych podawanych jako argumenty wraz z oczekiwanymi zwracanymi wartościami, np. jeden zestaw to parametry (3, 4), a zwracana wartość (5). Jeśli dla danych parametrów zwracana wartość się zgadza to program przeszedł test prawidłowo. Jeśli chociaż jeden zestaw się nie zgadza to cały program nie przejdzie testu i oznacza to że mamy błąd w aplikacji i wiemy gdzie go szukać. Ważnym jest to że oczekiwaną zwracaną wartością mogą być także wyjątki np. wyjątek powinien zostać wyrzucony dla parametrów (-1, 5), bo długość boku trójkąta nie może być ujemna. Tester automatyczny musi cechować się dobrą wyobraźnią, aby przewidzieć takie scenariusze.

Kolejną grupą testów automatycznych są testy integracyjne. W tym przypadku sprawdzamy jak cegiełki, które testowaliśmy w testach jednostkowych „integrują” się z interfejsem aplikacji. W tym celu sprawdzamy funkcjonalności aplikacji, a nie samych obiektów. Wyobraź sobie, że masz ręcznie przetestować rozbudowaną aplikację, gdzie ilość możliwych testów jest duża, co prowadzi do tego że każdy taki pełen test zajmuje wiele godzin. Za każdym razem musisz wpisywać wszystkie warte sprawdzenia konfiguracje danych, tych prawidłowych jak i tych nieprawidłowych, porównywać wyniki z oczekiwanymi. Prowadzi to do tego, że taki ręczny test przeprowadza się rzadko. Testy integracyjne są lekarstwem na ten problem. Warto zwrócić uwagę, że takie testy przebiegają zazwyczaj identycznie. Ideą testów integracyjnych jest automatyczne uzupełnianie pól aplikacji i automatyczne wywoływanie przycisków poprzez kod. Jako przykład dajmy formularz rejestracyjny. W teście integracyjnym na pewno trzeba sprawdzić jak formularz radzi sobie z poprawnym formatem emaila. Najpierw należy poprzez kod ustawić wartości wszystkich pozostałych pól na prawidłowe, a format emaila nieprawidłowy. Kolejno poprzez kod wywołać przycisk rejestracji. Ostatnim etapem jest porównanie w kodzie zwróconej wartości komunikatu np. z TextView z oczekiwaną wartością. Jeśli wartość jest taka sama to test przeszedł pomyślnie. Takich zestawów danych należy przygotować tyle ile chcemy przypadków testowych.

Używanie testów automatycznych pozwala na szybkie wykrycie błędów w prowadzonych modyfikacjach kodu i zaoszczędzić czas przy wielokrotnym testowaniu dużych aplikacji.

Przy tworzeniu testów automatycznych często są niezbędne zewnętrzne biblioteki lub narzędzia ułatwiające tworzenie takich testów. Więcej już o praktycznym testowaniu napiszę w kolejnej części.

TAGS

LEAVE A COMMENT