Domanda

Di recente ho sentito parlare di Functional Testing sopra Unit Testing.

Capisco che Unit Testing mette alla prova ciascuna delle possibilità di un dato pezzo di codice dalla sua forma più atomica. Ma per quanto riguarda Functional Testing?

Questo suona per me come solo testare se il codice funziona, ma è affidabile come Unit Testing?

Mi è stato detto c'erano due scuole di pensiero per la materia. Certains preferirebbe Unit Testing, altri test funzionale.

C'è qualche buone risorse, link, libri, alcuni riferimenti o uno di voi tutti coloro che possono spiegare e elighten il mio percorso sul tema?

Grazie!

È stato utile?

Soluzione

La risposta di Jason è corretta. Diversi tipi di test hanno scopi diversi, e possono essere stratificati per i migliori risultati (il buon design, specifiche riunioni, difetti ridotte).

  • test delle unità = unità di progettazione (con Test-Driven Development , o TDD)
  • testing di integrazione = fanno tutti i pezzi di lavorare insieme
  • test di accettazione del cliente = vuol soddisfare le esigenze del cliente
  • testing manuale = spesso copre l'interfaccia utente; tester dedicati possono trovare ciò che manca di automazione
  • test di carico = quanto bene fa il sistema esegue con quantità realistiche dei dati

Non c'è una certa sovrapposizione tra queste categorie; unit test possono specificare il comportamento, per esempio.

E ci sono altri; per più della maggior parte delle persone si preoccupano di sapere, vedere Software Testing .

Un punto la gente perdere è che i test delle unità sta testando pezzi di codice in isolamento . Buone prove di unità non ha colpito il database, per esempio. Questo ha due vantaggi:. Rende i test eseguiti velocemente, quindi si incorrerà più spesso, e ti costringe a scrivere classi debolmente accoppiati (migliore design)

Hai chiesto per le risorse; Vi consiglio di Roy Osherove libro The Art of Unit Testing, con esempi in .NET . Mentre nessun libro è perfetto, questo dà molti ottimi suggerimenti su come scrivere buoni test.

EDIT: E per le prove di scrittura contro il software esistente, niente è meglio del libro Michael Feathers' lavorando in modo efficace con il codice legacy .

Altri suggerimenti

Unit testing contro il test funzionale non è un xor, ma piuttosto un and. Unit testing è di circa il test di unità in isolamento durante il test funzionale sui test il tutto in integrazione (fare tutte le unità collabora correttamente?).

Entrambi sono componenti necessarie di buone pratiche di ingegneria del software.

Unit testing mette alla prova le vostre unità di codice (metodi, ecc) per assicurarsi che fanno quello che ci si aspetta loro di.

Test funzionale alla prova la vostra progettazione di sistema per assicurarsi che i pezzi interagiscono in modo corretto. Se si scrive un comando che prende e int e restituisce una stringa e testarlo completamente, si può essere sicuri che funziona. Ma se non si dispone di test di sistema, non può mai notare che il resto del codice pensa di poter accettare un nulla, ma non ci riesce.

Entrambi i tipi di test sono importanti.

Modifica: Per aggiungere una visione leggermente diversa da quella che gbjbaanb detto:

  • prova Unità = il mio codice funziona
  • Prova funzionale = il mio progetto funziona
  • test di integrazione = il mio codice sta usando la tua roba 3a parte correttamente (banche dati, ecc)
  • Factory Acceptance Test = il mio sistema funziona
  • Site Acceptance Test = il codice fa schifo, questo non è del tutto quello che ho chiesto!?!
  • Unità di prova =, livello granulare più basso.
  • Prova funzionale =, il livello medio modulare.
  • test di integrazione = livello di applicazione più elevato.
  • Factory Acceptance Test = vedere tutto il lavoro
  • Site Acceptance Test = vedere tutto falliscono:)

Tutto quanto sopra sono utili ma non sono mutuamente esclusive. Si dovrebbe fare la maggior parte di loro, ma la quantità di tempo che passate su ogni parte dipende dal risultato che si ottiene da loro, questo è tutto. Se il codice è troppo modulare di essere facilmente unità testata, poi spendere i vostri sforzi sui test funzionali. Se state scrivendo una libreria di piccoli componenti, trascorrere il vostro tempo su unità di testarli, e se si sta scrivendo i sistemi di controllo per i missili militari si dovrebbe assolutamente essere sito accettazione testarli (come le esplosioni, anche quando non riesce è divertente :))

Test funzionale, chiamato anche test Sistema , mira a testare l'intero sistema, e la verifica i requisiti funzionali sono soddisfatti.

Unit testing mira a testare le "unità", cioè le funzioni o metodi del sistema è costruire da in isolamento . A volte è denominato test Developer. Unit testing può essere difficile dopo il fatto, è per questo che TDD scrive il test prima del codice .

Queste sono complementare le unità possono operare indipendentemente e non quando integrati tutti insieme, o possono superare i test di unità, e non soddisfare tutti i requisiti del prodotto.

Unit Testing e prove funzionali hanno due risultati diversi.

Test delle unità di verifica che un piccolo pezzo di codice funziona come previsto. E di solito è fatto dallo sviluppatore per assicurarsi che il codice funziona correttamente. Di solito sono automatizzate da un test-struttura del sito.

Functional Testing verifica che una caratteristica funziona come previsto passando attraverso un determinato percorso attraverso il programma. Essi sono di solito eseguite da una persona sul software in modo che il programma funzionerà il loro modo si suppone che per l'utente. E, come tale, è a livello alto, e quindi verifica più unità contemporaneamente.

Penso che entrambi sono importanti. Se avete le risorse limitate, però, e devono scegliere / decidere tecniche, e penso che dipende dai prodotti che si crea, ma per quello che faccio (prodotti per il controllo automotive utilizzati dagli esseri umani attraverso alcuni pulsanti) test funzionali più importanti. Esso controlla e assicura, che, quando l'utente ottiene il prodotto, fa quello che dovrebbe fare. Questo non significa che dovremmo scegliere di unit test, ma se push-arriva-a-shove, funzionale è la più importante per assicurare una grande esperienza degli utenti e ottenere il prodotto fuori dalla porta.

Se si producono, per esempio, un motore di database (o qualche altro prodotto che non è necessariamente user-facing), test di unità può essere ciò che si dovrebbe veramente fare.

A Test Unità verifica un pezzo di codice e conferma per un programmatore che un altro pezzo di codice sta facendo quello che si suppone. In Test Driven Development, il test di unità è stato scritto prima e osservati a fallire, prima che il codice è scritto causando la prova da superare. Programmatori sono interessati a unit test. Unità di prova sono veloci da eseguire.

Un test funzionale alla prova la tua esigenza scatola nera e dimostra che un pezzo di funzionalità utente è a posto. Ad esempio, se si preme il pulsante rosso grande, la campana inizia a squillare. Il test funzionale potrebbe non essere ancora testare il codice. Forse c'è un processo meccanico che causano la campana di anello aver premuto il pulsante. I clienti sono interessati a test funzionali in quanto confermano che un processo di alto livello se si lavora in un modo che capiscano. Essi sono spesso lenti da eseguire.

C'è un posto per entrambi in maggior parte del lavoro di sviluppo.

Unit testing è lì per testare piccole unità di codice, per vedere che funzionano come previsto.

Test funzionale è lì per testare la funzionalità complessiva del sistema è come previsto.

Sono a livelli diversi ed entrambi dovrebbero essere utilizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top