Jaka jest różnica między testami jednostkowymi, funkcjonalnymi, akceptacyjnymi i Integracyjnymi? [zamknięte]

zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the question so it edytując ten post.

Zamknięte 5 lat temu .

Popraw to pytanie

Jaka jest różnica między testami jednostkowymi, funkcjonalnymi, akceptacyjnymi i Integracyjnymi (i innymi typami testów, o których nie wspomniałem)?

Author: Mogsdad, 2011-02-04

8 answers

W zależności od tego, gdzie szukasz, otrzymasz nieco inne odpowiedzi. Dużo czytałam na ten temat, a oto moja destylacja; znowu są lekko wełniane i inni mogą się nie zgodzić.

Testy Jednostkowe

Testuje najmniejszą jednostkę funkcjonalności, zazwyczaj metodę / funkcję(np. biorąc pod uwagę klasę o określonym stanie, wywołanie metody x Na klasie powinno spowodować wystąpienie y). Testy jednostkowe powinny koncentrować się na jednej konkretnej funkcji (np. wywołanie metody pop gdy stos jest pusty należy rzucić InvalidOperationException). Wszystko, czego dotknie, powinno być wykonane w pamięci; oznacza to, że kod testowy i kod testowany nie powinien:

  • wezwanie do (nietrywialnych) kolaborantów
  • dostęp do sieci
  • Hit a database
  • Użyj systemu plików
  • Spin up a thread
  • itd.

Każdy rodzaj zależności, który jest powolny / trudny do zrozumienia / inicjalizacji / manipulacji powinien być stubbed/wyśmiewany / whatever używając odpowiednich technik, abyś mógł skupić się na tym, co robi Jednostka kodu, a nie na tym, co robią jej zależności.

Krótko mówiąc, testy jednostkowe są tak proste, jak to możliwe, łatwe do debugowania, niezawodne (ze względu na ograniczone czynniki zewnętrzne), szybkie do wykonania i pomagają udowodnić, że najmniejsze elementy składowe programu działają zgodnie z przeznaczeniem, zanim zostaną połączone. Zastrzeżenie jest takie, że chociaż można udowodnić, że działają doskonale w izolacji, jednostki kodu mogą dmuchać w górę po połączeniu, co prowadzi nas do ...

Testy Integracyjne

Testy integracyjne opierają się na testach jednostkowych, łącząc jednostki kodu i sprawdzając, czy wynikowa kombinacja działa poprawnie. Może to być albo wnętrzności jednego systemu, lub łączenie wielu systemów razem zrobić coś użytecznego. Inną rzeczą, która odróżnia testy integracyjne od testów jednostkowych, jest środowisko. Testy integracyjne mogą i będą korzystać z wątków, uzyskać dostęp do bazy danych lub zrobić wszystko, co jest wymagane, aby upewnić się, że cały kod i różne zmiany środowiska będą działać poprawnie.

Jeśli zbudowałeś kod serializacyjny i przetestowałeś jego wnętrzności bez dotykania dysku, skąd wiesz, że będzie działał podczas ładowania i zapisywania na dysku? Może zapomniałeś spłukać i pozbyć się Plików. Być może Twoje uprawnienia do plików są nieprawidłowe i przetestowałeś wnętrzności przy użyciu strumieni pamięci. Jedynym sposobem, aby dowiedzieć się na pewno jest przetestowanie to "na serio" przy użyciu środowiska najbliższego produkcji.

Główną zaletą jest to, że mogą znaleźć błędy, których testy jednostkowe nie mogą, takie jak błędy okablowania (np. instancja klasy A nieoczekiwanie otrzymuje instancję null B) i błędy środowiska (działa dobrze na mojej maszynie JEDNOPROCESOROWEJ, ale 4-rdzeniowa maszyna mojego kolegi nie może przejść testów). Główną wadą jest to, że testy integracyjne dotykają więcej kodu, są mniej niezawodne, awarie są trudniejsze do zdiagnozowania i testy są trudniejsze aby utrzymać.

Również testy integracyjne niekoniecznie dowodzą, że cała funkcja działa. Użytkownik może nie dbać o wewnętrzne szczegóły moich programów, ale ja tak!

Testy Funkcjonalne

Testy funkcjonalne sprawdzają poprawność danej funkcji, porównując wyniki dla danego wejścia ze specyfikacją. Testy funkcjonalne nie dotyczą wyników pośrednich ani skutków ubocznych, tylko wyniku (nie dbają o to po wykonaniu x, obiekt y ma stan z). Są one zapisywane do testowania części specyfikacji, takich jak "wywołanie funkcji kwadrat (x) z argumentem 2 zwraca 4".

Testy Akceptacyjne

Testy akceptacyjne można podzielić na dwa typy:

Standardowe testy akceptacyjne obejmują wykonanie testów na pełnym systemie (np. za pomocą strony internetowej za pośrednictwem przeglądarki internetowej) w celu sprawdzenia, czy funkcjonalność aplikacji spełnia specyfikację. Np. " kliknięcie ikony powiększenia powinno powiększyć widok dokumentu o 25%."Nie ma prawdziwego kontinuum wyników, tylko wynik pozytywny lub negatywny.

Zaletą jest to, że testy są opisane w prostym języku angielskim i zapewniają, że oprogramowanie jako całość jest kompletne. Wadą jest to, że przesunąłeś kolejny poziom w górę piramidy testowej. Testy akceptacyjne dotykają gór kodu, więc wyśledzenie awarii może być trudne.

Również, w tworzeniu zwinnego oprogramowania, testowanie akceptacji użytkownika polega na tworzeniu testów w celu odzwierciedlenia historie użytkowników tworzone przez / dla klienta oprogramowania podczas rozwoju. Jeśli testy przebiegną pomyślnie, oznacza to, że oprogramowanie powinno spełniać wymagania klienta, a historie można uznać za kompletne. Pakiet testów akceptacyjnych jest w zasadzie wykonywalną specyfikacją napisaną w języku specyficznym dla danej domeny, która opisuje testy w języku używanym przez użytkowników systemu.

Wniosek

Wszystkie się uzupełniają. Czasem warto skupić się na jednym typować lub całkowicie ich unikać. Główną różnicą jest dla mnie to, że niektóre z testów patrzą na rzeczy z perspektywy programisty, podczas gdy inne wykorzystują koncentrację na kliencie/użytkowniku końcowym.
 1368
Author: Mark Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-09 15:18:05

Ważne jest to, że wiesz, co te terminy znaczą dla Twoich kolegów. Różne grupy będą miały nieco różne definicje tego, co mają na myśli, gdy mówią "pełne testy end-to-end", na przykład.

Natknąłem się ostatnio na system nazw Google dla ich testów i raczej mi się podoba - omijają argumenty, używając tylko Małych, Średnich i dużych. Decydując, do której kategorii pasuje test, biorą pod uwagę kilka czynników - ile czasu zajmuje uruchomienie, czy dostęp sieć, baza danych, system plików, systemy zewnętrzne i tak dalej.

Http://googletesting.blogspot.com/2010/12/test-sizes.html

Wyobrażam sobie, że różnica między małym, średnim i dużym dla obecnego miejsca pracy może różnić się od Google.

Jednak nie chodzi tylko o zakres, ale o cel. Punkt marka o różnych perspektywach dla testów, np. programista vs klient / użytkownik końcowy, jest naprawdę ważny.

 90
Author: testerab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-05 16:39:23

Http://martinfowler.com/articles/microservice-testing/

Wpis na blogu Martina Fowlera mówi o strategiach testowania kodu (szczególnie w architekturze mikrousług), ale większość z nich dotyczy każdej aplikacji.

Zacytuję z jego slajdu podsumowującego:

  • testy jednostkowe-ćwiczenie najmniejszych elementów testowalnego oprogramowania w aplikacji, aby określić, czy zachowują się zgodnie z oczekiwaniami.
  • testy integracyjne-weryfikacja komunikacji ścieżki i interakcje między komponentami w celu wykrycia wad interfejsu.
  • testy komponentów-ograniczenie zakresu wykonywanego oprogramowania do części testowanego systemu, manipulowanie systemem poprzez wewnętrzne interfejsy kodowe i użycie testowych dublerów w celu wyizolowania kodu testowane z innych komponentów.
  • testy kontraktowe-sprawdzają interakcje na granicy usługi zewnętrznej, twierdząc, że spełnia ona warunki umowy oczekiwane przez konsumenta obsługa.
  • End-to-End tests-sprawdzić, czy system spełnia wymagania zewnętrzne i osiąga swoje cele, testując cały system, od od końca do końca.
 63
Author: Maxim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-21 22:08:00

testowanie jednostkowe - Jak sama nazwa wskazuje, metoda ta testuje na poziomie obiektu. Poszczególne komponenty oprogramowania są testowane pod kątem ewentualnych błędów. Znajomość programu jest potrzebna do tego testu i kody testowe są tworzone w celu sprawdzenia, czy oprogramowanie zachowuje się tak, jak jest przeznaczone.

testy funkcjonalne - przeprowadzane są bez wiedzy o wewnętrznej pracy systemu. Tester będzie starał się korzystać z systemu, postępując zgodnie z wymaganiami, zapewniając różne wejścia i testowanie wygenerowanych wyjść. Test ten znany jest również jako test zamkniętej skrzynki lub czarnej skrzynki.

testy akceptacyjne - jest to ostatni test przeprowadzany przed przekazaniem oprogramowania klientowi. Odbywa się to w celu zapewnienia, że opracowane oprogramowanie spełnia wszystkie wymagania klienta. Istnieją dwa rodzaje testów akceptacyjnych - jeden, który jest przeprowadzany przez członków zespołu deweloperskiego, znany jako wewnętrzne testy akceptacyjne (testy alfa), oraz inne, które są przeprowadzane przez Klienta lub użytkownika końcowego znanego jako (Beta testy)

testy integracyjne - poszczególne moduły, które są już poddane testom jednostkowym, są ze sobą zintegrowane. Generalnie stosuje się dwa podejścia:

1) Top-Down
2) Bottom-Up

 31
Author: Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 13:59:19

To bardzo proste.

  1. Testowanie jednostkowe: jest to testowanie faktycznie wykonywane przez programistów, którzy mają wiedzę na temat kodowania. To testowanie odbywa się w fazie kodowania i jest częścią testowania białej skrzynki. Kiedy oprogramowanie przychodzi do rozwoju, jest rozwijany w kawałku kodu lub plastry kodu znane jako jednostka. I indywidualne testowanie tych jednostek zwanych testami jednostkowymi wykonywanymi przez programistów, aby dowiedzieć się czegoś o ludzkich błędach, takich jak brak pokrycia oświadczeń itd..

  2. Testowanie funkcjonalne: testowanie to odbywa się w fazie testowania (QA) i jest częścią testowania czarnej skrzynki. Faktyczne wykonanie wcześniej napisanych spraw testowych. Te testy są rzeczywiście wykonywane przez testerów, znaleźć rzeczywisty wynik dowolnej funkcjonalności w witrynie i porównać ten wynik do oczekiwanego wyniku. Jeśli znaleźli jakieś różnice, to jest to błąd.

  3. Testy akceptacyjne: znane jako UAT. I tak naprawdę robi to zarówno tester, jak i Programiści, zespół zarządzający, autor, pisarze i wszyscy, którzy są zaangażowani w ten projekt. Aby upewnić się, że projekt jest gotowy do dostarczenia bez błędów.

  4. Testy integracyjne: jednostki kodu (wyjaśnione w pkt 1) są ze sobą zintegrowane w celu ukończenia projektu. Te jednostki kodu mogą być napisane w różnych technologii kodowania lub mogą być one z różnych wersji, więc to testowanie jest wykonywane przez programistów, aby upewnić się, że wszystkie jednostki kodu są zgodne z innymi i nie ma problemu z integracją.

 18
Author: Rakesh Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-02 00:59:43
 6
Author: cdunn2001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-19 17:39:41

Wyjaśnię ci to na praktycznym przykładzie i bez teorii:

Programista pisze kod. GUI nie jest jeszcze zaimplementowany. Testy na tym poziomie sprawdzają, czy funkcje działają poprawnie, a typy danych są poprawne. Ta faza testowania nazywa się testowaniem jednostkowym.

Gdy GUI jest rozwijany, a aplikacja jest przypisana do testera, weryfikuje wymagania biznesowe z klientem i wykonuje różne scenariusze. Nazywa się to testowaniem funkcjonalnym. Here we są mapowanie wymagań klienta z przepływów aplikacji.

Testy integracyjne: powiedzmy, że nasza aplikacja ma dwa moduły: HR i finanse. Moduł HR został dostarczony i przetestowany wcześniej. Teraz Finanse jest rozwijany i jest dostępny do przetestowania. Współzależne funkcje są już dostępne, więc w tej fazie przetestujesz punkty komunikacyjne między nimi i zweryfikujesz, że działają zgodnie z wymaganiami.

Testowanie regresji to kolejny ważny etap, który odbywa się po każdym nowym rozwoju lub poprawki błędów. Jego celem jest weryfikacja wcześniej działających funkcji.

 5
Author: fahad shaikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-06 18:38:59

Test jednostkowy: testowanie pojedynczego modułu lub niezależnego komponentu w aplikacji jest znane jako testowanie jednostkowe , testowanie jednostkowe zostanie wykonane przez dewelopera.

Test integracji: łączenie wszystkich modułów i testowanie aplikacji w celu sprawdzenia, czy komunikacja i przepływ danych między modułami działają poprawnie , czy nie, test ten jest również wykonywany przez programistów.

Funcional test sprawdzanie indywidualnej funkcjonalności aplikacji jest testowanie funkcjonalne

Testy akceptacyjne Testy te są wykonywane przez użytkownika końcowego lub klienta, czy aplikacja build jest zgodna z wymaganiami klienta, a specyfikacja klienta jest znana jako testy akceptacyjne

 4
Author: malini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-26 12:33:27