- Testowanie jednostkowe a testowanie integracyjne i testowanie funkcjonalne
- Czym jest testowanie jednostkowe?
- Czym jest testowanie integracji?
- Testy jednostkowe a testy integracyjne
- Testy funkcjonalne
- Wnioski
- Zalecana lektura
Szczegółowe porównanie testów jednostkowych, integracyjnych i funkcjonalnych:
W przypadku każdej aplikacji bardzo ważne są zarówno testy jednostkowe, jak i testy integracyjne, ponieważ każdy z nich wykorzystuje unikalny proces testowania aplikacji.
Jednak żaden z nich lub nawet oba nie mogą zastąpić testów funkcjonalnych w żadnym momencie.
Testowanie jednostkowe a testowanie integracyjne i testowanie funkcjonalne
Testy jednostkowe oznacza testowanie poszczególnych modułów aplikacji w izolacji (bez interakcji z zależnościami) w celu potwierdzenia, że kod działa prawidłowo.
Testy integracyjne oznacza sprawdzenie, czy różne moduły działają poprawnie, gdy są połączone razem jako grupa.
Testy funkcjonalne oznacza testowanie fragmentu funkcjonalności w systemie (może wchodzić w interakcje z zależnościami), aby potwierdzić, że kod robi właściwe rzeczy.
Testy funkcjonalne są powiązane z testami integracyjnymi, jednak oznaczają testy, które sprawdzają funkcjonalność całej aplikacji z całym kodem działającym razem, prawie super test integracyjny.
Testowanie jednostkowe obejmuje sprawdzanie pojedynczego komponentu systemu, podczas gdy testowanie funkcjonalności obejmuje sprawdzanie działania aplikacji pod kątem zamierzonej funkcjonalności opisanej w specyfikacji wymagań systemowych. Z drugiej strony testowanie integracyjne obejmuje sprawdzanie zintegrowanych modułów w systemie.
A co najważniejsze, aby zoptymalizować zwrot z inwestycji (ROI), baza kodu powinna zawierać jak najwięcej testów jednostkowych, mniej testów integracyjnych i jak najmniej testów funkcjonalnych.
Najlepiej ilustruje to poniższa piramida testów:
Testy jednostkowe są łatwiejsze do napisania i szybsze do wykonania. Czas i wysiłek związany z implementacją i utrzymaniem testów wzrasta od testów jednostkowych do testów funkcjonalnych, jak pokazano w powyższej piramidzie.
Przykład:
Zrozummy te trzy rodzaje testów na zbyt uproszczonym przykładzie.
Np W przypadku funkcjonalnego telefonu komórkowego głównymi wymaganymi częściami są "bateria" i "karta SIM".
Przykład testów jednostkowych - Bateria jest sprawdzana pod kątem żywotności, pojemności i innych parametrów. Karta SIM jest sprawdzana pod kątem aktywacji.
Przykład testów integracyjnych - Bateria i karta SIM są zintegrowane, tj. zmontowane w celu uruchomienia telefonu komórkowego.
Przykład testów funkcjonalnych - Funkcjonalność telefonu komórkowego jest sprawdzana pod kątem jego funkcji i zużycia baterii, a także możliwości karty SIM.
Widzieliśmy przykład w kategoriach laika.
Weźmy teraz techniczny przykład strony logowania:
Prawie każda aplikacja internetowa wymaga od swoich użytkowników/klientów zalogowania się. W tym celu każda aplikacja musi mieć stronę "Login", która zawiera te elementy:
- Konto/nazwa użytkownika
- Hasło
- Przycisk logowania/zapisu
W przypadku testów jednostkowych mogą to być następujące przypadki testowe:
- Długość pola - pola nazwy użytkownika i hasła.
- Wartości pól wejściowych powinny być prawidłowe.
- Przycisk logowania jest włączany tylko po wprowadzeniu prawidłowych wartości (Format i wzdłuż) w obu polach.
W przypadku testów integracyjnych mogą to być następujące przypadki testowe:
- Użytkownik zobaczy wiadomość powitalną po wprowadzeniu prawidłowych wartości i naciśnięciu przycisku logowania.
- Użytkownik powinien zostać przeniesiony na stronę powitalną lub stronę główną po poprawnym wprowadzeniu danych i kliknięciu przycisku Zaloguj.
Teraz, po zakończeniu testów jednostkowych i integracyjnych, zobaczmy dodatkowe przypadków testowych, które są brane pod uwagę w testach funkcjonalnych:
- Sprawdzane jest oczekiwane zachowanie, tj. czy użytkownik jest w stanie zalogować się, klikając przycisk logowania po wprowadzeniu prawidłowej nazwy użytkownika i hasła.
- Czy istnieje wiadomość powitalna, która powinna pojawić się po pomyślnym zalogowaniu?
- Czy istnieje komunikat o błędzie, który powinien pojawić się przy nieprawidłowym logowaniu?
- Czy są przechowywane pliki cookie witryny dla pól logowania?
- Czy nieaktywny użytkownik może się zalogować?
- Czy istnieje link "zapomniałem hasła" dla użytkowników, którzy zapomnieli swoich haseł?
Takich przypadków, które przychodzą do głowy testerowi funkcjonalnemu podczas przeprowadzania testów funkcjonalnych, jest znacznie więcej. Deweloper nie może jednak uwzględnić wszystkich przypadków podczas tworzenia testów jednostkowych i integracyjnych.
W związku z tym istnieje wiele scenariuszy, które nie zostały jeszcze przetestowane nawet po testach jednostkowych i integracyjnych.
Nadszedł czas, aby przyjrzeć się kolejno testom jednostkowym, integracyjnym i funkcjonalnym.
Czym jest testowanie jednostkowe?
Jak sama nazwa wskazuje, ten poziom obejmuje testowanie "jednostki".
Tutaj jednostka może być najmniejszą częścią aplikacji, którą można przetestować, czy to najmniejszą pojedynczą funkcją, metodą itp. Programiści są tymi, którzy piszą przypadki testów jednostkowych. Celem jest tutaj dopasowanie wymagań i oczekiwanego zachowania jednostki.
Poniżej znajduje się kilka ważnych punktów dotyczących testów jednostkowych i korzyści z nich płynących:
- Testy jednostkowe są wykonywane przed testami integracyjnymi przez programistów przy użyciu technik testowania białoskrzynkowego.
- Testy jednostkowe sprawdzają nie tylko pozytywne zachowanie, tj. prawidłowe dane wyjściowe w przypadku prawidłowych danych wejściowych, ale także awarie występujące przy nieprawidłowych danych wejściowych.
- Znajdowanie problemów/błędów na wczesnym etapie jest bardzo przydatne i zmniejsza ogólne koszty projektu. Ponieważ testy jednostkowe są przeprowadzane przed integracją kodu, problemy znalezione na tym etapie można bardzo łatwo rozwiązać, a ich wpływ jest również bardzo mniejszy.
- Test jednostkowy testuje małe fragmenty kodu lub pojedyncze funkcje, więc problemy/błędy znalezione w tych przypadkach testowych są niezależne i nie mają wpływu na inne przypadki testowe.
- Kolejną ważną zaletą jest to, że jednostkowe przypadki testowe upraszczają i ułatwiają testowanie kodu, dzięki czemu łatwiej jest rozwiązywać problemy również na późniejszym etapie, ponieważ testowana jest tylko ostatnia zmiana w kodzie.
- Testy jednostkowe oszczędzają czas i koszty, są wielokrotnego użytku i łatwe w utrzymaniu.
JUnit (framework Java), PHPUnit (framework PHP), NUnit (framework .Net) itp. to popularne narzędzia do testowania jednostkowego, które są używane w różnych językach.
Czym jest testowanie integracji?
Testy integracyjne polegają na testowaniu integracji różnych części systemu. Dwie różne części lub moduły systemu są najpierw integrowane, a następnie przeprowadzane są testy integracyjne.
Celem testów integracyjnych jest sprawdzenie funkcjonalności, niezawodności i wydajności zintegrowanego systemu.
Testy integracyjne są przeprowadzane na modułach, które są najpierw testowane jednostkowo, a następnie testy integracyjne określają, czy połączenie modułów daje pożądane wyniki, czy nie.
Testy integracyjne mogą być przeprowadzane zarówno przez niezależnych testerów, jak i programistów.
Istnieją 3 różne podejścia do testowania integracyjnego. Omówmy pokrótce każde z nich:
a) Podejście integracyjne Big Bang
W tym podejściu wszystkie moduły lub jednostki są integrowane i testowane jako całość w jednym czasie. Zwykle odbywa się to, gdy cały system jest gotowy do testów integracyjnych w jednym momencie.
Nie należy mylić tego podejścia do testowania integracyjnego z testowaniem systemowym, testowana jest tylko integracja modułów lub jednostek, a nie cały system, jak ma to miejsce w przypadku testowania systemowego.
Główne założenia podejścia wielkiego wybuchu przewaga jest to, że wszystko zintegrowane jest testowane za jednym razem.
Jeden główny wada jest to, że trudno jest zidentyfikować awarie.
Przykład: Na poniższym rysunku jednostki od 1 do 6 zostały zintegrowane i przetestowane przy użyciu podejścia Big Bang.
b) Podejście odgórne
Integracja jednostek/modułów jest testowana krok po kroku od najwyższego do najniższego poziomu.
Pierwsza jednostka jest testowana indywidualnie poprzez napisanie testów STUBS. Następnie niższe poziomy są integrowane jeden po drugim, aż ostatni poziom zostanie połączony i przetestowany.
Podejście odgórne jest bardzo organicznym sposobem integracji, ponieważ jest zgodne z tym, jak rzeczy dzieją się w rzeczywistym środowisku.
Jedyny obawa Dzięki takiemu podejściu główna funkcjonalność jest testowana na końcu.
c) Podejście oddolne
Jednostki/moduły są testowane od najniższego do najwyższego poziomu, krok po kroku, aż wszystkie poziomy jednostek/modułów zostaną zintegrowane i przetestowane jako jedna jednostka. Programy stymulatora o nazwie KIEROWCY W tym podejściu łatwiej jest wykryć problemy lub błędy na niższych poziomach.
Główne wada Podejście to polega na tym, że kwestie wyższego rzędu można zidentyfikować dopiero na końcu, gdy wszystkie jednostki zostaną zintegrowane.
Testy jednostkowe a testy integracyjne
Mając już wystarczająco dużo dyskusji na temat testów jednostkowych i integracyjnych, przejdźmy szybko do różnic między nimi w poniższej tabeli:
Testy jednostkowe | Testowanie integracji |
---|---|
Testuje pojedynczy komponent całego systemu, tj. testuje jednostkę w izolacji. | Testuje komponenty systemu współpracujące ze sobą, tj. testuje współpracę wielu jednostek. |
Szybsza realizacja | Może działać wolno |
Brak zewnętrznych zależności. Wszelkie zewnętrzne zależności są wyśmiewane lub usuwane. | Wymaga interakcji z zewnętrznymi zależnościami (np. bazą danych, sprzętem itp.). |
Prosty | Kompleks |
Prowadzone przez dewelopera | Przeprowadzane przez testera |
Jest to rodzaj testów białoskrzynkowych | Jest to rodzaj testów czarnej skrzynki |
Przeprowadzane w początkowej fazie testów, a następnie mogą być wykonywane w dowolnym momencie. | Musi być przeprowadzony po testach jednostkowych i przed testami systemu. |
Tania konserwacja | Kosztowna konserwacja |
Rozpoczyna się od specyfikacji modułu | Rozpoczyna się od specyfikacji interfejsu |
Testy jednostkowe mają wąski zakres, ponieważ sprawdzają tylko, czy każdy mały fragment kodu robi to, do czego jest przeznaczony. | Ma szerszy zakres, ponieważ obejmuje całą aplikację |
Wynikiem testów jednostkowych jest szczegółowa widoczność kodu | Wynikiem testów integracyjnych jest szczegółowa widoczność struktury integracji |
Nie ujawnia błędów integracji lub błędów całego systemu. | Odkrywanie błędów pojawiających się, gdy różne moduły współdziałają ze sobą, tworząc cały system. |
Testy funkcjonalne
Technika testowania czarnoskrzynkowego, w której funkcjonalność aplikacji jest testowana pod kątem generowania pożądanych danych wyjściowych po dostarczeniu określonych danych wejściowych, nazywana jest "testowaniem funkcjonalnym".
W naszych procesach testowania oprogramowania robimy to poprzez pisanie przypadków testowych zgodnie z wymaganiami i scenariuszami. Dla każdej funkcjonalności liczba napisanych przypadków testowych może wahać się od jednego do wielu.
Wnioski
Wszystkie te trzy typy testów są ze sobą skorelowane.
Aby osiągnąć pełne pokrycie, wymagane jest posiadanie testów jednostkowych dla ścieżek/linii kodu, testów funkcjonalnych i integracyjnych w celu zapewnienia, że "jednostki" działają razem spójnie.
Mam nadzieję, że ten artykuł dał ci jasny obraz testowania jednostkowego, integracyjnego i funkcjonalnego wraz z różnicami między nimi, choć tych form testowania jest znacznie więcej!!!