2009-07-30 9 views

risposta

4

Un buon rapporto test-code è quello che ti permette di sentirti sicuro nel codice che hai scritto e ti permette anche di refactoring con fiducia saprai che cosa ti interessa nel resto della tua applicazione. Ho avuto rapporti di prova che vanno da 1: 1,5 a 1: 2,5 o giù di lì, può davvero variare a seconda della complessità della vostra applicazione.

6

Code to Test Ratio è un po 'una statistica fuorviante. Un metodo molto migliore è quello di utilizzare rcov, si può facilmente utilizzare eseguendo rake spec:rcov

Mentre copertura del 100% del codice è a volte additato come un obiettivo assoluto, si esegue rapidamente nel law of diminishing returns. Personalmente tendo al 90% di copertura del codice in tutto il codice di produzione; anche se questo è principalmente arbitrario, trovo molto più facile avere un numero obiettivo da raggiungere.

+0

Sono d'accordo con questo, rcov è probabilmente meglio. Anche se può essere fuorviante, se è davvero un codice banale, la copertura può essere meno importante, ma non sempre. Questa è un'area davvero soggettiva. – nitecoder

+1

La copertura del codice non è tutto. rcov controlla solo se il codice è eseguito sotto test. Non ti dirà se non stai testando completamente i tuoi condizionali. –

+0

@railsninja Perché la copertura del codice è meno importante nel codice banale? Perché hai intenzione di fare meno errori in codice banale? Penso che una distinzione migliore sarebbe se si tratta di codice di produzione o no. – Olly

1

Varia. Il codice semplice mi aspetterei tanto codice di test quanto il codice di produzione. Il codice complicato può facilmente meritare il doppio del codice di test. Realizza lo sviluppo guidato e non dovrai preoccuparti del rapporto poiché tutto nel codice è stato guidato da un test e questo è l'importante.

3

Stiamo parlando di opinioni al momento. Un buon rapporto code-to-test è quello in cui il tuo codice è coperto nella misura in cui deve essere tale da consentire sia la fiducia in ciò che è scritto, sia la certezza che, quando si esegue il refactoring, saprai cosa si sta rompendo intorno a te.

I numeri sono buoni, ma mettere troppo materiale in essi può essere altrettanto pericoloso.

3

Il mio obiettivo non è un codice non verificato rivelato da rcov e heckle. Quando ottieni tutta la copertura che puoi ottenere con rcov, puoi eseguire il codice tramite heckle. Heckle modifica il tuo codice e ti mostra quali modifiche non sono state rilevate dai test.

rspec conosce l'heckle. Dopo aver installato la gemma heckle: "spec foo_spec.rb -H Foo". Oh, e se ottieni un errore bizzarro, installa la versione 1.2.2 di ruby2ruby invece di 1.2.4.

Ecco heckle lamentano una funzione pensavo di aver pienamente specificato:

The following mutations didn't cause test failures: 

--- original 
+++ mutation 
def model_matches?(substring) 
- s = substring.gsub(/\./, ".") 
+ s = substring.gsub(/\033!\032\002l\}\?V\010d\}\r\-\fyg,a\*jFT\003_"ga\016\020ufN\0066/, ".") 
    s = substring.gsub(/\*/, ".*") 
    s = "^#{s}$" 
    Regexp.new(s, "i").=~(@model) 
end 

--- original 
+++ mutation 
def model_matches?(substring) 
- s = substring.gsub(/\./, ".") 
+ s = substring.gsub(/\./, "\023GA3w+h-#z$?I;a\"k0n^r$\005io#l\023H1M{\034m") 
    s = substring.gsub(/\*/, ".*") 
    s = "^#{s}$" 
    Regexp.new(s, "i").=~(@model) 
end 

--- original 
+++ mutation 
def model_matches?(substring) 
- s = substring.gsub(/\./, ".") 
+ s = nil 
    s = substring.gsub(/\*/, ".*") 
    s = "^#{s}$" 
    Regexp.new(s, "i").=~(@model) 
end 

--- original 
+++ mutation 
def model_matches?(substring) 
    s = substring.gsub(/\./, ".") 
    s = substring.gsub(/\*/, ".*") 
    s = "^#{s}$" 
- Regexp.new(s, "i").=~(@model) 
+ Regexp.new(s, "v\022").=~(@model) 
end 

Non è fantastico?

Le uniche cose che ho trovato che sono veramente difficili da ottenere la copertura completa del test sono i test che coinvolgono la concorrenza, esp. condizioni di gara. Cercare di dimostrare che un mutex o una sezione critica devono essere in atto può essere difficile. A volte puoi farlo. A volte, devi solo alzare le spalle, inserire la riga di codice che non sai come testare e andare avanti.

Problemi correlati