Co to jest testowanie jednostkowe?
TESTOWANIE JEDNOSTKOWE to rodzaj testowania oprogramowania, w którym testowane są poszczególne jednostki lub komponenty oprogramowania. Celem jest sprawdzenie, czy każda jednostka kodu oprogramowania działa zgodnie z oczekiwaniami. Testy jednostkowe są wykonywane podczas tworzenia (fazy kodowania) aplikacji przez programistów. Testy jednostkowe wyodrębniają sekcję kodu i weryfikują jego poprawność. Jednostka może być indywidualną funkcją, metodą, procedurą, modułem lub obiektem.
W modelu SDLC, STLC, V, testy jednostkowe to pierwszy poziom testów wykonywany przed testami integracyjnymi. Testowanie jednostkowe to technika testowania WhiteBox, która jest zwykle wykonywana przez programistę. Chociaż w praktycznym świecie z powodu braku czasu lub niechęci programistów do testów, inżynierowie kontroli jakości wykonują również testy jednostkowe.
W tym samouczku nauczysz się:
- Dlaczego testy jednostkowe?
- Jak przeprowadzić testy jednostkowe
- Techniki testowania jednostkowego
- Narzędzia do testowania jednostek
- Test Driven Development (TDD) i testy jednostkowe
- Mit testowania jednostkowego
- Zalety testów jednostkowych
- Wady testów jednostkowych
- Najlepsze praktyki w testowaniu jednostkowym
Dlaczego testy jednostkowe?
Testowanie jednostkowe jest ważne, ponieważ programiści czasami próbują zaoszczędzić czas, wykonując minimalne testy jednostkowe i jest to mit, ponieważ niewłaściwe testy jednostkowe prowadzą do wysokich kosztów naprawiania defektów podczas testowania systemu, testowania integracji, a nawet testów beta po zbudowaniu aplikacji. Jeśli odpowiednie testy jednostkowe zostaną wykonane na wczesnym etapie rozwoju, ostatecznie oszczędza to czas i pieniądze.
Oto kluczowe powody, dla których warto przeprowadzać testy jednostkowe w inżynierii oprogramowania:
- Testy jednostkowe pomagają naprawić błędy na wczesnym etapie cyklu rozwoju i obniżyć koszty.
- Pomaga programistom zrozumieć bazę kodu testowego i umożliwia im szybkie wprowadzanie zmian
- Dobre testy jednostkowe służą jako dokumentacja projektu
- Testy jednostkowe pomagają przy ponownym użyciu kodu. Przeprowadź migrację kodu i testów do nowego projektu. Popraw kod, aż testy zostaną ponownie uruchomione.
Jak przeprowadzić testy jednostkowe
Aby przeprowadzić testy jednostkowe , programiści piszą sekcję kodu do testowania określonej funkcji w aplikacji. Programiści mogą również wyodrębnić tę funkcję, aby przetestować bardziej rygorystycznie, co ujawnia niepotrzebne zależności między testowaną funkcją a innymi jednostkami, dzięki czemu zależności można wyeliminować. Deweloperzy zazwyczaj używają struktury UnitTest do tworzenia zautomatyzowanych przypadków testowych do testów jednostkowych.
Testy jednostkowe są dwojakiego rodzaju
- podręcznik
- Zautomatyzowane
Testowanie jednostkowe jest zwykle zautomatyzowane, ale nadal można je wykonywać ręcznie. Inżynieria oprogramowania nie faworyzuje jednego nad drugim, ale preferowana jest automatyzacja. Ręczne podejście do testowania jednostkowego może obejmować dokument instruktażowy krok po kroku.
W ramach zautomatyzowanego podejścia
- Deweloper pisze sekcję kodu w aplikacji tylko w celu przetestowania funkcji. Później komentowali i ostatecznie usuwali kod testowy po wdrożeniu aplikacji.
- Programista może również wyodrębnić funkcję, aby przetestować ją bardziej rygorystycznie. Jest to dokładniejsza praktyka testowania jednostkowego polegająca na kopiowaniu i wklejaniu kodu do własnego środowiska testowego niż w środowisku naturalnym. Wyodrębnienie kodu pomaga w ujawnieniu niepotrzebnych zależności między testowanym kodem a innymi jednostkami lub przestrzeniami danych w produkcie. Te zależności można następnie wyeliminować.
- Koder zwykle używa platformy UnitTest Framework do tworzenia zautomatyzowanych przypadków testowych. Korzystając ze struktury automatyzacji, programista koduje kryteria do testu, aby zweryfikować poprawność kodu. Podczas wykonywania przypadków testowych platforma rejestruje przypadki testowe zakończone niepowodzeniem. Wiele frameworków będzie również automatycznie oznaczać i raportować, podsumowując, te nieudane przypadki testowe. W zależności od wagi awarii, framework może zatrzymać kolejne testy.
- Przepływ pracy testów jednostkowych to 1) Tworzenie przypadków testowych 2) Przegląd / przeróbka 3) Plan bazowy 4) Wykonywanie przypadków testowych.
Techniki testowania jednostkowego
Te techniki testowania jednostkowego są podzielone głównie na trzy części, które są czarne testowanie że obejmuje testowanie interfejsu użytkownika wraz z wejściem i wyjściem, biały testowanie, która obejmuje testowanie funkcjonalne zachowanie aplikacji i testowanie Grey, która jest używana do wykonania testu zestawy, metody testowe, przypadki testowe i przeprowadzanie analizy ryzyka.
Poniżej wymieniono techniki pokrycia kodu używane w testach jednostkowych:
- Zakres oświadczenia
- Zakres decyzji
- Pokrycie oddziałów
- Pokrycie stanu
- Pokrycie maszyny skończonej
Więcej na https://www.guru99.com/code-coverage.html
Przykład testu jednostkowego: pozorowane obiekty
Testy jednostkowe polegają na tworzeniu pozorowanych obiektów w celu testowania sekcji kodu, które nie są jeszcze częścią kompletnej aplikacji. Mock obiekty uzupełniają brakujące części programu.
Na przykład możesz mieć funkcję, która wymaga zmiennych lub obiektów, które nie zostały jeszcze utworzone. W testach jednostkowych będą one rozliczane w postaci pozorowanych obiektów utworzonych wyłącznie na potrzeby testów jednostkowych wykonanych na tej sekcji kodu.
Narzędzia do testowania jednostek
Dostępnych jest kilka programów do automatycznych testów jednostkowych, które pomagają w testowaniu jednostkowym. Poniżej podajemy kilka przykładów:
- Junit: Junit to darmowe narzędzie do testowania języka programowania Java. Dostarcza asercji do identyfikacji metody testowej. To narzędzie najpierw testuje dane, a następnie wstawia je do fragmentu kodu.
- NUnit: NUnit jest szeroko stosowaną platformą testów jednostkowych we wszystkich językach .net. Jest to narzędzie typu open source, które umożliwia ręczne pisanie skryptów. Obsługuje testy oparte na danych, które mogą być uruchamiane równolegle.
- JMockit: JMockit to narzędzie do testowania jednostek typu open source. Jest to narzędzie do pokrycia kodu z metrykami linii i ścieżek. Pozwala na mockowanie API ze składnią nagrywania i weryfikacji. To narzędzie oferuje pokrycie linii, pokrycie trasy i pokrycie danych.
- EMMA: EMMA to zestaw narzędzi typu open source do analizowania i raportowania kodu napisanego w języku Java. Emma obsługuje typy pokrycia, takie jak metoda, linia, blok podstawowy. Jest oparty na Javie, więc nie ma zależności od zewnętrznych bibliotek i ma dostęp do kodu źródłowego.
- PHPUnit: PHPUnit to narzędzie do testowania jednostek dla programistów PHP. Zajmuje małe porcje kodu zwanego jednostkami i testuje każdy z nich osobno. Narzędzie umożliwia również programistom używanie wstępnie zdefiniowanych metod asercji w celu zapewnienia, że system zachowuje się w określony sposób.
To tylko kilka z dostępnych narzędzi do testowania jednostkowego. Jest ich o wiele więcej, szczególnie dla języków C i Java, ale na pewno znajdziesz narzędzie do testowania jednostkowego dla swoich potrzeb programistycznych, niezależnie od używanego języka.
Test Driven Development (TDD) i testy jednostkowe
Testowanie jednostkowe w TDD obejmuje szerokie wykorzystanie ram testowych. Struktura testów jednostkowych służy do tworzenia zautomatyzowanych testów jednostkowych. Struktury testów jednostkowych nie są unikalne dla TDD, ale są dla niego niezbędne. Poniżej przyjrzymy się niektórym z tego, co TDD wnosi do świata testów jednostkowych:
- Testy są zapisywane przed kodem
- Polegaj w dużym stopniu na platformach testowych
- Wszystkie klasy w aplikacjach są testowane
- Możliwa jest szybka i łatwa integracja
Mit testowania jednostkowego
Mit: To wymaga czasu i zawsze jestem spóźniony. Mój kod jest solidny! Nie potrzebuję testów jednostkowych.
Mity z samej swej natury są fałszywymi założeniami. Te założenia prowadzą do błędnego koła w następujący sposób -
Prawda jest taka, że testy jednostkowe przyspieszają rozwój.
Programiści uważają, że testowanie integracyjne wyłapie wszystkie błędy i nie wykona testu jednostkowego. Po zintegrowaniu jednostek bardzo proste błędy, które można bardzo łatwo znaleźć i naprawić w testowanej jednostce, zajmują bardzo dużo czasu, zanim zostaną wyśledzone i naprawione.
Zalety testów jednostkowych
- Programiści, którzy chcą dowiedzieć się, jakie funkcje zapewnia jednostka i jak z niej korzystać, mogą przyjrzeć się testom jednostkowym, aby uzyskać podstawową wiedzę na temat interfejsu API jednostki.
- Testowanie jednostkowe umożliwia programiście refaktoryzację kodu w późniejszym terminie i upewnienie się, że moduł nadal działa poprawnie (np. Testy regresyjne). Procedura polega na napisaniu przypadków testowych dla wszystkich funkcji i metod, tak aby za każdym razem, gdy zmiana powoduje błąd, można go było szybko zidentyfikować i naprawić.
- Ze względu na modułowy charakter testów jednostkowych możemy testować części projektu, nie czekając na zakończenie innych.
Wady testów jednostkowych
- Nie można oczekiwać, że testy jednostkowe wychwycą każdy błąd w programie. Nie jest możliwe oszacowanie wszystkich ścieżek wykonywania, nawet w najbardziej trywialnych programach
- Testowanie jednostkowe z natury skupia się na jednostce kodu. Dlatego nie może wychwycić błędów integracji ani ogólnych błędów na poziomie systemu.
Zaleca się używanie testów jednostkowych w połączeniu z innymi czynnościami testowymi.
Najlepsze praktyki w testowaniu jednostkowym
- Przypadki testów jednostkowych powinny być niezależne. W przypadku jakichkolwiek ulepszeń lub zmian w wymaganiach nie powinno to mieć wpływu na przypadki testów jednostkowych.
- Testuj tylko jeden kod na raz.
- Przestrzegaj jasnych i spójnych konwencji nazewnictwa dla testów jednostkowych
- W przypadku zmiany kodu w dowolnym module, upewnij się, że istnieje odpowiedni przypadek testowy jednostki dla modułu, a moduł przechodzi testy przed zmianą implementacji
- Błędy zidentyfikowane podczas testów jednostkowych muszą zostać naprawione przed przejściem do następnej fazy w SDLC
- Przyjmij podejście „testuj jako swój kod”. Im więcej kodu napiszesz bez testowania, tym więcej ścieżek musisz sprawdzić pod kątem błędów.
Podsumowanie
- TESTOWANIE JEDNOSTKOWE definiuje się jako rodzaj testowania oprogramowania, w którym testowane są poszczególne jednostki lub komponenty oprogramowania.
- Jak widać, testowanie jednostkowe może być bardzo zaangażowane. Może to być złożone lub raczej proste, w zależności od testowanej aplikacji oraz stosowanych strategii testowania, narzędzi i filozofii. Na pewnym poziomie testy jednostkowe są zawsze konieczne. To jest pewność.