Isso se refere a uma discussão em uma resposta e aos comentários desta pergunta: O que há com a aversão à documentação no setor? . A resposta alegou que "o código não pode mentir" e, portanto, deve ser o local de destino em vez da documentação. Vários comentários apontaram que "o código pode mentir". Existe verdade em ambos os lados, pelo menos em parte devido à forma como a documentação é inadequada e inadequada.
Deveríamos estar atentos ao código mentiroso, comparando-o com qualquer documentação existente? Ou geralmente é a melhor fonte para o que precisa ser feito? Se for um código ágil, é menos provável que ele mente, ou esse código não pode mentir?
documentation
thursdaysgeek
fonte
fonte
Respostas:
Nas palavras dos leigos:
Sim , você deve procurar o código da mentira e fazê-lo dizer a verdade. Mas não comparando-o com a documentação. Esse seria um método para detectar a documentação que está.
Existem várias maneiras pelas quais o código pode estar, das quais mencionarei apenas algumas:
Quanto mais curto, menos ele fica. É auto-evidente.
Quanto menos complicado o código, mais transparente ele é. Então está menos.
Os truques de sintaxe arcanos são muito comuns. Prefira algoritmos claros e passo a passo. Eles mentem menos.
Uma boa ferramenta de análise de código estático pode ajudá-lo a encontrar o código que está.
Além disso, uma boa bateria de teste automatizada força o código a dizer a verdade.
fonte
The shorter and terser the code is, the less it lies. It's self evident.
Eu dificilmente diria isso. Na minha experiência, quanto mais curto e terso o código, mais oportunidades ele tem de varrer o assunto, geralmente ocultando-o em chamadas de função enganosas.p
de uma variável que não é um ponteiro.Código não pode mentir.
O que está em código é o que seu programa está fazendo atualmente - independentemente da documentação, controle de qualidade ou do cliente. Especialmente se o seu código foi lançado e está em campo há algum tempo, esse comportamento esperado não deve ser ignorado.
O código pode certamente estar incorreto . Certamente pode ser enganoso em sua nomeação ou organização. Certamente pode ser ilegível.
Mas se você deseja a fonte da verdade para o que o seu código está fazendo , não o que ele deve fazer, não o que ele foi projetado para fazer, não o que você pensou que estava fazendo ... se você precisa saber o que está realmente fazendo, vá para o código.
fonte
Você faz várias perguntas.
Claro!
Isso nunca poderia prejudicar, embora, como mencionado em outras respostas, isso muitas vezes o levará a encontrar problemas na documentação , não no código .
É sempre a melhor fonte para o que está fazendo. A melhor fonte para o que o código deve estar fazendo pode ser (uma combinação de) coisas diferentes, sendo as principais:
Qual é a "melhor" fonte (ou combinação das mesmas) depende da sua situação.
Não sei ao certo o que você quer dizer com "código ágil", o AFAIK "ágil" geralmente se refere ao processo de codificação. Supondo que você queira dizer "código criado em um processo de programação ágil", acho que é seguro dizer que ainda pode mentir. A probabilidade de mentir, comparado ao código criado em, por exemplo, projetos no estilo cascata, é uma questão subjetiva (pessoalmente, não acho que exista uma grande conexão).
Nota de rodapé
Tudo o que precede está sob a suposição de que o código pode estar, e que este é um exemplo básico (embora pouco artificial):
Este é apenas um exemplo em que eu diria "código mente", o @ user61852 possui alguns outros (código inacessível, complexidade do código que não corresponde à complexidade do problema, má nomeação) e acho que existem muitos outros. A Wikipedia tem um resumo um tanto decente de mentiras , muitas delas podem ser encontradas código.
Observe que, se você estiver discutindo com alguém, tenha certeza de que o da outra pessoa não significa "código não pode mentir" que "código faz o que faz". Em essência, a outra pessoa aqui está definindo usando uma definição para "mentira" que é tão estreita que pode declarar a declaração "código não pode mentir" como axioma / verdade básica. Nesse caso, provavelmente é melhor concordar com seu axioma.
fonte
Você pode discutir se a palavra "mentira" é tecnicamente apropriada, mas esse código implica claramente que x às vezes será maior que 5 e às vezes não. Se você olhar para o programa completo e descobrir que essa função é sempre chamada apenas em um lugar e que x é sempre definido como 6 constante, isso é mentira.
Além disso, o compilador pode ter notado isso e substituído esse bloco de código por simplesmente
Se o doADifferentThing não for chamado em nenhum outro lugar do seu programa, ele poderá ser removido completamente do programa.
Se seu idioma suportar
assert
algum tipo, que é desativado nas compilações de produção, cadaassert
declaração é potencialmente uma mentira. Um typecast é outra afirmação que pode ser uma mentira.fonte