Por que um crash simulado passou em 34 testes sem provar a expiração

Ler o original em inglês

testingcode-reviewverificationhuman-reviewclaude-code

Imagem de capa: Por que um crash simulado passou em 34 testes sem provar a expiração

Nossa fila de mensagens tinha uma brecha: uma mensagem podia ser aceita para envio, mas ainda não marcada como enviada. Se o sistema caísse no pior momento, a mesma mensagem podia sair duas vezes. Estávamos alterando o código de segurança que fica por baixo dessa fila ativa para fechar a brecha. Quando a correção está certa, ninguém percebe, e é justamente nesse tipo de mudança que “parece tudo bem” é o que menos diz.

Escrevemos os testes antes da correção, como manda o figurino. Eram 34, cobrindo novas tentativas, um interruptor manual de emergência e um crash simulado no meio do processo. Os 34 passaram. É aí que normalmente o trabalho é dado como terminado, porque uma suíte toda verde parece uma prova.

A suíte aprovada e a mudança foram para um segundo revisor independente com uma única instrução: não verifique se isso parece razoável, tente achar o que os testes aprovados deixaram de descartar. O trabalho era atacar o que tínhamos feito.

O que o revisor encontrou

O revisor achou algo que os 34 testes jamais pegariam, porque a falha estava nos próprios testes. O substituto que usamos no lugar do sistema de armazenamento real, o que simulava o crash, não se comportava como o original quando se tratava de valores que expiram depois de um tempo determinado. Um teste podia parecer totalmente convincente: crash simulado, recuperação acionada, resultado verde. Mesmo assim, ele nunca provava que um valor expiraria nas condições reais de tempo que o sistema ativo enfrentaria. A suíte respondia a uma pergunta um pouco diferente da que importava. Ler os testes com mais cuidado não revelaria isso, porque o ponto cego estava uma camada abaixo deles.

Um segundo problema por baixo do primeiro

Essa descoberta trouxe à tona outra coisa, que corrigimos direito em vez de só anotar. Uma janela de segurança precisava continuar menor que uma janela de recuperação separada. Isso era verdade por sorte, não por projeto. Transformamos isso numa verificação ativa que falha alto se deixar de valer. Antes, só um comentário lembrava alguém disso.

O que a suíte verde disse e o que não disse

Uma suíte toda verde diz que o seu código faz o que você projetou, nas situações em que você pensou em verificar. Ela não diz nada sobre as situações em que você não pensou. Também não diz nada sobre se os substitutos que simulam uma falha real se comportam como a coisa de verdade.

Receba a próxima história de IA no dia a dia

Histórias em linguagem simples sobre usar IA para facilitar o trabalho do dia a dia. Um e-mail curto quando sair uma nova, sem jargão.