Che cosa sono le normali "linee funzionali di codice" per "testare le linee di codice"?

25

Sono abbastanza nuovo nell'approccio TDD e i miei primi esperimenti dicono che scrivere una riga di codice funzionale significa scrivere circa 2-3 righe di codice di test. Quindi, nel caso in cui scriverò 1000 LOC, l'intero codebase che include i test sarà qualcosa come ~ 3500 LOC.

È considerato normale? Qual è il rapporto nel codice che scrivi?

    
posta Andrey Agibalov 15.07.2012 - 12:05
fonte

6 risposte

18

1: 3 è normale con TDD.

Dalla mia esperienza, e anche da altre citazioni che ricordo.

    
risposta data 15.07.2012 - 12:22
fonte
9

Esistono variazioni basate su diversi stili e linguaggi di codifica. Tuttavia, indipendentemente dalla lingua che usi, la più grande variazione sei tu.

Robert Martin ha detto una volta:

“As the tests get more specific, the code gets more generic.”

Questo mi ha fatto pensare. Test più specifici significano più codice di test. Un codice di produzione più generico significa meno codice, quindi i rapporti test / codice dovrebbero aumentare man mano che il codice si evolve.

Ma aspetta, non va bene neanche questo. In alcuni casi particolari, ad esempio quando definisci un determinato algoritmo, puoi avere solo 6-10 righe di codice contenenti un paio di "se", un po 'e forse 2-3 ricorsioni. Posso dirti che il codice avrà probabilmente più di 100 righe di codice di test.

In un progetto reale, qualcosa di più grande di pochi algoritmi, il rapporto test / codice dovrebbe essere compreso tra 1: 1 e 2: 1. Se supera 2: 1, è un odore che tu abbia dei test che dovrebbero essere refactored o cancellati (o magari un codice che è difficile da testare). Dovresti sempre investire la stessa quantità di assistenza e refactoring nei test come nel tuo codice di produzione.

In ogni caso, la migliore risposta alla tua domanda potrebbe essere "Cyclomatic Complexity" . Maggiore è la complessità ciclomatica del tuo metodo, il test esponenzialmente più devi scrivere per coprire tutti i casi.

    
risposta data 15.07.2012 - 19:04
fonte
3

Il rapporto cambierà in base alla dimensione dei tuoi metodi. La dimensione dei tuoi metodi varierà in base allo stile di programmazione, alla lingua e al dominio problematico.

Se i tuoi metodi sono brevi, 3: 1 è ragionevole. Se i tuoi metodi sono lunghi, 3: 1 è sul lato alto.

Quindi, per rispondere alla tua domanda, dipende. : -)

    
risposta data 15.07.2012 - 17:30
fonte
2

Per applicazioni software critiche, il normale rapporto è un giorno di test per ogni 10 LoC funzionale.

E questo non conta il TDD, che non riguarda il test ma le specifiche.

    
risposta data 15.07.2012 - 21:14
fonte
1

La dimensione del mio codice di prova è circa la metà di ciò che il codice 'effettivo' è nel complesso. In caso contrario, è indicativo che i test siano troppo complessi e / o che il tuo codice sia troppo difficile da testare e / o che il tuo codice sia troppo denso / complesso.

Oppure stai semplicemente testando troppo e sprecando il tuo tempo in termini di rendimenti decrescenti.

Vedi anche "quando il test dell'unità è inappropriato o inutile? "

    
risposta data 15.07.2012 - 19:41
fonte
-1

Il mio rapporto è compreso tra 2-1 e 10-1 (codice da testare). Assicurati che il test riguardi valore / comportamento e non implementazione.

    
risposta data 06.02.2017 - 17:07
fonte

Leggi altre domande sui tag