DEV Community

Lucas Anselmo Moraes Da Silva
Lucas Anselmo Moraes Da Silva

Posted on

Desenvolvimento Orientado a Testes

Durante o desenvolvimento de um software, é essencial entregar um software que funcione corretamente, com qualidade e no prazo estabelecido. Para garantir estes pontos, é importante testarmos nossos softwares com o intuito de encontrar possíveis falhas. E com essas possíveis falhas encontradas, poderemos corrigir esses problemas antes de chegar ao usuário final.

Mas, testar um software corretamente não é algo tão simples como pode parecer. Por isso, existem diversas metodologias que visam testar os diferentes componentes de uma solução de software de maneira correta. Algumas destas metodologias visam testar a integração entre os componentes de um software, enquanto outras visam testar cada um dos componentes de maneira isolada.

Uma das metodologias que mais estou utilizando no desenvolvimento dos meus projetos é o TDD. No TDD, você codifica o teste antes mesmo do código existir.

O que é a sigla TDD?

TDD é uma sigla para Test Driven Development, ou Desenvolvimento Orientado a Testes.
A ideia do TDD é que você trabalhe em ciclos. Estes ciclos ocorrem na seguinte ordem:

  • Primeiro, escreva um teste unitário que inicialmente irá falhar, tendo em vista que o código ainda não foi implementado;
  • Crie o código que satisfaça esse teste, ou seja: implemente a funcionalidade em questão. Essa primeira implementação deverá satisfazer imediatamente o teste escrito no ciclo anterior;
  • Quando o código estiver implementado e o teste satisfeito, refatore o código para melhorar pontos como legibilidade. Logo após, execute o teste novamente. A nova versão do código também deverá passar sem que seja necessário modificar o teste escrito inicialmente.

Vale ressaltar que TDD não é uma forma de escrever teste: ele é uma metodologia para desenvolvimento e escrita código.

Ciclo do TDD

A representação mais clara sobre como funciona o TDD, pode ser visualizada na imagem abaixo:

Image description

Perceba a existência dos três ciclos:

  • Red: escreva um pequeno teste automatizado que, ao ser executado, irá falhar;
  • Green: implemente um código que seja suficiente para ser aprovado no teste recém-escrito;
  • Refactor: refatore o código, a fim dele ser melhorado, deixando-o mais funcional e mais limpo.

Para realizar o teste em cada funcionalidade do seu código, você sempre irá seguir estes ciclos. Estes ciclos são comumente referenciados como red-green-refactor ou red-green-blue.

A ideia é que você utilize estes ciclos para testes unitários ⇾ testes estes que visam avaliar o comportamento de classes e métodos em específico. Você irá identificar quais são os comportamentos esperados dos métodos a serem desenvolvidos. Ao invés de implementar o código inicialmente, você irá criar o código de teste ligado a essas classes e métodos que você deseja implementar.
Como esse código ainda não estará devidamente implementado, o teste irá falhar (red), para que em seguida você faça a implementação dessa funcionalidade. Com a implementação, é esperado que esse teste passe (green). No final, você pode melhorar esse código, evitando duplicidade e trechos de código desnecessários (refactor) e irá fazer o teste novamente, onde ele deve passar. Assim você terá um código funcional e já devidamente testado.

Quais os benefícios?

Existem diversos benefícios ao escrevermos os testes antes mesmo de realizar uma implementação. Um dos benefícios é que, como você vai saber o que o código precisa fazer antecipadamente, você acaba evitando escrever código demasiadamente complexo ou que não siga os pré-requisitos de negócio.

Além disso, se você for deixar para testar as funcionalidades do seu código depois, você pode acabar não realizando os testes como deveria. Isso aumenta o risco de, por exemplo, realizarmos alterações no código por conta de testes que não passaram, aumentando substancialmente a possibilidade de introduzirmos problemas com estas alterações. Escrevendo os testes na etapa inicial, pode até parecer que acabamos tendo uma tarefa a mais a ser desempenhada; porém, no fim, seu software terá menos possibilidade de falhas, além de você acabar desenvolvendo código com mais qualidade.

Ferramenta para escrita dos testes de unidade

Para as principais linguagens e bibliotecas de programação, cada uma possuem sua própria ferramenta para escrita dos cenários de teste de unidade, onde se utiliza a metodologia TDD de forma prática. Abaixo, é listado alguns exemplos:

Top comments (0)