Moje podejście do testowania GUI ewoluuje, podobnie jak konsensus branżowy. Myślę jednak, że zaczyna się pojawiać kilka kluczowych technik.
Używam jednej lub więcej z tych technik, w zależności od sytuacji (np. Jaki to rodzaj GUI, jak szybko należy go zbudować, kim będzie użytkownik końcowy itp.).
Testowanie ręczne. Zawsze masz uruchomiony GUI podczas pracy nad kodem i upewnij się, że jest zsynchronizowany z kodem. Ręcznie testujesz i ponownie testujesz część, nad którą pracujesz, podczas pracy nad nią, przełączając się między kodem a uruchomioną aplikacją. Za każdym razem, gdy wykonujesz jakąś znaczącą pracę, poddajesz cały ekran lub obszar aplikacji całościowy test, aby upewnić się, że nie ma regresji.
Testów jednostkowych. Piszesz testy dla funkcji lub małych jednostek zachowania GUI. Na przykład wykresy mogą wymagać obliczenia różnych odcieni koloru w oparciu o kolor „bazowy”. Możesz wyodrębnić to obliczenie do funkcji i napisać dla niej test jednostkowy. Możesz wyszukać logikę taką jak ta w GUI (zwłaszcza logikę wielokrotnego użytku) i wyodrębnić ją do dyskretnych funkcji, które można łatwiej przetestować jednostkowo. W ten sposób można wyodrębnić i przetestować nawet złożone zachowanie - na przykład sekwencję kroków w kreatorze można wyodrębnić do funkcji, a test jednostkowy może zweryfikować, czy po wprowadzeniu danych wejściowych zwracany jest prawidłowy krok.
Eksplorator komponentów. Tworzysz ekran „eksploratora”, którego jedyną rolą jest pokazanie każdego z komponentów wielokrotnego użytku, które tworzą twój GUI. Ten ekran umożliwia szybkie i łatwe wizualne sprawdzenie, czy każdy element ma właściwy wygląd i styl. Eksplorator komponentów jest bardziej wydajny niż ręczne przeglądanie całej aplikacji, ponieważ A) musisz zweryfikować każdy komponent tylko raz i B) nie musisz wchodzić w głąb aplikacji, aby zobaczyć komponent, możesz po prostu wyświetlić i sprawdź to natychmiast.
Testowanie automatyczne. Piszesz test, który współdziała z ekranem lub komponentem, symulując kliknięcia myszą, wprowadzanie danych itp., Zapewniając, że aplikacja działa poprawnie przy tych manipulacjach. Może to być przydatne jako dodatkowy test zapasowy, aby wychwycić potencjalne błędy, które mogą zostać pominięte w innych testach. Zwykle rezerwuję testowanie automatyzacji dla tych części GUI, które są najbardziej podatne na uszkodzenia i / lub są bardzo krytyczne. Części, w przypadku których chcę jak najwcześniej wiedzieć, czy coś się zepsuło. Może to obejmować bardzo złożone komponenty interaktywne, które są podatne na uszkodzenia lub ważne ekrany główne.
Testowanie różnic / migawek. Piszesz test, który po prostu przechwytuje dane wyjściowe jako zrzut ekranu lub jako kod HTML i porównuje je z poprzednim wynikiem. W ten sposób jesteś powiadamiany o każdej zmianie wyniku. Testy różnicowe mogą być przydatne, jeśli wizualny aspekt GUI jest złożony i / lub podlega zmianom. W takim przypadku potrzebujesz szybkiej i wizualnej informacji zwrotnej na temat wpływu danej zmiany na GUI jako całość.
Zamiast ciężko używać każdego możliwego rodzaju testu, wolę wybierać technikę testowania w oparciu o rodzaj rzeczy, nad którą pracuję. Więc w jednym przypadku wyodrębnię prostą funkcję i przetestuję ją jednostkowo, ale w innym przypadku dodam komponent do eksploratora komponentów itd. To zależy od sytuacji.
Nie znalazłem pokrycia kodu jako bardzo użytecznego wskaźnika, ale inni mogli znaleźć dla niego zastosowanie.
Myślę, że pierwszą miarą jest liczba i powaga błędów. Twoim głównym priorytetem jest prawdopodobnie posiadanie aplikacji, która działa poprawnie. Jeśli aplikacja działa poprawnie, powinno być niewiele lub żadnych błędów. Jeśli jest wiele lub poważnych błędów, przypuszczalnie albo nie testujesz, albo twoje testy nie są skuteczne.
Oprócz ograniczania błędów istnieją inne środki, takie jak wydajność, użyteczność, dostępność, łatwość konserwacji, rozszerzalność itp. Będą się one różnić w zależności od rodzaju aplikacji, którą tworzysz, firmy, użytkownika końcowego itp.
Wszystko to jest oparte na moim osobistym doświadczeniu i badaniach, a także świetnym artykule na temat testów interfejsu użytkownika autorstwa Ham Vocke .