Co to jest testowanie funkcjonalne?

Ukończone

W tej sekcji dołączysz do zespołu Tailspin, definiując testy funkcjonalne dla swojego potoku. Testy funkcjonalne sprawdzają, czy każda funkcja oprogramowania wykonuje to, co powinno.

Zespół najpierw definiuje, co obejmuje test funkcjonalny. Badają niektóre typy testów funkcjonalnych. Następnie decydują się na pierwszy test, aby dodać go do potoku.

Cotygodniowe spotkanie

Zespół ma swoje tygodniowe spotkanie. Andy demonstruje potok wydania. Zespół obserwuje pomyślną kompilację przechodzącą przez potok z jednego etapu do innego. Na koniec aplikacja internetowa jest promowana do przemieszczania.

Amita: Jestem tak zadowolony z potoku. To sprawia, że moje życie jest znacznie łatwiejsze. Po pierwsze, automatycznie otrzymuję wydanie wdrożone w środowisku testowym. Oznacza to, że nie muszę ręcznie pobierać i instalować artefaktów kompilacji na serwerach testowych. Jest to znaczący czas oszczędzający.

Ponadto testy jednostkowe, które Napisał Mara i Andy wyeliminować wszystkie błędy regresji przed uzyskaniem wydania. To usuwa główne źródło frustracji. Nie poświęcam czasu na znajdowanie i dokumentowanie błędów regresji.

Ale obawiam się, że wszystkie moje testy są nadal ręczne. Proces jest powolny i nie możemy pokazać niczego do zarządzania, dopóki nie dokończę. Trudno jest, ponieważ testowanie jest ważne. Testowanie gwarantuje, że użytkownicy uzyskają odpowiednie środowisko. Ale presja jest na szybsze dostarczanie.

Andy: Jestem pewien, że możemy ci pomóc. Jakiego rodzaju testy zajmują większość czasu?

Amita: Myślę, że testy interfejsu użytkownika robią. Muszę kliknąć każdy krok, aby upewnić się, że otrzymuję poprawny wynik i muszę to zrobić dla każdej obsługiwanej przeglądarki. To bardzo czasochłonne. Wraz ze wzrostem złożoności witryny internetowej testowanie interfejsu użytkownika nie będzie praktyczne w dłuższej perspektywie.

Mara: Testy interfejsu użytkownika są uważane za testy funkcjonalne .

Tim: W przeciwieństwie do czego, niefunkcjonalne testy?

Mara: Dokładnie. A niefunkcjonalne testy są czymś, co w szczególności dbasz.

Tim: Dobrze, jestem zdezorientowany.

Co to są testy funkcjonalne i niefunkcjonalne?

Mara: Testy funkcjonalne sprawdzają, czy każda funkcja oprogramowania robi to, co powinno. W jaki sposób oprogramowanie implementuje każdą funkcję, nie jest ważne w tych testach. Ważne jest, aby oprogramowanie działało prawidłowo. Podajesz dane wejściowe i sprawdzasz, czy dane wyjściowe są oczekiwane. W ten sposób Amita testuje interfejs użytkownika. Jeśli na przykład wybierze najlepszego gracza w rankingu, spodziewa się, że zobaczy profil tego gracza.

Testy niefunkcjonalne sprawdzają cechy, takie jak wydajność i niezawodność. Przykładem testu niefunkcjonalnego jest sprawdzenie, ile osób może jednocześnie zarejestrować się w aplikacji. Testowanie obciążenia to kolejny przykład niefunkcjonalnego testu. Te problemy z wydajnością i niezawodnością to rzeczy, o które dbasz, Tim.

Tim: Są, rzeczywiście. Muszę myśleć o tym trochę. Mogę też dodać automatyzację do potoku, ale nie jestem pewien, co chcę zrobić. Jakiego rodzaju testy automatyczne można uruchomić?

Mara: Na razie skoncentrujmy się na testach funkcjonalnych. Jest to rodzaj testowania, które robi Amita. I brzmi to jak obszar, w którym chcemy poprawić.

Jakiego rodzaju testy funkcjonalne można uruchomić?

Istnieje wiele rodzajów testów funkcjonalnych. Różnią się one w zależności od funkcjonalności, które należy przetestować, oraz czasu lub nakładu pracy, które zwykle wymagają uruchomienia.

W poniższych sekcjach przedstawiono niektóre często używane testy funkcjonalne.

Testowanie weryfikacyjne kompilacji

Testowanie weryfikacyjne kompilacji weryfikuje najbardziej podstawową funkcjonalność aplikacji lub usługi. Te testy są często uruchamiane przed bardziej kompletnymi i wyczerpującym testami. Testy weryfikacyjne kompilacji powinny być uruchamiane szybko.

Załóżmy na przykład, że tworzysz witrynę internetową. Test weryfikacyjny kompilacji może służyć curl do sprawdzenia, czy witryna jest osiągalna i czy pobieranie strony głównej powoduje wygenerowanie stanu HTTP 200 (OK). Jeśli pobieranie strony głównej powoduje wygenerowanie innego kodu stanu, takiego jak 404 (Nie znaleziono) lub 500 (wewnętrzny błąd serwera), wiesz, że witryna internetowa nie działa. Wiesz również, że nie ma powodu do uruchamiania innych testów. Zamiast tego należy zdiagnozować błąd, naprawić go i ponownie uruchomić testy.

Testowanie jednostek

Pracowaliśmy z testami jednostkowymi w module Uruchamianie testów jakości w potoku kompilacji przy użyciu usługi Azure Pipelines .

Krótko mówiąc, testowanie jednostkowe weryfikuje najbardziej podstawowe składniki programu lub biblioteki, takie jak pojedyncza funkcja lub metoda. Należy określić jeden lub więcej danych wejściowych wraz z oczekiwanymi wynikami. Moduł uruchamiający testy wykonuje każdy test i sprawdza, czy rzeczywiste wyniki są zgodne z oczekiwanymi wynikami.

Załóżmy na przykład, że masz funkcję, która wykonuje operację arytmetyczną obejmującą dzielenie. Możesz określić kilka wartości, które mają zostać wprowadzone przez użytkowników. Należy również określić wartości wielkości krawędzi, takie jak 0 i -1. Jeśli oczekujesz, że określone dane wejściowe spowodują wystąpienie błędu lub wyjątku, możesz sprawdzić, czy funkcja generuje ten błąd.

Testy interfejsu użytkownika, które zostaną uruchomione w dalszej części tego modułu, to testy jednostkowe.

Testowanie integracji

Testowanie integracji sprawdza, czy wiele składników oprogramowania współdziała ze sobą w celu utworzenia kompletnego systemu. Na przykład system handlu elektronicznego może obejmować witrynę internetową, bazę danych produktów i system płatności. Możesz napisać test integracji, który dodaje elementy do koszyka zakupów, a następnie kupuje elementy. Test sprawdza, czy aplikacja internetowa może połączyć się z bazą danych produktów, a następnie spełnić zamówienie.

Możesz połączyć testy jednostkowe i testy integracji, aby utworzyć strategię testowania warstwowego. Na przykład można uruchamiać testy jednostkowe na poszczególnych składnikach przed uruchomieniem testów integracji. Jeśli wszystkie testy jednostkowe przechodzą pomyślnie, możesz przejść do testów integracji z większą pewnością.

Testowanie regresji

Regresja występuje, gdy istniejące zachowanie zmienia się lub przerywa po dodaniu lub zmianie funkcji. Testowanie regresji pomaga określić, czy kod, konfiguracja lub inne zmiany wpływają na ogólne zachowanie oprogramowania.

Testowanie regresji jest ważne, ponieważ zmiana w jednym składniku może mieć wpływ na zachowanie innego składnika. Załóżmy na przykład, że optymalizujesz bazę danych pod kątem wydajności zapisu. Wydajność odczytu tej bazy danych, która jest obsługiwana przez inny składnik, może nieoczekiwanie spaść. Spadek wydajności odczytu to regresja.

Aby przetestować regresję, można użyć różnych strategii. Te strategie zwykle różnią się w zależności od liczby uruchomionych testów, aby sprawdzić, czy nowa funkcja lub poprawka usterek nie przerywa istniejących funkcji. Jednak podczas automatyzowania testów testowanie regresji może obejmować tylko uruchamianie wszystkich testów jednostkowych i testów integracji za każdym razem, gdy oprogramowanie ulegnie zmianie.

Testowanie sanity

Testowanie kondycji obejmuje testowanie każdego głównego składnika oprogramowania w celu sprawdzenia, czy oprogramowanie wydaje się działać i może przejść bardziej szczegółowe testy. Testy sanity można traktować jako mniej dokładne niż testy regresji lub testy jednostkowe, ale testy sanity są szersze niż testy weryfikacyjne weryfikacyjne kompilacji.

Mimo że testowanie zasadności można zautomatyzować, często odbywa się to ręcznie w odpowiedzi na zmianę funkcji lub poprawkę usterek. Na przykład tester oprogramowania, który weryfikuje poprawkę usterek, może również sprawdzić, czy inne funkcje działają, wprowadzając niektóre typowe wartości. Jeśli oprogramowanie wydaje się działać zgodnie z oczekiwaniami, może przejść przez bardziej szczegółowy test.

Testowanie interfejsu użytkownika

Testowanie interfejsu użytkownika weryfikuje zachowanie interfejsu użytkownika aplikacji. Testy interfejsu użytkownika pomagają sprawdzić, czy sekwencja lub kolejność interakcji użytkownika prowadzi do oczekiwanego wyniku. Te testy pomagają również zweryfikować, czy urządzenia wejściowe, takie jak klawiatura lub mysz, wpływają prawidłowo na interfejs użytkownika. Możesz uruchomić testy interfejsu użytkownika, aby zweryfikować zachowanie natywnej aplikacji systemu Windows, macOS lub Linux. Możesz też użyć testów interfejsu użytkownika, aby sprawdzić, czy interfejs użytkownika działa zgodnie z oczekiwaniami w przeglądarkach internetowych.

Test jednostkowy lub test integracji może sprawdzić, czy interfejs użytkownika prawidłowo odbiera dane. Jednak testowanie interfejsu użytkownika pomaga sprawdzić, czy interfejs użytkownika jest poprawnie wyświetlany i czy wynik działa zgodnie z oczekiwaniami dla użytkownika.

Na przykład test interfejsu użytkownika może sprawdzić, czy prawidłowa animacja pojawia się w odpowiedzi na kliknięcie przycisku. Drugi test może sprawdzić, czy ta sama animacja jest wyświetlana poprawnie po zmianie rozmiaru okna.

W tym module pracujesz z testami interfejsu użytkownika, które są kodowane ręcznie. Można jednak również użyć systemu przechwytywania i odtwarzania w celu automatycznego kompilowania testów interfejsu użytkownika.

Testowanie użyteczności

Testowanie użyteczności to forma testowania ręcznego, która weryfikuje zachowanie aplikacji z perspektywy użytkownika. Testowanie użyteczności jest zwykle wykonywane przez zespół tworzący oprogramowanie.

Podczas gdy testowanie interfejsu użytkownika koncentruje się na tym, czy funkcja działa zgodnie z oczekiwaniami, testowanie użyteczności pomaga sprawdzić, czy oprogramowanie jest intuicyjne i spełnia potrzeby użytkownika. Innymi słowy, testowanie użyteczności pomaga sprawdzić, czy oprogramowanie jest "użyteczne".

Załóżmy na przykład, że masz witrynę internetową zawierającą link do profilu użytkownika. Test interfejsu użytkownika może sprawdzić, czy link jest obecny i czy wyświetla profil użytkownika po kliknięciu linku. Jeśli jednak ludzie nie mogą łatwo zlokalizować tego linku, mogą stać się sfrustrowani, gdy próbują uzyskać dostęp do swojego profilu.

Testowanie akceptacji użytkowników

Testowanie akceptacyjne użytkownika (UAT), takie jak testowanie użyteczności, koncentruje się na zachowaniu aplikacji z perspektywy użytkownika. W przeciwieństwie do testowania użyteczności funkcja UAT jest zwykle wykonywana przez rzeczywistych użytkowników końcowych.

W zależności od oprogramowania użytkownicy końcowi mogą zostać poproszeni o wykonanie określonych zadań. Mogą też mieć możliwość eksplorowania oprogramowania bez przestrzegania określonych wytycznych. W przypadku oprogramowania niestandardowego funkcja UAT zwykle odbywa się bezpośrednio z klientem. W przypadku bardziej ogólnego przeznaczenia zespoły mogą uruchamiać testy beta . W testach beta użytkownicy z różnych regionów geograficznych lub osoby z określonymi zainteresowaniami otrzymują wczesny dostęp do oprogramowania.

Opinie testerów mogą być bezpośrednie lub pośrednie. Bezpośrednie opinie mogą pojawić się w formie komentarzy słownych. Pośrednie opinie mogą pochodzić w postaci pomiaru języka ciała testerów, ruchów oczu lub czasu potrzebnych do wykonania określonych zadań.

Omówiliśmy już znaczenie pisania testów. Ale po prostu podkreślić, oto krótki film, w którym Abel Wang, ambasador chmury w firmie Microsoft, wyjaśnia, jak zapewnić jakość planu DevOps.

Zapytaj Abela

Co wybierze zespół?

Tim: Wszystkie te testy są ważne. Z czym powinniśmy się najpierw zmierzyć?

Andy: Mamy już działające testy jednostkowe. Nie jesteśmy jeszcze gotowi do przeprowadzania testów akceptujących użytkowników. Na podstawie tego, co słyszę, myślę, że powinniśmy skupić się na testach interfejsu użytkownika. W tej chwili jest to najwolniejsza część naszego procesu. Amita, czy zgadzasz się?

Amita: Tak, zgadzam się. W tym spotkaniu pozostało jeszcze trochę czasu. Andy lub Mara, czy chcesz mi pomóc zaplanować zautomatyzowany test interfejsu użytkownika?

Mara: Absolutnie. Ale zróbmy kilka wstępnych z drogi. Chciałbym omówić, jakiego narzędzia powinniśmy użyć i jak uruchomimy testy.

Jakich narzędzi można używać do pisania testów interfejsu użytkownika?

Mara: Jeśli chodzi o pisanie testów interfejsu użytkownika, jakie są nasze opcje? Wiem, że jest wiele. Niektóre narzędzia to open source. Inni oferują płatne wsparcie komercyjne. Oto kilka opcji, które przychodzą na myśl:

  • Sterownik aplikacji systemu Windows (WinAppDriver): Usługa WinAppDriver ułatwia automatyzowanie testów interfejsu użytkownika w aplikacjach systemu Windows. Te aplikacje można pisać w platforma uniwersalna systemu Windows (UWP) lub Windows Forms (WinForms). Potrzebujemy rozwiązania, które działa w przeglądarce.
  • Selenium: Selenium to przenośna platforma do testowania oprogramowania typu open source dla aplikacji internetowych. Działa on w większości systemów operacyjnych i obsługuje wszystkie nowoczesne przeglądarki. Testy Selenium można napisać w kilku językach programowania, w tym C#. W rzeczywistości można użyć pakietów NuGet, które ułatwiają uruchamianie testów Selenium jako NUnit. Do testów jednostkowych używamy już narzędzia NUnit.
  • SpecFlow: SpecFlow jest przeznaczony dla projektów .NET. Jest inspirowany narzędziem o nazwie Ogórk. Zarówno SpecFlow, jak i Ogórek obsługują rozwój oparty na zachowaniu (BDD). Usługa BDD używa analizatora języka naturalnego o nazwie Gherkin, aby pomóc zarówno zespołom technicznym, jak i zespołom nietechncznym definiować reguły biznesowe i wymagania. Aby utworzyć testy interfejsu użytkownika, można połączyć aplikację SpecFlow lub Ogórek z selenem.

Andy patrzy na Amitę.

Andy: Wiem, że te opcje są dla Ciebie nowe, więc czy masz na myśli, jeśli wybierzemy Selenium? Mam pewne doświadczenie z nim i obsługuje języki, które już znam. Selenium zapewni nam również automatyczną obsługę wielu przeglądarek.

Amita: Na pewno. Lepiej jest, jeśli jeden z nas ma pewne doświadczenie.

Jak mogę uruchomić testy funkcjonalne w potoku?

W usłudze Azure Pipelines uruchamiasz testy funkcjonalne tak samo jak w przypadku każdego innego procesu lub testu. Zadaj sobie pytanie:

  • W którym etapie zostaną uruchomione testy?
  • W jakim systemie zostaną uruchomione testy? Czy będą one uruchamiane na agencie lub w infrastrukturze, która hostuje aplikację?

Dołączmy do zespołu, odpowiadając na te pytania.

Mara: Jedną z rzeczy, o której jestem podekscytowany, jest to, że teraz możemy przetestować w środowisku, które jest jak produkcja, gdzie aplikacja jest rzeczywiście uruchomiona. Testy funkcjonalne, takie jak testy interfejsu użytkownika, mają sens w tym kontekście. Możemy uruchomić je na etapie testowania naszego potoku.

Amita: Zgadzam się. Możemy zachować ten sam przepływ pracy, jeśli uruchamiamy zautomatyzowane testy interfejsu użytkownika na tym samym etapie, w którym uruchamiam testy ręczne. Testy automatyczne pozwolą nam zaoszczędzić czas i pozwolić mi skupić się na użyteczności.

Tim: Amita testuje witrynę internetową z laptopa z systemem Windows, ponieważ tak większość naszych użytkowników odwiedza witrynę. Jednak bazujemy na systemie Linux, a następnie wdrażamy usługę aplikacja systemu Azure w systemie Linux. Jak to zrobić?

Mara: Wielkie pytanie. Mamy również wybór miejsca, w którym przeprowadzamy testy. Możemy je uruchomić:

  • Na agencie: agent firmy Microsoft lub agent hostujący
  • Infrastruktura testowa: lokalna lub w chmurze

Nasz istniejący etap testowy obejmuje jedno zadanie. To zadanie wdraża witrynę internetową w usłudze App Service z poziomu agenta systemu Linux. Możemy dodać drugie zadanie uruchamiające testy interfejsu użytkownika z agenta systemu Windows. Agent systemu Windows hostowany przez firmę Microsoft jest już skonfigurowany do uruchamiania testów Selenium.

Andy: Ponownie trzymajmy się tego, co wiemy. Użyjmy agenta systemu Windows hostowanego przez firmę Microsoft. Później możemy uruchomić te same testy od agentów, którzy uruchamiają systemy macOS i Linux, jeśli potrzebujemy dodatkowego pokrycia testowego.

Plan

Mara: OK. Oto, co chcemy zrobić:

  • Uruchamianie testów interfejsu użytkownika Selenium z agenta systemu Windows hostowanego przez firmę Microsoft
  • Testy pobierają zawartość internetową z aplikacji uruchomionej w usłudze App Service na etapie testu
  • Uruchamianie testów we wszystkich przeglądarkach, które obsługujemy

Andy: Będę pracować z Amita na ten jeden. Amita, spotkajmy się jutro rano. Chciałbym zrobić trochę badań przed spotkaniem.

Amita: Wielki! Zobaczysz wtedy.

Tworzenie funkcjonalnego planu testu

Widzieliśmy, jak zespół decyduje o tym, jak zaimplementują swoje pierwsze testy funkcjonalne. Jeśli twój zespół dopiero zaczyna dołączać testy funkcjonalne do potoku (lub nawet jeśli już to robisz), pamiętaj, że zawsze potrzebujesz planu.

Wiele razy, gdy ktoś członków zespołu o plan testowania wydajnościowego, często odpowiada im lista narzędzi, z których będą korzystać. Jednak lista narzędzi nie jest planem. Należy również dowiedzieć się, jak będą konfigurowane środowiska testowe. Należy określić procesy do użycia i określić, jak wygląda powodzenie lub niepowodzenie.

Upewnij się, że plan:

  • Uwzględnia oczekiwania firmy.
  • Uwzględnia oczekiwania użytkowników docelowych.
  • Definiuje używane metryki.
  • Definiuje kluczowe wskaźniki wydajności, których będziesz używać.

Testy wydajnościowe muszą być częścią planowania, od samego początku. Jeśli używasz scenariusza lub tablicy Kanban, możesz rozważyć posiadanie obszaru w pobliżu, w którym można zaplanować strategię testowania. W ramach planowania iteracji należy podkreślić luki w strategii testowania. Ważne jest również, aby dowiedzieć się, jak monitorować wydajność po wdrożeniu aplikacji, a nie tylko mierzyć wydajność przed jej wydaniem.

Sprawdź swoją wiedzę

1.

Zespół obsługi klienta otrzymuje zbyt wiele żądań zwrotu pieniędzy od klientów, którzy przypadkowo dokonają zakupów z aplikacji mobilnej. Klienci zgłaszają, że przycisk Kup i Przycisk Anuluj są zbyt blisko siebie. Jakiego rodzaju testy funkcjonalne mogą pomóc w złapaniu tego rodzaju problemu przed dotarciem do użytkowników?

2.

Zespół środowiska użytkownika (UX) zaproponował pewne drastyczne zmiany na stronie głównej witryny internetowej. Jakiego rodzaju testowanie funkcjonalne można użyć, aby upewnić się, że każdy przycisk na stronie wykonuje poprawną funkcję?

3.

Jakiego rodzaju testy funkcjonalne są zwykle wykonywane przez ludzi, a nie przez automatyzację?