Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Statische Analyse und dynamische Analyse

Von Parasoft

1. März 2012

3  min lesen

Von Boguslaw Czwartkowski, Parasoft Professional Services Manager

Statische Codeanalyse ist ein weit gefasster Begriff, der verschiedene Arten von Analysen beschreibt:

  • Statische Code-Analyse (auch bekannt als musterbasierte statische Analyse): Diese Art der statischen Analyse sucht nach Codemustern, die gegen definierte Codierungsregeln verstoßen. Es stellt nicht nur sicher, dass der Code die einheitlichen Erwartungen für die Einhaltung gesetzlicher Vorschriften oder interne Initiativen erfüllt, sondern hilft Teams auch dabei, Fehler wie Ressourcenlecks, Leistungs- und Sicherheitsprobleme, logische Fehler und API-Missbrauch zu vermeiden.
  • Durchflussbasierte statische Analyse: Diese Art der statischen Analyse beinhaltet das Finden und Analysieren der verschiedenen Pfade, die durch den Code genommen werden können, sowohl durch „Steuerung“ (dh die Reihenfolge, in der Zeilen ausgeführt werden können) als auch durch Daten (dh die Sequenzen, in denen eine Variable oder ähnliche Entitäten können erstellt, geändert, verwendet und zerstört werden). Dies kann Probleme aufdecken, die zu kritischen Defekten führen, wie z. B. Speicherbeschädigungen (Pufferüberschreibungen), Speicherzugriffsverletzungen, Nullzeiger-Dereferenzierungen, Race-Bedingungen oder Deadlocks. Es kann auch Sicherheitsprobleme erkennen, indem es Pfade aufzeigt, die sicherheitskritischen Code umgehen (z. B. Code, der Authentifizierung oder Verschlüsselung durchführt).
  • Metrikanalyse: Dies beinhaltet das Messen und Visualisieren verschiedener Aspekte des Codes. Es kann helfen, vorhandene Fehler zu erkennen, warnt jedoch häufiger vor potenziellen Schwierigkeiten bei der Verhinderung und Erkennung zukünftiger Fehler, wenn der Code beibehalten wird. Dies geschieht durch Auffinden von Komplexität und Unhandlichkeit wie zu großen Komponenten, übermäßiger Verschachtelung von Schleifen, zu langen Reihen von Entscheidungen und verschlungenen Abhängigkeiten zwischen Komponenten.

Warum statische Code-Analyse so wertvoll ist

Allen diesen Arten der statischen Analyse ist gemeinsam, dass sie den Quellcode scannen (dh von einem Programm untersuchen lassen). Dies ist eine sehr schnelle und einfache Möglichkeit, kritische Fehler aufzudecken. Es erreicht eine 100%ige Abdeckung und seine Ergebnisse sind zu 100% objektiv. Es ist fast unmöglich, dagegen zu argumentieren, es ständig zu tun.

Jenseits des Bereichs der statischen Analyse

Statisches Scannen Bietet Informationen zur Vorhersage, was passieren kann, wenn Code integriert und ausgeführt wird. Es erkennt Fehler basierend auf dem, was das Tool als Fehler betrachtet (normalerweise kann dies an Ihre Vorlieben und Prioritäten angepasst werden). Es kann Ihnen jedoch nicht sagen, wann das zu testende oder in Produktion befindliche System NICHT das tut, was von ihm erwartet wird - oder etwas, von dem niemand erwartet hat, dass es es tun würde.

Die Herausforderung besteht hier darin, das unerwartete Verhalten zu beobachten. Beispielsweise kann eine Transaktion für einen Benutzer (oder Tester oder Testausführungstool) scheinbar korrekt fortgesetzt werden, während eine Komponente tatsächlich eine nicht behandelte Ausnahme ausgelöst und diese nicht korrekt verarbeitet hat. Ein Steuerungssystem kann drei Tage lang im Test schnell und korrekt reagieren, aber am vierten Tag in der Produktion Speicherverluste aufweisen und auf einen Absturz zusteuern. Das Beheben aller Fehler, die mit einem statischen Codeanalysetool erkannt wurden, bietet keine Sicherheit gegen andere Fehler, die solche Fehler verursachen.

Aus diesem Grund ist es wichtig, die Definition von Fehler auch nach der Integration auf internes und externes Verhalten anzuwenden. Der interne Fehler muss erkannt werden, bevor er sich extern manifestiert.

Dynamische Analyse - Laufzeitfehlererkennung

Bei Parasoft bezeichnen wir diese Aktivität als Laufzeitfehlererkennung, eine Form der dynamischen Analyse. Hier verschwimmen die Unterscheidungen zwischen den Testtypen. Dynamische Anwendungssicherheitstests ist eine analytische Prüfung, da beabsichtigt ist, den Prüfling zu untersuchen, anstatt ihn auszuüben. Es ist ein White-Box-Test, bei dem wir eher internes als externes Verhalten untersuchen. Der zu testende Code muss jedoch ausgeführt werden. Dazu werden dieselben Black-Box-Tests ausgeführt, die für dynamische Tests verwendet wurden.

Laufzeitfehlererkennung erkennt und meldet einen internen Fehler in dem Moment, in dem er auftritt, sodass es für den Tester einfach ist, ihn genau mit Testaktionen für die Meldung von Vorfällen zu korrelieren. Wie eine gute statische Analyse liefert sie vollständige technische Details, damit der Entwickler den zugrunde liegenden Fehler isolieren und beheben kann. Die Laufzeitfehlererkennung erweitert die Möglichkeiten des empirischen Testens auf allen Ebenen, von der Einheit bis zur Abnahme, indem es möglich wird, einen internen Fehler zu erkennen, der darauf hinweist, dass ein ansonsten nicht beobachtbarer externer Fehler aufgetreten ist oder auftreten wird, nachdem das Testen beendet wurde.

***

Photo Credit: Dexxus

Von Parasoft

Die branchenführenden automatisierten Softwaretest-Tools von Parasoft unterstützen den gesamten Softwareentwicklungsprozess, vom Schreiben der ersten Codezeile über Unit- und Funktionstests bis hin zu Leistungs- und Sicherheitstests, wobei simulierte Testumgebungen genutzt werden.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.