Imagine o seguinte cenário:
Você detectou que seu programa (ou de outra pessoa) possui um erro - uma função produz o resultado errado quando recebe uma entrada específica. Você examina o código e não consegue encontrar nada de errado: ele parece esbarrar quando recebe essa entrada.
Agora você pode fazer uma de duas coisas: você pode examinar o código mais profundamente até encontrar a causa real; ou você coloca um curativo adicionando uma if
instrução que verifica se a entrada é essa entrada específica - se for, retorne o valor esperado.
Para mim, aplicar o curativo seria completamente inaceitável. Se o código estiver se comportando de maneira inesperada nessa entrada, a qual outra entrada que você perdeu, ele reagirá estranhamente? Simplesmente não parece uma solução - você está apenas colocando o problema debaixo do tapete.
Como eu nem consideraria fazer isso, fico surpreso com a frequência com que os professores e os livros nos lembram sobre como aplicar correções de "bandagem" não é uma boa idéia. Então, isso me faz pensar: quão comuns são esses tipos de "correções"?
fonte
Tempo
É a razão número 1 na minha opinião. Embora se o problema for de base de código, talvez eu leve mais tempo para investigá-lo. Muitas vezes, minhas correções de "bandagem" envolvem ajustes de CSS ou UI. Eu escrevi CSS e JavaScript embutidos bastante desagradáveis para lidar com eles rapidamente. Voltar e consertá-lo é sempre uma opção, se você tiver tempo.
fonte
Nós os fazemos excepcionalmente.
Para correções durante o desenvolvimento, garantimos que nenhuma correção seja feita sem conhecer a causa raiz. Contudo:
Nesses casos, optamos por correções de "bandagem". Em seguida, abrimos os defeitos internos para solucionar a causa raiz. Sim, na maioria das vezes esses defeitos internos são tratados com muito baixa prioridade.
Para correções no fluxo de manutenção, garantimos que nenhuma correção seja feita sem conhecer a causa raiz. Contudo:
Nesses casos, optamos pela correção temporária de "curativo" primeiro e, quando o cliente fica satisfeito, trabalhamos na correção adequada e somente então o defeito é resolvido.
fonte
Desambiguação.
Primeiro, com relação à frequência das correções "curativas":
Segundo, meu conselho:
Se o erro ocorrer no código fonte da equipe de desenvolvimento:
Se o erro ocorrer no código fonte de outra equipe:
Se o erro ocorrer no produto de outra empresa (ou nenhuma empresa):
fonte
Depende muito da idade da base de código, eu acho. No código antigo, acho muito comum reescrever que a rotina COBOL de 20 anos não é divertida. Mesmo no código moderadamente novo que está em produção, ainda é bastante comum.
fonte
Eu diria que é muito comum.
Confira o post de Joel Spolsky: The Duct Tape Programmer
Posso dizer facilmente que quase todos os projetos que já participei tiveram que aplicar algum tipo de bandagem ou fita adesiva para cumprir os prazos e concluir uma tarefa. Não é bonito, não é limpo, mas faz o trabalho para que a empresa possa continuar funcionando e o projeto pode avançar de alguma forma.
Há uma diferença entre o mundo acadêmico e o mundo real, onde o software realmente precisa ser enviado sob restrições de tempo e negócios.
De certa forma, é colocá-lo debaixo do tapete, para adiar uma correção, até, esperançosamente, mais tarde. Infelizmente, com muita freqüência, a correção adiada nunca acontece e esse código encontra seu caminho para a produção.
fonte
É difícil dizer sem mais contexto - no seu exemplo, por que adicionar a instrução if não é a correção correta? É porque há algum outro bloco de código em algum lugar que deveria estar lidando com essa entrada?
A frequência com que as correções de bandagem são usadas depende de várias coisas, como a complexidade do código, se a pessoa mais familiarizada com o código está disponível (a pessoa responsável pela rotina COBOL de 20 anos de Craig pode ter deixado a empresa anos atrás. ) e os prazos envolvidos.
Com um prazo olhando para o seu rosto, você às vezes busca a solução mais segura, mesmo que seja apenas colocando um gesso em vez de corrigir a causa raiz. Tudo bem, desde que você não piore as coisas, mas é importante acompanhar o fato de que ainda não está correto e ainda precisa ser corrigido adequadamente.
fonte
if
declaração não está correta porque a função subjacente se falhou.Há casos em que esse tipo de correção é realmente bom e provavelmente o ideal (no que diz respeito à quantidade de tempo que leva para depurar).
Imagine um cenário em que você tenha 20 DLLs que deveriam funcionar como algum tipo de módulo para o seu executável principal, mas também exigem algumas informações do executável principal para serem executadas.
Se você quiser usar essas DLLs fora do executável principal, precisará falsificar alguns valores de retorno do executável principal porque. A.) Não existe neste contexto e B.) Você não deseja que exista neste contexto.
Dito isso, é melhor colocar algumas diretivas do compilador no seu código para garantir que você esteja executando um código completamente diferente ao falsificar os resultados e ao obter os resultados reais.
Em vez de colocar uma função
if
interna de outra pessoa, eu a{$ifdef}
contornaria - dessa maneira ninguém a confunde com algo que deveria estar lá.fonte