Test jednostkowy? Test integracyjny? Test regresji? Test akceptacji?

98

Czy jest ktoś, kto może jasno zdefiniować te poziomy testowania, ponieważ trudno mi je rozróżnić podczas wykonywania TDD lub testów jednostkowych. Proszę, jeśli ktoś może wyjaśnić, jak i kiedy je wdrożyć?

Donny
źródło

Odpowiedzi:

129

Krótko:

Testowanie jednostkowe - testujesz jednostkowo każdy fragment kodu. Pomyśl o każdym pliku lub klasie.

Testowanie integracyjne - podczas łączenia ze sobą kilku jednostek, które współpracują, należy przeprowadzić testy integracyjne, aby upewnić się, że integracja tych jednostek nie spowodowała żadnych błędów.

Testowanie regresyjne - po integracji (i być może naprawieniu) należy ponownie uruchomić testy jednostkowe. To jest test regresyjny, aby upewnić się, że dalsze zmiany nie zepsują żadnych jednostek, które zostały już przetestowane. Testy jednostkowe, które już wykonałeś, stworzyły testy jednostkowe, które można uruchamiać wielokrotnie w celu testowania regresji.

Testy akceptacyjne - gdy użytkownik / klient / firma otrzyma funkcjonalność, on (lub Twój dział testów) przeprowadzi testy akceptacyjne, aby upewnić się, że funkcjonalność spełnia jego wymagania.

Możesz także chcieć zbadać testy białej i czarnej skrzynki. Istnieją również testy wydajności i obciążenia, a także testowanie „wad” do rozważenia.

mikey
źródło
FYI, w testach jednostkowych, testowane jednostki mogą mieć różne rozmiary. Możesz na przykład przetestować jednostkowo grupę klas, jedną metodę lub nawet jako jedną metodę. Źródło: BlueJ rozdz. 9.3 "Testowanie jednostkowe w BlueJ".
Sebastian Nielsen
114

Test jednostkowy: jeśli się nie powiedzie, informuje, który fragment kodu wymaga naprawy.

Test integracji: jeśli się nie powiedzie, informuje, że elementy aplikacji nie współpracują ze sobą zgodnie z oczekiwaniami.

Test akceptacji: jeśli się nie powiedzie, informuje, że aplikacja nie robi tego, czego oczekuje od niej klient.

Test regresji: jeśli się nie powiedzie, informuje, że aplikacja nie zachowuje się już tak, jak kiedyś.

Mathias
źródło
19

Oto proste wyjaśnienie każdego z wymienionych testów i kiedy mają one zastosowanie:

Test jednostkowy Test jednostkowy jest wykonywany na samodzielnej jednostce (zwykle klasie lub metodzie) i powinien być wykonywany za każdym razem, gdy jednostka została zaimplementowana lub aktualizacja jednostki została zakończona.

Oznacza to, że jest uruchamiany za każdym razem, gdy napiszesz klasę / metodę, naprawisz błąd, zmienisz funkcjonalność ...

Test integracji Test integracji ma na celu sprawdzenie, jak dobrze kilka jednostek współdziała ze sobą. Ten rodzaj testu powinien być wykonywany zawsze, gdy pojawiła się nowa forma komunikacji między jednostkami lub zmienił się charakter ich interakcji.

Oznacza to, że jest uruchamiany za każdym razem, gdy niedawno napisana jednostka jest integrowana z resztą systemu lub gdy jednostka, która współdziała z innymi systemami, została zaktualizowana (i pomyślnie ukończyła testy jednostkowe).

Test regresji Testy regresyjne są przeprowadzane za każdym razem, gdy cokolwiek zostało zmienione w systemie, w celu sprawdzenia, czy nie zostały wprowadzone żadne nowe błędy.

Oznacza to, że jest uruchamiany po wszystkich łatkach, aktualizacjach, poprawkach błędów. Testowanie regresji można postrzegać jako szczególny przypadek łączonego testu jednostkowego i testu integracji.

Test akceptacji akceptacyjne są przeprowadzane zawsze, gdy zachodzi potrzeba sprawdzenia, czy podsystem (ewentualnie cały system) spełnia wszystkie swoje specyfikacje.

Oznacza to, że jest uruchamiany głównie przed zakończeniem nowego elementu dostawy lub ogłoszeniem zakończenia większego zadania. Potraktuj to jako ostateczną kontrolę, aby zobaczyć, czy naprawdę osiągnąłeś swoje cele, zanim pobiegniesz do klienta / szefa i ogłosisz zwycięstwo.

Tak przynajmniej się nauczyłem, chociaż jestem pewien, że istnieją inne przeciwstawne poglądy. Tak czy inaczej, mam nadzieję, że to pomoże.

Agentlien
źródło
Naprawdę nie potrafię odróżnić testów regresji od testów jednostkowych. Chodzi mi o to, że po każdej zmianie / zatwierdzeniu nadal uruchamiane są testy jednostkowe ... i mogą one wychwycić błędy wprowadzone przez nowy kod. Dobrze?
Honey
@ Kochanie Cóż, zestaw testów regresyjnych to głównie wybór niektórych lub wszystkich testów jednostkowych i testów integracyjnych. To kwestia polityki, ile testów regresji chcesz wykonać. Główną różnicą jest to, że testy jednostkowe są wykonywane w ramach aktywnego programowania, podczas gdy testy regresyjne służą raczej do sprawdzania, czy poprzednie projekty nie psują się, gdy wrócisz i je poprawisz.
Agentlien
ODPOWIEDŹ, właściwie nie powinieneś przeprowadzać testów jednostkowych. Jeśli testujesz klasę, powinieneś traktować ją jako całość, więc testujesz publiczny interfejs klasy, a nie szczegóły implementacji. Chociaż możesz przetestować jednostkową funkcję samodzielną, to jest w porządku.
Qback
14

Spróbuję:

  1. Test jednostkowy: programista napisałby taki, aby przetestować pojedynczy komponent lub klasę.
  2. Test integracji: bardziej rozbudowany test, który obejmowałby kilka komponentów lub pakietów, które muszą ze sobą współpracować
  3. Test regresji: dokonanie pojedynczej zmiany w aplikacji zmusza do ponownego uruchomienia WSZYSTKICH testów i sprawdzenia WSZYSTKICH funkcjonalności.
  4. Test akceptacji: użytkownicy końcowi lub QA wykonują te czynności przed podpisaniem się w celu zaakceptowania dostarczenia aplikacji. Jest na nim napis „Aplikacja spełniła moje wymagania”.
duffymo
źródło
14

Test jednostkowy: czy moja pojedyncza metoda działa poprawnie? (NIE Zależności lub Zależności Mocked)

Test integracji: czy moje dwa oddzielnie opracowane moduły działają poprawnie po złożeniu ?

Test regresji: czy coś złamałem, zmieniając / pisząc nowy kod? (uruchamianie testów jednostkowych / integracyjnych z każdym zatwierdzeniem jest technicznie (automatycznym) testowaniem regresyjnym). Częściej używany w kontekście kontroli jakości - ręcznej lub automatycznej.

Test akceptacji : test wykonany przez klienta, czy „akceptuje” dostarczone oprogramowanie

Andrejs
źródło
0

Nie mogę komentować (reputacja zbyt niska: - |), więc ...

@Andrejs dobrze wskazuje różnice między środowiskami związanymi z każdym typem testów.

Testy jednostkowe są zwykle uruchamiane na maszynie deweloperskiej (i prawdopodobnie podczas kompilacji CI) z symulowanymi zależnościami do innych zasobów / systemów.

Testy integracyjne z definicji muszą mieć (w pewnym stopniu) dostępność zależności; inne zasoby i systemy są nazywane tak, że środowisko jest bardziej reprezentatywne. Dane do testów mogą być wyszydzane lub stanowić niewielki, zaciemniony podzbiór rzeczywistych danych produkcyjnych.

Testy UAT / akceptacyjne muszą przedstawiać rzeczywiste doświadczenia zespołom kontroli jakości i zespołom biznesowym akceptującym oprogramowanie. Potrzebna jest więc pełna integracja i realistyczne ilości danych oraz pełne zamaskowane / zaciemnione zestawy danych, aby zapewnić realistyczną wydajność i wrażenia użytkownika końcowego.

Inne „choroby” mogą również wymagać, aby środowisko było jak najbliższe rzeczywistości, aby symulować doświadczenie produkcyjne, np. Testy wydajności, bezpieczeństwo, ...

mhaselup
źródło