Cela fait référence à une discussion dans une réponse et aux commentaires de cette question: Quelle est l'aversion pour la documentation dans l'industrie? . La réponse affirmait que «le code ne peut pas mentir» et devrait donc être l'emplacement de référence au lieu de la documentation. Plusieurs commentaires ont souligné que "le code peut mentir". Il y a de la vérité des deux côtés, au moins en partie à cause de la mauvaise et inappropriée gestion de la documentation.
Devrions-nous être à l'affût de codes mensongers, en les comparant à toute documentation existante? Ou est-ce généralement la meilleure source pour ce qu'elle doit faire? S'il s'agit d'un code agile, est-il moins susceptible de mentir, ou ce code ne peut-il pas mentir du tout?
la source
Réponses:
Dans les mots du profane:
Oui , vous devez rechercher le code de mensonge et lui faire dire la vérité. Mais pas en le comparant à la documentation. Ce serait une méthode pour détecter la documentation qui ment.
Il y a plusieurs façons dont le code peut mentir, dont je ne mentionnerai que quelques-unes:
Plus il est court, moins il se trouve. C'est évident.
Moins le code est compliqué, plus il est transparent. Donc ça ment moins.
Les astuces de syntaxe arcanique mentent beaucoup. Préférez des algorithmes clairs et pas à pas. Ils mentent moins.
Un bon outil d'analyse de code statique peut vous aider à trouver le code qui se trouve.
Une bonne batterie de tests automatisés oblige également le code à dire la vérité.
la source
The shorter and terser the code is, the less it lies. It's self evident.
Je dirais à peine cela. D'après mon expérience, plus le code est court et concis, plus il a de possibilités de balayer sous le tapis, généralement en les cachant dans des appels de fonction trompeurs.p
d'une variable qui n'est pas un pointeur.Le code ne peut pas mentir.
Le contenu du code correspond à ce que fait actuellement votre programme, quelle que soit la documentation, le contrôle qualité ou le client. Surtout si votre code a été publié et est sur le terrain depuis un certain temps, ce comportement attendu ne doit pas être ignoré.
Le code peut certainement être incorrect . Il peut certainement être trompeur dans sa dénomination ou son organisation. Cela peut certainement être illisible.
Mais si vous voulez que la source de vérité pour ce que votre code est en train de faire , pas ce qu'il est censé faire, pas ce qu'il a été conçu pour faire, pas ce que vous pensiez qu'il était en train de faire ... si vous avez besoin de savoir ce qu'il fait réellement, allez au code.
la source
Vous posez plusieurs questions.
Bien sûr!
Cela ne pourrait jamais faire de mal, mais comme mentionné dans d'autres réponses, le plus souvent, cela vous amènera à trouver des problèmes dans la documentation , pas dans le code .
Il est toujours la meilleure source pour ce qu'elle est en train de faire. La meilleure source pour ce que le code devrait faire peut être (une combinaison de) différentes choses, les principales étant:
La «meilleure» source (ou une combinaison de ces sources) dépend de votre situation.
Je ne sais pas ce que vous entendez par "code agile", AFAIK "agile" se réfère généralement au processus de codage. Supposons que vous vouliez dire «code créé dans un processus de programmation agile», alors je pense qu'il est sûr de dire qu'il peut toujours mentir. La probabilité de mentir par rapport au code créé par exemple dans des projets de style cascade est une question subjective (personnellement, je ne pense pas qu'il y ait une grande connexion).
Note de bas de page
Tout ce qui précède repose sur l'hypothèse que le code peut mentir, et qu'il s'agit d'un exemple basique (quoique peu élaboré):
Ceci est juste un exemple où je dirais que "code ment", @ user61852 en a quelques autres (code inaccessible, complexité du code ne correspondant pas à la complexité du problème, mauvaise dénomination), et je pense qu'il y en a beaucoup plus. Wikipedia a un résumé quelque peu décent des mensonges , beaucoup d'entre eux peuvent être trouvés en code.
Notez que si vous vous disputez avec quelqu'un, assurez - vous que celui-ci ne veut pas dire par "le code ne peut mentir" que "le code fait ce qu'il fait". En substance, l'autre personne ici définit en utilisant une définition de "mensonge" qui est si étroite qu'elle peut déclarer l'énoncé "le code ne peut pas mentir" comme un axiome / vérité fondamentale. Dans ce cas, il est probablement préférable d'être d'accord avec son axiome.
la source
Vous pouvez vous demander si le mot «mensonge» est techniquement approprié, mais ce code implique très clairement que x sera parfois supérieur à 5 et parfois non. Si vous regardez le programme complet et découvrez que cette fonction n'est jamais appelée qu'à un seul endroit et que x est toujours défini sur une constante 6, alors c'est un mensonge.
De plus, le compilateur a peut-être remarqué cela et a remplacé ce bloc de code par simplement
Si doADifferentThing n'est appelé nulle part ailleurs dans votre programme, il peut être supprimé complètement du programme.
Si votre langue prend en charge un
assert
type quelconque, qui est désactivé dans les versions de production, chaqueassert
déclaration est potentiellement un mensonge. Un transtypage est une autre affirmation qui pourrait être un mensonge.la source