Seien Sie am 30. April dabei: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Registrierung

Best Practices für die Verwendung statischer Analysetools

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
3. Juni 2021
6 min lesen

Statische Analysetools helfen Entwicklern, Programmierfehler frühzeitig im SDLC zu erkennen. Parasoft verfügt über eine Reihe von Tools, die Code-Qualitätsprüfungen automatisieren können. In diesem Artikel werden die bewährten Methoden hervorgehoben, die bei der Verwendung dieser Tools anzuwenden sind.

Wie Ihnen jeder Programmierer und Qualitätssicherungstester bestätigen kann, ist die statische Analyse ein wichtiger Bestandteil des Arbeitsablaufs. So wie Impfstoffe mehrere Versuche erfordern, erfordert jedes Projekt eine Code-Qualitätsanalyse an mehreren Fronten.

Zu diesem Zweck stellt Parasoft statische Analysetools bereit, um den Prozess zu automatisieren. Dies erweitert auch Best Practices, um flexibler auf notwendige Änderungen und Aktualisierungen reagieren zu können. Ein grundlegendes Verständnis der statischen Analyse, ihres Werkzeugs und der Best Practices ist jedoch von entscheidender Bedeutung.

Informieren Sie sich hier oder machen Sie sich mit diesen Konzepten vertraut. Dieser Blog beantwortet folgende Fragen:

  1. Was ist statische Codeanalyse?
  2. Wie führen Sie eine statische Analyse durch?
  3. Was sind Codequalitätstools?
  4. Wie überprüfe ich meine Codequalität?
  5. Was sind Best Practices für die statische Codeanalyse?
  6. Können Sie die statische Codeanalyse automatisieren?

Vektorgrafik eines Laptops mit statischen Analysetools

Was ist statische Code-Analyse?

Einfach gesagt identifiziert der Prozess der statischen Codeanalyse Mängel und Fehler im Quellcode. Während die Analyse automatisiert werden kann, ist die Codeüberprüfung im Allgemeinen eine gemeinsame Anstrengung von Entwicklern und QA/QC-Testern gleichermaßen.

Die statische Analyse ermöglicht jedoch eine sofortigere Behebung und ist integraler Bestandteil des Entwicklungsprozesses. Unabhängig von Branche, Funktion oder Sprache bleibt die statische Analyse ein grundlegender Bestandteil jedes Entwicklungsworkflows.

Wie führen Sie eine statische Analyse durch?

Die Durchführung einer statischen Analyse erfordert eine einfache Reihe von Schritten.

  1. Zuerst muss natürlich Quellcode vorhanden sein, um die Qualität zu testen.
  2. Verwenden Sie als Nächstes statische Analysetools und führen Sie einen statischen Codeanalysator aus.
  3. Überprüfen Sie die gekennzeichneten Abschnitte, die den vorgeschriebenen Regelsatz nicht erfüllen. Dazu können Fehlalarme oder sogar erwartete Abweichungen gehören.
  4. Programmierer gehen zuerst die kritischen Fehler an und dann weniger Probleme.
  5. Weiter zur Testphase.

Das Beste an der statischen Analyse ist jedoch, dass sie keine Codeausführung erfordert. Alles, was Sie tun müssen, ist die Analyse durchzuführen, um Probleme zu identifizieren, die ohne unnötige Risiken behoben werden müssen.

Entdecken Sie die Vorteile und Strategien des kontinuierlichen Testens für die Entwicklung eingebetteter Software.

Wann sollten wir die Codequalität messen?

Die allgemeine Best Practice zum Durchführen einer statischen Analyse ist vor der Codeüberprüfung und nach dem Schreiben des Codes. Das Auditieren des Quellcodes in dieser Phase reduziert Zeitverschwendung, indem Fehler schneller behoben werden.

Bild, das Code auf einem Bildschirm zeigt, wobei ein Teil davon mit einem 3D-Effekt vom Bildschirm abspringt

Verschiedene Arten der statischen Codeanalyse

Eine der gebräuchlichsten Arten der statischen Codeanalyse ist SAST oder statischer Anwendungssicherheitstest. Dies gilt auch als Best Practice für Anwendungssicherheitstests, kann aber auch an anderer Stelle angewendet werden. Um alle Fehlerklassen zu identifizieren, müssen möglicherweise mehrere Codierungsstandards (MISRA, AUTOSAR, CERT, CWE usw.) verwendet werden.

Daher ist es am besten, sich mit verschiedenen Arten der statischen Codeanalyse und den Fehlern, die sie erkennen sollen, vertraut zu machen.

  • Eigenschaften: Diese Tests identifizieren Fehler, die die Gesamtleistung beeinträchtigen. Sie können auch verwendet werden, um sicherzustellen, dass Entwickler mit aktuellen Best Practices auf dem Laufenden bleiben.
  • SICHERHEIT: Offensichtlich ein kritischer Test, findet die sicherheitsbezogene Quellcodeanalyse Sicherheitsrisiken wie schwache Kryptographie, Konfigurationsprobleme und Framework-spezifische Befehlsinjektionsfehler.
  • VERLÄSSLICHKEIT: Diese Tests helfen, Probleme mit der Funktionalität zu vermeiden. Kein Entwickler möchte sich um 4 Uhr morgens mit einer nicht reagierenden Notfall-Service-Nachricht befassen. Diese Art der statischen Codeanalyse ist besonders nützlich, um Speicherlecks oder Threading-Probleme zu finden.
  • STIL: Diese Art der statischen Analyse ermutigt Teams, einheitliche Codierungsstile für Benutzerfreundlichkeit, Verständnis und Fehlerbehebung zu verwenden. Es ermöglicht Entwicklern auch, keine Zeit damit zu verschwenden, Stilverletzungen zu identifizieren; der Test findet sie stattdessen.
So wählen Sie ein modernes statisches Analysewerkzeug aus

Musterbasierte statische Analyse

Diese Methoden gehören zu den wichtigsten, wenn es um das Testen der Codequalität geht. Ingenieure können mit einem Fehler versehentlich Abstürze oder Speicherbeschädigungen verursachen. Die musterbasierte statische Analyse findet die Ursachen dieser Probleme durch Muster im Code, die Fehler sein können.

Dies kann so einfach sein wie Syntaxprüfungen bis hin zu etwas anspruchsvolleren. Noch ein Hinweis: Diese statischen Analysetests liefern selten falsch positive Ergebnisse.

Durchflussanalyse

Diese Methode überprüft Code auf problematische Konstruktionen in einem Regelsatz, indem Entscheidungspfade simuliert werden. Verwenden Sie es, um Pufferüberläufe, Nullzeiger-Dereferenzierungen, verfälschte Daten und dergleichen zu finden.

Metrikanalyse

Obwohl es sich um einen weniger komplexen Test handelt, hilft die Metrikanalyse, die Eigenschaften von Code zu messen. Dazu gehören Codekomplexität, Wartbarkeit, Testbarkeit und mehr.

Welche Fehler kann die statische Codeanalyse erkennen?

Jede statische Analyseregel oder -richtlinie behandelt unterschiedliche Probleme. Einige Probleme, die sich auf die Zuverlässigkeit auswirken, können Ressourcenlecks für C oder Nullzeigerausnahmen in C++ sein. Die MISRA C:2012-Richtlinie 4.12 dient dazu, die Verwendung von dynamischem Speicher zu verhindern, der zu Laufzeitfehlern außerhalb des Speichers führen kann, was unerwünscht ist.

In der Richtlinie heißt es: „Die Bezeichner ‚calloc‘, ‚malloc‘, ‚realloc‘, ‚aligned_alloc‘ und ‚free‘ dürfen nicht verwendet und kein Makro mit einem dieser Namen erweitert werden.“ Daher erzeugt der folgende Code eine Verletzung.

int* p1 = (int*)malloc(10); /* Verstoß */ free(p1); /* Verstoß */

Die empfohlene Lösung besteht darin, einen Speicherblock vorab zuzuweisen und ihn nach Bedarf mit Ihrem eigenen definierten Äquivalent von „malloc“ und „free“ zu verwalten. Ähnlich in C++ besteht die übliche Lösung darin, die Operatoren „new“ und „delete“ zu überladen.

Die Absicht der Software, die Sprache und die Plattform wirken sich alle auf die Arten von Fehlern aus, die die statische Codeanalyse erkennen kann.

Bild mit Suchleiste mit der Aufschrift „Best Practice“

Best Practices für die statische Analyse

Bevor Sie sich mit Best Practices für die statische Codeanalyse befassen, müssen Sie einige Mythen ausräumen. Statische Analysatoren sind beispielsweise weder Einwegprodukte, noch ist die dynamische Analyse besser oder schlechter als die statische Analyse.

Aber im Allgemeinen gibt es konkrete Best Practices zusammen mit neuen Best Practices, die Entwickler anwenden sollten, wenn es um die statische Analyse der Codequalität geht.

  • Identifizieren Sie den Umfang des Problems.
  • Machen Sie den Code für andere Entwickler lesbar.
  • Schreiben Sie Code unter Berücksichtigung der Wiederverwendbarkeit.
  • Halten Sie die Erweiterbarkeit verfügbar, wenn eine Anwendung in Zukunft neue Funktionen benötigt.
  • Entwickeln Sie Code, der minimale Ressourcen verbraucht und dennoch schnell ausgeführt wird.
  • Nutzen Sie dynamische und statische Analysen.

Das Schreiben von Code unter Berücksichtigung all dieser Dinge sorgt insgesamt für weniger Fehler. Aber zusammen mit der statischen Codeanalyse vereinfacht es die Fehlererkennung und den QA/QC-Prozess weiter.

Erfahren Sie, wie Sie die statische Analyse einfach in Ihre CI/CD-Pipeline integrieren können.

Abweichungen bei der statischen Codeanalyse

Wie bereits erwähnt, identifiziert die statische Codeanalyse Fehler basierend auf bestimmten Regelsätzen. Das heißt, wenn eine Zeile eine Regel missachtet, wird sie markiert. Natürlich gibt es, wie im wirklichen Leben, bei verschiedenen Softwaretypen einige Ausnahmen von diesen Regeln.

In solchen Situationen lassen Entwickler Abweichungen zu. Die Regeln können sich den Umständen anpassen und besondere Belange berücksichtigen. Ein Team kann mit Ja oder Nein entscheiden, ob diese Abweichung akzeptabel ist oder nicht. Dies wird auch dokumentiert, da es gegen die ursprünglichen Regeln verstößt.

Statische vs. dynamische Analyse

Statische Analyse ist das, wonach es klingt: eine isolierte Überprüfung des Quellcodes. Die dynamische Analyse hingegen testet Code, wie er auf einer virtuellen oder sogar einer realen Maschine/Prozessor ausgeführt wird.

Stellen Sie sich die statische Analyse hier als Pinsel und die dynamische Analyse als feinzahnigen Kamm vor. Es kann subtilere Fehler identifizieren, da es überprüft, wie Code mit anderen Systemen, Sensoren oder Peripheriegeräten interagiert.

Der große Unterschied besteht darin, dass die dynamische Analyse keine Fehler in einer gesamten Codebasis finden kann. Es kann nur Probleme in Auszügen des ausgeführten Codes finden. Eine weitere bewährte Methode besteht darin, sowohl statische als auch dynamische Analysetestmethoden zu verwenden, um den effektivsten und effizientesten Code zu erstellen.

Bild, das zwei Coder zeigt, die auf den Monitor mit Code auf dem Bildschirm schauen. Einer der Programmierer zeigt auf den Monitor, der andere hat die Hände auf der Tastatur.

So wählen Sie ein Analysetool für statischen Code aus

Parasofts Suite von Tools zum Automatisieren von Softwaretests funktioniert über verschiedene Workflows und Teamzusammensetzungen hinweg. Wenn es um statische Codeanalyse geht, klingt das genauso. Dies kann den Entwicklungszyklus beschleunigen, Fehlerraten reduzieren und eine kontinuierliche Verbesserung ermöglichen. Um herauszufinden, welches Tool für Ihre Anforderungen am besten geeignet ist, beginnen Sie einfach mit der Basissprache des Quellcodes.

Wir bieten nicht nur C/C++-Lösungen, sondern Parasoft unterstützt auch Java mit Jtest und der .NET-Sprache mit dotTEST. Warum bleiben Sie mit mehr Arbeit stecken, als Sie müssen, wenn Sie den Prozess beschleunigen und bessere Ergebnisse erzielen können?

Erfahren Sie, wie Sie eine fortschrittliche statische Analyselösung systematisch in Ihr Projekt einführen und integrieren!

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