O que é Test Driven Development?


TDD significa Test-Driven development ou seja, é o desenvolvimento guiado por testes. Basicamente isso significa escrever um caso de teste antes de programar a real implementação. Parece estranho mas é isso mesmo, criar primeiro o teste antes de começar o desenvolvimento.

É muito comum achar que novas ideias são viagens, ou então que são muito bonitas na teoria, porém difíceis de aplicar na prática, e coisas do gênero. Por isso, antes de falar qualquer coisa sobre TDD, pense primeiro nas vantagem pois sabemos que as desvantagem acabam pesando mais na hora de decidir se utilizamos ou não tal método.

TDD nos auxilia a entregar Software com menos defeitos, porém existem outras características importantes em relação à qualidade de código, tais como: acoplamento, coesão, escalabidade, entre outras.
Então vamos pensar que as vezes devemos criar todos os problemas que a aplicação poderá saber e depois com a programação ir contornando eles.
Não é genial!?

Para ser mais sucinto, nossa missão é entregar código robusto e com alta qualidade. Então, sem mais delongas, vamos ver a seguir o porquê do TDD pode ser bastante útil.

Uma coisa importante do TDD é nunca escrever um código de produção até que exista um caso de teste falhando para ele.
Isso significa que enquanto todos os testes estiverem passando, não se deve criar ou mexer em nada do sistema. Se alguma alteração no sistema for exigida por exemplo, primeiro devemos criar um teste para provar que essa alteração não está implementada ainda e rodar todos os testes para garantir que o sistema está perfeito até o momento. Com isso teremos um teste falhando e devemos utilizar o mínimo de esforço para fazer esse teste passar e em seguida refatoramos nosso código para remover redundâncias.

O ciclo de desenvolvimento do TDD:

  1. Criar um teste e ver ele falhar;
  2. Escrever código simples suficiente para o teste passar;
  3. Refatorar para remover duplicidade;

Devemos repetir esse ciclo sempre que for escrever algum código de produção. Também é importante rodar todos os testes do sistema para garantir que o código que estamos escrevendo não impactou em nada, por isso a necessidade de testes unitários que rodem rápido para que não desmotive o desenvolvedor a trabalhar usando esse ciclo.

Também é importante manter os testes limpos e legíveis de forma que facilite a leitura quando outros desenvolvedores olharem.

Utilizando o TDD conseguimos manter um sistema simples e podemos fazer qualquer alteração com segurança porque temos certeza que se essa alteração impactar em algum lugar do sistema, os testes nos dirão.

Mas porque a maioria não utilizam esse método?

Dificuldade em começar

Apesar de uma extensa e clara documentação, iniciar o desenvolvimento orientado a testes pode ser um trabalho árduo para muitos pelo simples fato de que geralmente muitos iniciantes tentam praticá-lo em código já existente. Este definitivamente não é o caminho. A principal característica do desenvolvimento orientado a testes é que ele seja orientado a testes. Em outras palavras o código que realizará sua lógica deve ser criado somente após a criação do teste e isso torna-se algo de difícil aceitação pois ainda não se tem nada e já se faz necessário testar.

Curva de apendizado

Complementando o item anterior, este é outro motivo que faz programadores desistirem do desenvolvimento orientado a testes. Como qualquer nova tecnologia, para a pratica de TDD leva-se um bom tempo dependendo disponibilidade e principalmente da vontade do programador.

Pode ser difícil no início se adaptar a essa metodologia de trabalho, mas seguindo a regra de ouro conseguimos trabalhar de forma muito ágil e dinâmica, sempre prezando pela qualidade e simplicidade do código, então muitos utilizam ferramentas para auxiliar como por exemplo o PHPUnit mas isso é assunto para outro dia…