Skip to content
Latchkey

O que é uma falha determinística? Explicado

Uma falha determinística acontece em toda execução porque sua causa é fixa, está no código, na configuração ou nas entradas, e não no estado transitório do ambiente.

Falhas determinísticas são, paradoxalmente, o tipo bom. Elas são reproduzíveis, o que significa que você pode investigá-las, encontrar a causa e corrigi-la com confiança. O contraste que as define é com as falhas transitórias, que vêm e vão e são melhor tratadas com retries.

A propriedade que a define: reproduzível

Uma falha determinística se reproduz toda vez que você executa o mesmo job com as mesmas entradas. Essa consistência é exatamente o que a torna diagnosticável: você pode reproduzi-la localmente, fazer bisect e verificar uma correção. Nada relacionado ao ambiente influencia se ela acontece ou não.

Causas típicas

  • Uma assertion de teste que falha: o código genuinamente não faz o que o teste espera.
  • Um erro de compilação ou de tipo que falha de forma idêntica todas as vezes.
  • Um arquivo, dependência ou variável de ambiente ausente.
  • Uma configuração incorreta que está errada em toda execução.

Por que retries não ajudam

Fazer retry de uma falha determinística é inútil por definição: as mesmas entradas produzem a mesma falha, então uma segunda tentativa falha de forma idêntica. Pior, o retry desperdiça minutos e pode mascarar o sinal real. Falhas determinísticas devem falhar rápido e de forma visível.

Diferenciando de transitória

O melhor diagnóstico isolado é a reprodutibilidade. Se a falha recorre em toda execução, ela é determinística e precisa de uma correção. Se ela vem e vai, é transitória e um retry é apropriado. Classificar corretamente uma falha determina se você a depura ou faz retry.

A perspectiva da Latchkey

Os managed runners com autocorreção da Latchkey são conservadores por design: eles fazem retry de falhas transitórias e mecânicas para que um contratempo pontual não faça seu build falhar, mas deixam as falhas determinísticas falharem rápido, porque fazer retry de um bug real de código apenas adia a correção.

Principais conclusões

  • Uma falha determinística se reproduz em toda execução com as mesmas entradas.
  • Sua causa está no código, na configuração ou nas entradas, e não no ambiente.
  • Retries não ajudam; falhas determinísticas devem falhar rápido.
  • A reprodutibilidade é o teste-chave entre transitória e determinística.

Guias relacionados