Vereinfachen Sie Compliance-Workflows mit dem neuen C/C++-Test 2024.2 und KI-gesteuerter Automatisierung | Registrierung

Was ist statische Code-Analyse?
Ein umfassender Überblick

Zum Abschnitt springen

Übersicht

innovative Statische Codeanalysetools Sorgen Sie für kontinuierliche Qualität bei der Softwareentwicklung. Compliance-Automatisierung mit einer Reihe von Codierungsstandards sorgt für qualitativ hochwertige, sichere Codierung für die Entwicklung von Unternehmens- und eingebetteter Software.

Was ist statische Code-Analyse?

Statische Analyse ist der Prozess der Analyse von Quellcode, um Fehler zu finden und die Qualität des Codes zu bewerten, ohne ihn ausführen zu müssen. Entwickler und Tester führen statische Analysen an teilweise vollständigem Code, Bibliotheken und Quellcode von Drittanbietern durch.

Statische Codeanalysatoren verwenden ein Compiler-ähnliches Front-End, um ein syntaktisches und semantisches Modell der Software zu erstellen. Das syntaktische Modell wird dann anhand einer Reihe von Regeln oder „Checkern“ analysiert, um festzustellen, ob der Code eine Verletzung darstellt. Diese Checker verwenden Mustervergleichsalgorithmen, um Fehler zu erkennen, darunter:

  • Schlechte Verwendung von Sprachkonstrukten
  • Verwendung unsicherer Funktionen
  • Verstöße gegen Codierungsrichtlinien

Einige Unternehmen, die Anwendungen nach Sicherheitsstandards wie ISO 26262, DO-178C, IEC 62304, IEC 61508 und EN 50716 erstellen, empfehlen oder verlangen die statische Analyse dringend. Sie hilft Unternehmen dabei, schwer zu findende Defekte zu erkennen und die Sicherheit und Zuverlässigkeit der Software durch die Einhaltung von Codierungsstandards wie MISRA, AUTOSAR C++ 14, CERT, CWE, OWASP und anderen zu verbessern.

„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.

Wie funktioniert die statische Codeanalyse?

Statische Codeanalysatoren verwenden ein Compiler-ähnliches Frontend, um ein syntaktisches und semantisches Modell der Software zu erstellen. Das syntaktische Modell wird dann anhand einer Reihe von Regeln oder „Checkern“ analysiert, um festzustellen, ob der Code gegen Regeln verstößt.

Blauer Kreis mit einem weißen Symbol einer Sprechblase mit einem blauen Ausrufezeichen in der Mitte.

Regeln definieren

Die Prüfer verwenden Mustervergleichsalgorithmen, um Fehler wie die schlechte Verwendung von Sprachkonstrukten, die Verwendung unsicherer Funktionen und Verstöße gegen Codierungsrichtlinien zu erkennen. Der spezifische Satz der verwendeten Prüfer kann vom Benutzer konfiguriert werden. Einige statische Analysetools bieten der Einfachheit halber voreingestellte Konfigurationen, beispielsweise für Codierungsstandards wie MISRA C 2023.

Blauer Kreis mit einem weißen Symbol für die Steuerungseinstellungen.

Daten- und Kontrollfluss verwenden

Anspruchsvollere Prüfprogramme verwenden eine semantische Analyse, die Daten- und Kontrollfluss nutzt, um komplexe Fehler und Sicherheitslücken zu erkennen. Dazu erstellt der statische Analysator ein Ausführungsmodell der Software, berücksichtigt mögliche Pfade durch den Code und bewertet die Verwendung der Daten auf ihrem Weg von der Quelle (z. B. Benutzereingabe) zum Ziel (z. B. API- oder Systemaufruf).

Blauer Kreis mit einem Symbol, das drei übereinander gestapelte weiße Linien zeigt, die schrittweise kürzer werden, wobei die längste oben und die kürzeste Linie unten ist.

Heuristik anwenden

Die Analyse jeder einzelnen möglichen Bedingung und jedes einzelnen Pfads wäre zu zeitaufwändig. Daher verwendet der Analysator Heuristiken, um die wahrscheinlichsten Pfade für die Auswertung zu ermitteln. Zu den von diesen Prüfern erkannten Fehlertypen gehören Nullzeiger-Abweichungen, Pufferüberläufe und Sicherheitslücken wie Befehls- und SQL-Injections.

Eine Grafik, die den Prozess der statischen Analyse zeigt, während der Quellcode vom Quellrepository zum statischen Analysator verschoben wird. Anschließend werden Verstöße an den Parasoft-Teamserver gemeldet.
Eine Übersicht über den statischen Analyseprozess

Möglichkeiten zur Anwendung statischer Analysen

Teams verwenden statische Analysen am häufigsten auf zwei Arten:

  1. Auf dem Entwickler-Desktop, integriert in ihre Entwicklungsumgebung (IDE).
  2. Über die Befehlszeile als Teil eines Build- oder kontinuierlichen Integrationsprozesses.

Einige kommerzielle Tools lassen sich in führende IDEs integrieren und bieten Benutzern Lösungen zur effektiven Verwaltung von Analyseergebnissen. Tatsächlich können künstliche Intelligenz und maschinelles Lernen auch bei der Priorisierung und Verwaltung aller identifizierten Verstöße eingesetzt werden, um Aufwand und Risiko zu reduzieren.

Vergleich zwischen statischer und dynamischer Analyse

 

Bild einer Tabelle, in der die Vorteile der statischen und der dynamischen Analyse verglichen werden.

 

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

 

Die SDLC-Pipeline und in welchen Phasen der statischen und dynamischen Analyse Fehler gefunden werden.
Die SDLC-Pipeline und in welchen Phasen der statischen und dynamischen Analyse Fehler gefunden werden.

Techniken zur statischen Codeanalyse

Statische Analyse ist der Prozess der Untersuchung von Quellen ohne die Notwendigkeit einer Ausführung, um Fehler zu finden oder die Codequalität zu bewerten. Das bedeutet, dass Teams statische Analysen an teilweise vollständigem Code, Bibliotheken und Quellcode von Drittanbietern durchführen können. Im Bereich der Anwendungssicherheit wird die statische Analyse als Statische Anwendungssicherheitstests (SAST).

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.

Durchflussbasierte statische Analyse

Beinhaltet das Finden und Analysieren der verschiedenen Pfade, die durch den Code sowohl durch Steuerung (die Reihenfolge, in der Zeilen ausgeführt werden können) als auch durch Daten (die Sequenzen, in denen eine Variable oder eine ähnliche Entität erstellt, geändert, verwendet und zerstört werden kann) eingeschlagen werden können. . 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.

Komplexitätsanalyse

Beinhaltet das Messen und Visualisieren verschiedener Aspekte des Codes. Es kann dabei 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

Codeduplizierungsanalyse

Durch die Überprüfung auf doppelten Code können Unternehmen das Anwendungsdesign verbessern und die Wartungskosten senken. Bei dieser Art der Analyse wird der Code in kleinere Sprachelemente (Token) zerlegt. Die Token werden anhand einer Reihe von Regeln analysiert, die festlegen, was als doppelter Code betrachtet werden soll. Es gibt zwei Arten von Regeln:

  • Einfache Regeln finden Duplikate einzelner Token wie Zeichenfolgenliterale.
  • Komplexe Regeln finden mehrere Token-Duplikate wie doppelte Methoden oder Anweisungen.

Überlegungen bei der Suche nach einem Tool

Bei der Auswahl eines Tools zur statischen Codeanalyse für sicherheitskritische Anwendungen müssen wichtige Faktoren berücksichtigt werden.

Symbol in einem blauen Kreis, das den weißen Umriss einer Richtlinien-Checkliste zeigt.

Zertifiziert durch eine TÜV-Zertifizierungsstelle

Für sicherheitskritische Anwendungen eine Lösung, die von einer TÜV-Zertifizierungsstelle wie TÜV SÜD für den Einsatz auf sicherheitskritischen Systemen zur Überwachung statischer Analyse-Codierungsstandards wie MISRA und AUTOSAR C++ 14 zertifiziert wurde.

Symbol in einem blauen Kreis, das den weißen Umriss einer Richtlinien-Checkliste zeigt.

Stellt einen Compliance-Zusammenfassungsbericht bereit

Ein zusammenfassender Konformitätsbericht, der den Stand der Konformität für jede Richtlinie und alle anderen damit verbundenen Abweichungen oder Neukategorisierungen dokumentiert.

Symbol in einem blauen Kreis, das den weißen Umriss einer Richtlinien-Checkliste zeigt.

Unterstützt Industriecodierungsstandards

Unterstützt über 2500 verschiedene Regeln, die Branchencodierungsstandards wie AUTOSAR C++ 14, MISRA, JSF, CERT, CWE und mehr abdecken.

Was sind die Vorteile eines statischen Codeanalyse-Tools?

Blauer Kreis mit einem weißen, nach oben zeigenden Pfeil in der Mitte.

Erhöhen Sie die Codequalität und senken Sie die Fehlerkosten

Verhindern Sie Codefehler frühzeitig in jedem Entwicklungsprozess, bevor sie in den späteren Phasen des Softwaretests zu teureren Herausforderungen werden.

Symbol des Sicherheitsschildes.

Erfüllen Sie die Funktionsstandards der Branche

Führen Sie statische Analyselösungen ein, die von Prozessstandards wie ISO 26262, DO-178C, IEC 62304, IEC 61508, EN 50716 oder EN 50128 und mehr empfohlen werden.

Symbol eines Vorhängeschlosses

Erfüllen Sie statische Analyse-Sicherheitstests (SAST)

Binden Sie die Einhaltung von Sicherheitscodierungsstandards wie SEI CERT, CWE, OWASP, DISA-ASD-STIG und UL 2900 in die SA-Testprozesse ein und stellen Sie sicher, dass Ihr Code strengen Sicherheitsstandards entspricht.

Blauer Kreis mit dem Symbol einer Lupe mit weißem Rand, die auf offene und geschlossene weiße Caretzeichen zoomt.

Erfüllen Sie die Compliance-Standards für die Sicherheitscodierung

Stellen Sie die Konformität mit Sicherheitscodierungsstandards wie MISRA, AUTOSAR C++ 14, JSF und mehr sicher oder erstellen Sie Ihre eigene benutzerdefinierte Codierungsstandardskonfiguration für Ihr Unternehmen.

Blauer Kreis mit einem weißen Symbol, das zwei durch eine gekrümmte Linie verbundene Quadrate zeigt.

Integrieren Sie statische Analysen ganz einfach in Ihre optimierte CI/CD-Pipeline mit kontinuierlichen Tests, die schnell qualitativ hochwertige Software liefern.

Symbol in einem blauen Kreis, das einen weißen 4-poligen Stecker mit der Aufschrift „AI“ in der Mitte zeigt.

Intelligenter testen mit KI und ML

Integrieren Sie künstliche Intelligenz und maschinelles Lernen, um die Produktivität in den statischen Analyse-Workflow Ihres Teams zu verbessern. Die KI markiert und priorisiert die dringendsten Verstöße, die zuerst behoben werden müssen.

Was sind die möglichen Einschränkungen eines Tools zur statischen Codeanalyse?

  • Generiert falsch positive und negative Ergebnisse
    SAST-Tools erzeugen häufig falsch positive und falsch negative Ergebnisse. Falsch positive Ergebnisse kennzeichnen unproblematische Ergebnisse und verschwenden so die Zeit der Entwickler, während falsch negative Ergebnisse echte Schwachstellen übersehen und so Sicherheitsrisiken bergen. Die Reduzierung falsch positiver Ergebnisse ohne die Erhöhung falsch negativer Ergebnisse auszugleichen, ist eine Herausforderung.
  • Komplexität statischer Analyse und Softwaresysteme
    Die statische Codeanalyse ist für SAST-Tools eine Herausforderung, da sie ein tiefes Verständnis der Codestruktur, der Logik und des Datenflusses ohne Ausführung erfordert. Mit zunehmender Softwarekomplexität können SAST-Tools Sicherheitsprobleme übersehen oder falsche Positivmeldungen generieren. Sie haben auch Probleme mit dynamischen, datengesteuerten Webanwendungen, bei denen Benutzereingaben und -interaktionen variieren.
  • Identifizieren von Schwachstellen anhand nicht bereinigter Eingaben
    SAST-Tools übersehen häufig Schwachstellen in nicht bereinigten Eingaben, wie SQL-Injection oder XSS, da sie auf statischer Codeanalyse basieren. Sie haben Schwierigkeiten, Probleme zu erkennen, die durch unsachgemäß validierte und bereinigte externe Eingaben entstehen.
  • Abhängigkeit von bestimmten Programmiersprachen
    SAST-Tools sind oft sprachspezifisch und eignen sich hervorragend für einige Sprachen, haben aber mit anderen Schwierigkeiten. Unternehmen, die mehrere Sprachen verwenden, benötigen möglicherweise mehrere SAST-Tools oder eines, das ihren gesamten Technologie-Stack unterstützt, was eine logistische Herausforderung darstellt.

Tipps zur erfolgreichen Durchführung einer statischen Codeanalyse

Eines der besten Dinge, die Sie tun können, um erfolgreich zu sein, besteht darin, die vier Haupttypen der statischen Codeanalyse und die Fehler zu verstehen, die diese Tests erkennen sollen.

Symbol einer Glühbirne

Leistungstests

Leistungstests identifizieren Fehler, die allgemeine Leistungsprobleme beheben und Entwicklern helfen, mit den neuesten Best Practices Schritt zu halten.

Symbol einer Glühbirne

Sicherheitsrelevante Quellcodeanalyse

Durch die sicherheitsrelevante Quellcodeanalyse werden Sicherheitsrisiken wie schwache Kryptografie, Konfigurationsprobleme und rahmenspezifische Befehlsinjektionsfehler erkannt.

Symbol einer Glühbirne

Sicherheits- und Zuverlässigkeitstests

Sicherheits- und Zuverlässigkeitstests helfen, Funktionsproblemen vorzubeugen, denn niemand möchte außerhalb der Arbeitszeiten nicht reagierende Servicemeldungen erhalten. Diese Art der statischen Codeanalyse ist besonders nützlich, um Speicherlecks oder Threading-Probleme zu finden.

Symbol einer Glühbirne

Stiltests

Stiltests ermutigen Teams, einheitliche Codierungsstile zu übernehmen, um die Benutzerfreundlichkeit, das Verständnis und die Fehlerbehebung zu verbessern. Entwickler müssen keine Zeit damit verschwenden, Stilverstöße zu identifizieren. Die Tests finden sie, was Zeit spart.

Best Practices für die erfolgreiche Durchführung einer statischen Codeanalyse

Maximieren Sie die Effektivität der statischen Codeanalyse, um die Codequalität zu verbessern, Fehler zu reduzieren und Compliance-Anforderungen effizient zu erfüllen, indem Sie diese Best Practices befolgen.

  1. Integrieren Sie die statische Codeanalyse frühzeitig in den Entwicklungszyklus, idealerweise gleich zu Beginn der Codierung.
  2. Automatisieren Sie die statische Analyse, indem Sie sie in die CI/CD-Pipeline (Continuous Integration/Continuous Deployment) integrieren.
  3. Ermutigen Sie Entwickler, Probleme in Echtzeit zu beheben und machen Sie die Codequalität zu einem Teil ihres täglichen Arbeitsablaufs.
  4. Konzentrieren Sie sich auf die inkrementelle Analyse, indem Sie nur die Codeänderungen untersuchen, anstatt jedes Mal die gesamte Codebasis zu analysieren.
  5. Passen Sie die Regeln für die statische Analyse an die für Ihr Projekt oder Ihre Branche relevanten Codierungsstandards an, z. B. MISRA für die Automobilindustrie oder CERT für sicherheitskritische Systeme. Setzen Sie diese Regeln als Teil des Entwicklungsprozesses durch.
  6. Konzentrieren Sie sich zuerst auf die Behebung der kritischsten und schwerwiegendsten Probleme. Verwenden Sie die Triage, um Ergebnisse nach Wichtigkeit zu kategorisieren: Sicherheitslücken, Korrektheit des Codes, Leistung und Stilverstöße.
  7. Nutzen Sie dynamische Dashboards und Berichtstools, um wichtige Kennzahlen wie die Anzahl der behobenen Probleme, Compliance-Level und Codequalitätstrends im Zeitverlauf zu verfolgen.
  8. Halten Sie das statische Analysetool mit den neuesten Regeln, Fehlerbehebungsmustern und Konformitätsprüfungen auf dem neuesten Stand.
  9. Verwenden Sie statische Analysen in Kombination mit anderen Testmethoden wie Unit-Tests und Code Coverage, um einen robusten Qualitätssicherungsprozess zu erstellen.

Erste Schritte: Wie wird eine statische Analyse durchgeführt?

Statische Analysewerkzeuge können effektiv sein, wenn ein Projekt unvollständig und teilweise kodiert ist. Das bedeutet, dass diese Tools in jeder Phase eines Softwareentwicklungsprojekts eingeführt und verwendet werden können, was ein großer Vorteil im Software Engineering ist. Es ist wichtig, die Reife des in der Entwicklung befindlichen Produkts zu berücksichtigen, da dies Auswirkungen auf die Art und Weise haben kann, wie die statische Analyse übernommen werden kann.

Die größte Herausforderung bei der Einführung der statischen Analyse besteht darin, dass eine Kompilierung einer großen Menge Code eine große Anzahl von Warnungen erzeugen kann.

Deshalb sollte Ihr Fokus darauf liegen, Ihr Team so produktiv wie möglich zu machen, wenn Sie die statische Analyse in ein Projekt integrieren. Dadurch wird verhindert, dass Ihr Team von den vielen Warnungen zur statischen Analyse überwältigt wird, die höchstwahrscheinlich auftreten werden. Die meisten Entwickler haben nicht den Luxus, vorhandenen oder veralteten Code sofort zu reparieren.

Wenn Ihr Team kompetenter wird, können Sie sekundäre Ziele wie die Verbesserung der Gesamtqualität und die Durchsetzung der Codierungsstandards der Organisation einbeziehen. Entwickler können Ergebnisse schnell analysieren, mit Fehlalarmen umgehen und Fehler effizient beheben, da die statische Analyse zur täglichen Routine wird. Sie werden auch in der Lage sein, mit Fehlalarmen umzugehen.

Nachfolgend finden Sie einige Ansätze für den Einstieg in die statische Analyse in verschiedenen Entwicklungsstadien.

Symbol einer Zielscheibe oder Zielscheibe

Bestehendes Projekt auf dem Markt

Der primäre Ansatz zur Einführung einer statischen Analyse für diese Projekte wird als „Acknowledge-and-Defer“ bezeichnet. Da nicht viel neuer Code entwickelt wird, werden alle entdeckten Fehler und Sicherheitslücken zu den bestehenden technischen Schulden hinzugefügt.

Symbol eines Kreises, der zur Hälfte blau und zur Hälfte weiß ausgefüllt ist, um anzuzeigen, dass ein laufendes, zur Hälfte abgeschlossenes Projekt durchgeführt wird.

Bestehendes Projekt mit aktueller Entwicklung

Der empfohlene Integrationsansatz wird als Line-in-the-Sand-Ansatz bezeichnet. Dieser Ansatz bedeutet, neuen Code während seiner Entwicklung zu verbessern, während weniger kritische Warnungen als technische Schulden zurückgestellt werden.

Blauer Kreis mit zwei konzentrischen Kreisen darin, dünn weiß umrandet.

Neues Projekt

Entwickler können die statische Analyse von Anfang an in ihre Entwicklungsumgebungen integrieren, um sicherzustellen, dass Code auf einem hohen Qualitätsstandard geschrieben wird. Der Adoptionsansatz wird in diesem Fall treffend Greenfield genannt.

Erkundung realer Anwendungen der statischen Codeanalyse

Der Schlüssel zur erfolgreichen Durchführung einer statischen Analyse ist ein benutzerfreundliches, leicht zugängliches Tool, das Entwicklern im Voraus nützliche und umsetzbare Informationen liefert, ohne sie zu überfordern.

Rechteckiges Bannerbild mit überwiegend dunkelblauer Farbe und abgewinkelter Ecke in Standardblau. In der oberen rechten Ecke befindet sich eine Collage aus Parasoft-Produktsymbolen für DTP, C/C++test, CTP, Jtest, Selenic, Insure++, C/C++test CT, dotTEST, Virtualize und SOAtest.

Verbessern Sie Ihre Softwaretests mit Parasoft-Lösungen.