Udgifter til unit test
Test af enheder er et tilbagevendende tema for mig de sidste uger; mellem at tale om StackOverflow og andre fora og de forsøg, som jeg skriver for to igangværende projekter, Jeg spurgte et par spørgsmål om de faktiske omkostninger ved unit test.
Dette er især en artikel af Thomas Brandt (Tysk: “TDD in der (min) Praksis - ønske og virkelighed”) der fik mig til at tænke alvorligt. Brandt beskriver i sin artikel ganske godt faktisk denne kløft mellem teori og praksis af Test Driven Development. Blankt, Snarere er det overholder principperne om TDD;
Jeg må først sige, at Test Driven Development, især princippet om "første test", er en temmelig “sexet” udvikle. Det kan helt sikkert forbedre software-arkitektur og forhindrer os i at gøre visse (små) fejl.
— Relativt fri oversættelse af om T. Brandt
Han mener derfor, TDD som et stærkt værktøj – i hvert fald fra en rent akademisk. Men det umiddelbare resultat er en tvivl;
Spørgsmålet er ganske enkelt: til hvilken pris?
Som nævnt, undtagen T. Brandt og jeg, mange andre mennesker synes at spørge, og på de oftest stillede spørgsmål er som følger: Er, at anvendelse af unit test er hun virkelig bedre software, og er, at indsatsen for at investere er de realistiske?
Kondenseret, Spørgsmålet kan koges ned til en simpel:
Det kostede mig, hvor meget de unit test?
Ofte spørgsmålet involverer, at han, der rejser synes unit test er for dyrt at anvende konsekvent. Jeg husker en diskussion jeg havde om værdien af et samlet test dækning ud over det teoretiske ideal. Indberettet bestræbelser på at give sagde jeg “ikke” på det tidspunkt.
Som i dag jeg tror, at alle disse spørgsmål bliver spurgt simpelthen ondt, fordi det ikke er kender omkostningerne ved test af enheder er vigtig, mere:
Hvordan betaler jeg Udeladelsen af unit test?
Og her er mit svar, illustreret ved hjælp af et konkret eksempel;
En af mine igangværende projekter omfatter en lang række af distribuerede komponenter. Jeg opdagede en fejl i forslaget, som tvang mig til at refactor begge klasser. Alle tog mig om 1 time. Lancering unit test? Om 30 sekund. 30 sekund, jeg opdagede, at nogle former for adfærd var ikke som oprindelig planlagt. Det tog mig omkring 20 minutter for korrektioner. Skrivning test koster mig omkring 45min.
Balancen er omkring to timer.
Uden unit test, Jeg ville sikkert ikke mærke nogle af de fejl omgående. Jeg ville have haft 1 tid refactoring, over en mere eller mindre kan opgøres, sikkert spredt over flere dage, at løse de problemer gå ubemærket hen, når du skifter. Sandsynligheden for, at denne gang går langt ud over en time er forholdsvis høj (debug “hånd”, genskabe betingelserne i multi-threaded applikationer mv…).
For mit vedkommende, Jeg synes, at for at beregne et bestemt tidspunkt (der prøver, der dækker en realistisk del af softwaren – ikke 100%) mere interessant er, at sejlads i mørke, som det praktiseres.
Eksperiment!



