Il y a une discussion en cours sur comp.lang.c ++. Modérée sur la question de savoir si les assertions, qui en C ++ n'existent que dans les versions de débogage par défaut, doivent être conservées ou non dans le code de production.
Évidemment, chaque projet est unique, donc ma question ici n'est pas tant de savoir si les affirmations doivent être conservées, mais dans quels cas c'est recommandable / pas une bonne idée.
Par assertion, je veux dire:
- Un contrôle d'exécution qui teste une condition qui, lorsqu'elle est fausse, révèle un bogue dans le logiciel.
- Un mécanisme par lequel le programme est arrêté (peut-être après un travail de nettoyage vraiment minime).
Je ne parle pas nécessairement de C ou C ++.
Ma propre opinion est que si vous êtes le programmeur, mais que vous ne possédez pas les données (ce qui est le cas avec la plupart des applications de bureau commerciales), vous devriez les garder, car une asssertion défaillante montre un bogue, et vous ne devriez pas y aller avec un bug, avec le risque de corrompre les données de l'utilisateur. Cela vous oblige à tester fortement avant de livrer, et rend les bogues plus visibles, donc plus faciles à repérer et à corriger.
Quelle est votre opinion / expérience?
À votre santé,
Carl
Voir la question associée ici
Réponses et mises à jour
Salut Graham,
Une assertion est une erreur pure et simple et doit donc être traitée comme telle. Puisqu'une erreur doit être gérée en mode version, vous n'avez pas vraiment besoin d'assertions.
C'est pourquoi je préfère le mot «bug» quand je parle d'assertions. Cela rend les choses beaucoup plus claires. Pour moi, le mot «erreur» est trop vague. Un fichier manquant est une erreur, pas un bogue, et le programme doit y remédier. Essayer de déréférencer un pointeur nul est un bogue, et le programme devrait reconnaître que quelque chose sent le mauvais fromage.
Par conséquent, vous devez tester le pointeur avec une assertion, mais la présence du fichier avec un code normal de gestion des erreurs.
Légèrement hors sujet, mais un point important dans la discussion.
En guise d'avertissement, si vos assertions pénètrent dans le débogueur lorsqu'elles échouent, pourquoi pas. Mais il y a de nombreuses raisons pour lesquelles un fichier ne pourrait pas exister qui sont complètement hors du contrôle de votre code: droits de lecture / écriture, disque plein, périphérique USB débranché, etc. Comme vous n'en avez pas le contrôle, je pense que les affirmations sont ce n'est pas la bonne façon de traiter cela.
Carl
Thomas,
Oui, j'ai Code Complete et je dois dire que je ne suis pas du tout d'accord avec ce conseil particulier.
Supposons que votre allocateur de mémoire personnalisé se trompe et remette à zéro un morceau de mémoire qui est encore utilisé par un autre objet. Il m'arrive de mettre à zéro un pointeur que cet objet déréférence régulièrement, et l'un des invariants est que ce pointeur n'est jamais nul, et vous avez quelques assertions pour vous assurer qu'il reste ainsi. Que faire si le pointeur est soudainement nul. Vous juste si () autour de lui, en espérant que cela fonctionne?
N'oubliez pas que nous parlons de code produit ici, il n'y a donc pas de rupture dans le débogueur et d'inspection de l'état local. C'est un vrai bug sur la machine de l'utilisateur.
Carl