Se o bug tiver mais de 5 anos, é um recurso? [fechadas]


18

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.


2
Eu acho que você quer dizer "... funcionou assim por eras".
Cebola-Knight

Nunca reescreva. A menos que seu colapso sobre si mesma (você não pode adicionar mais withing quebrando as coisas) que você iria introduzir mais bugs seguida fixação quando você decide reescrever (assim como o tempo)

Se você não está perdendo clientes agora, algum dia o fará. Alguém acabará convencendo as pessoas de que o software deles é mais fácil que o seu. Agora, você provavelmente não deve resolver isso sozinho. Esta é uma mudança de cultura na sua empresa ... nada que você possa ou deva fazer sozinho.
Brad

Respostas:


14

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.


A parte do teste de regressão é verdadeira, assumindo que você realmente conhece o nível apropriado de cobertura do teste.
pemdas

por outro lado, se você codificar uma GUI, há menos dependências; os usuários evoluem mais facilmente.
Matthieu M.

@ Matthieu M .: Absolutamente. É mais fácil mudar hábitos (contanto que você invista em consertar hábitos) do que consertar (muitos) sistemas automatizados (a maioria das quais as pessoas esquecerão na sala dos fundos).
Martin York

3

algumas coisas a considerar ao decidir corrigir um bug ... de forma alguma tudo incluído.

  • É crítico (o sistema trava)? ... claramente estes são corrigidos
  • Os clientes costumam reclamar disso? Isso pode ser um bug, pois algo está quebrado no código ou pode ser um bug de requisitos, como o recurso não é fácil de usar ou eles esperam que ele funcione de maneira diferente.
  • Do ponto de vista comercial, é mais benéfico corrigir o bug ou implementar um novo recurso?
  • O bug requer alterações arquiteturais significativas ou está em uma parte do sistema que é altamente dependente de outros subsistemas? Isso pode afetar drasticamente o tempo de teste e complicar a cobertura de teste necessária para validar o bug? Se for realmente antigo, às vezes é difícil entender exatamente o que mais será afetado no sistema, modificando a seção do código do buggy.
  • Você está perdendo clientes em potencial por causa de um sistema de buggy

Perder clientes em potencial - isso é difícil para mim e até para vendas / marketing saber, mas a taxa de retenção foi alta (embora o custo da troca também seja alto). Pode-se argumentar que você dificilmente sabe se é melhor fazer A em vez de ter feito B, a menos que esteja fazendo testes A / B corretamente.
Job

1
Não tenho certeza da aplicabilidade disso, mas frequentemente (uma vez por trimestre) temos uma reunião com nossos engenheiros de vendas para discutir questões no campo que os impediram de fazer uma venda. Isso pode incluir recursos ausentes ou algo funciona mal da perspectiva da interação do usuário ... ect.
Pemdas 12/01

3

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.


2

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).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.