Teste unitário não basta — uma lição que pode mudar sua forma de programar

Já aconteceu com você? Aquele momento em que, após resolver inúmeros problemas complexos com código, você se depara com um desafio aparentemente simples que te faz questionar tudo o que você achava que sabia sobre programação?

Foi exatamente isso que aconteceu com o Filipe Deschamps quando desenvolvia uma biblioteca chamada RSS Feed Emitter. A ideia era criar um sistema que monitorasse vários feeds RSS e emitisse eventos sempre que novos conteúdos fossem publicados. Assim, outros sistemas poderiam “escutar” esses eventos e realizar ações automaticamente, como atualizar sites ou disparar processamentos.

A falsa segurança dos testes unitários

Ele se dedicou intensamente aos testes unitários. Criou testes para todos os cenários imagináveis: conexão indisponível, endpoints que retornavam dados quebrados, servidores recusando conexão, formatos inválidos. Todos os testes passavam. Até que veio a hora de usar em um projeto real.

No primeiro momento de uso com um feed RSS diferente daqueles que havia testado, o sistema quebrou. Não era um bug complexo, era simplesmente um formato ligeiramente diferente que não havia sido previsto. Mas uma verdade se revelou: a cauda pela qual testes unitários, por mais completos que sejam, nunca são suficientes sozinhos.

A vida real é infinitamente mais criativa (e cruel) do que nossa capacidade de prever comportamentos em ambientes controlados.

Hoje, não importa quantos testes automatizados tenham passado ou quantas validações de CI/CD tenham sido bem-sucedidas, a recomendação do Filipe é sempre usar seu próprio software antes de qualquer cliente. Essa prática tem várias implicações:

  • Responsabilidade direta: você é pessoalmente responsável pela qualidade do que entrega;
  • Empatia com o usuário: usar sua criação te força a entender as dores e frustrações que outros usuários poderão sentir;
  • Descoberta de edge cases: nenhum conjunto de testes prevê todos os cenários do mundo real. Ao usar o software, você descobre problemas que nunca teriam aparecido nos ambientes controlados;
  • Validação de UX: testes automatizados validam funcionalidades; uso real valida a experiência.

Aplicando além do código

Essa lição transcendeu a programação e influenciou do Filipe em outros projetos, como o Tab News, uma plataforma comunitária que hoje reúne mais de 60.000 pessoas. Não basta criar ferramentas bonitas e funcionais tecnicamente. É preciso usá-las, viver na comunidade, entender como as pessoas realmente interagem com o que construímos.Este conteúdo é um corte do Diocast. Assista na íntegra ao episódio onde conversamos a fundo com o Filipe sobre o que realmente constitui um código de alta qualidade, debatendo aspectos cruciais como manutenção, legibilidade, otimização de desempenho e, é claro, o uso da inteligência artificial.