differences between unit testing
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 integracyjne, ponieważ każda z nich wykorzystuje unikalny proces testowania aplikacji.
Jednak żaden z nich lub nawet oba nie mogą w żadnym momencie zastąpić testów funkcjonalnych.
Czego się nauczysz:
- Testowanie jednostkowe a testowanie integracyjne a testowanie funkcjonalne
- Co to jest testowanie jednostkowe?
- Co to jest testowanie integracyjne?
- Testy jednostkowe a testy integracyjne
- Testy funkcjonalności
- Dokładna różnica
- Wniosek
- rekomendowane lektury
Testowanie jednostkowe a testowanie integracyjne a testowanie funkcjonalne
Testów jednostkowych oznacza testowanie poszczególnych modułów aplikacji w izolacji (bez interakcji z zależnościami) w celu potwierdzenia, że kod działa poprawnie.
Testy integracyjne oznacza sprawdzenie, czy różne moduły działają dobrze, gdy są połączone razem jako grupa.
Testy funkcjonalności oznacza testowanie fragmentu funkcjonalności w systemie (może wchodzić w interakcje z zależnościami) w celu potwierdzenia, że kod działa właściwie.
Testy funkcjonalne są związane z testami integracyjnymi, jednak oznaczają testy, które sprawdzają funkcjonalność całej aplikacji z całym działającym razem kodem, prawie test super integracji.
Testowanie jednostkowe rozważa sprawdzenie pojedynczego komponentu systemu, podczas gdy testowanie funkcjonalności rozważa sprawdzenie działania aplikacji pod kątem zamierzonej funkcjonalności opisanej w specyfikacji wymagań systemowych. Z drugiej strony, testy integracyjne uwzględniają sprawdzenie zintegrowanych modułów w systemie.
A co najważniejsze, aby zoptymalizować zwrot z inwestycji (ROI), baza kodu powinna mieć jak najwięcej testów jednostkowych, mniej testów integracyjnych i najmniejszą liczbę testów funkcjonalnych.
Najlepiej ilustruje to poniższa piramida testowa:
Testy jednostkowe są łatwiejsze do napisania i szybsze do wykonania. Czas i wysiłek związany z wdrożeniem i utrzymaniem testów rośnie 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.
Na przykład . Aby telefon komórkowy działał, głównymi potrzebnymi częściami są „bateria” i „karta SIM”.
Przykład testowania jednostkowego - Akumulator jest sprawdzany pod kątem żywotności, pojemności i innych parametrów. Karta SIM jest sprawdzana pod kątem aktywacji.
Przykład testowania integracji - Bateria i karta SIM są zintegrowane, tj. Zmontowane w celu uruchomienia telefonu komórkowego.
Przykład testu funkcjonalnego - Funkcjonalność telefonu komórkowego jest sprawdzana pod kątem właściwości i zużycia baterii oraz wyposażenia karty SIM.
Widzieliśmy przykład w kategoriach laika.
Teraz weźmy teraz techniczny przykład strony logowania:
Prawie każda aplikacja internetowa wymaga zalogowania się od swoich użytkowników / klientów. W tym celu każda aplikacja musi mieć stronę „Login”, która zawiera następujące elementy:
- Nazwa użytkownika konta
- Hasło
- Przycisk logowania / logowania
W przypadku testów jednostkowych mogą być następujące przypadki testowe:
- Długość pola - nazwa użytkownika i hasło.
- Wartości pól wejściowych powinny być prawidłowe.
- Przycisk logowania jest aktywny dopiero po wprowadzeniu prawidłowych wartości (format i wzdłuż) w obu polach.
W przypadku testów integracyjnych przykładami mogą być następujące przypadki:
- Użytkownik widzi wiadomość powitalną po wprowadzeniu prawidłowych wartości i naciśnięciu przycisku logowania.
- Po prawidłowym wpisie i kliknięciu przycisku Zaloguj użytkownik powinien przejść do strony powitalnej lub strony głównej.
Teraz, po zakończeniu testów jednostkowych i integracyjnych, przyjrzyjmy się dodatkowym przypadki testowe, które są brane pod uwagę przy testowaniu funkcjonalnym:
- Sprawdzane jest oczekiwane zachowanie, tj. Czy użytkownik może zalogować się, klikając przycisk logowania po wprowadzeniu prawidłowej nazwy użytkownika i hasła.
- Czy istnieje wiadomość powitalna, która ma się pojawić po pomyślnym zalogowaniu?
- Czy istnieje komunikat o błędzie, który powinien pojawić się przy nieprawidłowym logowaniu?
- Czy są przechowywane jakieś 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 hasła?
Takich przypadków, które przychodzą na myśl testerowi funkcjonalnemu podczas wykonywania testów funkcjonalnych, jest znacznie więcej. Jednak programista nie może zająć się wszystkimi przypadkami podczas tworzenia przypadków testowych dla jednostek i integracji.
W związku z tym istnieje wiele scenariuszy, które nie zostały jeszcze przetestowane, nawet po testach jednostkowych i integracyjnych.
Nadszedł czas, aby po kolei zbadać testy jednostkowe, integracyjne i funkcjonalne.
Co to jest testowanie jednostkowe?
Jak sama nazwa wskazuje, poziom ten obejmuje testowanie „Jednostki”.
W tym przypadku jednostka może być najmniejszą częścią aplikacji, którą można przetestować, czy to najmniejszą indywidualną funkcją, metodą, itp. Programiści są tymi, którzy piszą przypadki testów jednostkowych. Celem jest dopasowanie wymagań i oczekiwanego zachowania jednostki.
Poniżej znajduje się kilka ważnych punktów dotyczących testów jednostkowych i ich zalet:
- Testowanie jednostkowe jest wykonywane przed testowaniem integracji przez programistów używających platformy techniki testowania białoskrzynkowego .
- Testy jednostkowe sprawdzają nie tylko pozytywne zachowanie, tj. Prawidłowe wyjście w przypadku prawidłowego wejścia, ale także awarie, które występują 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ą wykonywane 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 poszczególne 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 przypadki testów jednostkowych upraszczają i ułatwiają testowanie kodu. W związku z tym łatwiejsze staje się rozwiązanie problemów również na późniejszym etapie, ponieważ testowana jest tylko ostatnia zmiana w kodzie.
- Test jednostkowy oszczędza czas i koszty, jest wielokrotnego użytku i łatwy w utrzymaniu.
JUnit ( Framework Java ), PHPUnit (framework PHP), NUnit (framework .Net) itp. To popularne narzędzia do testowania jednostek, które są używane w różnych językach.
Co to jest testowanie integracyjne?
Testy integracyjne to testowanie integracji różnych części systemu razem. Najpierw integrowane są dwie różne części lub moduły systemu, a następnie przeprowadzane są testy integracyjne.
Celem testów integracyjnych jest sprawdzenie funkcjonalności, niezawodności i wydajności systemu po integracji.
Testowanie integracyjne jest przeprowadzane na modułach, które są najpierw testowane jednostkowo, a następnie testy integracyjne określają, czy kombinacja modułów daje pożądany wynik, czy nie.
Testy integracyjne mogą być wykonywane przez niezależnych testerów lub programistów.
Istnieją 3 różne rodzaje podejść do testowania integracyjnego. Omówmy pokrótce każdy z nich:
a) Podejście integracyjne Big Bang
W tym podejściu wszystkie moduły lub jednostki są integrowane i testowane jako całość za jednym razem. Zwykle dzieje się tak, gdy cały system jest gotowy do testów integracyjnych w jednym momencie.
Proszę nie mylić tego podejścia do testowania integracyjnego z testowaniem systemu, testowana jest tylko integracja modułów lub jednostek, a nie cały system, jak ma to miejsce w przypadku testowania systemu.
Najważniejsze podejście do wielkiego wybuchu korzyść polega na tym, że wszystko, co jest zintegrowane, jest testowane jednocześnie.
Jeden główny niekorzyść polega na tym, że trudno jest zidentyfikować awarie.
Przykład: Na poniższym rysunku jednostki 1 do 6 są zintegrowane i testowane przy użyciu podejścia Wielkiego Wybuchu.
jak otwierać pliki jar za pomocą java
b) Podejście odgórne
Integracja jednostek / modułów jest testowana krok po kroku od góry do dołu.
Pierwsza jednostka jest testowana indywidualnie na piśmie test STUBS . Następnie niższe poziomy są integrowane jeden po drugim, aż ostatni poziom zostanie złożony i przetestowany.
Podejście odgórne jest bardzo organicznym sposobem integracji, ponieważ jest spójne z tym, jak rzeczy dzieją się w rzeczywistym środowisku.
Jedyny sprawa przy takim podejściu główna funkcjonalność jest testowana na końcu.
c) Podejście oddolne
Jednostki / moduły są testowane od dołu do najwyższego poziomu, krok po kroku, aż wszystkie poziomy jednostek / modułów zostaną zintegrowane i przetestowane jako jedna jednostka. Programy stymulujące o nazwie KIEROWCY są używane w tym podejściu. Łatwiej jest wykryć problemy lub błędy na niższych poziomach.
Głównym niekorzyść tego podejścia polega na tym, że kwestie wyższego poziomu można zidentyfikować dopiero na końcu, gdy wszystkie jednostki zostaną zintegrowane.
Testy jednostkowe a testy integracyjne
Mając dość dyskusji na temat testów jednostkowych i testów integracyjnych, przejrzyjmy szybko różnice między nimi w poniższej tabeli:
Testów jednostkowych | Testy integracyjne |
---|---|
Przeprowadzane w początkowej fazie testów, a następnie mogą być wykonywane w dowolnym momencie | Należy przeprowadzić po testowaniu jednostkowym i przed testowaniem systemu |
Testuje pojedynczy element całego systemu, tj. Testuje jednostkę w izolacji. | Testuje współpracujące ze sobą komponenty systemu, tj. Testuje współpracę wielu jednostek. |
Szybsze wykonanie | Może działać wolno |
Brak zależności zewnętrznej. Wszelkie zależności zewnętrzne są wyszydzane lub usuwane. | Wymaga interakcji z zewnętrznymi zależnościami (np. Baza danych, sprzęt itp.) |
Prosty | Złożony |
Prowadzone przez dewelopera | Przeprowadzone przez testera |
Jest to rodzaj testu białoskrzynkowego | Jest to rodzaj testu czarnoskrzynkowego |
Tania konserwacja | Kosztowna konserwacja |
Rozpoczyna się od specyfikacji modułu | Rozpoczyna się od specyfikacji interfejsu |
Testowanie jednostkowe ma wąski zakres, ponieważ sprawdza tylko, czy każdy mały fragment kodu robi to, co powinien. | 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 |
Odkryj problemy tylko w ramach funkcjonalności poszczególnych modułów. Nie ujawnia błędów integracji ani problemów dotyczących całego systemu. | Odkryj błędy powstające, gdy różne moduły współdziałają ze sobą, tworząc cały system |
Testy funkcjonalności
DO technika testowania czarnoskrzynkowego , gdzie funkcjonalność aplikacji jest testowana w celu wygenerowania pożądanego wyniku po podaniu określonych danych wejściowych, nazywa się „testowaniem funkcjonalnym”.
W naszym procesy testowania oprogramowania , robimy to, pisząc przypadki testowe zgodnie z wymaganiami i scenariuszami. W przypadku dowolnej funkcjonalności liczba napisanych przypadków testowych może się wahać od jednego do wielu.
Przypadki testowe zasadniczo składają się z następujących części:
- Podsumowanie testu
- Wymagania wstępne (jeśli istnieją)
- Kroki wejściowe przypadku testowego
- Dane testowe (jeśli istnieją)
- Oczekiwany wynik
- Uwagi (jeśli istnieją)
„Oparte na wymaganiach” i „Oparte na scenariuszu biznesowym” to dwie formy testów funkcjonalnych, które są przeprowadzane.
W przypadku testowania opartego na wymaganiach przypadki testowe są tworzone zgodnie z wymaganiami i odpowiednio testowane. W testowaniu funkcjonalnym opartym na scenariuszu biznesowym, testowanie jest przeprowadzane z uwzględnieniem wszystkich scenariuszy z perspektywy biznesowej.
Jednak główny niekorzyść testowania funkcjonalnego to prawdopodobna nadmiarowość w testowaniu i możliwość przeoczenia niektórych błędów logicznych.
Dokładna różnica
Spójrzmy na ich różnice.
Oto niektóre z najważniejszych:
Testów jednostkowych | Testy integracyjne | Testy funkcjonalności | |
---|---|---|---|
Definicja i cel | Indywidualne testowanie najmniejszych jednostek lub modułów. | Testowanie integracji dwóch lub więcej jednostek / modułów połączonych w celu wykonywania zadań. | Testowanie zachowania aplikacji zgodnie z wymaganiami. |
Złożoność | Wcale nie jest skomplikowane, ponieważ zawiera najmniejsze kody. | Nieco bardziej złożone niż testy jednostkowe. | Bardziej złożone w porównaniu do testów jednostkowych i integracyjnych. |
Techniki testowania | Technika testowania białoskrzynkowego. | Technika testowania białoskrzynkowego i czarnoskrzynkowego. Testowanie w skali szarości | Technika testowania czarnoskrzynkowego. |
Ważna uwaga | Poszczególne moduły lub jednostki. | Integracja modułów lub jednostek. | Cała funkcjonalność aplikacji. |
Błędy / problemy objęte | Testy jednostkowe znajdują problemy, które mogą często występować w modułach. | Testy integracyjne wykrywają problemy, które mogą wystąpić podczas integracji różnych modułów. | Testy funkcjonalne wykrywają problemy, które uniemożliwiają aplikacji wykonywanie swoich funkcji. Obejmuje to również problemy oparte na scenariuszach. |
Problem ucieczki | Brak szans na ucieczkę. | Mniejsza szansa na ucieczkę problemu. | Więcej szans na uniknięcie problemu, ponieważ lista testów do wykonania jest zawsze nieskończona. |
Przeczytaj także => Co to jest testowanie funkcji
Wniosek
Wszystkie te trzy typy testów są ze sobą skorelowane.
Aby uzyskać pełne pokrycie, wymagane są testy jednostkowe dla ścieżek / wierszy kodu, testy funkcjonalne i integracyjne, aby upewnić się, że „jednostki” współpracują ze sobą spójnie.
Mam nadzieję, że ten artykuł dałby ci jasne pojęcie o testach jednostkowych, integracyjnych i funkcjonalnych, a także o różnicach między nimi, chociaż tych form testowania jest znacznie więcej!
rekomendowane lektury
- Najlepsze narzędzia do testowania oprogramowania 2021 (Narzędzia do automatyzacji testów QA)
- Spock do integracji i testowania funkcjonalnego z selenem
- Testy funkcjonalne a testy niefunkcjonalne
- Testing Primer Pobierz eBook
- 10 najlepszych narzędzi do testowania integracji do pisania testów integracji
- Kluczowe różnice między testami czarnoskrzynkowymi a białoskrzynkowymi
- Kompletny przewodnik po testach funkcjonalnych z typami i przykładami
- Testy funkcjonalne a testy wydajnościowe: czy należy je wykonywać jednocześnie?