Erfahren Sie, wie die Continuous Quality Platform von Parasoft dabei hilft, Testumgebungen zu steuern und zu verwalten, um zuverlässig hochwertige Software zu liefern. Für Demo registrieren >>
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:
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.
Die Durchführung einer statischen Analyse erfordert eine einfache Reihe von Schritten.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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?
„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.
Ricardo ist Senior Technical Product Marketing Manager für die eingebetteten Testlösungen von Parasoft und verfügt über Erfahrung in der SDLC- und Testautomatisierung eingebetteter Echtzeit-, sicherheits- und sicherheitskritischer Anwendungen sowie in der Softwarekonformität mit Industriestandards.