Por que criar testes de código?

Recentemente comecei a aprender um pouco mais sobre testes unitários pois sempre tive noção de que testar adequadamente um código é o que todo bom programador deve fazer, tanto para garantir a qualidade de um código quanto para evitar trabalho dobrado.

Quando um software é desenvolvido sem seus respectivos testes, a complexidade para lançar novas atualizações ou até mesmo corrigir bugs cresce exponencialmente à medida que ele evolui. Este comportamento ocorre devido ao fato de não existir uma clareza nos comportamentos esperados pelas classes e funções que compõem o software. Por outro lado, quando criamos testes em paralelo com o desenvolvimento de uma aplicação estamos prevendo os comportamentos esperados por ela. Seja o tipo de dado que uma função retorna, um conjunto específico de caracteres, uma faixa de valores aceitáveis ou até mesmo erros. Os testes ajudam o programador a garantir que a aplicação irá continuar funcionando da forma correta quando houver uma modificação no código fonte.

Uma prática que se tornou muito comum entre os desenvolvedores foi a utilização de uma técnica chamada TDD (Test-Driven Development). Esta técnica consiste em escrever os testes da aplicação antes mesmo de escrever qualquer linha de código da produção. Desta forma os primeiros testes da aplicação devem falhar, porém ao longo do seu desenvolvimento é esperado que 100% dos testes criados passem, garantindo um software com qualidade. Existem diversas formas de fazer testes de código, e depois que aprendi a fazer isso com minhas aplicações posso dizer que quanto mais testes melhor 😃.

Outro ponto interessantes sobre testes é o fato de poder automatizá-los. Uma ferramenta muito útil para fazer isso é o Jenkins.

Jenkins

Jenkins é uma plataforma open source para automatização de testes. Ele permite que a execução dos testes de um código seja feita a partir de diversas triggers. É possível, por exemplo, executá-los a cada commit caso o projeto esteja utilizando uma plataforma para controle de versão, como GitHub, ou então em horários específicos.

O que torna o Jenkins tão interessante é o fato de poder escolher ações após a sua execução. Como o ele trabalha com plugins, existem diversas formas de trabalhar com o código fonte. Assim que o Jenkins executa os testes e nenhum erro é encontrado é possível, por exemplo, copiar o código fonte para um servidor, executar comandos ssh em uma máquina remota ou até mesmo dar commit do proṕrio código em um branch diferente caso haja controle de versão no projeto.

Como gosto de trabalhar com Python, a melhor maneira de criar testes é utilizando a biblioteca unittest. Em outro artigo que publiquei mostrei como criar uma aplicação web com testes utilizando Flask e Python 3. Mesmo assim existem formas de testar código em qualquer linguagem, basta procurar na documentação da linguagem a parte que fala sobre unit test. 😃