Durante o desenvolvimento de um software, é essencial aos desenvolvedores entregarem um software que funcione corretamente, com qualidade e no prazo. Para garantir estes pontos, é importante testarmos nossos softwares com o intuito de encontrar possíveis falhas. Dessa maneira, poderemos corrigir possíveis 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 auxiliam a aplicar testes em nosso código de maneira mais granular é o TDD, que tem ficado cada vez mais popular. No TDD, você codifica o teste antes mesmo do código existir.
O que vem a ser 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 que foi 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
Os ciclos do TDD podem ser melhor visualizados na imagem abaixo:
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 de 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.
Para facilitar ainda mais, existem diversas ferramentas que nos fazem ganhar ainda mais tempo. Alguns exemplos para diferentes linguagens são:
- .NET - NUnit
- PHP - PHPUnit
- Node ou Javascript - Jasmine
- Java - JUnit
- Python - PyUnit
Escrito por: Marylene Guedes
Gostou desse conteúdo? Deixe seu comentário e nos acompanhe em nossas redes sociais para mais dicas.
Até a próxima!