Qual è la differenza tra test di integrazione e test funzionali? [chiuso]


132

I test funzionali e i test di integrazione sono uguali?

Inizi i test attraverso i test unitari, quindi dopo aver completato i test unitari, esegui i test di integrazione in cui testerai il sistema nel suo insieme. Il test funzionale è uguale al test di integrazione? Stai ancora prendendo il sistema nel suo complesso e testandolo per la conformità delle funzionalità.


1
possibile duplicato di [The Agile Way: Test di integrazione vs Test funzionale o entrambi? ] ( Stackoverflow.com/questions/555899/... )
Pascal Thivent

14
Posso suggerirti di accettare alcune risposte dalle precedenti domande che hai fatto?
Stefano Borini,


6
Devo dire che questa domanda rappresenta ciò che non va in questo sito. Cosa c'è di sbagliato in questa domanda? Come è troppo ampio? Sta chiedendo qualcosa di MOLTO specifico, legato alla programmazione. Qual è la differenza tra qualcosa che può anche essere rappresentata matematicamente Sembra solo che ci sia un numero enorme di domande davvero importanti, davvero rilevanti che vengono chiuse per ragioni inspiegabili. So che voi gente seria mi direte che ho torto, ma il fatto che queste domande siano state fratturate in siti come Quara.com dimostra che ho ragione. [Fondamentalmente SO sta abdicando la quota di mercato].
Jim Maguire,

1
Sono d'accordo con @JimMaguire: la domanda posta è una domanda "sì / no" (più spiegazione del perché sì o no). Non vedo perché sia ​​considerato non focalizzato.
bob

Risposte:


101

Il test di integrazione si verifica quando si verificano più componenti e come funzionano insieme. Ad esempio, come un altro sistema interagisce con il tuo sistema o il database interagisce con il tuo livello di astrazione dei dati. Di solito questo richiede un sistema completamente installato, sebbene non lo sia nelle sue forme più pure.

Il test funzionale si verifica quando si verifica il sistema rispetto ai requisiti funzionali del prodotto. La gestione del prodotto / progetto di solito li scrive e il QA formalizza il processo di ciò che un utente dovrebbe vedere e sperimentare e quale dovrebbe essere il risultato finale di tali processi. A seconda del prodotto, questo può essere automatizzato o meno.


9
Grazie ... sì ma nei test funzionali anche quando stiamo testando il sistema rispetto ai requisiti funzionali quel tempo lo prendiamo anche come sistema integrato .. E mentre eseguiamo il rilevamento funzionale scopriremo anche come funzionano le diverse unità insieme in modo che possa essere un test di integrazione ...
Mishthi,

3
Specialmente nel nostro ambiente, abbiamo sempre considerato unit test come test nunit scritto su una singola classe, test di integrazione come test nunit o test di script sql che richiedevano più di una classe, di un database o di un altro sistema (che di solito richiede un'installazione completa) e i test funzionali sono i test eseguiti dal QA o dai test UI automatizzati.
aceinthehole,

1
Inoltre, direi che se non hai eseguito i test di integrazione prima dei test funzionali, li stai facendo entrambi allo stesso tempo e troverai errori nelle parti di integrazione mentre testerai i requisiti funzionali.
aceinthehole,

1
come mai questa non è la risposta accettata !?
tftd

@tftd perché l'autore di questo quesiton è inattivo dal 2010 ...
t3chb0t

20

Test funzionali :

Sì, stiamo testando il prodotto o il software nel suo complesso funzionalmente, indipendentemente dal fatto che funzioni correttamente o meno (pulsanti di prova, collegamenti, ecc.)

Ad esempio: pagina di accesso.

fornisci il nome utente e la password, verifica se ti porta alla home page o meno.

Test di integrazione :

Sì, si verifica solo il software integrato ma si verifica dove sta avvenendo il flusso di dati e si verificano cambiamenti nel database.

Ad esempio: invio di e-mail

Invia una mail a qualcuno, c'è un flusso di dati e cambia anche nel database (la tabella inviata aumenta il valore di 1)


Ricorda: fare clic su collegamenti e immagini non è un test di integrazione. Spero che tu abbia capito perché, perché non vi sono cambiamenti nel database facendo semplicemente clic su un collegamento.

Spero che questo ti abbia aiutato.


3
Il database è il dettaglio di implementazione dello stato del programma. Facendo clic sul collegamento è inoltre possibile modificare lo stato del programma.
Alehro,

@ jsborn17 i test di integrazione sono applicabili a un'applicazione front-end che comunica con un'API anche se non siamo in grado di eseguire l'API?
Wancieho,

8

Questa è una distinzione importante, ma sfortunatamente non troverai mai un accordo. Il problema è che la maggior parte degli sviluppatori li definisce dal proprio punto di vista. È molto simile al dibattito su Plutone. (Se fosse più vicino al Sole, sarebbe un pianeta?)

Il test unitario è facile da definire. Verifica il CUT ( Code Under Test ) e nient'altro. (Beh, il meno altro possibile.) Ciò significa beffe, falsi e infissi.

All'altra estremità dello spettro c'è quello che molte persone chiamano test di integrazione del sistema . Questo è il test il più possibile, ma è ancora alla ricerca di bug nel tuo CUT.

Ma che dire della vasta distesa tra?

  • Ad esempio, cosa succede se si esegue il test solo un po 'di più rispetto al CUT? E se includessi una funzione di Fibonacci, invece di usare un apparecchio che ti aveva iniettato? Definirei quel test funzionale , ma il mondo non è d'accordo con me.
  • E se includi time()o rand()? O se chiami http://google.com? Chiamerei quel test di sistema , ma ancora una volta sono solo.

Perché è importante? Perché i test di sistema non sono affidabili. Sono necessari, ma a volte falliranno per ragioni indipendenti dalla tua volontà. D'altra parte, i test funzionali dovrebbero sempre passare, non fallire in modo casuale; se sono veloci, potrebbero anche essere utilizzati dall'inizio per utilizzare lo sviluppo guidato dai test senza scrivere troppi test per l'implementazione interna. In altre parole, penso che i test unitari possano essere più un problema di quanto valgano, e ho una buona compagnia .

Ho messo i test su 3 assi, con tutti i loro zero al test unitario :

  1. Test funzionali: utilizzo del codice reale sempre più in profondità nello stack di chiamate.
  2. Test di integrazione: sempre più in alto il tuo stack di chiamate; in altre parole, testare il tuo CUT eseguendo il codice che lo userebbe.
  3. Test di sistema: operazioni sempre più irripetibili (scheduler O / S, clock, rete, ecc. )

Un test può essere facilmente tutti e 3, a vari livelli.


i test funzionali passano sempre? o vuoi dire che i test funzionali dovrebbero sempre passare?
aceinthehole,

1
Non dovrebbero fallire in modo casuale. Quando falliscono, dovrebbero fallire ogni volta. Ad esempio, non dovrebbero includere chiamate ad altri host. Forse dovrebbero essere chiamati Test comportamentali ? Non conosco il termine migliore. So solo che sono i test più importanti e sono generalmente trascurati nell'ampio divario tra test unitari puri e completamente derisi e test di integrazione di sistema di alto livello .
cdunn2001,

"Non dovrebbero fallire in modo casuale." - Il termine potrebbe essere che sono "deterministici"
kleaver

7

Test funzionali: è un processo di test in cui viene testato ogni singolo componente del modulo. Ad esempio: se una pagina Web contiene campi di testo, è necessario controllare i componenti del pulsante radio, dei pulsanti e dei menu a discesa ecc.

Test di integrazione: processo in cui viene controllato il flusso di dati tra 2 moduli.


4

Direi che entrambi sono strettamente collegati tra loro e molto difficili da distinguere tra loro. A mio avviso, il test di integrazione è un sottoinsieme di test funzionali.

Il test di funzionalità si basa sui requisiti iniziali che ricevi. Testerai che il comportamento dell'applicazione è come previsto con i requisiti.

Quando si tratta di test di integrazione, è l'interazione tra i moduli. Se un modulo invia un input, il modulo B è in grado di elaborarlo o meno.


+1 per "Il test di integrazione è un sottoinsieme di test funzionali" - la mia esperienza mostra anche che tale approccio ai test è il più significativo se miri a un risultato veloce. Ad esempio, nel mio codice di prova di solito tratto il sistema come una singola unità integrata - ho impostato il database in memoria e quindi ho fornito ai controller MVC della mia app alcuni dati di test e verificato la loro risposta, e ho anche verificato i dati nel database per assicurarsi che tutta la convalida dei dati abbia funzionato come previsto, per evitare bug quando il controller MVC restituisce la risposta corretta, ma in realtà non viene passato correttamente al livello del database.
JustAMartin,

4

Test di integrazione - Il test di integrazione non è altro che il test di diversi moduli. Devi testare la relazione tra i moduli. Ad esempio, quando apri Facebook, vedi la pagina di accesso dopo aver inserito ID di accesso e password, puoi vedere la home page di Facebook, quindi la pagina di accesso è un modulo e la home page è un altro modulo. devi controllare solo la relazione tra loro significa che quando hai effettuato l'accesso, deve essere aperta solo la home page, non la finestra di messaggio o qualsiasi altra cosa. Esistono 2 tipi principali di test di integrazione TOP-DOWN e BOTTOM UP.

Test funzionali - Nei test funzionali devi solo pensare a input e output. In questo caso devi pensare come un vero utente. Test di quale input hai fornito e quale output hai ottenuto è il test funzionale. devi solo osservare l'output. Nei test funzionali non è necessario testare la codifica di applicazioni o software.


2

In un tester di test funzionali si concentra solo la funzionalità e la sub funzionalità dell'applicazione. La funzionalità dell'app dovrebbe funzionare correttamente o meno.

Nel test di test di integrazione è necessario verificare la dipendenza tra moduli o sottomoduli. L'esempio per i record dei moduli deve essere recuperato e visualizzato correttamente in un altro modulo.


2

Test di integrazione: - Al termine del test dell'unità e la risoluzione dei problemi relativi ai componenti correlati, tutti i componenti necessari devono integrarsi in un unico sistema in modo da poter eseguire un'operazione. Dopo aver combinato i componenti del sistema, per verificare se il sistema funziona correttamente o meno, questo tipo di test viene chiamato Test di integrazione.

Test funzionali: - Il test è principalmente diviso in due categorie come 1. Test funzionale 2. Test non funzionale ** Test funzionale: - Per verificare se il software funziona in base ai requisiti dell'utente o meno. ** Test non funzionali: - per verificare se il software soddisfa i criteri di qualità come stress test, test di sicurezza ecc.

Di solito, il cliente fornirà i requisiti solo per il test funzionale e per il test non funzionale, i requisiti non devono essere menzionati ma l'applicazione deve necessariamente svolgere tali attività.


2

Test d'integrazione

  • Può essere visto come i diversi moduli del sistema lavorano insieme.
  • Ci riferiamo principalmente alla funzionalità integrata dei diversi moduli, piuttosto a componenti diversi del sistema.
  • Affinché qualsiasi sistema o prodotto software funzioni in modo efficiente, ogni componente deve essere sincronizzato tra loro.
  • La maggior parte del tempo utilizzato per i test di integrazione verrà scelto come strumento di test unitario.
  • Viene utilizzato in situazioni complesse, quando il test dell'unità risulta insufficiente per testare il sistema.

    Test funzionali

  • Può essere definito come test della funzionalità individuale dei moduli.
  • Si riferisce al test del prodotto software a livello individuale, per verificarne la funzionalità.
  • I casi di test sono stati sviluppati per verificare se il software ha risultati previsti e imprevisti.
  • Questo tipo di test viene eseguito maggiormente dal punto di vista dell'utente. Vale a dire, considera le aspettative dell'utente per un tipo di input.
  • Viene anche definito test black-box e test close-box


  • 1

    Il controllo della funzionalità dell'applicazione è generalmente noto come test funzionale, in quanto il test di integrazione è quello di controllare il flusso di dati da un modulo all'altro. Facciamo un esempio dell'app di trasferimento di denaro. Supponiamo di avere una pagina in cui inseriamo tutte le credenziali e se premiamo il pulsante di trasferimento e successivamente se otteniamo successo, allora questo è un test funzionale. Ma nello stesso esempio se verifichiamo il trasferimento dell'importo, allora si tratta di test di integrazione.


    0

    Gli autori divergono molto su questo. Non credo che ci sia "l'interpretazione" corretta per questo. Dipende davvero.

    Ad esempio: la maggior parte degli sviluppatori di Rails considera unit test come test modello, test funzionali come test controller e test di integrazione come quelli che usano qualcosa come Capybara per esplorare l'applicazione dal punto di vista dell'utente finale, ovvero navigare attraverso l'HTML generato dalla pagina, usando il DOM per verificare le aspettative.

    Esistono anche test di accettazione, che a loro volta sono una documentazione "live" del sistema (di solito usano Gherkin per consentire di scrivere quelli in linguaggio naturale), descrivendo tutte le funzionalità dell'applicazione attraverso più scenari, che a loro volta sono automatizzati da uno sviluppatore. Quelli, IMHO, potrebbero anche essere considerati sia test funzionali che test di integrazione.

    Una volta compreso il concetto chiave alla base di ognuno di questi, si diventa più flessibili riguardo a ciò che è giusto o sbagliato. Quindi, sempre IMHO, un test funzionale potrebbe anche essere considerato un test di integrazione. Per il test di integrazione, a seconda del tipo di integrazione che sta esercitando, potrebbe non essere considerato un test funzionale - ma generalmente hai alcuni requisiti in mente quando scrivi un test di integrazione, quindi la maggior parte delle volte può anche essere considerato come un test funzionale.

    Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
    Licensed under cc by-sa 3.0 with attribution required.