A Verdade Inconveniente Sobre Testes Unitários e Por Que Você Precisa Conhecer Testes de Mutação 🛠️

Nataniel Paiva
3 min readSep 1, 2023

--

Olá, pessoal! 😃 Hoje eu quero falar sobre algo que muitos desenvolvedores, inclusive eu, já enfrentaram: a relutância em escrever testes unitários. Ah, sim, eu sei o que você está pensando. “Testes unitários? De novo? Eu já tenho cobertura de código suficiente!” 🤔 Bem, prepare-se, porque eu estou prestes a desmistificar algumas ideias erradas comuns e apresentar uma ferramenta que pode mudar sua perspectiva para sempre: os testes de mutação. 🎯

A Armadilha da Cobertura de Código 📊

Vamos começar com uma confissão. Eu tinha um projeto pessoal que estava indo super bem, pelo menos era o que o SonarQube me dizia. Cobertura de código? 96%. Testes unitários? Mais de 250. Eu estava nas nuvens, certo? Errado! 😲 Quando eu decidi rodar testes de mutação usando a ferramenta Pitest, a realidade me atingiu como um balde de água fria. A eficácia dos meus testes era muito menor do que eu pensava. E aí, meu amigo, foi um divisor de águas para mim.

Veja essa imagem:

Agora veja essa com os resultados dos testes de mutação:

O Que São Testes de Mutação? 🧬

Então, o que são esses testes de mutação que estou falando? Basicamente, eles pegam seu código e fazem pequenas “mutações” nele. Depois, seus testes unitários são executados novamente. Se os testes ainda passam mesmo com o código mutado, isso é um grande sinal vermelho. 🚨 Significa que seus testes não são tão eficazes quanto você pensava. E foi exatamente isso que aconteceu comigo.

A Verdade Dura 🤯

Quando vi os resultados, fiquei chocado. Meus testes, que eu pensava serem à prova de balas, falharam em capturar essas mutações. Isso me fez perceber que a alta cobertura de código não significa nada se a qualidade dos testes for baixa. E é aí que entra a importância de escrever testes de qualidade. 🌟

Como Escrever Testes de Qualidade? ✍️

Agora, você deve estar se perguntando: “Como eu escrevo testes de qualidade?” Bem, a resposta é simples, mas não é fácil. Você precisa pensar em cenários. Você precisa pensar como um QA. Você precisa pensar em todas as possíveis falhas e sucessos que seu código pode encontrar. E, acima de tudo, você precisa se dedicar a isso. Testes não são um add-on, eles são parte integrante do seu código. 💪

Uma sugestão seria sempre rodar os testes de mutação também para pensar em mais cenários.

Considerações Práticas ⏳

Mas, claro, nem tudo são flores. Testes de mutação podem ser demorados. Então, você precisa ponderar se vale a pena incluí-los em sua pipeline de CI/CD. No meu caso, eu prefiro rodá-los localmente ou em uma pipeline de desenvolvimento separada.

Por tanto🎉

Então, aí está, pessoal! Testes de mutação foram um verdadeiro divisor de águas para mim. Eles me mostraram que eu precisava melhorar, e eu melhorei. Agora, eu os vejo como um aliado, não como um inimigo. E você? Está pronto para enfrentar a verdade inconveniente e melhorar seus testes? 🚀

Veja minha palestra no TDC sobre o assunto:

Espero que este artigo tenha sido útil e que você considere dar uma chance aos testes de mutação. Acredite em mim, você não vai se arrepender! 👏

Até a próxima! 🚀

--

--

Nataniel Paiva

Líder de Engenharia na CWI Software que ama programar e aprender novas tecnologias! Já usei Angular, Laravel, Spring Boot, React Native, Python, Go e etc...