Como lidar com uma função incorreta no código de produção?


28

Recentemente, deparei com uma biblioteca Python no GitHub. A biblioteca é ótima, mas contém um erro de digitação flagrante em um nome de função. Vamos chamá-lo dummy_fuction()enquanto deveria ser dummy_function(). Essa função é definitivamente "in natura" e provavelmente usada em sistemas embarcados.

A primeira coisa que vem à mente é adicionar uma segunda versão da função com o nome correto e adicionar um aviso de descontinuação à primeira versão para a próxima versão.

Três perguntas:

  1. A abordagem acima poderia ter consequências não intencionais?
  2. Existe uma abordagem padrão para esse tipo de problema?
  3. Por quanto tempo deve ser deixado qualquer aviso de descontinuação?

11
Essa é uma situação (mesmo que não seja muito frequente) na qual uma linguagem estática é muito mais robusta que uma dinâmica: um compilador pode verificar se sua função renomeada já existe.
Giorgio

7
veja também referenciador HTTP [sic]
AakashM 2/14/14

2
Eu também apontaria o mod_speling do Apache , mas isso pode ter sido intencional.
Reponha Monica iamnotmaynard

11
@AakashM: Adoro como o artigo da Wikipedia agora usa a grafia incorreta e correta em toda a página (mesmo quando se refere ao objeto, não ao termo), com a versão incorreta da grafia sendo mais prevalente!
Martijn Pieters

Outra coisa boa sobre o http_referer- "É como quando eu fiz o campo de referência. Eu não senti nada além da tristeza por minha escolha de ortografia. Agora estou tentando corrigir a ortografia no OED, pois minha ortografia é usada vários bilhões de vezes por minuto mais que o deles ". - Phillip Hallam-Baker
Jamie Bull

Respostas:


29

Em primeiro lugar, a política depende do mantenedor.

Eu acho que sua pergunta é interessante, mas principalmente baseada em opiniões.

Na minha opinião pessoal, sua abordagem é sólida: renomeie a função e deixe a versão incorreta como um artefato obsoleto, redirecionando para a correta.

A abordagem acima poderia ter consequências não intencionais?

Poderia quebrar o código, por exemplo. se alguém também não suportasse o erro de ortografia e implementasse uma versão renomeada. Agora haverá um conflito de nomes assim que a biblioteca for atualizada.

Existe uma abordagem padrão para esse tipo de problema?

Não cometa erros de ortografia ao escrever uma biblioteca;)

Por quanto tempo deve ser deixado qualquer aviso de descontinuação?

Acredito que a descontinuação deva ser mantida até o próximo grande lançamento (quando o primeiro dígito no número da versão for aumentado).

É quando algumas quebras de compatibilidade com versões anteriores justificadas são toleráveis, e cabe aos usuários da biblioteca garantir que seu código ainda seja compilado.

Apenas certifique-se de apontar isso no changelog: pessoal, se você usou dummy_fuction, substitua-o por dummy_functiontodos os lugares e você estará pronto.

Se a biblioteca não tiver controle de versão, como pode ser - é um bom argumento iniciar o controle de versão.


11
Bom ouvir. A biblioteca é versionada para que a abordagem do controle de versão pareça boa. Na verdade, ele possui seu próprio IDE, para que a versão incorreta possa ser ocultada da ferramenta de conclusão de código, o que deve impedir que novos usuários a usem. Se eu pudesse lhe dar mais um +1 pela resposta para o segundo trimestre, eu daria!
Jamie Bull

2
Essa é a abordagem que eu já vi em outros softwares. Eu uso uma API de terceiros para um software que desenvolvo e a API deles contém um método getter que contém um erro de digitação. O problema foi corrigido renomeando o método e criando um método fictício com a ortografia antiga (incorreta) que simplesmente chama a versão correta. O método fictício não contém outra documentação além de mencionar que está obsoleto e um link para a versão correta. Esse método existe há anos , para evitar a quebra de qualquer compatibilidade com versões anteriores.
Karl Nicoll
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.