Testy jednostkowe czy funkcjonalne? [zamknięte]

Ostatnio słyszałem o testach funkcjonalnych nad testami jednostkowymi.

Rozumiem, że Unit Testing testuje każdą z możliwości danego kawałka kodu z jego najbardziej atomowej postaci. Ale co z testami funkcjonalnymi?

To brzmi jak testowanie tylko jeśli kod działa, ale czy jest tak niezawodny jak testowanie jednostkowe?

Powiedziano mi, że są dwie szkoły myśli w tej sprawie. Certainowie preferują testy jednostkowe, inne testy funkcjonalne.

Jest jakieś dobre zasoby, linki, książki, referencje lub ktoś z was, kto może wyjaśnić i wyjaśnić moją drogę w tym temacie?

Dzięki!

Author: Will Marcouiller, 2010-02-09

8 answers

Odpowiedź Jasona jest prawidłowa. Różne rodzaje testów mają różne cele i mogą być układane warstwowo w celu uzyskania najlepszych wyników(dobry projekt, spełnienie specyfikacji, zmniejszenie wad).

    Testowanie jednostek = projektowanie napędów (z Test-Driven Development, lub TDD)
  • testy integracyjne = czy wszystkie elementy działają razem
  • Test akceptacji Klienta = czy spełnia wymagania klienta
  • Manual testing = często obejmuje interfejs użytkownika; dedykowani testerzy mogą znaleźć to, co Automation misses
  • testowanie obciążenia = jak dobrze działa system z realistyczną ilością danych

Istnieje pewne nakładanie się między tymi kategoriami; testy jednostkowe mogą na przykład określać zachowanie.

I są inne; więcej niż większość ludzi chce wiedzieć, zobacz testowanie oprogramowania .

Jeden punkt ludzie pominięte jest to, że testowanie jednostkowe jest testowanie fragmentów kodu w izolacji . Dobre testy jednostkowe nie trafiają na przykład do bazy danych. To ma dwie zalety: sprawia, że testy działają szybko, więc będziesz je uruchamiał częściej i zmusza cię do pisania luźno powiązanych klas (lepszy design).

Poprosiłeś o zasoby; polecam książkę Roya Osherove ' a The Art of Unit Testing with Examples in. net . chociaż żadna książka nie jest idealna, ta daje wiele doskonałych wskazówek na pisanie dobrych testów.

EDIT: A do pisania testów na istniejącym oprogramowaniu, nic nie przebije książki Michaela Feathera efektywnej pracy z Legacy Kod .

 24
Author: TrueWill,
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-02-09 16:22:10

Testy jednostkowe kontra testy funkcjonalne nie są xor, ale raczej and. Testowanie jednostkowe polega na testowaniu jednostek w izolacji, podczas gdy testowanie funkcjonalne polega na testowaniu całości w integracji (czy wszystkie jednostki działają poprawnie?).

Oba są niezbędnymi składnikami dobrych praktyk inżynierii oprogramowania.

 26
Author: jason,
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-02-09 15:47:59

Unit testing testuje Twoje jednostki kodu (metody, itp.), aby upewnić się, że robią to, czego oczekujesz.

Testowanie funkcjonalne testuje projekt systemu, aby upewnić się, że elementy współdziałają prawidłowo. Jeśli napiszesz polecenie, które pobiera i int i zwraca ciąg znaków i przetestuje go w pełni, możesz być pewien, że działa. Ale jeśli nie masz testów systemowych, możesz nigdy nie zauważyć, że reszta kodu myśli, że może zaakceptować null, ale nie może.

Oba rodzaje testów to ważne.

Edit: aby dodać nieco inny pogląd do tego, co powiedział gbjbaanb:

  • test jednostkowy = mój kod działa
  • test funkcjonalny = moje prace projektowe
  • Test integracji = mój kod jest przy użyciu rzeczy 3rd party poprawnie (bazy danych, itp)
  • Test akceptacji Fabrycznej = mój system działa
  • Test akceptacji strony = Twój kod jest do bani, to nie jest to, o co prosiłem!?!
 10
Author: RHSeeger,
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-02-09 15:53:13
  • test jednostkowy = najniższy, granulowany poziom.
  • test funkcjonalny = średni, modułowy poziom.
  • Test integracyjny = wyższy poziom aplikacji.
  • Test akceptacji Fabrycznej = zobacz to wszystko działa
  • Test akceptacji strony = Zobacz wszystko fail :)

Wszystkie powyższe są użyteczne, ale nie wykluczają się wzajemnie. Powinieneś robić większość z nich, ale ilość czasu, jaki spędzasz na każdej części, zależy od wyników, które z nich uzyskasz, to wszystko. Jeśli twój kod jest zbyt modułowe do łatwego testowania jednostkowego, a następnie poświęć swoje wysiłki na testy funkcjonalne. Jeśli piszesz bibliotekę małych komponentów, poświęć czas na testowanie ich jednostek, a jeśli piszesz systemy sterowania rakietami wojskowymi, zdecydowanie powinieneś je testować (ponieważ eksplozje nawet gdy się nie powiedzie, są zabawne :)) {]}

 6
Author: gbjbaanb,
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-02-09 16:21:06

Testowanie funkcjonalne, zwane również testowanie systemu, ma na celu przetestowanie kompletnego systemu i sprawdzenie, czy wymagania funkcjonalne są spełnione.

Testowanie jednostek ma na celu Testowanie "jednostek", tj. funkcji lub metod, z których zbudowany jest system w izolacji . Czasami nazywa się to testowaniem deweloperów. Testowanie jednostkowe może być trudne po fakcie, dlatego TDD pisze test przed kodem.

Są to komplementarne jako jednostki mogą pracować niezależnie, a nie Po zintegrowaniu ze sobą, lub mogą przejść testy jednostkowe i nie spełniają wszystkich wymagań produktu.

 4
Author: philant,
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-02-09 16:30:01

Testy jednostkowe i testy funkcjonalne mają dwa różne wyniki.

Unit Testing sprawdza, czy mały fragment kodu działa zgodnie z oczekiwaniami. Zwykle robi to programista, aby upewnić się, że kod działa poprawnie. Zwykle są one również zautomatyzowane przez framework testowy.

Testy funkcjonalne sprawdzają, czy funkcja działa zgodnie z oczekiwaniami, przechodząc przez określoną ścieżkę przez program. Są one zazwyczaj wykonywane przez osobę na oprogramowaniu, zapewniając, że program będzie działać tak, jak ma to być dla użytkownika. To, jako takie, jest wyższy poziom, a tym samym testuje kilka jednostek na raz.

Myślę, że oba są ważne. Jeśli masz ograniczone zasoby, choć, i trzeba wybrać/wybrać techniki, i myślę, że to zależy od produktów, które tworzysz, ale do tego, co robię (motoryzacyjne produkty kontrolne używane przez ludzi za pomocą niektórych przycisków) testy funkcjonalne są najważniejsze. Sprawdza i zapewnia, że gdy użytkownik otrzyma produkt, robi to, co powinien do zrobienia. Nie oznacza to, że powinniśmy zrezygnować z testowania jednostkowego, ale jeśli chodzi o push-comes-to-shove, funkcjonalność jest najważniejsza, aby zapewnić wspaniałe wrażenia użytkownika i uzyskać produkt za drzwi.

Jeśli tworzysz, powiedzmy, silnik bazy danych (lub inny produkt, który niekoniecznie jest skierowany do użytkownika), testowanie jednostkowe może być tym, co naprawdę powinieneś zrobić.

 3
Author: J. Polfer,
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-02-09 15:55:08

Test jednostkowy testuje kawałek kodu i potwierdza dla programisty, że inny kawałek kodu robi to, co powinien. W Test Driven Development, test jednostkowy jest zapisywany jako pierwszy i nie sprawdza się, zanim kod zostanie napisany, co spowoduje, że test przejdzie. Programiści interesują się testami jednostkowymi. Testy jednostkowe są szybkie do wykonania.

Test funkcji testuje twoje wymagania dotyczące czarnej skrzynki i pokazuje, że część funkcjonalności użytkownika jest na miejscu. Na przykład, jeśli nacisnę duży czerwony przycisk, dzwonek zaczyna dzwonić. Test funkcjonalny może nawet nie być testem kodu. Być może istnieje proces mechaniczny, który powoduje, że dzwonek dzwoni po naciśnięciu przycisku. Klienci są zainteresowani testami funkcjonalnymi, ponieważ potwierdzają, że proces wysokiego poziomu działa w sposób, który rozumieją. Często ich wykonanie jest powolne.

 3
Author: Baz,
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
2012-08-29 19:42:07

Jest miejsce dla obu w większości prac rozwojowych.

Unit testing służy do testowania małych jednostek kodu, aby sprawdzić, czy działają zgodnie z oczekiwaniami.

Testy funkcjonalne mają na celu sprawdzenie, czy ogólna funkcjonalność systemu jest zgodna z oczekiwaniami.

Są na różnych poziomach i oba powinny być używane.

 2
Author: Oded,
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-02-09 15:48:39