Qual è la differenza tra test unitari e test funzionali? Un unit test può anche testare una funzione?
Qual è la differenza tra test unitari e test funzionali? Un unit test può anche testare una funzione?
Risposte:
Test unitario: test di una singola unità, ad esempio un metodo (funzione) in una classe, con tutte le dipendenze derise.
Test funzionale - Test di integrazione AKA, test di una porzione di funzionalità in un sistema. Ciò verificherà molti metodi e potrebbe interagire con dipendenze come database o servizi Web.
I test unitari dicono a uno sviluppatore che il codice sta facendo le cose bene; i test funzionali indicano a uno sviluppatore che il codice sta facendo le cose giuste .
Puoi leggere di più su Test unitari e Test funzionali
Un'analogia della vita reale ben spiegata tra test unitari e test funzionali può essere descritta come segue,
Molte volte lo sviluppo di un sistema è paragonato alla costruzione di una casa. Sebbene questa analogia non sia del tutto corretta, possiamo estenderla ai fini della comprensione della differenza tra test unitari e funzionali.
Il test unitario è analogo a un ispettore edile che visita il cantiere di una casa. Si concentra sui vari sistemi interni della casa, sulle fondamenta, sull'inquadratura, sull'impianto elettrico, sull'impianto idraulico e così via. Assicura (test) che le parti della casa funzionino correttamente e in sicurezza, cioè rispettino il codice dell'edificio.
I test funzionali in questo scenario sono analoghi al proprietario della casa che visita questo stesso cantiere. Presume che i sistemi interni si comporteranno in modo appropriato, che l'ispettore edile stia svolgendo il proprio compito. Il proprietario della casa è concentrato su come sarà vivere in questa casa. Si preoccupa di come appare la casa, le varie stanze sono di dimensioni confortevoli, la casa si adatta alle esigenze della famiglia, sono le finestre in un buon posto per prendere il sole del mattino.
Il proprietario della casa sta eseguendo test funzionali sulla casa. Ha la prospettiva dell'utente.
L'ispettore edile sta eseguendo dei test unitari sulla casa. Ha la prospettiva del costruttore.
In sintesi,
I test unitari sono scritti dal punto di vista dei programmatori . Sono realizzati per garantire che un particolare metodo (o un'unità ) di una classe esegua una serie di attività specifiche.
I test funzionali sono scritti dal punto di vista dell'utente . Garantiscono che il sistema funzioni come previsto dagli utenti.
Un test unitario verifica un'unità di comportamento indipendente . Cos'è un'unità di comportamento? È il pezzo più piccolo del sistema che può essere testato indipendentemente dall'unità. (Questa definizione è in realtà circolare, IOW non è davvero una definizione del tutto , ma sembra funzionare abbastanza bene in pratica, perché è possibile ordinare-di capire intuitivamente.)
Un test funzionale verifica una funzionalità indipendente.
Un'unità di comportamento è molto piccola: anche se non mi piace assolutamente questo stupido mantra "test unitario per metodo", dal punto di vista dimensionale è giusto. Un'unità di comportamento è qualcosa tra una parte di un metodo e forse un paio di metodi. Al massimo un oggetto, ma non più di uno.
Una funzionalità di solito comprende molti metodi e tagli su più oggetti e spesso attraverso più livelli architettonici.
Un unit test sarebbe qualcosa di simile: quando chiamo la validate_country_code()
funzione e le passo il prefisso del paese 'ZZ'
, dovrebbe tornare false
.
Un test funzionale sarebbe: quando compilo il modulo di spedizione con un codice paese di ZZ
, dovrei essere reindirizzato a una pagina di aiuto che mi permette di scegliere il mio codice paese da un menu.
I test unitari sono scritti dagli sviluppatori, per gli sviluppatori, dal punto di vista dello sviluppatore.
I test funzionali possono essere rivolti all'utente, nel qual caso sono scritti dagli sviluppatori insieme agli utenti (o forse con gli strumenti giusti e gli utenti giusti anche dagli utenti stessi), per gli utenti, dal punto di vista dell'utente. Oppure potrebbero essere rivolti agli sviluppatori (ad esempio quando descrivono alcune funzionalità interne di cui l'utente non si preoccupa), nel qual caso sono scritte da sviluppatori, per sviluppatori, ma sempre dal punto di vista dell'utente.
Nel primo caso, i test funzionali possono anche servire come test di accettazione e come codifica eseguibile dei requisiti funzionali o una specifica funzionale, nel secondo caso possono anche servire come test di integrazione.
I test unitari cambiano frequentemente, i test funzionali non dovrebbero mai cambiare in una versione principale.
TLDR:
Per rispondere alla domanda: Unit Testing è un sottotipo di Functional Testing.
Esistono due grandi gruppi: funzionale e test non funzionali . La migliore illustrazione (non esaustiva) che ho trovato è questa (fonte: www.inflectra.com ):
(1) Unit Testing: test di piccoli frammenti di codice (funzioni / metodi). Può essere considerato un test funzionale (scatola bianca).
Quando le funzioni vengono messe insieme, si crea un modulo = un pezzo autonomo, possibilmente con un'interfaccia utente che può essere testata (Test del modulo). Una volta che hai almeno due moduli separati, li incolli e poi arriva:
(2) Test di integrazione: quando metti insieme due o più pezzi di (sotto) moduli o (sotto) sistemi e vedi se giocano bene insieme.
Quindi integri il 3 ° modulo, quindi il 4 ° e il 5 ° nell'ordine che tu o il tuo team ritenga opportuno, e una volta messi insieme tutti i pezzi del puzzle, arriva
(3) Test di sistema: test SW nel suo insieme. Questo è praticamente "Test di integrazione di tutti i pezzi insieme".
Se va bene, allora arriva
(4) Test di accettazione: abbiamo realizzato ciò che il cliente ha effettivamente richiesto? Naturalmente, i test di accettazione dovrebbero essere eseguiti durante tutto il ciclo di vita , non solo nell'ultima fase, in cui ti rendi conto che il cliente voleva un'auto sportiva e hai costruito un furgone.
Functional Test
non è un termine standardizzato e ha un significato diverso per persone diverse.
"Test funzionale" non significa che stai testando una funzione (metodo) nel tuo codice. Significa, in generale, che stai testando la funzionalità del sistema - quando corro foo file.txt
dalla riga di comando, le linee file.txt
diventano invertite, forse. Al contrario, un test di una singola unità copre generalmente un singolo caso di un singolo metodo - length("hello")
dovrebbe restituire 5 e length("hi")
dovrebbe restituire 2.
Vedi anche il punto di vista di IBM sulla linea tra test unitari e test funzionali .
La distinzione di base, tuttavia, è che i test funzionali testano l'applicazione dall'esterno, dal punto di vista dell'utente. I test unitari verificano l'applicazione dall'interno, dal punto di vista del programmatore. I test funzionali dovrebbero aiutarti a creare un'applicazione con la giusta funzionalità e garantire di non romperla mai accidentalmente. I test unitari dovrebbero aiutarti a scrivere codice pulito e privo di bug.
Tratto dal libro "Python TDD" di Harry Percival
Secondo ISTQB questi due non sono comparabili. Il test funzionale non è un test di integrazione.
Il test unitario è uno dei livelli di test e il test funzionale è un tipo di test.
Fondamentalmente:
La funzione di un sistema (o componente) è "ciò che fa". Questo è in genere descritto in una specifica dei requisiti, una specifica funzionale o nei casi d'uso.
mentre
I test sui componenti, noti anche come test di unità, moduli e programmi, ricercano difetti e verificano il funzionamento di software (ad es. Moduli, programmi, oggetti, classi, ecc.) Che possono essere testati separatamente.
Secondo ISTQB il test di componenti / unità può essere funzionale o non funzionale:
I test sui componenti possono includere test di funzionalità e caratteristiche non funzionali specifiche come comportamento delle risorse (ad es. Perdite di memoria), test delle prestazioni o della robustezza, nonché test strutturali (ad es. Copertura delle decisioni).
Citazioni da Fondamenti di test del software - Certificazione ISTQB
In Rails, la cartella unità deve contenere test per i tuoi modelli, la cartella funzionale contiene test per i tuoi controller e la cartella di integrazione contiene test che coinvolgono un numero qualsiasi di controller che interagiscono. Le partite sono un modo per organizzare i dati dei test; risiedono nella cartella degli incontri. Il file test_helper.rb contiene la configurazione predefinita per i test. puoi visitare questo .
Il modo in cui ci penso è così: un test unitario stabilisce che il codice fa quello che intendevi fare (ad es. Volevi aggiungere i parametri aeb, in effetti li aggiungi e non li sottraggono), i test funzionali verificano che tutto il codice funzioni insieme per ottenere un risultato corretto, in modo che ciò che si intendeva fare il codice ottenga effettivamente il risultato giusto nel sistema.
AFAIK, i test unitari NON sono test funzionali. Lasciami spiegare con un piccolo esempio. Si desidera verificare se la funzionalità di accesso di un'app Web di posta elettronica funziona o meno, proprio come farebbe un utente. Per questo, i tuoi test funzionali dovrebbero essere così.
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!"
I nostri test funzionali dovrebbero verificare se possiamo accedere con input non validi? Per esempio. L'email non ha il simbolo @, il nome utente ha più di un punto (è consentito solo un punto), .com appare prima di @ ecc.? Generalmente no! Questo tipo di test viene inserito nei test unitari.
È possibile verificare se gli input non validi vengono rifiutati all'interno dei test unitari, come mostrato nei test seguenti.
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.
Si noti che il test funzionale 4 sta effettivamente eseguendo il test unitario 1. A volte, i test funzionali possono ripetere alcuni (non tutti) i test effettuati dai test unitari, per diversi motivi. Nel nostro esempio, utilizziamo il test funzionale 4 per verificare se un determinato messaggio di errore appare quando si immette un input non valido. Non vogliamo verificare se tutti gli input errati vengono rifiutati o meno. Questo è il compito dei test unitari.
TEST DELL'UNITÀ
Il test unitario include il test della più piccola unità di codice che di solito sono funzioni o metodi. Il test unitario viene svolto principalmente dallo sviluppatore di unità / metodo / funzione, poiché comprendono il nucleo di una funzione. L'obiettivo principale dello sviluppatore è di coprire il codice con unit test.
Ha una limitazione che alcune funzioni non possono essere testate tramite unit test. Anche dopo il completamento con successo di tutti i test unitari; non garantisce il corretto funzionamento del prodotto. La stessa funzione può essere utilizzata in alcune parti del sistema mentre il test unitario è stato scritto per un solo utilizzo.
PROVE FUNZIONALI
Si tratta di un tipo di test Black Box in cui verranno eseguiti test sugli aspetti funzionali di un prodotto senza esaminare il codice. Il test funzionale viene eseguito principalmente da un tester software dedicato. Includerà tecniche positive, negative e BVA che utilizzano dati non standardizzati per testare la funzionalità specificata del prodotto. La copertura del test viene condotta in modo migliore dai test funzionali che dai test unitari. Utilizza la GUI dell'applicazione per i test, quindi è più facile determinare di cosa è responsabile esattamente una parte specifica dell'interfaccia piuttosto che determinare di quale funzione è responsabile un codice.
molto semplicemente possiamo dire:
leggi di più qui .
Test unitario : - Il test unitario viene utilizzato in particolare per testare il componente del prodotto per componente specialmente mentre il prodotto è in fase di sviluppo. Gli strumenti Junit e Nunit ti aiuteranno anche a testare il prodotto secondo l'unità. ** Invece di risolvere i problemi dopo l'integrazione, è sempre comodo risolverlo all'inizio dello sviluppo.
Test funzionali: - Per quanto riguarda il Test ci sono due tipi principali di Test come 1. Test funzionale 2. Test non funzionale.
Il test non funzionale è un test in cui un tester verificherà che il prodotto eseguirà tutti quegli attributi di qualità che il cliente non menziona ma che tali attributi di qualità dovrebbero essere presenti. Ad esempio: -Performance, Usabilità, Sicurezza, Carico, Stress ecc. Ma nel Test funzionale : - Il cliente è già presente con i suoi requisiti e quelli sono adeguatamente documentati, Il compito dei tester è quello di verificare se la funzionalità dell'applicazione sta funzionando secondo al sistema proposto o no. A tale scopo, Tester dovrebbe verificare la funzionalità implementata con il sistema proposto.
I test unitari vengono generalmente eseguiti dagli sviluppatori. L'obiettivo di fare lo stesso è assicurarsi che il loro codice funzioni correttamente. La regola generale è quella di coprire tutti i percorsi nel codice usando unit test.
Test funzionali : questo è un buon riferimento. Spiegazione dei test funzionali