Na minha experiência, o padrão é este:
- O sistema funciona, geralmente por anos
- Um erro é relatado
- O desenvolvedor investiga o erro e encontra um pouco de código que parece estar completamente defeituoso e declara que "nunca poderia ter funcionado"
- O bug é corrigido e a legenda do código que nunca poderia ter funcionado (mas funcionou por anos) cresce
Sejamos lógicos aqui. Código que nunca poderia ter funcionado ... nunca poderia ter funcionado . Se ele fez o trabalho, em seguida, a declaração é falsa.
Então, eu vou dizer que um bug exatamente como descrito (que é observar o código defeituoso para de funcionar) é claramente absurdo.
Na realidade, o que aconteceu é uma das duas coisas:
1) O desenvolvedor não entendeu completamente o código . Nesse caso, o código geralmente é uma bagunça e, em algum lugar, possui uma sensibilidade maior, mas não óbvia, a alguma condição externa (digamos, uma versão ou configuração específica do SO que governa como algumas funções funcionam de alguma maneira menor, mas significativa). Essa condição externa é alterada (digamos, por uma atualização ou alteração do servidor que se acredita não relacionada) e, ao fazer isso, causa a quebra do código.
O desenvolvedor então analisa o código e, não entendendo o contexto histórico ou tendo tempo para rastrear todas as dependências e cenários possíveis, declarou que nunca poderia ter funcionado e reescrito.
Nessa situação, o que se deve entender aqui é que a ideia de que "nunca poderia ter funcionado" é comprovadamente falsa (porque funcionou).
Isso não quer dizer que reescrever é uma coisa ruim - muitas vezes não é, embora seja bom saber exatamente o que estava errado muitas vezes demorado e reescrever a seção de código geralmente é mais rápida e permite que você tenha certeza de que corrigiu as coisas.
2) Na verdade, nunca funcionou, apenas ninguém jamais notou . Isso é surpreendentemente comum, principalmente em grandes sistemas. Nesse caso, alguém começa e começa a olhar as coisas da maneira que ninguém fazia antes, ou um processo de negócios muda, trazendo um caso de vantagem anteriormente menor para o processo principal e algo que nunca funcionou (ou funcionou em alguns, mas não em todos) o horário) é encontrado e relatado.
O desenvolvedor analisa e declara "nunca poderia ter funcionado", mas os usuários dizem "absurdo, estamos usando há anos" e eles estão certos, mas algo que consideram irrelevantes (e geralmente não mencionam até o O desenvolvedor encontra a condição exata em que diz "ah, sim, fazemos isso agora e não antes") mudou.
Aqui o desenvolvedor está certo - ele nunca poderia ter funcionado e nunca funcionou.
Mas, em ambos os casos, uma das duas coisas é verdadeira:
- A afirmação "nunca poderia ter funcionado" é verdadeira e nunca funcionou - as pessoas pensaram que funcionou.
- Funcionou e a afirmação "nunca poderia ter funcionado" é falsa e resulta de uma (geralmente razoável) falta de compreensão do código e de suas dependências