2.1. Desenvolvimento Dirigido por Testes

2.1. Desenvolvimento Dirigido por Testes

Código limpo que funciona (ou “Clean code that Works”), foi para alcançar este objetivo que o TDD surgiu. Um código será tanto mais limpo quanto melhor for seu design.

Uma forma de sempre ter código limpo que funciona, é utilizar o desenvolvimento fortemente guiado por testes automatizados que são escritos antes do código. Este estilo de desenvolvimento foi chamado de Desenvolvimento Guiado por Testes ou Test-Driven Development (TDD).

TDD é uma forma disciplinada de escrever código limpo que funciona, e consiste de duas regras principais:

· Código novo só é escrito se um teste automatizado falhar;

· Todas as duplicações devem ser eliminadas.

São duas regras simples, mas que tem conseqüências complexas no comportamento individual e coletivo dos desenvolvedores. As implicações técnicas são as seguintes:

1. Desenvolvimento orgânico, onde código em execução gera o retorno necessário para a tomar as decisões que orientam o próprio desenvolvimento;

2. Cada desenvolvedor deve escrever seus testes;

3. O ambiente de desenvolvimento deve fornecer respostas rápidas para pequenas mudanças;

4. O projeto deve ter alta coesão, componentes fracamente acoplados, exatamente para permitir testar facilmente ??????????????????????????

As duas regras também implicam numa ordem para as tarefas de programação

1. Vermelho – Escreva um pequeno teste que não passa, e provavelmente até mesmo não compila na primeira vez;

2. Verde – Faça o teste passar rapidamente, cometendo qualquer pecado que seja necessário durante o processo;

3. Refatore – Torne o código mais fácil de entender e modificar. Pode-se começar eliminando todas as duplicações criadas meramente para fazer o teste passar, por exemplo.

Vermelho / verde / refatore — O mantra do TDD”.

1.1. Porque usar TDD

– Aprendizado

Quanto maior for o tempo entre a inserção de um erro no código e sua descoberta pelo desenvolvedor, maior será a probabilidade deste erro repetir-se em outros locais do sistema e menor a possibilidade de aprendizado. Por outro lado, se o erro é descoberto alguns segundos após ser introduzido, são maiores as chances do desenvolvedor corrigi-lo rapidamente, aprender com isto e passar a codificar melhor; conseqüentemente reduz-se muito as chances de problemas semelhantes repetirem-se no futuro. Para um melhor aprendizado e redução da probabilidade de propagação de erros, é fundamental que o ambiente de desenvolvimento forneça respostas rápidas para pequenas mudanças

 

– Redução dos custos e vulnerabilidades do sistema

Escrever os testes antes, da forma que prega o TDD, equivale a prevenir-se de problemas futuros. As fases de desenvolvimento e depuração ocupam a maior parte do tempo de um projeto, sendo que a depuração geralmente só é feita quando o software apresenta um ou mais erros (Bugs). O que torna a depuração muito custosa é o tempo entre a inserção do bug e o momento em que este é detectado. Quanto maior o tempo, maior o custo de depuração, porque para corrigir um problema, o desenvolvedor precisa recuperar o contexto em que este foi inserido, entender uma série de coisas relacionadas, além de descobrir o que pode estar gerando o erro. Ou seja, é preciso re-aprender sobre a funcionalidade para que se possa corrigi-la.

Devido a grande complexidade envolvida no processo de desenvolvimento de software é comum ocorrerem erros dos mais variados tipos. É impossível evitar que estes erros ocorram ao longo de um projeto, entretanto é possível fazer alguma coisa em relação à quando estes defeitos são detectados e qual o impacto que causarão no cronograma do projeto. Só isto, causa um grande impacto na velocidade de desenvolvimento e na qualidade do software.

O desenvolvimento dirigido por testes segue o caminho da prevenção. Para isso é preciso incorporar hábitos que resultem numa menor probabilidade de ocorrência de erros. Mesmo assim, é possível que erros ocorram. Neste caso, os testes fazem com que a correção do erro seja mais barata por dois motivos:

· O teste expõe o erro assim que ele entra no sistema, o que evita muita perda de tempo com depurações demoradas.

· Caso um erro seja introduzido em uma parte do sistema diferente daquela que se está trabalhando no momento, os testes expõem o local exato do erro, permitindo que este seja encontrado e corrigido muito mais rapidamente.

 

– Aumento da qualidade e produtividade

Sempre que um teste detecta uma falha rapidamente, evitam-se longas sessões de depuração que costumam tomar boa parte do tempo dos projetos. Com mais tempo disponível e melhores oportunidades de aprendizado, os desenvolvedores codificam mais rapidamente e com maior qualidade, ou seja, aumenta-se a produtividade e reduz-se a incidência de defeitos.

[BECK, 2002]
[FOWLER, 2004]
[HUNT, 2004]
[TELES, 2004]

 

\o ‘s,
ViniciusAC.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s