Testy jednostkowe a testy funkcjonalne

Jaka jest różnica między testami jednostkowymi a testami funkcjonalnymi? Czy test jednostkowy może również testować funkcję?

Author: Renan Araújo, 2010-04-30

13 answers

Unit Test - testowanie jednostki, np. metody (funkcji) w klasie, ze wszystkimi zależnościami.

Functional Test-AKA Test integracyjny, testujący fragment funkcjonalności w systemie. To przetestuje wiele metod i może wchodzić w interakcje z zależnościami, takimi jak bazy danych lub Usługi internetowe.

 201
Author: bpapa,
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
2010-04-30 01:45:09

Testy jednostkowe informują programistę, że kod robi wszystko dobrze; testy funkcjonalne informują programistę, że kod robi właściwe rzeczy .

Więcej na stronie testy jednostkowe a testy funkcjonalne

Dobrze wyjaśnioną analogię do testów jednostkowych i testów funkcjonalnych można opisać w następujący sposób,

Wiele razy rozwój systemu jest porównywany do budowy domu. Chociaż ta analogia nie jest całkiem poprawne, możemy go rozszerzyć w celu zrozumienia różnicy między testami jednostkowymi i funkcjonalnymi.

Testy jednostkowe są analogiczne do inspekcji budowlanej odwiedzającej plac budowy domu. Koncentruje się na różnych systemach wewnętrznych domu, fundamencie, ramie, elektryce, hydraulice i tak dalej. Zapewnia (testy), że części domu będą działać poprawnie i bezpiecznie, czyli spełniają kodeks budowlany.

Testy funkcjonalne w tym scenariuszu są analogiczne do właściciela domu odwiedzającego ten sam plac budowy. Zakłada, że systemy wewnętrzne będą zachowywać się odpowiednio, że inspektor budowlany wykonuje swoje zadanie. Właściciel domu koncentruje się na tym, jak to będzie żyć w tym domu. Interesuje się tym, jak wygląda dom, czy różne pokoje są wygodne, czy dom pasuje do potrzeb rodziny, czy okna w dobrym miejscu, aby złapać poranne słońce.

Właściciel domu przeprowadza testy funkcjonalne na koszt firmy. Ma perspektywę użytkownika.

Inspektor budowlany przeprowadza testy jednostkowe na Domu. Ma perspektywę budowniczego.


Jako podsumowanie,

Testy jednostkowe są pisane z perspektywy programistów . Są one wykonane w celu zapewnienia, że dana metoda (lub Jednostka) klasy wykonuje zestaw określonych zadań.

Testy funkcjonalne są pisane z perspektywy użytkownika. Zapewniają, że system działa tak, jak tego oczekują użytkownicy.

 438
Author: Anthony Forloney,
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
2016-01-13 23:56:54
  • Test jednostkowy testuje niezależną jednostkę zachowania . Czym jest jednostka zachowania? Jest to najmniejszy element systemu, który można niezależnie przetestować jednostkowo. (Ta definicja jest w rzeczywistości okrągła, IOW to naprawdę nie jest definicja w ogóle, ale wydaje się, że działa całkiem dobrze w praktyce, ponieważ można ją zrozumieć intuicyjnie.)

  • Test funkcjonalny sprawdza niezależny kawałek funkcjonalność.


  • Jednostka zachowania jest bardzo mała: chociaż absolutnie nie lubię tej głupiej mantry "jeden test jednostkowy na metodę", z perspektywy wielkości jest ona w porządku. Jednostka zachowania jest czymś pomiędzy częścią metody a może kilkoma metodami. Co najwyżej obiekt, ale nie więcej niż jeden.

  • Element funkcjonalności zazwyczaj składa się z wielu metod i przecina kilka obiektów, a często przez wiele warstwy architektoniczne.


  • Test jednostkowy byłby czymś w rodzaju: gdy wywołam funkcję validate_country_code() I podam jej kod kraju 'ZZ' powinna ona zwracać false.

  • Test funkcjonalny byłby następujący: po wypełnieniu formularza wysyłki z kodem kraju ZZ, powinienem zostać przekierowany na stronę pomocy, która pozwoli mi wybrać Mój kod kraju z menu.


  • Testy jednostkowe są pisane przez programistów, dla programistów, z perspektywa dewelopera.

  • Testy funkcjonalne mogą być skierowane do użytkownika, w którym to przypadku są pisane przez programistów razem z użytkownikami (a może przy użyciu odpowiednich narzędzi i właściwych użytkowników, nawet przez samych użytkowników), dla użytkowników, z perspektywy użytkownika. Lub mogą być deweloperami (np. gdy opisują jakąś wewnętrzną funkcjonalność, na której użytkownik nie dba), w takim przypadku są one pisane przez programistów, dla programistów, ale nadal od użytkownika perspektywa.


  • W pierwszym przypadku testy funkcjonalne mogą również służyć jako testy akceptacyjne i jako kodowanie wykonywalne wymagań funkcjonalnych lub specyfikacji funkcjonalnej, w drugim przypadku mogą również służyć jako testy integracyjne.

  • Testy jednostkowe często się zmieniają, testy funkcjonalne nigdy nie powinny się zmieniać w głównym wydaniu.


 127
Author: Jörg W Mittag,
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
2010-05-12 10:03:59

TLDR:

Aby odpowiedzieć na pytanie: testy jednostkowe to podtyp testów funkcjonalnych.


Istnieją dwie duże grupy: funkcjonalne I niefunkcjonalne testowanie. Najlepszą (niewyczerpującą) ilustracją jaką znalazłem jest ta (Źródło: www.inflectra.com):

Tutaj wpisz opis obrazka

(1) testowanie jednostkowe: testowanie małych fragmentów kodu (funkcje / metody). Można go uznać za (biały-box) funkcjonalny testuję.

Kiedy funkcje są połączone, tworzysz moduł = samodzielny element, ewentualnie z interfejsem użytkownika, który można przetestować (testowanie modułów). Gdy masz co najmniej dwa oddzielne moduły, następnie sklejasz je razem, a następnie przychodzi:

(2) testowanie integracji: kiedy połączysz dwa lub więcej elementów (pod) modułów lub (pod)systemów razem i sprawdź, czy dobrze się ze sobą bawią.

Następnie integrujesz 3. moduł, następnie 4. i 5. w dowolnej kolejności ty lub twój zespół uznasz za stosowne, a gdy wszystkie elementy układane są razem, pojawia się

(3) testowanie systemu: testowanie oprogramowania jako całości. Jest to w zasadzie "testowanie integracyjne wszystkich elementów razem".

If that ' s OK, then comes

(4) testy akceptacyjne: czy zbudowaliśmy to, o co właściwie prosił klient? oczywiście testy akceptacyjne powinny być wykonywane przez cały cykl życia, a nie tylko w ostatni etap, w którym zdajesz sobie sprawę, że klient chciał samochodu sportowego, a Ty zbudowałeś Vana.

Tutaj wpisz opis obrazka

 60
Author: Andrejs,
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
2016-07-06 16:07:06

"test funkcjonalny" nie oznacza, że testujesz funkcję (metodę) w swoim kodzie. Ogólnie oznacza to, że testujesz funkcjonalność systemu - kiedy uruchamiam foo file.txt w wierszu poleceń, linie file.txt stają się być może odwrócone. W przeciwieństwie do tego, pojedynczy test jednostkowy zazwyczaj obejmuje pojedynczy przypadek pojedynczej metody -- length("hello") powinien zwrócić 5, a length("hi") powinien zwrócić 2.

Zobacz także podejście IBM do linii między testami jednostkowymi a testami funkcjonalnymi .

 11
Author: Mark Rushakoff,
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
2010-04-30 01:47:20

W Rails folder unit jest przeznaczony do przechowywania testów dla modeli, folder functional jest przeznaczony do przechowywania testów dla kontrolerów, a folder integration jest przeznaczony do przechowywania testów, które obejmują dowolną liczbę kontrolerów oddziałujących ze sobą. Oprawy są sposobem organizowania danych testowych; znajdują się w folderze oprawy. Test_helper.plik rb zawiera domyślną konfigurację dla Twoich testów. możesz odwiedzić to .

 5
Author: Bhimasen Rautaray,
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-19 20:49:06

Podstawową różnicą jest jednak to, że testy funkcjonalne testują aplikację z zewnątrz, z punktu widzenia użytkownika. Testy jednostkowe testują aplikację od wewnątrz, z punktu widzenia programisty. Testy funkcjonalne powinny pomóc w zbudowaniu aplikacji o odpowiedniej funkcjonalności i zagwarantować, że nigdy nie zostanie ona przypadkowo złamana. Testy jednostkowe powinny pomóc w pisaniu kodu, który jest czysty i wolny od błędów.

zaczerpnięte z książki" Python TDD "Harry' ego Percival

 5
Author: Humoyun,
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-03-04 02:05:37

Według ISTQB te dwa nie są porównywalne. Testy funkcjonalne nie są testami Integracyjnymi.

Test jednostkowy jest jednym z poziomów testów, a test funkcjonalny jest typem testów.

W Zasadzie:

Funkcja układu (lub komponentu) jest "tym, co robi". To jest zazwyczaj opisane w specyfikacji wymagań, funkcjonalne specyfikacji lub w przypadkach użycia.

While

Testowanie komponentów, znane również jako jednostka, moduł i program testowanie, wyszukuje usterki i weryfikuje działanie oprogramowania (np. Moduły, programy, obiekty, klasy, itp.), które są oddzielnie testowalny.

Zgodnie z ISTQB Test komponentów / jednostek może być funkcjonalny lub niefunkcjonalny:

Testowanie komponentów może obejmować testowanie funkcjonalności i specyficznych cech niefunkcjonalnych, takich jak zachowanie zasobów (np. wycieki pamięci), testowanie wydajności lub odporności, a także testowanie strukturalne (np. decyzja zasięg).

Cytaty z podstawy testowania oprogramowania-certyfikacja ISTQB

 5
Author: Dominik,
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-12-05 17:20:00

Sposób, w jaki o tym myślę jest taki: test jednostkowy określa, że kod robi to, co zamierzałeś (np. chciałeś dodać parametr a i b, w rzeczywistości dodajesz je, a nie odejmujesz), testy funkcjonalne testują, że cały kod działa razem, aby uzyskać poprawny wynik, tak że to, co zamierzałeś, kod w rzeczywistości dostaje właściwy wynik w systemie.

 3
Author: Yishai,
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
2010-05-16 12:36:23

TESTY JEDNOSTKOWE

Testowanie jednostkowe obejmuje testowanie najmniejszych jednostek kodu, które zazwyczaj są funkcjami lub metodami. Testowanie jednostek jest najczęściej wykonywane przez programistę jednostki / metody / funkcji, ponieważ rozumieją rdzeń funkcji. Głównym celem programisty jest pokrycie kodu testami jednostkowymi.

Ma ograniczenie, że niektórych funkcji nie można przetestować za pomocą testów jednostkowych. Nawet po pomyślnym zakończeniu wszystkich testów jednostkowych; nie gwarantuje poprawności działanie produktu. Ta sama funkcja może być używana w kilku częściach systemu, podczas gdy test jednostkowy został napisany tylko dla jednego użycia.

TESTY FUNKCJONALNE

Jest to rodzaj testowania Czarnej Skrzynki, gdzie testowanie będzie wykonywane na funkcjonalnych aspektach produktu bez patrzenia w kod. Testy funkcjonalne wykonywane są głównie przez dedykowanego testera oprogramowania. Będzie to obejmować pozytywne, negatywne i BVA techniki z wykorzystaniem unormowanych danych do testowania określonych funkcjonalność produktu. Zakres badań jest przeprowadzany w lepszy sposób przez testy funkcjonalne niż przez testy jednostkowe. Używa GUI aplikacji do testowania, więc łatwiej jest określić, za co dokładnie odpowiada określona część interfejsu, a nie określić, za co odpowiada funkcja kodu.

 2
Author: Ashish Gupta,
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-09-15 05:55:45

AFAIK, testy jednostkowe nie są testami funkcjonalnymi. Pozwól, że wyjaśnię za pomocą małego przykładu. Chcesz sprawdzić, czy funkcja logowania w aplikacji internetowej e-mail działa, czy nie, tak jak użytkownik. W tym celu twoje testy funkcjonalne powinny wyglądać tak.

1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

Czy nasze testy funkcjonalne powinny sprawdzić, czy możemy zalogować się z nieprawidłowymi wejściami ? Np. E-mail nie ma symbolu@, nazwa użytkownika ma więcej niż jedną kropkę (dozwolona jest tylko jedna kropka),. com pojawia się przed @ itd. ? Ogólnie nie ! Tego typu testy idą do testów jednostkowych.

Możesz sprawdzić, czy nieprawidłowe dane wejściowe są odrzucane w testach jednostkowych, jak pokazano w testach poniżej.

class LoginInputsValidator
  method validate_inputs_values(email, password)
    1-If email is not like [email protected], then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

Zauważ, że test funkcjonalny 4 faktycznie robi to, co test jednostkowy 1. Czasami, testy funkcjonalne mogą powtórzyć niektóre (nie wszystkie) z testów przeprowadzonych przez testy jednostkowe, z różnych powodów. W naszym przykładzie, używamy testu funkcjonalnego 4, aby sprawdzić, czy konkretny komunikat o błędzie pojawia się przy wprowadzaniu nieprawidłowego wejścia. Nie chcemy sprawdzać, czy wszystkie złe dane wejściowe są odrzucane lub nie. To jest zadanie testów jednostkowych.

 2
Author: testerjoe2,
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
2016-10-31 03:18:46

Test Jednostkowy :- Testowanie jednostkowe jest szczególnie używane do testowania komponentu produktu po komponencie, szczególnie podczas gdy produkt jest w fazie rozwoju. Narzędzia typu Junit i Nunit pomogą również przetestować produkt zgodnie z jednostką. **Zamiast rozwiązywać problemy po integracji, zawsze jest wygodne, aby rozwiązać je na wczesnym etapie rozwoju.

Testy Funkcjonalne:- Jeśli chodzi o badania, istnieją dwa główne rodzaje badań, jak 1.Funkcjonalne Badanie 2.Test Niefunkcjonalny.

Test niefunkcjonalny to test, w którym Tester przetestuje, że produkt wykona wszystkie te atrybuty jakości, które klient nie wspomina, ale te atrybuty jakości powinny tam być. Jak: - wydajność,użyteczność,bezpieczeństwo,obciążenie, stres itp. ale w teście funkcjonalnym : - klient jest już obecny ze swoimi wymaganiami i są one odpowiednio udokumentowane, zadaniem testerów jest sprawdzenie, czy funkcjonalność aplikacji jest wykonanie zgodnie z proponowanym systemem lub nie. W tym celu Tester powinien przetestować wdrożoną funkcjonalność z proponowanym systemem.

 1
Author: mohit sarsar,
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-20 09:26:27

Testy jednostkowe są zwykle wykonywane przez programistów. Celem robienia tego samego jest upewnienie się, że ich kod działa poprawnie. Ogólną zasadą jest objęcie wszystkich ścieżek w kodzie za pomocą testów jednostkowych.

Testowanie funkcjonalne : jest to dobre odniesienie. Wyjaśnienie Testów Funkcjonalnych

 0
Author: automationuser,
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
2016-06-06 19:57:59