Unter comp.lang.c ++ wird eine Diskussion darüber geführt, ob Zusicherungen, die in C ++ standardmäßig nur in Debug-Builds vorhanden sind, im Produktionscode beibehalten werden sollen oder nicht.
Natürlich ist jedes Projekt einzigartig, daher ist meine Frage hier nicht so sehr, ob Aussagen beibehalten werden sollten, aber in welchen Fällen ist dies empfehlenswert / keine gute Idee.
Mit Behauptung meine ich:
- Eine Laufzeitprüfung, die einen Zustand testet, der, wenn er falsch ist, einen Fehler in der Software aufdeckt.
- Ein Mechanismus, durch den das Programm angehalten wird (möglicherweise nach wirklich minimalen Aufräumarbeiten).
Ich spreche nicht unbedingt über C oder C ++.
Meine eigene Meinung ist, dass Sie, wenn Sie der Programmierer sind, aber die Daten nicht besitzen (was bei den meisten kommerziellen Desktop-Anwendungen der Fall ist), diese beibehalten sollten, da eine fehlerhafte Bestätigung einen Fehler anzeigt und Sie nicht gehen sollten mit einem Fehler, mit dem Risiko, die Daten des Benutzers zu beschädigen. Dies zwingt Sie dazu, vor dem Versand stark zu testen, und macht Fehler besser sichtbar, sodass Sie sie leichter erkennen und beheben können.
Was ist deine Meinung / Erfahrung?
Prost,
Carl
Siehe verwandte Frage hier
Antworten und Updates
Hey Graham,
Eine Behauptung ist schlicht und einfach ein Fehler und sollte daher wie eine behandelt werden. Da ein Fehler im Release-Modus behandelt werden soll, brauchen Sie keine Assertions.
Deshalb bevorzuge ich das Wort "Bug", wenn ich über Behauptungen spreche. Es macht die Dinge viel klarer. Für mich ist das Wort "Fehler" zu vage. Eine fehlende Datei ist ein Fehler, kein Fehler, und das Programm sollte sich damit befassen. Der Versuch, einen Nullzeiger zu dereferenzieren, ist ein Fehler, und das Programm sollte anerkennen, dass etwas nach schlechtem Käse riecht.
Daher sollten Sie den Zeiger mit einer Zusicherung testen, aber das Vorhandensein der Datei mit normalem Fehlerbehandlungscode.
Etwas abseits des Themas, aber ein wichtiger Punkt in der Diskussion.
Wenn Ihre Behauptungen als Heads-up in den Debugger einbrechen, wenn sie fehlschlagen, warum nicht? Es gibt jedoch viele Gründe, warum eine Datei nicht existieren könnte, die völlig außerhalb der Kontrolle Ihres Codes liegen: Lese- / Schreibrechte, volle Festplatte, nicht angeschlossenes USB-Gerät usw. Da Sie keine Kontrolle darüber haben, sind dies meines Erachtens Behauptungen nicht der richtige Weg, um damit umzugehen.
Carl
Thomas,
Ja, ich habe Code Complete und muss sagen, dass ich diesem speziellen Rat überhaupt nicht zustimme.
Angenommen, Ihr benutzerdefinierter Speicherzuweiser ist fehlerhaft und setzt einen Speicherblock auf Null, der noch von einem anderen Objekt verwendet wird. Ich habe zufällig einen Zeiger auf Null gesetzt, den dieses Objekt regelmäßig dereferenziert, und eine der Invarianten ist, dass dieser Zeiger niemals Null ist, und Sie haben einige Aussagen, um sicherzustellen, dass dies auch so bleibt. Was machen Sie, wenn der Zeiger plötzlich null ist? Sie nur wenn () um, in der Hoffnung, dass es funktioniert?
Denken Sie daran, wir sprechen hier über Produktcode, sodass Sie nicht in den Debugger eindringen und den lokalen Status überprüfen müssen. Dies ist ein echter Fehler auf dem Computer des Benutzers.
Carl