Permitam-me adicionar detalhes: trabalho em um local institucional com muitos codificadores, testadores, analistas de controle de qualidade, proprietários de produtos etc. e aqui está algo que me incomoda:
Conseguimos vender software ruim (embora bastante funcional) por mais de uma década. Possui muitos recursos e o produto é competitivo, mas existem alguns erros graves por aí, além de milhares de "cortes de papel" - pequenos aborrecimentos com os quais os clientes precisam se acostumar.
Dói-me olhar para algumas coisas, porque acredito firmemente que, se os computadores não ajudarem a facilitar nossas vidas, não devemos usá-las. Tenho confiança nos meus colegas - eles são inteligentes, capazes e podem melhorar as coisas quando o foco é fazer isso.
Porém, pode ser difícil arquivar bugs contra algumas funcionalidades antigas sem vê-los fechados ou esquecidos. "Funcionou assim por eras" é uma resposta típica. Além disso, quando o controle de qualidade faz regressão, eles tendem a procurar por algo que seja diferente e por algo que não parece certo. Portanto, uma correção para um problema antigo pode ser escrita como um bug, porque "foi assim antes mesmo do meu tempo".
O jovem programador em mim pensa: reescreva essa coisa louca! Como alguém que teve a oportunidade de estar perto de vendas, clientes, quero dar um benefício de dúvida a essa abordagem.
Também estou interessado em sua opinião / experiência. Tente considerar o risco, o custo-benefício e outros fatores não técnicos.
fonte
Respostas:
Eu sinto sua dor.
Mas consertar algo apenas porque é um bug não é uma razão suficientemente boa.
Você precisa garantir que sua correção não interrompa nenhum outro código (não apenas o seu, mas o código de seus clientes que usa seu código). Se você executar uma correção e isso interromper o sistema de todos os clientes, você terá alguns clientes muito descontentes.
Existem muitos exemplos famosos em que um novo código foi escrito para substituir um sistema antigo. Onde eles tiveram que adicionar explicitamente a funcionalidade de um bug no sistema antigo porque os usuários dependiam desse bug (não vou citar nomes, mas tenho certeza de que você pode pesquisá-lo no Google).
Os testes de regressão são basicamente um teste do que seus clientes esperam que aconteça. Antes de remover um teste de regressão, verifique se ele não machucará alguém (isso é quase impossível). Se você pode corrigir um bug E isso não interrompe os testes de regressão, é uma correção real.
fonte
algumas coisas a considerar ao decidir corrigir um bug ... de forma alguma tudo incluído.
fonte
Definir bug. "A especificação dita classificada por data, mas é classificada pelo valor da transação" não é necessariamente um bug no código. Pode ser uma alteração não documentada - em algum momento, em algum lugar, alguém pediu para alterar a ordem de classificação, mas as especificações, os requisitos, o manual (até botões e rótulos na interface do usuário) não foram alterados para corresponder e ninguém se importa. Se você aparecer e mudar de volta para "por data", causará caos e que você atualize a interface do usuário, as especificações, o manual etc. está basicamente desperdiçando seu tempo, com a possível exceção de um pouco da "teoria das janelas quebradas" . "
Algumas coisas são obviamente erros. Se você clicar neste botão, ele explodirá. Ou, se você clicar neste botão às segundas-feiras, ele explodirá. A menos que alguém lhe encarregue de investir tempo para entender o porquê, você pode gastar muito esforço investigando. E uma vez que você descubra o porquê, pode ser que você não possa alterá-lo, porque isso arruinaria algo que é mais importante para os usuários ou para o gerenciamento.
Se você ver "negligência" - vazamentos de memória, código que claramente precisa de algumas convenções de otimização, recuo e nomeação que não correspondam às suas - é super tentador consertá-las um dia quando você não tiver mais nada para fazer ou no seu próprio tempo . No entanto, essas "correções" atrapalham o histórico do controle de origem com pouco ou nenhum benefício, arriscando desastres como "nunca compilamos esse módulo porque o binário que estamos usando na produção foi construído a partir de um código perdido, e você o substituiu" ", e pode perturbar seriamente as pessoas cujos" erros "você está" consertando ".
Eu recomendo um cara-a-cara com seu chefe. Explique o que está incomodando você - é um estilo de codificação, coisas que com certeza devem incomodar os usuários, números imprecisos, inconsistências ou desastres esperando para acontecer? Depois peça orientação e (esta é a chave) tome-a.
fonte
Se você deseja corrigir um bug antigo, você terá que ter cuidado para não quebrar nenhuma funcionalidade existente. Se houver testes de unidade, isso é mais fácil, mas, dada a idade implícita da empresa e do software, eles não existem. Eu recomendaria revisar o livro Refatoração de Martin Fowler, porque aborda como refatorar e corrigir bugs adequadamente enquanto tenta minimizar os efeitos colaterais. Eu também recomendo garantir que a empresa esteja bem com você passando por erros antigos durante o tempo regular. Eles só podem permitir que você faça isso se fizer horas extras fora do relógio.
Além disso, se um bug se tornou um recurso, ou seja, é realmente usado pelos clientes porque fornece algo, certifique-se de fornecer um substituto adequado para quando eles desejam esse comportamento (ou apenas documente-o como um recurso em vez de um bug).
fonte