venerdì 9 dicembre 2011

Alcune definizioni - Prove Tecniche di 9

Penso che sto arrivando alla fine della mia serie di blog sulle tecniche di prova, e ci si sente come se fosse stato lungo raggio. Una delle cose che è diventato più chiaro per me è che si avvicina al test sono ancora nella loro infanzia e come tali sono una fonte precisa di contesa o discussione tra gli sviluppatori - e questa è una buona cosa. Ho il sospetto che siamo a un punto nella storia della nostra professione in cui la disciplina della scrittura dei test è solo guadagnando terreno e un giorno sarà luogo comune e insegnato, nell'ambito della programmazione elementari classes1. Blog di oggi fornisce una sintesi dei dei termini usati nel mio blog precedente di questa serie.

Unità di test

Ho coperto la definizione di uno unit test nella seconda parte di questa serie di blog, dando il punto di vista di Shane Warden, che nel suo libro The Art of Agile Development afferma che gli unit test dovrebbe essere eseguito ad un tasso di "centinaia al secondo"; Michael Piume, che nel suo libro Lavorare efficacemente con Legacy Codice afferma che uno unit test non è uno unit test se:

  1. Si parla di un database.
  2. Si comunica attraverso una rete.
  3. Tocca il file system.
  4. Devi fare cose speciali per l'ambiente (come ad esempio la modifica dei file di configurazione) per eseguirlo.

Ho anche citato Roy Osherove, che nel suo libro The Art Of Unit Testing riassume un buon test unità come: "un pezzo automatico di codice che richiama il metodo o una classe in fase di test e quindi controlla alcune ipotesi circa il comportamento logico di questo metodo o classe A unit test è quasi sempre scritto usando un framework di test unità può essere scritto in modo semplice e corre rapidamente E 'completamente automatizzato, affidabile, leggibile e mantenibile ".... test di unità può essere riassunta con il PRIMO acronimo: veloce, indipendente, ripetibili, autolegittimante e tempestiva. Quando usare i test TestsUnit unità sono il pane e il burro di test. Se impiegate Test Driven Development, TDD, poi si scrive non superano le prove prima di scrivere il vostro codice di produzione. Se non si utilizza TDD, almeno scrivere il test al tempo stesso come il tuo codice di produzione ovvero scrivere un metodo e poi scrivere le sue prove. Questa tecnica non comporta il cambiamento di paradigma che accompagna TDD, ma è molto meglio che scrivere i test dopo aver scritto tutto il codice, che è solitamente considerato noioso dagli sviluppatori. Ci dovrebbe essere un test per ogni scenario, che tradotto in inglese significa ogni percorso attraverso il tuo codice: entrambi i lati di ogni if e ogni caso di switch. In breve, ogni progetto deve avere centinaia di unit test e si dovrebbe avere la certezza che se si cambia una parte del codice allora non rompere qualcosa.
Stub
Stub sono usati per isolare un oggetto in prova dal resto del sistema. Sono oggetti che vengono iniettati nel vostro oggetto per sostituire oggetti reali in situazioni di prova. Martin Fowler definisce stub, nel suo saggio prende in giro non sono stub come: "stub forniscono risposte preconfezionate per le chiamate effettuate durante la prova, di solito non risponde affatto a nulla al di fuori ciò che è programmato per il test. Stub possono anche registrare le informazioni sulle chiamate, come ad esempio uno stub gateway di posta che ricorda i messaggi che 'inviati', o forse solo quanti messaggi ha 'inviato' " ... mentre una definizione simile, tratte da The Art of Unit Testing è : "Uno stub è un sostituto controllabile per una dipendenza esistente (o collaboratore ) nel sistema. Utilizzando stub, è possibile testare il codice senza usare la dipendenza diretta. "
Deride
Prende in giro sono oggetti sostituzione usata per imitare, o modelli, il comportamento o di ruoli di oggetti di produzione.Ciò significa in realtà controllare che un oggetto in prova chiama i metodi su un oggetto fittizio come previsto con il test di non aver se non, di conseguenza, si sta affermando sulla correttezza delle chiamate di metodo e il percorso di esecuzione attraverso il codice, piuttosto che, nel caso di uno unit test regolari, il valore di ritorno del metodo in esame.
Prove di integrazione
Test di integrazione sono l'opposto di unit test. L'idea alla base dei test di integrazione è quello di dimostrare che gli oggetti collaborare tra loro e il sistema che li circonda. Per parafrasare Michael Feathers, test di integrazione CAN :
  1. parlare con un database.
  2. comunicare attraverso una rete.
  3. toccare il file system.
  4. richiedono di fare cose speciali per l'ambiente (come ad esempio la modifica dei file di configurazione) per eseguirlo.
Roy Osherove nell'Arte degli Stati Unit Testing che un "test di integrazione significa test due o più software o più dipendenti moduli insieme come gruppo". Per me questo limita la definizione un po 'troppo, dopo tutto, durante le prove gli oggetti in un singolo modulo è possibile accedere a un database o file system, mentre per capire se i vostri oggetti possono collaborare. Nei progetti che ho precedentemente lavorato, di solito c'è stato un modulo scritto specificamente per contenere i test di integrazione. Questo perché i test di integrazione sono meno numerosi di unit test (forse con un rapporto di 1:10) e, in virtù del fatto che accedere al proprio ambiente, di solito sono sostanzialmente più lento e quindi corralling tutti i test di integrazione nel loro proprio modulo Maven significa che non c'è bisogno di essere eseguito ogni volta che si compila un modulo, accelerando la costruzione e tempi di sviluppo.
End to End test di integrazione
Ho coperto End to End test in dettaglio nel secondo blog di questa serie, così per riassumere, che può essere definito come un caso speciale di test di integrazione che il test comincia a, o appena dietro, un limite del sistema ed esegue attraverso tutti i livelli del sistema. Dove il confine del sistema, o appena dietro il confine del sistema è una questione di dibattito. In termini di applicazione Spring MVC, non c'è alcun motivo per cui fine a fine prova non dovrebbe iniziare il vostro codice di controllo ignorando il browser e servlet dispatcher. Dopo tutto, ho il sospetto che i ragazzi della Primavera hanno testato il loro codice a fondo, perché si dovrebbe perdere tempo a testarlo? . Inoltre, i test che il frontale assomiglia bollitore sa tutto di maniche 
1I spesso il sospetto che le tecniche di testing non sono effettivamente insegnato in collage e università - ma non ho prove di questo. Se ci sono accademici là fuori che mi può dire che il test unità viene insegnato, incoraggiato e parte integrante dei corsi di Laurea di Informatica allora sarei felice di sentire da loro.  



Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.