Come fanno le persone a mantenere la loro suite di test?

17

In particolare, sono curioso dei seguenti aspetti:

  1. Come fai a sapere se i tuoi casi di test sono errati (o non aggiornati) e devono essere riparati (o scartati)? Voglio dire, anche se un caso di test è diventato non valido, potrebbe ancora passare e rimanere in silenzio, il che potrebbe farti credere erroneamente che il tuo software funzioni correttamente. Quindi, come ti rendi conto di questi problemi della tua suite di test?

  2. Come fai a sapere che la tua suite di test non è più sufficiente e che devono essere aggiunti nuovi casi di test? Immagino che questo abbia qualcosa a che fare con i cambiamenti dei requisiti, ma esiste un approccio sistematico per verificare l'adeguatezza della suite di test?

posta Ida 08.10.2012 - 07:02
fonte

2 risposte

11

Risposta breve: utilizzare strumenti noti che aiutano a mantenere la qualità dei casi di test come la seguente copertura di codice e strumenti di qualità del codice: Cobertura, PMD, Sonar, ecc. che ti aiuteranno a notare quando un componente critico del programma non è testato abbastanza Inoltre, scrivi test di integrazione, che hanno maggiori probabilità di rompere per primi ogni volta che qualcosa va storto.

Risposta lunga:

How do you know that your test cases are wrong (or out-of-date) and needed to be repaired (or discarded)? I mean, even if a test case became invalid, it might still pass and remain silent, which could let you falsely believe that your software works okay. So how do you realize such problems of your test suite?

  • Utilizzando strumenti di copertura del codice come Cobertura , sei in grado di rilevare che i casi di test per una data classe, o metodi complessi, sono non è più sufficiente Non è necessario raggiungere il 100% di copertura del codice ovunque e nella maggior parte dei casi sarà difficile da raggiungere e non necessariamente utile; ma i test per gli aspetti più critici di un programma dovrebbero essere mantenuti con un obiettivo di almeno l'80% della copertura del codice.
  • Uso di strumenti di integrazione e generazione continui , come Jenkins a cui sono molto affezionato, in combinazione con il plug-in Sonar , è possibile impostare i trigger che inviano email e altri tipi di avvisi alle persone responsabili delle ultime modifiche. Vari grafici e statistiche (Sonar utilizza anche Cobertura tra molti altri strumenti) aiutano i revisori del codice e gli sviluppatori di casi di test a concentrarsi su ciò che è critico.

How do you know that your test suite is no longer sufficient and that new test cases should be added? I guess this has something to do with the requirement changes, but is there any systematic approach to check the adequacy of test suite?

Ciò che ho scritto per la prima domanda è parte della risposta alla tua seconda domanda. Aggiungerò anche i seguenti punti qui:

  • Scrivi casi di test di integrazione (o casi "aziendali" se preferisci) oltre a casi di test. È molto probabile che questi cambi / interrompano prima perché spesso dipendono da più classi / metodi. E poiché si rompono spesso, è meno probabile che vengano dimenticati. L'unico approccio / metodologia che, dalla mia esperienza personale, aiuta a scrivere buoni test è Sviluppo Test-Driven . Soprattutto se la persona che scrive il test case NON è la stessa persona che scrive il codice per questo. Anche scrivere buoni casi di test con TDD richiede tempo, ma i risultati, almeno per me, sono stati estremamente soddisfacenti.
  • Ogni volta che viene fuori un bug, scrivi la correzione e il test che lo accompagna. Il test case dovrebbe coprire solo questo particolare bug. Dal momento che hai completamente coperto il codice che è responsabile del bug, non dovrebbe uscire di nuovo.
risposta data 08.10.2012 - 08:26
fonte
9

Non c'è davvero alcun modo per rendere sicuro i casi di test siano corretti, eccetto concentrarsi molto bene durante la loro creazione - capire il requisito, capire il codice e accertarsi che siano d'accordo. Il punto di avere una suite di test è che devi farlo solo una volta, e da quel momento puoi solo rieseguire i test e controllare che passino, mentre senza una suite di test dovresti concentrarti molto duramente sempre , cioè ogni volta che fai qualcosa per il tuo codice base. Ma il problema fondamentale di dover fare in modo che tu stia facendo la cosa giusta in primo luogo rimane - i computer semplicemente non sono abbastanza intelligenti da sollevarci da questo compito.

Pertanto, (1) se la tua suite di test è incompleta, non c'è un modo semplice per vederlo. L'analisi della copertura del codice può dimostrare che alcune linee di codice non vengono mai eseguite, cioè che la suite è carente in qualche modo, ma non quanto sia grave tale carenza, e non può mai dimostrare che sia sufficiente. Anche con una copertura del 100% del codice non si ha alcuna garanzia che tutti gli stati del sistema siano pertinenti, e la copertura dello stato completa è inammissibile per qualsiasi sistema realistico a causa del numero combinatorio di stati che potrebbero esistere. Una buona tecnica per assicurarsi che il tuo caso sia almeno corretto per controllare che la cosa che vuoi controllare sia scrivere il test, verificare che funzioni effettivamente, scrivere / modificare il codice e quindi verificare che ora passi. Da qui l'entusiasmo per lo sviluppo basato sui test: ti permette di essere abbastanza sicuro che un singolo test fa la cosa giusta, e se crei l'intera base di codice in questo modo, puoi ottenere un livello di confidenza simile anche in un sistema di grandi dimensioni.

(2) Una suite di test diventa normalmente insufficiente ogni volta che cambiano i requisiti - non devi indovinare. Se il cliente desidera modificare determinati comportamenti e i test avranno esito positivo sia prima che dopo la modifica, chiaramente non eserciteranno quella particolare relazione di input / output.

Per quanto riguarda i sistemi legacy che non hanno una copertura di test, o dove non si conosce la copertura, non c'è una prova formale, ma (consultivo dei genitori: l'opinione personale segue!) parlando per esperienza è schiacciante che i test sono non adeguati. Quando il test viene visto come un'attività facoltativa, facoltativa, che migliora la qualità, ma non è realmente necessaria, tende ad essere incompleta e non sistematica perché l'incentivo per assicurarsi che i test tengano aggiornato con il codice base non è ci sono.

    
risposta data 08.10.2012 - 08:35
fonte

Leggi altre domande sui tag