In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, “I don’t see the use of this; let us clear it away." To which the more intelligent type of reformer will do well to answer: "If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it."
- G.K. Chesterson
Assim como todas as outras ideias levantadas aqui, outra coisa valiosa a fazer é descobrir como e por que um bug foi introduzido. Supondo que sua equipe use o Git ou um sistema de controle de origem similar, ferramentas como git blame
ou o botão Culpa do GitHub podem ajudar nisso. Depois de identificar as linhas ou códigos inválidos que causaram o erro, use suas ferramentas de controle de origem para descobrir quando foi adicionado, por quem e como parte de uma mudança mais ampla.
Sempre que eu corrijo um bug, tento escrever no rastreador de bugs da organização uma narrativa de como eu acho que o bug veio a existir. Às vezes, é uma história boba e um pouco embaraçosa como "Parece que Bob comentou a linha 96 para fins de teste, acidentalmente a cometeu em commit 5ab314c, e ela foi mesclada porque estávamos correndo para colocar o Frobnicator implantado e não revisando coisas corretamente naquela semana. " Ainda assim, aprendendo que é bom , no ponto em que você está resolvendo o bug, porque ele garante que provavelmente não há uma boa razão para o código quebrado seja do jeito que é e deixa você consertar com mais confiança. Mas às vezes você mergulha no git blame
, e descobre que a linha de código "obviamente quebrada" que você estava prestes a mudar foi introduzida em um commit que pretende corrigir algum outro bug que você não tinha pensou, e de repente você percebe que o seu "conserto" vai causar algum dano e que você precisa fazer algo mais esperto.
É claro que, como muitas outras respostas aqui, seria bom se o desenvolvedor anterior tivesse deixado um teste que falharia se você ingenuamente reintroduzisse um bug antigo - um tipo de aviso automático de que a cerca que você está prestes a derrubar tem um propósito que você não pode ver. Mas você não pode controlar quantos testes seus desenvolvedores anteriores escreveram, porque esse é o passado; investigar o histórico do código é uma das poucas técnicas que estão disponíveis para você no momento de corrigir um bug existente para reduzir o risco de quebrar coisas.