Wie verhindert die statische Analyse Fehler und beschleunigt die Lieferung?
Von Arthur Hicken
8. Juni 2018
7 min lesen
Wie beschleunigt die statische Codeanalyse die Bereitstellung und verhindert Fehler? Finden Sie es heraus, indem Sie diesen Blog-Inhalt lesen.
Zum Abschnitt springen
Verwenden Sie statische Analysen, um von Anfang an Qualität in Ihre Software zu integrieren - die einfachste und effektivste Aktivität, die Softwareentwickler ausführen können, um Fehler zu vermeiden und Code zu härten und gleichzeitig die Anwendungsbereitstellung zu beschleunigen.
Wenn Sie ein System entwickeln, können Sie durch frühzeitiges (und häufiges) Überprüfen auf Fehler und Beheben von Fehlern die Anzahl der dem Projekt hinzugefügten nachgelagerten Arbeiten erheblich reduzieren. Dies ist eine todsichere Methode, um mehrere Kopfschmerzen auf dem Weg zu vermeiden.
In der Softwareentwicklung ist es verlockend, in eine gemeinsame Mausefalle zu fallen und zu versuchen, die Qualität des Softwareprojekts (normalerweise am Ende) zu testen, anstatt zunächst bessere Software zu entwickeln. Es ist jedoch wichtig, die Versuchung zu vermeiden, einem solchen Ansatz zu folgen, der auf Einheits- oder Funktionstests beruht, um die Qualität des Produkts zu testen. Um von Anfang an mehr Qualität in die Software zu integrieren, kann der Entwickler die Kontrolle übernehmen, indem er sie einsetzt Statische CodeanalyseDies ist die einfachste und effektivste Aktivität, die Softwareentwickler ausführen können, um Fehler zu vermeiden und Code zu härten und gleichzeitig die Anwendungsbereitstellung zu beschleunigen.
Was ist statische Code-Analyse?
Statische Codeanalyse (oder statische Analyse) ist eine Softwaretesttätigkeit in der Softwareentwicklung, bei der der Quellcode auf Konstrukte analysiert wird, die bekanntermaßen mit Softwarefehlern oder Sicherheitslücken in Verbindung gebracht werden. Wenn ein Konstrukt mit hohem Risiko erkannt wird, meldet das statische Analysetool einen Verstoß, den der Entwickler anzeigen und beheben kann.
Bevor wir einige der Hauptvorteile der statischen Analyse untersuchen, wollen wir die verschiedenen Arten der statischen Analyse und die Unterschiede zwischen ihnen untersuchen.
Kostenlose Anleitung: Erste Schritte mit der statischen Analyse
Es gibt einige Haupttypen der statischen Analyse, jede mit ihren eigenen Stärken und Schwächen. Die Bedingungen für jeden sind unten.
Musterbasierte statische Analyse
In seiner einfachsten Form scannt ein statisches Analysetool den Quellcode und vergleicht ihn mit einem oder mehreren Regelsätzen. Beispielsweise machen Ingenieure manchmal den Fehler, die Zeichenfolge "\ 0" zu verwenden, wenn das Nullzeichen "\ 0" tatsächlich beabsichtigt ist. Dieser Fehler kann zu einer Speicherbeschädigung führen und dazu führen, dass das Programm abstürzt oder andere unangenehme Dinge tut. Ein statisches Analysetool sucht nach diesen Mustern im Code und meldet sie als mögliche Fehler. Diese Art der statischen Analyse wird als musterbasierte statische Analyse bezeichnet. Einige Muster sind einfache Syntaxprüfer, ähnlich einer Rechtschreibprüfung beim Schreiben. Andere Muster können viel ausgefeilter sein und vollständige Muster analysieren und erkennen, die mit subtilen Problemen verbunden sind. Diese Art der statischen Analyse leidet fast nie unter falsch positiven Ergebnissen.
Moderne Software-Engineering-Standards wie Verband der Softwareindustrie für die Automobilindustrie (MISRA) und Joint Strike Fighter (JSF) basieren auf der Idee, dass bestimmte Konstrukte in sicherheitskritischem Code vermieden werden sollten, da der Code in solchen Systemen möglicherweise Probleme hat.
Durch die Bereitstellung „sicherer“ Alternativen zu „unsicheren“ Einrichtungen werden bekannte Probleme mit Funktionen auf niedriger Ebene vermieden. Im Wesentlichen werden Programme in einer „sichereren“ Teilmenge einer Obermenge geschrieben.
Von Joint Strike Fighter Luftfahrzeug C ++ Codierungsstandards - Einführung
Durchflussanalyse
Die Flussanalyse, manchmal auch als Kontrollfluss- oder Datenflussanalyse bezeichnet, ist etwas anders. Diese Art der Codeanalyse sucht nach problematischen Konstruktionen anhand einer Reihe von Regeln und simuliert Entscheidungspfade, um tiefer in die Anwendung einzudringen und schwer zu findende Fehler wie Nullzeiger-Dereferenzen, Pufferüberläufe und Sicherheitsmängel wie Verschmutzungen auszurotten Daten. Die Flussanalyse ist insofern großartig, als sie echte Fehler finden kann, aber eine bestimmte Anzahl von falsch positiven Ergebnissen ist immer Teil dieser Methode.
Zusätzliche Analysetypen
Es gibt andere Arten der statischen Analyse, die unterschiedliche Arten von Zielen erreichen. Metrikanalysetools messen beispielsweise Codemerkmale wie Codezeilen und Komplexität. Tools zur Abdeckungsanalyse verfolgen Unit- und Anwendungstests, um ein besseres Verständnis dafür zu ermöglichen, wie gut der Code getestet wird. Bei gemeinsamer Verwendung als Teil eines automatisierte Entwicklungstests Diese Art von Analysen bieten einen umfassenden Einblick in die Sicherheit und Zuverlässigkeit der Anwendung.
Risiken der fehlgeschlagenen statischen Analyse
Der Zustand der Software wird immer komplexer. Heutzutage kann beispielsweise ein durchschnittliches Automobil über 1,000 Code-ausführende MCUs und bis zu 100 Millionen Codezeilen enthalten! Diese große elektronische Oberfläche, insbesondere in sicherheitskritischen Anwendungen wie Automobilen, medizinischen Geräten oder der Avionik, erfordert einen strengen technischen Ansatz für Software, um fehlerfreien Code zu erreichen.
Die gute Nachricht ist, dass Organisationen wie OWASP, CERT und MITRE sind bestrebt, Best Practices für die Programmierung zu erforschen und zu veröffentlichen, um Softwareentwicklern zu helfen, bei ihren Softwareprojekten erfolgreich zu sein. Es gibt auch branchenspezifische Normungsorganisationen (z MISRA, mit Schwerpunkt auf Softwaresystemen für die Automobilindustrie), die Best Practices veröffentlichen, die häufig von Regulierungsbehörden gefordert werden. Diese Best Practices können als Regeln in statischen Analysewerkzeugen kodifiziert werden, die Sie als Teil der Richtlinie Ihrer Organisation für Entwickler implementieren können.
Die Verwendung eines statischen Analysetools, das diese Programmierstandards implementieren und gleichzeitig in Ihren Entwicklungsprozess integrieren kann, ist von entscheidender Bedeutung. Aus geschäftlicher Sicht erhöht das Versäumnis, Ihre Arbeit mit mindestens einem statischen Analysetool zu überprüfen, das Risiko der Bereitstellung oder Freigabe Ihrer Anwendungen erheblich. Fehler können zu ausnutzbarem Code führen, mit dem böswillige Hacker das System zum Absturz bringen, vertrauliche Daten offenlegen usw. Bei sicherheitskritischer Software können die Folgen von Software-Schwachstellen weitaus schwerwiegender sein.
Vorteile der automatisierten statischen Analyse
Das Ausführen einer statischen Analyse auf dem Desktop bietet einige Vorteile und kann für kleine Teams oder Projekte funktionieren. In großen Organisationen sollte die statische Analyse jedoch auch im Rahmen nächtlicher Builds und kontinuierlicher Integration automatisiert werden. Bei der Implementierung als integraler Bestandteil des Entwicklungsprozesses bietet die Analyse Ihres Codes mit statischer Analyse eine Reihe von Vorteilen, darunter die folgenden:
Schnellerer Entwicklungszyklus
Durch die konsequente Durchführung einer statischen Analyse in den frühen Phasen des Projekts können Sie Systemfehler finden und beheben, wenn die Kosten für die Behebung am niedrigsten sind. Der Prozess kann anfangs mehr Zeit in Anspruch nehmen als die schnelle Entwicklung der Software ohne laufende Analyse, aber die Effizienzgewinne werden über den Entwicklungslebenszyklus exponentiell. Denken Sie daran, dass es möglicherweise schwierig ist, einige der gefährlicheren Fehler spät im Zyklus zu beheben. Daher ist es wichtig, sie frühzeitig zu finden.
Zu den guten statischen Analysewerkzeugen gehört auch eine beschreibende Dokumentation des implementierten Programmierstandards, die das Programmierwissen und die berufliche Entwicklung der Softwareentwickler erweitert. Im Laufe der Zeit verbessert die Einhaltung dieser Standards die durchschnittliche Qualität des Codes, indem die Programmierer durch ständiges Feedback verbessert werden. Wenn Ihr statisches Analysetool über ein breiteres Ökosystem verfügt, das Fehlerbehebungsaufgaben automatisch priorisieren kann, können Sie die Software noch schneller bereitstellen.
Niedrigere Fehlerrate
Die statische Analyse hilft Ihnen, Fehler frühzeitig zu finden und zu beheben, wodurch das Wiederauftreten systembedingter Fehler nachgeschaltet werden kann. Mit einer Richtlinie zur Früherkennung können Sie einfacher eine Richtlinie zur Fehlervermeidung implementieren, die die Fehlerrate über den Entwicklungslebenszyklus reduziert. (Schamloser Stecker: Parasoft C / C ++ test, das nicht nur statische Analyseverletzungen meldet, sondern sich auch in eine unglaublich ausgefeilte integriert Analyseplattformkann Ihnen ein umfassenderes Verständnis aller Fälle des gemeldeten Fehlers und seiner allgemeinen Auswirkungen auf die Qualität Ihrer Codebasis vermitteln.)
FORTLAUFENDE VERBESSERUNGEN
Die DevOps wird häufig verwendet, um eine Sammlung von Praktiken zu beschreiben, die die abteilungsübergreifende Zusammenarbeit und Kommunikation erleichtern, die erforderlich sind, um Unternehmen bei der Optimierung und Beschleunigung ihrer Entwicklungs- und Bereitstellungsprozesse zu unterstützen. Durch den abteilungsübergreifenden Austausch von Wissen und Aufgaben schaffen Unternehmen einen effizienten Prozess zur Beschleunigung des SDLC bei gleichzeitiger Verbesserung der Qualitätsprozesse.
Damit dieser Ansatz effektiv ist, muss jedoch eine automatisierte Rückkopplungsschleife implementiert werden, die die konsistente Anwendung von Qualitätsrichtlinien ermöglicht, wenn die Anforderungen von der Erstellung bis zur Produktion fortschreiten.
So wählen Sie ein modernes statisches Analysewerkzeug aus
Die automatisierte statische Analyse ist nicht nur der Mechanismus für die Rückkopplungsschleife, sondern generiert auch die Daten, die andere Abteilungen benötigen, um im Rahmen des DevOps-Modells effektiv auf diese zuzugreifen und zusammenzuarbeiten. Insbesondere bei der Verwendung mit Einheiten- und Regressionstests spielt die statische Analyse einige Funktionen, darunter:
- Sicherstellung der Codequalität
- Bereitstellung der Big Data, die zur Verbesserung des Entwicklungsprozesses erforderlich sind
- Erleichterung der Bearbeitung der automatischen DevOps-Rückkopplungsschleife
Infolgedessen wird die statische Analyse zu einem Mittel zur kontinuierlichen, automatisierten Prozessverbesserung. Entwickler können damit einen während der Veröffentlichung festgestellten Fehler verstehen und untersuchen oder anhand der Qualitätssicherung feststellen, ob es eine Möglichkeit gibt, Code zu härten und die Möglichkeit auszuschließen, dass diese Fehler in Zukunft auftreten.
Informationen zur statischen Analyselösung von Parasoft
Es gibt verschiedene statische Analysetools auf dem Markt, die von Open Source-Dienstprogrammen bis hin zu vollständigen Entwicklungstestsuiten reichen. Die Softwaretestlösung von Parasoft bietet eine integrierte Plattform für die Automatisierung einer breiten Palette von Softwarequalitätspraktiken für mehrere Codierungssprachen sowie aussagekräftige, umfassende Berichte und die Option für intelligente Analysen, die auf Parasoft DTP basieren.
Für C und C ++ zusätzlich zu einer vollständigen Palette statischer Code-Analysefunktionen und über 2,200 Regeln (die meisten Tools auf dem Markt, basierend auf Implementierungen von MISRA, MISRA C ++, FDA, Scott Meyers 'Effective C ++, Effective STL, und andere etablierte Quellen), Parasoft C / C ++ test bietet eine einheitliche Lösung für Ihre Entwicklungstestverfahren.
Parasoft C/C++test wird ausgeführt und generiert automatisierte Unit-Tests;; ermöglicht verschiedene Arten von Codeabdeckungeinschließlich Zeile, Anweisung, Block, Pfad, Entscheidung (Verzweigung), einfacher Bedingung und MC / DC-Abdeckung; Bietet Laufzeitanalysen und wird mit einem Tool-Qualifizierungskit zur Einhaltung der Standards für funktionale Sicherheit geliefert.
Parasoft bietet außerdem vollständige Unterstützung für die statische Code-Analyse für die Java-Sprache mit Parasoft Jtestund für die .NET-Sprache mit Parasoft dotTEST. Genau wie bei C und C ++ handelt es sich hierbei um vollständig integrierte Lösungen, die mehr als nur statische Analysen bieten. Sie erhalten also eine umfassende Lösung, mit der Sie Ihre Softwaretests effizienter und einfacher durchführen können. Ein Benutzer kann Code mit der statischen Analyse von Parasoft auf dem Desktop analysieren und in Ihre automatisierten Builds integrieren, um Fehler kontinuierlich und automatisch zu vermeiden.
Um automatisierte Workflows zu erhalten, die die Zusammenarbeit und Effizienz verbessern, werden diese statischen Analyse-Engines integriert Parasoft DTPDies bietet Workflows für die Integration von Qualität in Ihren SDLC, sodass Sie Ihre Entwicklungsrichtlinie definieren und dann automatisch nicht funktionierende Anforderungen durchsetzen können. Beispielsweise wird die statische Analyse während des Builds automatisch ausgeführt, Verstöße werden an DTP gemeldet, wo sie verarbeitet werden, und die Ergebnisse werden an die IDE des Ingenieurs zurückgesendet, um sie zur Behebung anzuzeigen.
DTP führt auch intelligente Analysen durch, mit denen diese Workflows die Qualität und das Risiko Ihrer Softwareentwicklung automatisch bewerten können. Beispielsweise kann DTP nach systembedingten Problemen im Zusammenhang mit dem Programmierprozess suchen oder eine schwerwiegende Verletzung des von einem Junior-Ingenieur erstellten Codes mit einer Reihe von Komponententests und Abdeckungsinformationen korrelieren, um festzustellen, wie viel Risiko mit dem Modul verbunden ist. Wenn die Korrelation auf ein Risikograd über einem bestimmten Schwellenwert hinweist, kann der Verstoß zusätzlich zu den normalen Aufgaben zur Fehlerbehebung einen bestimmten Workflow zur kontinuierlichen Prozessverbesserung auslösen, der Peer-Code-Überprüfung und zusätzliche Analyse umfasst.
Fazit
Die statische Code-Analyse ist ein wichtiger Bestandteil, um sicherzustellen, dass Anwendungen wie erwartet funktionieren. Dies verbessert nicht nur die Geschwindigkeit des gesamten Entwicklungsteams, sondern verringert auch die Risiken, die mit der Veröffentlichung potenziell gefährlicher Software verbunden sind. Während einige Analysen immer besser sind als keine Analysen, sollten statische Analysen in eine größere Software-Testinfrastruktur integriert werden, um die Effektivität der Praxis zu maximieren. Parasoft bietet eine Code-Analyse- und Testsuite für Unternehmen in C / C ++ - Test, Jtest und dotTEST sowie ein erweitertes Analyse- und Berichtssystem in DTP. Durch die Kombination dieser Technologien können Softwareentwicklungsteams die Softwarebereitstellung beschleunigen und gleichzeitig sicherstellen, dass ihre Anwendungen wie erwartet funktionieren.
Sehen Sie sich die umfassendste statische Codeanalyselösung für C- und C ++ - Software in Aktion an.
Fordern Sie noch heute eine Demo an
„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.