TDD – O processo de automação com testes

Tempo de leitura: 5 minutos

O que é TDD?

TDD (Test-Driven Development ou Desenvolvimento Orientado a Testes) tem se tornado sem dúvidas uma prática recorrente entre bons desenvolvedores. O conceito é bem simples, os testes são desenvolvidos antes de escrevermos o código de produção.

Para que o TDD dê certo é necessário trabalhar rigorosamente com um ciclo contínuo de ações sem pular nenhuma fase.

Calma ai que o palestrinha vai te explicar um pouco melhor como é esse ciclo…

TDD                                 Maurilio (Choque de Culutra)

O ciclo de desenvolvimento é chamado de Red, Green and Refactor e é composto das seguintes fases:

1. Novo teste

Nesta fase iremos escrever o código que irá testar o resultado da nossa função, esta parte é muito importante pois é a base do nosso teste. É importante ressaltar que é necessário especificar muito bem qual a entrada e a saida do código a ser testado, se você não consegue entender o que seu código vai fazer e retornar, você não poderá fazer um teste assertivo.

Em um primeiro momento parece dificil ou no minimo estranho desenvolver um teste antes de escrever uma função, mas não é. O simples fato de escrevermos o teste antes da função nos obriga a respeitar o “Single Responsibility Principle”, um princípio fundamental do desenvolvimento orientado a objetos.

No começo não é muito intuitivo, mas com a prática aprendemos a escrever e a prever melhor os resultados de nossas funções.

tdd

2. Teste falhando

Por ainda não existir uma função o seu teste não vai funcionar (se funcionar tem algo de errado ai rsrs). Com o teste falhando temos um objetivo a alcançar, fazer o teste funcionar através da nossa funcionalidade.

3. Criar funcionalidade

Nessa fase iremos escrever o nosso código da maneira mais simples possivel. O nosso objetivo é unicamente a aprovação nos testes. Neste momento não é necessário se preocupar com as boas práticas, design patterns ou coisas do tipo, o código só deve funcionar e passar pelo teste sem quebrar outros testes.

4. Teste passando

Sinal verde! O código que você escreveu passou pelo teste e não quebrou outros testes. É muito importante garantir que o seu código além de passar pelo teste desenvolvido não está quebrando os testes que já existem.

TDD                                   Martin Riggs (Letal Weapon)

Agora vamos para a última fase.

5. Refatorar

Achou que não ia precisar mais se preocupar com padrões e boas práticas né? Achou errado!

TDD                  Rogerinho do Ingá (Choque de Cultura)

Não é porque o código já está escrito e funcionando que o trabalho acabou, agora é a hora de refatorar com a tranquilidade por já ter um teste que pode nos indicar qualquer problema na hora de refatorar.

O TDD nos obriga a escrever códigos menos acoplados e mais coesos para que se tornem mais “testáveis”.

Como conseguimos um código simples? Fazendo um Teste passar
Como conseguimos um código claro? Refatorando o código após ele passar
Como conseguimos um código seguro? Com Testes

Documentação

Creio que em todo projeto existem coisas específicas que devem ser bem documentadas, mas ao usar TDD a Suite de Testes se torna uma boa documentação pois ela descreve todos os resultados que o sistema deve entregar e em alguns casos pode até substituir uma documentação padrão que tem que ser atualizada em cada mudança do software.

Algumas estratégias para automatizar o processo de testes

Não é fácil implantar uma cultura de testes, como a palavra diz é bem cultural e tem que ser inserido no coração de todos os envolvidos no projeto. Isso é mais importante do que escolher qual a ferramenta ou tecnologia usar para fazer os testes.

Em quais testes devo focar meus esforços

Isso varia de caso para caso, não existe uma receita de bolo mas o padrão mais ideal é o que foca em testes unitários, como você pode ver na pirâmide abaixo são testes com menor custo e maior ROI.

TDD                              Pirâmide de testes

Uma coisa importante para quem vai começar a implantar testes em sistemas legados e não sabe por onde começar é: Priorize risco de negócio e cálculos.

Por exemplo um sistema bancario deve priorizar testes nas funções responsáveis por gerenciar o dinheiro.

Para ajudar a definir esses testes, tente responder às seguintes perguntas:

  • Quão importante ou quão crítico esse teste é para manter o negócio funcionando?
  • Qual é o impacto financeiro para a empresa em caso de erro?
  • Qual é a probabilidade de falha? Alta, média ou baixa?
  • Qual é o impacto no resultado final do produto ou serviço oferecido?

O que são testes unitários?

Os testes unitários procuram aferir a corretude do código, em sua menor fração. Em linguagens orientadas a objetos, essa menor parte do código pode ser um método de uma classe. Sendo assim, os testes unitários são aplicados a esses métodos, a partir da criação de classes de testes.

TDD

O que são testes de integração?

Os testes de integração têm por objetivo encontrar falhas de integração entre as unidades, e não mais em testar as funcionalidades da mesma. Nesta fase as categorias de testes aplicáveis são: testes de interface, testes de dependências entre os componentes.

O que são testes de sistema?

Consiste na realização de vários tipos de teste que visam determinar se os componentes de um sistema computacional (envolvendo outros componentes de software e/ou de hardware) se integram bem e realizam as funcionalidades que lhes foram específicadas. Nesta fase as categorias de testes aplicáveis são: testes funcionais e testes não funcionais (performance, instalação, recuperação e carga).

Conclusão

Imagine um mundo onde você pode fazer deploy em uma sexta-feira no fim do expediente por que sabe que seu sistema não vai quebrar.

TDD                                Trecho de A procura da felicidade

Implantar TDD pode ser doloroso no começo por causa da curva de aprendizado, mas dará a você, a sua equipe e ao seu produto uma vida muito mais tranquila, e isso não tem preço.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *