Tornando uma suite end-to-end instável determinística sem esconder falhas
Transformei uma suite end-to-end não determinística (25 a 37 falhas variando por execução) em 302 passando com zero falhas (8 skips pré-existentes deixados intocados, e o consumer rodando), sem adicionar um skip ou enfraquecer uma asserção, e, em review, provei empiricamente que três das quatro mudanças de produção propostas eram desnecessárias.
Contexto
Esta é minha evidência mais forte de rigor metodológico e de liderança técnica em code review. Qualquer um pode deixar uma suite instável verde afrouxando-a; a engenharia está em se recusar a fazer isso. As restrições que impus (nenhum skip novo, nenhuma asserção mais fraca, nenhum timeout maior) são o que forçou cada correção a ser uma causa raiz de verdade.
Isso também captura um momento do qual me orgulho: em vez de aceitar mudanças de produção que tinham sido feitas para acalmar os testes, provei empiricamente que a maioria delas não era necessária e protegi o código de produção de ser alterado para satisfazer um artefato de teste. Esse é o tipo de julgamento que quero que recrutadores vejam.
Problema
A suite end-to-end do serviço era não determinística: uma dada execução podia produzir de 25 a 37 falhas, e um conjunto diferente a cada vez. Como o resultado não era confiável, o CI não podia ser confiado. Uma execução vermelha podia significar uma regressão real ou nada, então regressões reais podiam se esconder no ruído. A suite exercitava dependências reais (um provedor de auth real, um banco de dados, um message broker local, e uma API sandbox externa), qualquer uma das quais podia contribuir para a instabilidade.
03Restrições
Decisão
Tratei isso como um problema de diagnóstico com um protocolo rigoroso.
05Trade-offs
Impacto
07Lições Aprendidas
Conhecimento de engenharia reutilizável que levo adiante disso: