O custo dos testes de unidade
O teste unitário é um tema recorrente para mim nestas últimas semanas; entre falar Stackoverflow e outros fóruns e os testes que eu escrevo para dois projectos em curso, Perguntei a algumas perguntas sobre o custo real dos testes de unidade.
Isto é especialmente um artigo de Thomas Brandt (Alemão: “TDD in der (a minha) Prática - desejo e realidade”) que me fez pensar seriamente. Brandt descreve em seu artigo muito bem este fato Golfo entre teoria e prática de Test Driven Development. Ponto final, Pelo contrário, ela adere aos princípios do TDD;
Devo começar por dizer que Test Driven Development, especialmente o princípio de "primeiro teste", é um pouco “sexy” desenvolver. Ele pode certamente melhorar a arquitetura de software e nos impede de fazer certas (pequenas) erros.
— tradução relativamente livre de cerca de T. Brandt
Ele considera, portanto, TDD como uma ferramenta poderosa – pelo menos de um puramente acadêmico. Mas o resultado imediato é uma dúvida;
A questão é simplesmente: a que preço?
Como mencionado, exceto T. Brandt e eu, muitas outras pessoas parecem perguntar, ea pergunta mais freqüente é a seguinte: É que o uso de testes de unidade é que ela é realmente melhor software, e que os esforços para investir são realistas?
Condensado, a questão se resume a uma simples:
Custou-me o quanto os testes de unidade?
Muitas vezes a questão envolve, que aquele que levanta acho testes de unidade são muito caros para aplicar de forma consistente. Eu me lembro de uma discussão que tive sobre o valor de uma cobertura total do ensaio além do ideal teórico. Relatado esforços para fornecer eu disse “não” no momento.
A partir de hoje, acho que todas estas perguntas são feitas simplesmente mal, porque não é saber o custo dos testes de unidade é importante, mais:
Como faço para pagar a omissão de testes de unidade?
E aqui está a minha resposta, ilustrada com um exemplo concreto;
Um dos meus projetos atuais incluem um grande número de componentes distribuídos. Descobri um erro no projecto de, que me forçou a refatorar ambas as classes. Tudo me levou cerca de 1 hora. Lançamento testes de unidade? Sobre 30 segunda. 30 segundo, eu descobri que alguns comportamentos não eram, como inicialmente previsto. Levei cerca de 20 minutos para correções. Escrevendo testes me custou cerca de 45min.
O balanço é de cerca de duas horas.
Sem testes de unidade, Eu provavelmente não iria perceber alguns dos erros imediatamente. Eu teria 1 refatoração tempo, mais de um mais ou menos determinável, certamente estender por vários dias, para corrigir os problemas passam despercebidos quando mudar. A probabilidade de que neste momento vai bem além de uma hora é relativamente alta (depurar “mão”, recriar as condições existentes em aplicações multi-threaded, etc…).
Pela minha parte, Eu acho que para calcular um tempo definido (testes com cobertura de uma parte realista do software – não 100%) mais interessante é que a navegação no escuro, tal como praticada.
Experimento!



