Hauptinhalt

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Unterschiede zwischen Polyspace Bug Finder und Polyspace Code Prover

Polyspace® Bug Finder™ und Polyspace Code Prover™ erkennen Laufzeitfehler durch statische Analyse. Obwohl die Produkte eine ähnliche Benutzeroberfläche aufweisen und die der Analyse zugrunde liegenden mathematischen Verfahren teilweise identisch sind, verfolgen die beiden Produkte unterschiedliche Ziele.

Bug Finder (oder Polyspace as You Code, das eine ähnliche Einzel-Datei-Analyse wie Bug Finder durchführt) analysiert Ihren Code schnell und erkennt viele Arten von Fehlern. Code Prover überprüft jede Operation in Ihrem Code auf eine Reihe möglicher Laufzeitfehler und versucht, das Nichtvorhandensein des Fehlers für alle Ausführungspfade nachzuweisen.

Hinweis

Code Prover berücksichtigt für jeden Vorgang in Ihrem Code alle Ausführungspfade, die zu dieser Operation führen und bei denen keine vorherigen Fehler aufgetreten sind. Wenn ein Ausführungspfad vor dem Vorgang einen Fehler enthält, wird dieser von Code Prover nicht berücksichtigt. Siehe Code Prover Analysis Following Red and Orange Checks (Polyspace Code Prover).

Beispielsweise versucht eine Code Prover-Analyse für jede Division in Ihrem Code nachzuweisen, dass der Nenner nicht Null sein kann. Bug Finder führt keine derartigen umfassenden Verifikationen durch. Beispielsweise überprüft Bug Finder auch auf einen Division-durch-Null-Fehler, findet jedoch möglicherweise nicht alle Vorgänge, die diesen Fehler verursachen können.

Die beiden Produkte unterscheiden sich aufgrund ihrer unterschiedlichen Zielsetzung in Bezug auf Einrichtung, Analyse und Ergebnisauswertung. In den folgenden Abschnitten werden die wichtigsten Unterschiede zwischen einer Bug-Finder- und einer Code-Prover-Analyse (auch als Verifikation bezeichnet) hervorgehoben. Je nach Ihren Anforderungen können Sie eine oder beide Arten von Analysen an geeigneten Stellen in Ihrem Softwareentwicklungszyklus einbinden.

Übersicht über die Unterschiede zwischen Bug Finder und Code Prover

Verwenden Sie sowohl Bug Finder als auch Code Prover regelmäßig in Ihrem Entwicklungsprozess. Die Produkte bieten jeweils einzigartige Funktionen und ergänzen sich gegenseitig. Mögliche Kombinationsmöglichkeiten der Produkte finden Sie unter Workflow mithilfe von Polyspace Bug Finder und Polyspace Code Prover.

Diese Tabelle bietet einen Überblick darüber, wie sich die Produkte ergänzen. Weitere Informationen finden Sie in den folgenden Abschnitten.

FunktionBug FinderCode Prover
Anzahl der CheckerÜber 300 Checker für Fehler30 Prüfungen auf kritische Laufzeitfehler und 4 Prüfungen auf die Verwendung globaler Variablen
Analysetiefe

Schnell.

Beispiel:

  • Schnellere Analyse.

  • Einfachere Einrichtung und Überprüfung.

  • Weniger Durchläufe für sauberen Code.

  • Ergebnisse in Echtzeit.

Ausführlich.

Beispiel:

  • Alle Vorgänge eines Typs werden auf bestimmte kritische Fehler überprüft.

  • Strengere Daten- und Kontrollstrukturanalyse.

BerichterstattungskriterienMögliche FehlerNachgewiesene Resultate
Kriterien für die FehlererkennungWenig falsch-positive ResultateKeine falschen Negativbefunde

Wie Bug Finder und Code Prover sich gegenseitig ergänzen

Schnellere Analyse mit Bug Finder

Die Geschwindigkeit der Bug Finder-Analyse hängt von der Größe der Anwendung ab. Die Analysezeit des Bug Finders steigt linear mit der Größe der Anwendung. Die Verifikationsszeit des Code Prover steigt überproportional an.

Ein möglicher Workflow besteht darin, Code Prover auszuführen, um Module oder Bibliotheken auf Robustheit gegenüber bestimmten Fehlern zu analysieren, und Bug Finder in der Integrationsphase auszuführen. Die Bug Finder-Analyse großer Codebasen kann in wesentlich kürzerer Zeit durchgeführt werden und findet auch Integrationsfehler wie Declaration mismatch und Data race.

Umfassendere Verifikation mit Code Prover

Code Prover versucht, das Fehlen folgender Elemente nachzuweisen:

  • Division by Zero-Fehler bei jeder Division oder Modulo-Operation

  • Out of Bounds Array Index-Fehler bei jedem Array-Zugriff

  • Non-initialized Variable-Fehler bei jedem Lesen einer Variablen

  • Overflow-Fehler bei jedem Vorgang, der zu einem Überlauf führen kann

und so weiter.

Für jeden Vorgang gilt:

  • Wenn Code Prover das Nichtvorhandensein des Fehlers für alle Ausführungspfade nachweisen kann, wird der betreffende Vorgang grün hervorgehoben.

  • Wenn Code Prover für alle Ausführungspfade das Vorhandensein eines eindeutigen Fehlers nachweisen kann, wird der betreffende Vorgang rot hervorgehoben.

  • Wenn Code Prover weder das Nichtvorhandensein eines Fehlers noch das Vorhandensein eines eindeutigen Fehlers nachweisen kann, wird der betreffende Vorgang orange hervorgehoben. Dieser geringe Prozentsatz an orangefarbenen Markierungen weist auf Vorgänge hin, die Sie sorgfältig durch eine Sichtprüfung oder Tests überprüfen müssen. Die orangefarbenen Hervorhebung weisen häufig auf versteckte Schwachstellen hin. Beispielsweise könnte der Vorgang im aktuellen Kontext sicher sein, jedoch bei einer Wiederverwendung in einem anderen Kontext fehlschlagen.

    Sie können die in der Polyspace-Benutzeroberfläche bereitgestellten Informationen zur Diagnose der Prüfungen verwenden. Siehe Strengere Daten- und Kontrollstrukturanalyse mit Code Prover. Sie können auch Kontextinformationen bereitstellen, um unbewährten Code noch weiter zu reduzieren, beispielsweise durch externe Einschränkung der Eingabebereiche.

Bug Finder zielt nicht auf eine umfassende Analyse ab. Er versucht, so viele Fehler wie möglich zu erkennen und Fehlmeldungen zu reduzieren. Bei kritischen Softwarekomponenten reicht der Einsatz eines Tools zur Fehlersuche nicht aus, da trotz der Behebung aller in der Analyse gefundenen Fehler weiterhin Fehler während der Codeausführung auftreten können (falsche Negativbefunde). Nachdem Sie Code Prover auf Ihren Code angewendet und die gefundenen Probleme behoben haben, können Sie davon ausgehen, dass die Qualität Ihres Codes deutlich höher ist. Siehe Keine falschen Negativbefunde mit Code Prover.

Spezifischere Fehlertypen mit Bug Finder

Code Prover überprüft Laufzeitfehler, bei denen das Nichtvorhandensein des Fehlers mathematisch bewiesen werden kann. Neben der Erkennung von Fehlern, deren Nichtvorhandensein mathematisch bewiesen werden kann, erkennt Bug Finder auch andere Fehler.

Beispielsweise ist die Anweisung if(a=b) gemäß dem C-Sprachstandard semantisch korrekt, deutet jedoch häufig auf eine unbeabsichtigte Zuweisung hin. Bug Finder erkennt solche unbeabsichtigten Vorgänge. Obwohl Code Prover solche unbeabsichtigte Vorgänge nicht erkennt, kann er feststellen, ob ein unbeabsichtigter Vorgang andere Laufzeitfehler verursacht.

Beispiele für Fehler, die von Bug Finder erkannt werden, jedoch nicht von Code Prover, umfassen Fehler in Bezug auf bewährte Verfahren, Fehler in der Ressourcenverwaltung, einige Programmierfehler, Sicherheitsfehler und Fehler im objektorientierten Design von C++.

Weitere Informationen finden Sie hier:

  • Defekte: Liste der Fehler, die Bug Finder erkennen kann.

  • Run-Time Checks (Polyspace Code Prover): Liste der Laufzeitfehler, die Code Prover erkennen kann.

Einfacherer Einrichtungsprozess mit Bug Finder

Selbst wenn Ihr Code in Ihrer Kompilierungs-Toolchain erfolgreich erstellt wurde, kann er in der Kompilierungsphase einer Code Prover-Verifikation fehlschlagen. Die strenge Kompilierung in Code Prover hängt mit seiner Fähigkeit zusammen, das Fehlen bestimmter Laufzeitfehler nachzuweisen.

  • Code Prover hält sich strikt an den Standard ANSI® C99, es sei denn, Sie verwenden explizit Analyseoptionen, die Ihren Compiler emulieren.

    Um Abweichungen vom ANSI C99 Standard zuzulassen, müssen Sie die Optionen Ziel und Compiler verwenden. Wenn Sie ein Polyspace-Projekt aus Ihrem Build-System erstellen, werden die Optionen automatisch festgelegt.

  • Code Prover lässt keine Verknüpfungsfehler zu, die von gängigen Compilern zugelassen werden.

    Obwohl Ihr Compiler Verknüpfungsfehler wie beispielsweise Inkompatibilitäten in der Funktionssignatur zwischen Kompilierungseinheiten zulässt, sollten Sie diese Fehler beheben, um unerwartetes Verhalten zur Laufzeit zu vermeiden.

Weitere Informationen finden Sie unter Troubleshoot Compilation and Linking Errors (Polyspace Code Prover).

Bug Finder ist bei bestimmten Kompilierungsfehlern weniger streng. Verknüpfungsfehler, wie beispielsweise eine nicht übereinstimmende Funktionssignatur zwischen verschiedenen Kompilierungseinheiten, können eine Code Prover-Verifikation unterbrechen, jedoch nicht eine Bug Finder-Analyse. Daher können Sie eine Bug Finder-Analyse mit geringem Einrichtungsaufwand durchführen. In Bug Finder werden Verknüpfungsfehler häufig nach Abschluss der Analyse als Fehler gemeldet.

Weniger Durchläufe für sauberen Code mit Bug Finder

Um das Auftreten bestimmter Laufzeitfehler zu verhindern, befolgt Code Prover strenge Regeln, sobald ein Laufzeitfehler in einem Vorgang erkannt wird. Sobald ein Laufzeitfehler auftritt, ist der Status Ihres Programms undefiniert und Code Prover kann nicht mehr nachweisen, dass der nachfolgende Code fehlerfrei ist. Daher gilt:

  • Wenn Code Prover einen eindeutigen Fehler nachweist und ein rotes Häkchen anzeigt, wird der restliche Code im selben Block nicht überprüft.

    Ausnahmen sind Prüfungen wie Overflow, bei denen die Analyse mit dem Ergebnis des Überlaufs fortgesetzt wird, das entweder abgeschnitten oder umgebrochen wird.

  • Wenn Code Prover einen Fehler vermutet und ein orangefarbenes Häkchen anzeigt, wird der Pfad, der den Fehler enthält, aus der Überprüfung ausgeschlossen. Wenn Code Prover beispielsweise einen Fehler Division by Zero im Vorgang 1/x erkennt, kann x im nachfolgenden Vorgang x in diesem Block nicht Null sein.

  • Wenn Code Prover feststellt, dass ein Codeblock nicht erreichbar ist, und ein graues Häkchen anzeigt, werden in diesem Block keine Fehler erkannt.

Weitere Informationen finden Sie unter Code Prover Analysis Following Red and Orange Checks (Polyspace Code Prover).

Sobald Sie die roten und grauen Hervorhebungen behoben und die Verifikation erneut durchgeführt haben, können Sie weitere Probleme finden. Sie müssen die Verifikation mehrmals durchführen und jedes Mal Probleme beheben, um einen vollständig sauberen Code zu erhalten. Die Situation ist vergleichbar mit dynamischen Tests. Bei dynamischen Tests können Sie, sobald Sie einen Fehler an einer bestimmten Stelle im Code behoben haben, einen neuen Fehler im nachfolgenden Code aufdecken.

Bug Finder unterbricht nicht die gesamte Analyse in einem Block, nachdem ein Fehler in diesem Block gefunden wurde. Selbst mit Bug Finder müssen Sie möglicherweise mehrere Analysen durchführen, um vollständig fehlerfreien Code zu erhalten. Die Anzahl der erforderlichen Durchläufe ist jedoch geringer als bei Code Prover.

Ergebnisse in Echtzeit mit Bug Finder

Bug Finder zeigt einige Analyseergebnisse an, während die Analyse noch läuft. Sie müssen nicht bis zum Ende der Analyse warten, um die Ergebnisse zu überprüfen.

Code Prover zeigt die Ergebnisse erst nach Abschluss der Verifikation an. Sobald Bug Finder einen Fehler findet, kann er diesen anzeigen. Code Prover muss die Fehlerfreiheit aller Ausführungspfade nachweisen. Daher können während der Analyse keine Ergebnisse angezeigt werden.

Strengere Daten- und Kontrollstrukturanalyse mit Code Prover

Für jeden Vorgang in Ihrem Code bietet Code Prover Folgendes:

  • Tooltips zeigen den Wertebereich jeder Variablen im Vorgang an.

    Bei einem Zeiger zeigen die Tooltips die Variable, auf die der Zeiger zeigt, zusammen mit den Variablenwerten an.

  • Grafische Darstellung der Funktionsaufrufsequenz, die zu der Operation führt.

Mithilfe dieser Bereichsinformationen und des Aufrufgraphen können Sie einfach durch die Funktionsaufrufhierarchie navigieren und nachvollziehen, wie eine Variable Werte erhält, die zu einem Fehler führen. Bei einem Fehler Out of Bounds Array Index können Sie beispielsweise herausfinden, wo der Indexvariablen erstmals Werte zugewiesen werden, die zu dem Fehler führen.

Bei der Überprüfung eines Ergebnisses im Bug Finder stehen Ihnen auch zusätzliche Informationen zur Verfügung, um die Ursache eines Fehlers besser zu verstehen. Sie verfügen beispielsweise über einen Traceback, anhand dessen Bug Finder einen Fehler bis zu seiner Ursache zurückverfolgt hat. In Code Prover verfügen Sie jedoch über umfassendere Informationen, da diese Ihnen helfen, alle Ausführungspfade in Ihrem Code zu verstehen.

Datenflussanalyse in Code Prover

Kontrollstrukturanalyse in Code Prover

Weniger Fehlmeldungen mit Bug Finder

Bug Finder zielt auf möglichst wenige falsch-positive Fehlmeldungen ab, d. h. Ergebnisse, die Sie wahrscheinlich nicht beheben müssen. Standardmäßig werden Ihnen nur die Fehler angezeigt, die für Sie wahrscheinlich am relevantesten sind.

Bug Finder weist den Fehlertypen außerdem ein Attribut vom Typ Auswirkung zu, das sich nach der Kritikalität des Fehlers und der Rate der Fehlalarme richtet. Sie können Ihren Code auf nur schwerwiegende Fehler analysieren. Sie können auch einen Fehler aktivieren oder deaktivieren, den Sie nicht überprüfen möchten.

Sie können auch bestimmte Code Prover-Fehler im Zusammenhang mit der Nichtinitialisierung deaktivieren.

Keine falschen Negativbefunde mit Code Prover

Code Prover zielt auf eine umfassende Analyse ab. Die Software überprüft jeden Vorgang, der bestimmte Arten von Fehlern auslösen kann. Wenn eine Codeoperation grün ist, bedeutet dies, dass die Operation keine der vom Programm überprüften Laufzeitfehler verursachen kann. Auf diese Weise strebt die Software null falsche Negativbefunde an.

Das Ergebnis des Code Prover gilt nur, wenn Sie Ihren Code unter denselben Bedingungen ausführen, die Sie dem Code Prover über die Analyseoptionen zur Verfügung gestellt haben.

Wenn die Software das Nichtvorhandensein eines Fehlers nicht nachweisen kann, hebt sie den verdächtigen Vorgang rot oder orange hervor und fordert Sie auf, den Vorgang zu überprüfen.

Unterstützung von Codierungsregeln in Bug Finder

Bug Finder unterstützt die Überprüfung der Einhaltung externer Codierungsstandards, wie zum Beispiel:

Eine vollständige Liste der unterstützten Codierungsstandards finden Sie unter Polyspace Support for Coding Standards.

Siehe auch

Themen