Jaka jest różnica między testowaniem integracyjnym a testowaniem funkcjonalnym? [Zamknięte]

134

Czy testy funkcjonalne i testy integracyjne to to samo?

Rozpoczynasz testowanie od testów jednostkowych, a po zakończeniu testów jednostkowych przechodzisz do testów integracyjnych, podczas których testujesz system jako całość. Czy testowanie funkcjonalne to to samo, co testowanie integracyjne? Nadal bierzesz system jako całość i testujesz go pod kątem zgodności funkcjonalności.

Mishthi
źródło
1
możliwy duplikat [The Agile Way: Integration Testing vs Functional Testing, czy też obu? ] ( stackoverflow.com/questions/555899/… )
Pascal Thivent
14
Czy mogę zasugerować, abyś zaakceptował odpowiedzi z zadanych wcześniej pytań?
Stefano Borini
Zobacz moją odpowiedź tutaj: stackoverflow.com/questions/2741832/ ...
Andrejs
7
Muszę powiedzieć, że to pytanie dotyczy tego, co jest nie tak z tą witryną. Co jest nie tak w tym pytaniu? Dlaczego jest zbyt szeroki? To zadanie BARDZO konkretnego, związanego z programowaniem. Jaka jest różnica między czymś, co można nawet przedstawić matematycznie? Wygląda na to, że istnieje ogromna liczba naprawdę ważnych, naprawdę istotnych pytań, które zostały zamknięte z niewytłumaczalnych powodów. Wiem, że mówisz poważnie, WIĘC ludzie powiedzą mi, że się mylę, ale fakt, że te pytania są przesyłane do witryn takich jak Quara.com, dowodzi, że mam rację. [Zasadniczo SO rezygnuje z udziału w rynku].
Jim Maguire,
1
Zgadzam się z @JimMaguire: zadane pytanie to pytanie „tak / nie” (plus wyjaśnienie, dlaczego tak lub nie). Nie rozumiem, dlaczego uważa się, że nie jest skupiony.
bob

Odpowiedzi:

104

Testowanie integracyjne ma miejsce, gdy testujesz więcej niż jeden komponent i jak one razem funkcjonują. Na przykład, jak inny system współdziała z twoim systemem lub baza danych współdziała z twoją warstwą abstrakcji danych. Zwykle wymaga to w pełni zainstalowanego systemu, chociaż w najczystszej postaci tak nie jest.

Testowanie funkcjonalne polega na testowaniu systemu pod kątem wymagań funkcjonalnych produktu. Kierownictwo produktu / projektu zwykle zapisuje te informacje, a kontrola jakości formalizuje proces tego, co użytkownik powinien zobaczyć i doświadczyć oraz jaki powinien być końcowy rezultat tych procesów. W zależności od produktu może to być zautomatyzowane lub nie.

As w dziurze
źródło
9
Dzięki ... tak, ale w testach funkcjonalnych również wtedy, gdy testujemy system pod kątem wymagań funkcjonalnych, tym razem również traktujemy go jako system zintegrowany. A podczas testowania funkcjonalnego dowiemy się również, jak działają różne jednostki razem, więc może być to testowanie integracji ...
Mishthi
3
Szczególnie w naszym środowisku zawsze uważaliśmy, że testy jednostkowe to testy nunit napisane dla pojedynczej klasy, testy integracji to testy nunit lub testy skryptów sql, które wymagają czegoś więcej niż klasa, baza danych lub inny system (zwykle wymagający pełnej instalacji) a testy funkcjonalne to testy wykonywane przez kontrolę jakości lub zautomatyzowane testy interfejsu użytkownika.
aceinthehole
1
Powiedziałbym również, że jeśli nie wykonałeś testów integracyjnych przed testami funkcjonalnymi, to robisz oba w tym samym czasie i po prostu znajdziesz błędy w częściach integracyjnych podczas testowania wymagań funkcjonalnych.
aceinthehole
1
dlaczego to nie jest akceptowana odpowiedź !?
tftd
@tftd, ponieważ autor tego quesitonu jest nieaktywny od 2010 roku ...
t3chb0t
20

Testowanie funkcjonalne :

Tak, testujemy produkt lub oprogramowanie jako całość funkcjonalnie, czy działa poprawnie, czy nie (testowanie przycisków, linków itp.)

Na przykład: strona logowania.

podajesz nazwę użytkownika i hasło, sprawdzasz, czy prowadzi do strony głównej, czy nie.

Testowanie integracji :

Tak, testujesz tylko zintegrowane oprogramowanie, ale sprawdzasz, gdzie odbywa się przepływ danych i czy w bazie danych zachodzą jakieś zmiany.

Na przykład: wysyłanie wiadomości e-mail

Wysyłasz do kogoś jedną wiadomość, jest przepływ danych i zmiana w bazie danych (wysłana tablica zwiększa wartość o 1)


Pamiętaj - klikanie linków i obrazów nie jest testowaniem integracji. Mam nadzieję, że zrozumiałeś dlaczego, ponieważ po kliknięciu linku w bazie danych nie ma żadnej zmiany.

Mam nadzieję, że ci to pomogło.

jsborn17
źródło
3
Baza danych zawiera szczegóły realizacji stanu programu. Kliknięcie łącza również może zmienić stan programu.
alehro
@ jsborn17 Czy testy integracyjne mają zastosowanie do aplikacji front-end komunikujących się z API, nawet jeśli nie jesteśmy w stanie uruchomić API?
Wancieho,
8

Testowanie funkcjonalne: jest to proces testowania, w którym testowany jest każdy komponent modułu. Np .: Jeśli strona internetowa zawiera pole tekstowe, przycisk radiowy, przyciski i rozwijane itp. Elementy, które należy sprawdzić.

Testowanie integracji: proces, w którym sprawdzany jest przepływ danych między 2 modułami.

raghuram
źródło
8

To ważne rozróżnienie, ale niestety nigdy się nie uda. Problem polega na tym, że większość programistów definiuje je z własnego punktu widzenia. Jest to bardzo podobne do debaty nad Plutonem. (Gdyby była bliżej Słońca, czy byłaby to planeta?)

Testowanie jednostkowe jest łatwe do zdefiniowania. Testuje CUT ( testowany kod ) i nic więcej. (No cóż, tak mało więcej, jak to możliwe.) To oznacza kpiny, podróbki i instalacje.

Na drugim końcu spektrum znajduje się to, co wielu ludzi nazywa testowaniem integracji systemów . To testowanie tak dużo, jak to możliwe, ale wciąż szukasz błędów we własnym CUT.

Ale co z ogromną przestrzenią pomiędzy nimi?

  • Na przykład, co, jeśli przetestujesz tylko trochę więcej niż CUT? Co jeśli dołączysz funkcję Fibonacciego, zamiast korzystać z urządzenia, które wstrzykujesz? Nazwałbym to testami funkcjonalnymi , ale świat się ze mną nie zgadza.
  • A jeśli dołączysz time()lub rand()? A co jeśli zadzwonisz http://google.com? Nazwałbym to testowaniem systemu , ale znowu jestem sam.

Dlaczego to ma znaczenie? Ponieważ testy systemu są zawodne. Są konieczne, ale czasami zawodzą z przyczyn od Ciebie niezależnych. Z drugiej strony testy funkcjonalne powinny zawsze przechodzić, a nie kończyć się niepowodzeniem; jeśli są szybkie, mogą być równie dobrze używane od samego początku, aby używać programowania sterowanego testami bez pisania zbyt wielu testów do wewnętrznej implementacji. Innymi słowy, myślę, że testy jednostkowe mogą sprawiać więcej kłopotów niż są warte, a ja mam dobre towarzystwo .

Testuję na 3 osiach, ze wszystkimi zerami na testach jednostkowych :

  1. Testowanie funkcjonalne: głębsze i głębsze używanie prawdziwego kodu w stosie wywołań.
  2. Testowanie integracji: coraz wyżej w stosie wywołań; innymi słowy, testowanie CUT-a poprzez uruchomienie kodu, który go użyje.
  3. Testowanie systemu: coraz więcej niepowtarzalnych operacji (harmonogram O / S, zegar, sieć itp. )

Test może z łatwością obejmować wszystkie 3, w różnym stopniu.

cdunn2001
źródło
testy funkcjonalne zawsze kończą się sukcesem? czy masz na myśli, że testy funkcjonalne zawsze powinny przejść?
aceinthehole
1
Nie powinny przypadkowo zawieść. Kiedy zawodzą, powinni zawodzić za każdym razem. Np. Nie powinny zawierać wywołań do innych hostów. Może powinny nazywać się testami behawioralnymi ? Nie znam najlepszego terminu. Wiem tylko, że są to najważniejsze testy i są one zwykle pomijane w szerokiej przepaści między czystymi, w pełni mockowanymi testami jednostkowymi a testami integracji systemów wysokiego poziomu .
cdunn2001,
„Nie powinny przypadkowo zawieść”. - Termin może być taki, że są „deterministyczni”
kleaver
5

Powiedziałbym, że oba są ze sobą ściśle powiązane i bardzo trudno je rozróżnić. Moim zdaniem testowanie integracyjne jest podzbiorem testów funkcjonalnych.

Testowanie funkcjonalności opiera się na otrzymanych początkowych wymaganiach. Będziesz testować zachowanie aplikacji zgodnie z oczekiwaniami z wymaganiami.

Jeśli chodzi o testowanie integracji, jest to interakcja między modułami. Jeśli moduł A wysyła wejście, moduł B może je przetworzyć lub nie.

Naidu
źródło
+1 za „Testowanie integracyjne to podzbiór testów funkcjonalnych” - z mojego doświadczenia wynika również, że takie podejście do testów ma największe znaczenie, jeśli zależy Ci na szybkim wyniku. Na przykład w moim kodzie testowym zwykle traktuję system jako pojedynczą zintegrowaną jednostkę - konfiguruję bazę danych w pamięci, a następnie zasilam kontrolery MVC mojej aplikacji danymi testowymi i weryfikuję ich odpowiedź, a także weryfikuję dane w bazie upewnij się, że sprawdzanie poprawności wszystkich danych działa zgodnie z oczekiwaniami, aby uniknąć błędów, gdy kontroler MVC zwraca poprawną odpowiedź, ale w rzeczywistości nie jest ona poprawnie przekazywana do warstwy bazy danych.
JustAMartin
4

Testowanie integracyjne - Testowanie integracyjne to nic innego jak testowanie różnych modułów. Musisz przetestować relacje między modułami. Na przykład po otwarciu Facebooka, po wprowadzeniu identyfikatora logowania i hasła zobaczysz stronę logowania, możesz zobaczyć stronę główną facebooka, stąd strona logowania to jeden moduł, a strona główna to inny moduł. musisz zaznaczyć tylko relację między nimi oznacza, że ​​po zalogowaniu się musi być otwarta tylko strona główna, a nie okno wiadomości ani cokolwiek innego. Istnieją 2 główne typy testów integracji, podejście od góry do dołu i podejście od dołu do góry.

Testowanie funkcjonalne - W testowaniu funkcjonalnym musisz myśleć tylko o danych wejściowych i wyjściowych. W takim przypadku musisz myśleć jak prawdziwy użytkownik. Testowanie wprowadzonych danych wejściowych i uzyskanych wyników to Testowanie funkcjonalne. musisz tylko obserwować wyjście. W testach funkcjonalnych nie musisz testować kodowania aplikacji lub oprogramowania.

Yogesh Deshpande
źródło
3

W testerze funkcjonalnym tester skupia się tylko na funkcjonalności i podfunkcjonalności aplikacji. Funkcjonalność aplikacji powinna działać poprawnie lub nie.

W testach integracyjnych tester musi sprawdzić zależności pomiędzy modułami lub podmodułami, np. Rekordy modułów powinny być pobierane i poprawnie wyświetlane w innym module.

Krunal
źródło
2

Test integracji: - Po zakończeniu testów jednostkowych i rozwiązaniu problemów związanych z komponentami pokrewnymi wszystkie wymagane komponenty muszą zostać zintegrowane w ramach jednego systemu, aby mógł wykonać operację. Po połączeniu komponentów systemu, aby sprawdzić, czy system działa poprawnie, czy nie, ten rodzaj testowania nazywa się testowaniem integracji.

Testy funkcjonalne: - Testowanie jest głównie podzielone na dwie kategorie: 1. Testowanie funkcjonalne 2. Testowanie niefunkcjonalne ** Testowanie funkcjonalne: - Testowanie, czy oprogramowanie działa zgodnie z wymaganiami użytkownika, czy nie. ** Testy niefunkcjonalne: - Aby sprawdzić, czy oprogramowanie spełnia kryteria jakości, takie jak test warunków skrajnych, test bezpieczeństwa itp.

Zwykle Klient dostarcza wymagania tylko dla Testu funkcjonalnego, a dla Testu niefunkcjonalnego. Wymagania nie powinny być wymieniane, ale aplikacja musi wykonywać te czynności.

mohit sarsar
źródło
2

Testy integracyjne

  • Można to postrzegać jako współdziałanie różnych modułów systemu.
  • Chodzi nam głównie o zintegrowaną funkcjonalność różnych modułów, a raczej o różne komponenty systemu.
  • Aby jakikolwiek system lub oprogramowanie działały wydajnie, każdy komponent musi być ze sobą zsynchronizowany.
  • W większości przypadków narzędzie, którego używaliśmy do testowania integracyjnego, będzie wybierane do testowania jednostkowego.
  • Jest używany w złożonych sytuacjach, gdy testy jednostkowe okazują się niewystarczające do przetestowania systemu.

    Testy funkcjonalności

  • Można to zdefiniować jako testowanie indywidualnej funkcjonalności modułów.
  • Odnosi się do testowania oprogramowania na poziomie indywidualnym w celu sprawdzenia jego funkcjonalności.
  • Przypadki testowe są opracowywane w celu sprawdzenia oprogramowania pod kątem oczekiwanych i nieoczekiwanych wyników.
  • Ten rodzaj testów jest przeprowadzany bardziej z perspektywy użytkownika. Oznacza to, że uwzględnia oczekiwania użytkownika dotyczące rodzaju danych wejściowych.
  • Nazywa się to również testami czarnoskrzynkowymi, a także testami zamkniętymi

  • Szach w persji
    źródło
    1

    Sprawdzanie funkcjonalności aplikacji jest ogólnie znane jako testowanie funkcjonalne, gdzie testowanie integracyjne polega na sprawdzeniu przepływu danych z jednego modułu do drugiego. Weźmy przykład aplikacji do przelewów. Załóżmy, że mamy stronę, na której wprowadzamy wszystkie dane uwierzytelniające i jeśli wciśniemy przycisk przelewu, a potem, jeśli odniesiemy jakiś sukces, to jest to test funkcjonalny. Ale w tym samym przykładzie, jeśli zweryfikujemy przelew kwotowy, jest to test integracyjny.

    Rahul Talwar
    źródło
    0

    Autorzy bardzo się w tej kwestii różnią. Nie wierzę, że istnieje „” poprawna interpretacja tego. To naprawdę zależy.

    Na przykład: większość programistów Rails traktuje testy jednostkowe jako testy modelowe, testy funkcjonalne jako testy kontrolerów, a testy integracji jako te, które używają czegoś takiego jak Capybara do eksploracji aplikacji z perspektywy użytkownika końcowego - to znaczy poruszania się po wygenerowanym HTML strony, używając DOM sprawdzić oczekiwania.

    Istnieją również testy akceptacyjne, które z kolei są "na żywo" dokumentacją systemu (zwykle używają korniszona, aby umożliwić pisanie tych w języku naturalnym), opisując wszystkie funkcje aplikacji za pomocą wielu scenariuszy, które z kolei są zautomatyzowane przez programistę. Te, IMHO, można również uznać za testy funkcjonalne i testy integracyjne.

    Kiedy zrozumiesz kluczową koncepcję każdego z nich, będziesz bardziej elastyczny w kwestii dobra lub zła. Tak więc, ponownie IMHO, test funkcjonalny można również uznać za test integracyjny. W przypadku testu integracyjnego, w zależności od rodzaju integracji, który jest wykonywany, może nie być rozważany jako test funkcjonalny - ale generalnie podczas pisania testu integracyjnego masz na myśli pewne wymagania, więc przez większość czasu można go również rozważyć jako test funkcjonalny.

    Nicholas Pufal
    źródło