Empfohlenes Webinar: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Zum Video

Statische Analyse und dynamische Analyse

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
4. April 2023
4 min lesen

Statische Analyse und dynamische Analyse dienen als zweigleisiger Ansatz zur Verbesserung des Entwicklungsprozesses in Bezug auf Zuverlässigkeit, Fehlererkennung, Effizienz und Sicherheit. Aber wie unterscheiden sie sich und warum ist jeder wichtig?

Das frühzeitige Finden und Beheben von Fehlern in der Entwicklung zahlt sich in vielerlei Hinsicht aus. Es kann die Entwicklungszeit verkürzen, Kosten senken und Datenschutzverletzungen oder andere Sicherheitslücken verhindern. Gerade bei DevOps kann es sehr hilfreich sein, Tests frühzeitig und kontinuierlich in das SDLC einzubinden.

Hier kommen sowohl dynamische als auch statische Analysetests ins Spiel. Sie dienen jeweils unterschiedlichen Zwecken innerhalb des SDLC und liefern gleichzeitig einzigartige und fast sofortige ROIs für jedes Entwicklungsteam.

Statische vs. dynamische Analyse: Die Unterschiede verstehen

Statische Codeanalyse ist ein weit gefasster Begriff, der verwendet wird, um verschiedene Arten von Analysen zu beschreiben. All diese haben jedoch ein gemeinsames Merkmal: Sie erfordern keine Codeausführung, um zu funktionieren.

Im Gegensatz dazu erfordert die dynamische Analyse die Ausführung von Code. Obwohl es weitere Unterschiede gibt, ist es dieses Merkmal, das die beiden Arten von Testansätzen drastisch voneinander trennt.

Das bedeutet auch, dass jeder Ansatz in verschiedenen Phasen des Entwicklungsprozesses unterschiedliche Vorteile bietet. Um diese Unterschiede zu verstehen, sehen wir uns das Folgende an.

Was ist statische Analyse?

Das Testen der statischen Codeanalyse umfasst verschiedene Arten, wobei die beiden wichtigsten musterbasiert und flussbasiert sind.

Die musterbasierte statische Analyse sucht nach Codemustern, die gegen definierte Codierungsregeln verstoßen. Es stellt nicht nur sicher, dass der Code einheitliche 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.

Die flussbasierte statische Analyse beinhaltet das Finden und Analysieren der verschiedenen Pfade, die durch den Code genommen werden können. Dies kann durch Steuerung (die Reihenfolge, in der Zeilen ausgeführt werden können) und durch Daten (die Reihenfolge, in der eine Variable oder eine ähnliche Entität erstellt, geändert, verwendet und zerstört werden kann) geschehen. Diese Prozesse können Probleme aufdecken, die zu kritischen Fehlern führen, wie z. B.:

  • Speicherbeschädigungen (Puffer überschreibt)
  • Verletzungen des Speicherzugriffs
  • Nullzeiger-Dereferenzen
  • Rennbedingungen
  • Blockaden

Es kann auch Sicherheitsprobleme erkennen, indem es Pfade aufzeigt, die sicherheitskritischen Code wie Code zur Authentifizierung oder Verschlüsselung umgehen.

Darüber hinaus umfasst die Metrikanalyse das Messen und Visualisieren verschiedener Aspekte des Codes. Es kann helfen, vorhandene Fehler zu erkennen, aber häufiger warnt es vor potenziellen Schwierigkeiten beim Verhindern und Erkennen zukünftiger Fehler, wenn der Code gewartet wird. Dies geschieht durch Auffinden von Komplexität und Unhandlichkeit wie:

  • Zu große Bauteile
  • Übermäßige Verschachtelung von Schleifen
  • Zu lange Entscheidungsreihen
  • Verschlungene Abhängigkeiten zwischen Komponenten

Was ist dynamische Analyse?

Manchmal auch als bezeichnet Laufzeitfehlererkennung, bei der dynamischen Analyse beginnen die Unterschiede zwischen den Testarten zu verschwimmen. Bei eingebetteten Systemen untersucht die dynamische Analyse eher die interne Funktionsweise und Struktur einer Anwendung als das externe Verhalten. Daher wird die Codeausführung mittels White-Box-Testing durchgeführt.

Dynamische Analysetests erkennen und melden interne Fehler in dem Moment, in dem sie auftreten. Dies erleichtert es dem Tester, diese Fehler genau mit Testaktionen für die Meldung von Vorfällen zu korrelieren.

Erweiterung des externen Verhaltens der Anwendung mit Betonung auf Sicherheit, dynamische Anwendungssicherheitstests (DAST) ist analytisches Testen mit der Absicht, das Testelement zu untersuchen, anstatt es zu üben. Der zu testende Code muss jedoch ausgeführt werden.

DAST erweitert auch die Möglichkeiten empirischer Tests auf allen Ebenen – von der Einheit bis zur Abnahme. Dies wird dadurch erreicht, dass es möglich wird, interne Fehler zu erkennen, die auf ansonsten nicht beobachtbare externe Fehler hinweisen, die auftreten oder auftreten werden, nachdem das Testen beendet wurde.

Vor- und Nachteile der statischen Analyse

Wie bei allen Wegen zur Perfektion von DevSecOps gibt es auch bei statischen Analysetests Vor- und Nachteile.

PROS

  • Wertet Quellcode aus, ohne ihn auszuführen.
  • Analysiert den Code in seiner Gesamtheit auf Schwachstellen und Fehler.
  • Folgt angepassten, definierten Regeln.
  • Verbessert die Verantwortlichkeit der Entwickler.
  • Automatisierungsfähig.
  • Hebt Fehler frühzeitig hervor und reduziert die Zeit, die benötigt wird, um sie zu beheben.
  • Reduziert Projektkosten.

CONS

  • Kann falsch positive und falsch negative Ergebnisse zurückgeben, die Entwickler ablenken könnten.
  • Kann lange dauern, um manuell zu arbeiten.
  • Fehler oder Schwachstellen, die in Laufzeitumgebungen auftreten, können nicht lokalisiert werden.
  • Die Entscheidung, welche Industriecodierungsstandards anzuwenden sind, kann verwirrend sein.
  • Kann schwierig zu bestimmen sein, ob es angemessen ist, von einem Regelverstoß abzuweichen.

Während die Liste der Nachteile einschüchternd aussehen mag, können die Löcher der statischen Analyse mit zwei Dingen geflickt werden.

  1. Statische Analyse automatisieren.
  2. Mit dynamischen Techniken.

Warum die statische Codeanalyse so wertvoll ist

All diese Arten der statischen Analyse haben eines gemeinsam: Sie beinhalten das Scannen oder die Untersuchung des Quellcodes durch ein Programm.

Dies ist eine schnelle und einfache Möglichkeit, kritische Fehler aufzudecken. Es erreicht 100 % Abdeckung mit 100 % objektiven Ergebnissen.

Es ist einfach sinnvoll, dies kontinuierlich zu tun, da es diese umsetzbaren Ergebnisse liefert, Kosten und Entwicklungszeit reduziert, die Codeabdeckung erhöht und vieles mehr.

Jenseits des Bereichs der statischen Analyse

Statisches Scannen stellt Informationen bereit, um vorherzusagen, was passieren kann, wenn Code integriert und ausgeführt wird. Es erkennt Fehler basierend darauf, was das Tool als Fehler betrachtet. In der Regel 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 unerwartete, unangemessene oder ungenaue Ergebnisse liefert.

Die Herausforderung besteht hier darin, unerwartetes Verhalten zu beobachten. Beispielsweise kann es so aussehen, als würde eine Transaktion für einen Benutzer, Tester oder ein Testausführungstool korrekt fortgesetzt, wenn tatsächlich eine Komponente eine nicht behandelte Ausnahme ausgelöst und diese nicht korrekt verarbeitet hat. Ein Steuerungssystem kann im Test drei Tage lang schnell und korrekt reagieren, könnte aber Speicherlecks aufweisen und am vierten Produktionstag 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. Deshalb ist es wichtig, die Definition des Scheiterns sowohl auf internes als auch auf externes Verhalten anzuwenden – auch nach der Integration. Der interne Fehler muss erkannt werden, bevor er sich extern manifestiert.

Best Practices für die Kombination von statischer und dynamischer Analyse

Die Kombination von statischer und dynamischer Analyse ist die beste Option, um umsetzbare Ergebnisse zu erhalten, das Auftreten von Fehlern zu reduzieren, die Fehlererkennung zu verbessern und insgesamt sichereren Code zu erstellen. Das eine ist nicht besser oder schlechter als das andere. Sie arbeiten zusammen wie alle Zahnräder einer perfekt gefertigten Schweizer Uhr.

Befolgen Sie diese Best Practices, um statische und dynamische Analysen zusammen zu verwenden.

  • Verwenden Sie sie sowohl mit manuellen als auch mit automatisierten Lösungen, die Ihren Anforderungen entsprechen.
  • Machen Sie den Code für andere Entwickler lesbar und wiederverwendbar.
  • Verwenden Sie den richtigen Ansatz an der richtigen Stelle in Ihrem SDLC – früh statisch und in Laufzeitumgebungen dynamisch.
  • Nutzen Sie beide Ansätze für einen ganzheitlicheren Überblick über Ihr Projekt.
  • Vermeiden Sie die Gefahr, sich auf nur eine Testmethode zu verlassen, ein kleines Versehen, das zu großen Problemen führen kann.

Durch die Kombination von statischer und dynamischer Analyse können Teams ein breiteres Spektrum und eine größere Anzahl ausnutzbarer Bedrohungsvektoren lokalisieren.

Erhalten Sie wertvolle Erkenntnisse für die Auswahl einer statischen Analyselösung, die für Ihr Team am besten geeignet ist.

Verwandte Post + Ressourcen