D'après mon expérience, le schéma est le suivant:
- Le système fonctionne, souvent pendant des années
- Une erreur est signalée
- Le développeur étudie l'erreur et trouve un morceau de code qui semble complètement défectueux et déclare qu'il "n'aurait jamais pu fonctionner"
- Le bogue est corrigé et la légende du code qui n'aurait jamais pu fonctionner (mais l'a été pendant des années) s'agrandit
Soyons logique ici. Un code qui n'aurait jamais pu fonctionner… n'aurait jamais pu fonctionner . Si cela a fonctionné, la déclaration est fausse.
Donc, je vais dire qu'un bogue exactement tel que décrit (observer le code défectueux l'empêche de fonctionner) est manifestement un non-sens.
En réalité, il s’agit d’une des deux choses suivantes:
1) Le développeur n'a pas bien compris le code . Dans ce cas, le code est généralement un désordre et sa sensibilité à certaines conditions externes est importante mais non évidente (par exemple, une version ou une configuration de système d'exploitation spécifique qui régit le fonctionnement de certaines fonctions de manière mineure mais significative). Cette condition externe est modifiée (par exemple par une mise à niveau du serveur ou une modification dont on pense qu'elle n'est pas liée) et, ce faisant, provoque la rupture du code.
Le développeur examine ensuite le code et, ne comprenant pas le contexte historique ou n'ayant pas le temps de retracer toutes les dépendances et scénarios possibles, a déclaré qu'il n'aurait jamais pu fonctionner et l'a réécrit.
Dans ce cas, la chose à comprendre ici est que l’idée selon laquelle "cela n’aurait jamais pu fonctionner" est manifestement fausse (car elle l’a fait).
Cela ne veut pas dire que la réécrire est une mauvaise chose - ce n'est souvent pas le cas, bien qu'il soit agréable de savoir exactement ce qui ne va pas souvent, cela prend beaucoup de temps et que la réécriture de la section de code est souvent plus rapide et vous permet de vous assurer que vous avez corrigé les choses.
2) En fait, cela n'a jamais fonctionné, mais personne ne l'a jamais remarqué . Ceci est étonnamment commun, en particulier dans les grands systèmes. Dans ce cas, une nouvelle personne commence et commence à regarder les choses comme personne ne l’a fait auparavant, ou un processus opérationnel a été modifié, ce qui a amené un cas mineur auparavant dans le processus principal, et quelque chose qui n’a jamais vraiment fonctionné (ou qui a fonctionné certains, mais pas tous). le temps) est trouvé et rapporté.
Le développeur l'examine et déclare «cela n'aurait jamais pu fonctionner», mais les utilisateurs disent «un non-sens, nous l'utilisons depuis des années» et ils ont en quelque sorte raison mais quelque chose qu'ils considèrent comme non pertinent (et qu'ils oublient généralement de mentionner développeur trouve la condition exacte à quel point ils vont « oh oui, nous faisons que maintenant et ne pas avant ») a changé.
Ici, le développeur a raison: cela n'aurait jamais fonctionné et cela n'a jamais fonctionné.
Mais dans les deux cas, l'une des deux choses est vraie:
- L'affirmation "cela n'aurait jamais pu fonctionner" est vraie et cela n'a jamais fonctionné - les gens pensaient que c'était le cas
- Cela a fonctionné et l'affirmation "cela n'aurait jamais pu fonctionner" est fausse et se résume à un manque de compréhension (généralement raisonnable) du code et de ses dépendances.