Jaka jest różnica między testami jednostkowymi a testami funkcjonalnymi? Czy test jednostkowy może również przetestować funkcję?
Jaka jest różnica między testami jednostkowymi a testami funkcjonalnymi? Czy test jednostkowy może również przetestować funkcję?
Odpowiedzi:
Test jednostkowy - testowanie pojedynczej jednostki, takiej jak metoda (funkcja) w klasie, z wykreśleniem wszystkich zależności.
Test funkcjonalny - test integracji AKA, testujący wycinek funkcjonalności w systemie. Spowoduje to przetestowanie wielu metod i może oddziaływać z zależnościami, takimi jak bazy danych lub usługi sieciowe.
Testy jednostkowe informują programistę, że kod działa poprawnie; testy funkcjonalne informują programistę, że kod robi właściwe rzeczy .
Możesz przeczytać więcej na temat Testowania jednostkowego a testowania funkcjonalnego
Dobrze wyjaśnioną rzeczywistą analogię testów jednostkowych i testów funkcjonalnych można opisać następująco:
Wiele razy rozwój systemu jest porównywany do budowy domu. Chociaż ta analogia nie jest całkiem poprawna, możemy ją 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 wewnętrznych systemach domu, fundamencie, ramie, instalacji elektrycznej, hydraulice i tak dalej. Zapewnia (testy), że części domu będą działały poprawnie i bezpiecznie, to znaczy będą zgodne z kodeksem budowlanym.
Testy funkcjonalne w tym scenariuszu są analogiczne jak w przypadku właściciela domu odwiedzającego ten sam plac budowy. Zakłada, że systemy wewnętrzne będą się odpowiednio zachowywać, a inspektor budowlany wykonuje swoje zadanie. Właściciel domu koncentruje się na tym, jak to będzie mieszkać w tym domu. Martwi się tym, jak wygląda dom, czy różne pokoje mają wygodny rozmiar, czy dom odpowiada potrzebom rodziny, czy okna są dobrym miejscem, by złapać poranne słońce.
Właściciel domu przeprowadza testy funkcjonalne w domu. Ma perspektywę użytkownika.
Inspektor budowlany przeprowadza testy jednostkowe w domu. Ma perspektywę budowniczego.
Podsumowując
Testy jednostkowe są pisane z perspektywy programisty . Są one wykonywane w celu zapewnienia, że określona 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.
Test jednostkowy sprawdza niezależną jednostkę zachowania . Jaka jest jednostka zachowania? To najmniejszy element systemu, który można niezależnie testować jednostkowo. (Definicja ta jest rzeczywiście okrągła, IOW to naprawdę nie jest definicja w ogóle , ale wydaje się całkiem dobrze funkcjonować w praktyce, ponieważ można sort-of zrozumieć intuicyjnie.)
Test funkcjonalny testuje niezależny element funkcjonalności.
Jednostka zachowania jest bardzo mała: chociaż absolutnie nie lubię tej głupiej mantry „test jednostkowy na metodę”, z punktu widzenia wielkości jest ona odpowiednia. 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 funkcjonalny zwykle obejmuje wiele metod i przekrojów na kilka obiektów, a często przez wiele warstw architektonicznych.
Test jednostkowy wyglądałby tak: kiedy wywołam validate_country_code()
funkcję i przekażę jej kod kraju 'ZZ'
, powinna ona zwrócić false
.
Test funkcjonalny byłby następujący: po wypełnieniu formularza wysyłki kodem kraju ZZ
powinienem zostać przekierowany na stronę pomocy, która pozwala mi wybrać kod kraju z menu.
Testy jednostkowe są pisane przez programistów, dla programistów, z perspektywy programisty.
Testy funkcjonalne mogą być dla użytkownika, w którym to przypadku są pisane przez programistów wraz z użytkownikami (lub może przy użyciu odpowiednich narzędzi i odpowiednich użytkowników, nawet przez samych użytkowników), dla użytkowników, z perspektywy użytkownika. Lub mogą mieć do czynienia z programistami (np. Kiedy opisują jakąś wewnętrzną funkcjonalność, o którą użytkownik nie dba), w którym to przypadku są pisane przez programistów, dla programistów, ale nadal z perspektywy użytkownika.
W pierwszym przypadku testy funkcjonalne mogą również służyć jako testy akceptacyjne i jako wykonywalne kodowanie wymagań funkcjonalnych lub specyfikacji funkcjonalnej, w drugim przypadku mogą również służyć jako testy integracyjne.
Testy jednostkowe zmieniają się często, testy funkcjonalne nigdy nie powinny się zmieniać w ramach głównych wydań.
TLDR:
Aby odpowiedzieć na pytanie: Testowanie jednostkowe jest podtypem Testowania funkcjonalnego.
Istnieją dwie duże grupy: funkcjonalne i niefunkcjonalne testów. Najlepsza (niewyczerpująca) ilustracja, którą znalazłem, to ta (źródło: www.inflectra.com ):
(1) Testowanie jednostkowe: testowanie małych fragmentów kodu (funkcji / metod). Można to uznać za (funkcjonalne) badanie funkcjonalne.
Po połączeniu funkcji tworzysz moduł = samodzielny element, prawdopodobnie z interfejsem użytkownika, który można przetestować (testowanie modułu). Gdy masz co najmniej dwa oddzielne moduły, następnie sklejasz je ze sobą, a następnie przychodzi:
(2) Testy integracyjne: kiedy umieścisz dwa lub więcej elementów (pod) modułów lub (pod) systemów razem i sprawdzisz, czy dobrze się ze sobą bawią.
Następnie integrujesz 3. moduł, a następnie 4. i 5. w dowolnej kolejności, którą ty lub twoja drużyna uznacie za stosowną, a gdy wszystkie układanki zostaną ułożone razem, przychodzi
(3) Testowanie systemu: testowanie SW jako całości. To właściwie „Testowanie integracyjne wszystkich elementów razem”.
Jeśli to w porządku, to nadchodzi
(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 na ostatnim etapie, kiedy zdajesz sobie sprawę, że klient chciał samochód sportowy i zbudowałeś furgonetkę.
Functional Test
nie jest znormalizowanym terminem i ma inne znaczenie dla różnych ludzi.
„Test funkcjonalny” nie oznacza, że testujesz funkcję (metodę) w kodzie. Ogólnie oznacza to, że testujesz funkcjonalność systemu - kiedy uruchamiam foo file.txt
z wiersza poleceń file.txt
, być może wiersze są odwrócone. W przeciwieństwie do tego, test pojedynczej jednostki ogólnie obejmuje pojedynczy przypadek jednej metody - length("hello")
powinien zwrócić 5, a length("hi")
powinien zwrócić 2.
Zobacz także stanowisko IBM na granicy między testami jednostkowymi a testami funkcjonalnymi .
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 uszkodzona. Testy jednostkowe powinny pomóc Ci napisać kod, który jest czysty i wolny od błędów.
Zaczerpnięte z książki „Python TDD” Harry'ego Percivala
Według ISTQB tych dwóch nie można porównać. Testy funkcjonalne nie są testami integracyjnymi.
Test jednostkowy jest jednym z poziomów testów, a testy funkcjonalne są rodzajem testów.
Gruntownie:
Funkcją systemu (lub komponentu) jest „to, co robi”. Zazwyczaj jest to opisane w specyfikacji wymagań, specyfikacji funkcjonalnej lub w przypadkach użycia.
podczas
Testowanie komponentów, znane również jako testowanie jednostkowe, modułowe i programowe, wyszukuje defekty i weryfikuje funkcjonowanie oprogramowania (np. Modułów, programów, obiektów, klas itp.), Które można oddzielnie testować.
Według ISTQB test elementu / jednostki 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 niezawodności, a także testowanie strukturalne (np. Pokrycie decyzji).
Cytaty z Podstaw testowania oprogramowania - certyfikacja ISTQB
W Railsach folder jednostek służy do przechowywania testów modeli, folder funkcjonalny służy do przechowywania testów sterowników, a folder integracji służy do przechowywania testów obejmujących dowolną liczbę kontrolerów wchodzących w interakcję. Urządzenia są sposobem organizowania danych testowych; znajdują się w folderze urządzeń. Plik test_helper.rb zawiera domyślną konfigurację dla twoich testów. możesz to odwiedzić .
Myślę o tym w ten sposób: test jednostkowy stwierdza, że kod wykonuje to, co zamierzałeś zrobić (np. Chciałeś dodać parametr aib, w rzeczywistości dodajesz je i nie odejmujesz), testy funkcjonalne sprawdzają, czy cały kod działa razem, aby uzyskać poprawny wynik, dzięki czemu to, co zamierzałeś zrobić, w rzeczywistości uzyskuje właściwy wynik w systemie.
AFAIK, testy jednostkowe NIE są testami funkcjonalnymi. Pozwól, że wyjaśnię małym przykładem. Chcesz sprawdzić, czy funkcjonalność logowania do aplikacji internetowej działa, czy nie, tak jak użytkownik. W tym celu powinny wyglądać twoje testy funkcjonalne.
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 sprawdzać, czy możemy zalogować się przy użyciu nieprawidłowych danych? Na przykład. 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 rodzaju testy wchodzą w skład testów jednostkowych.
Możesz sprawdzić, czy nieprawidłowe testy są odrzucane w testach jednostkowych, jak pokazano w poniższych testach.
class LoginInputsValidator
method validate_inputs_values(email, password)
1-If email is not like string.string@myapp.com, 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 wykonuje to, co robi test jednostkowy 1. Czasami testy funkcjonalne mogą powtórzyć niektóre (nie wszystkie) testy przeprowadzone 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łowych danych wejściowych. Nie chcemy sprawdzać, czy wszystkie złe dane wejściowe są odrzucane, czy nie. To jest zadanie testów jednostkowych.
TESTÓW JEDNOSTKOWYCH
Testowanie jednostkowe obejmuje testowanie najmniejszej jednostki kodu, którą zwykle są funkcje lub metody. Testy jednostkowe przeprowadzane są głównie przez twórcę jednostki / metody / funkcji, ponieważ rozumieją one rdzeń funkcji. Głównym celem programisty jest objęcie kodu testami jednostkowymi.
Ma ograniczenie polegające na tym, ż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 prawidłowego działania produktu. Tej samej funkcji można użyć w kilku częściach systemu, podczas gdy test jednostkowy został napisany tylko do jednego użycia.
TESTY FUNKCJONALNOŚCI
Jest to rodzaj testowania Black Box, w którym testy będą przeprowadzane pod kątem funkcjonalnych aspektów produktu bez zagłębiania się w kod. Testy funkcjonalne przeprowadzane są głównie przez dedykowanego testera oprogramowania. Obejmie to techniki pozytywne, negatywne i BVA wykorzystujące niestandaryzowane dane do testowania określonej funkcjonalności produktu. Pokrycie testowe przeprowadza się w udoskonalony sposób za pomocą testów funkcjonalnych niż testów jednostkowych. Do testowania używa GUI aplikacji, więc łatwiej jest ustalić, za co dokładnie odpowiada konkretna część interfejsu, a nie za określenie funkcji odpowiedzialnej za kod.
bardzo prosto możemy powiedzieć:
czytaj więcej tutaj .
Test jednostkowy : - Test jednostkowy jest szczególnie stosowany do testowania komponentu produktu po komponencie, szczególnie podczas opracowywania produktu. Narzędzia typu Junit i Nunit pomogą również przetestować produkt zgodnie z Jednostką. ** Zamiast rozwiązywania problemów po integracji zawsze wygodnie jest je rozwiązać na wczesnym etapie rozwoju.
Testy funkcjonalne: - Jeśli chodzi o testowanie, istnieją dwa główne typy testowania: 1. Test funkcjonalny 2. Test niefunkcjonalny.
Test niefunkcjonalny to test, w którym tester sprawdza, czy produkt wykona wszystkie atrybuty jakości, o których klient nie wspomina, ale te atrybuty jakości powinny tam być. Jak: -wydajność, użyteczność, bezpieczeństwo, obciążenie, obciążenie itp., Ale w teście funkcjonalnym : - klient jest już obecny z jego wymaganiami i są one odpowiednio udokumentowane, zadaniem testerów jest sprawdzenie, czy funkcjonalność aplikacji działa zgodnie z do proponowanego systemu lub nie. W tym celu Tester powinien przetestować zaimplementowaną funkcjonalność z proponowanym Systemem.
Testy jednostkowe są zwykle wykonywane przez programistów. Celem tego samego jest upewnienie się, że ich kod działa poprawnie. Ogólna ogólna zasada polega na objęciu wszystkich ścieżek kodu za pomocą testów jednostkowych.
Testy funkcjonalne : jest to dobre odniesienie. Testowanie funkcjonalne Objaśnienie