Empfohlenes Webinar: MISRA C++ 2023: Alles, was Sie wissen müssen | Zum Video

Codeabdeckung: Bewerten und gewährleisten Sie das Vertrauen in Ihre Tests

Die Lösung von Parasoft für die Codeabdeckung macht den Code in Ihrer Anwendung verfügbar, der getestet wurde und der nicht getestet wurde. Benutzer können Code Coverage auf verschiedenen Ebenen, Funktionen oder Einheiten, der gesamten Datei oder der gesamten Anwendung auf Zielhardware oder Hostumgebungen durchführen. Und Sie können die Abdeckung aus den verschiedenen Testmethoden wie Unit-Tests und Systemtests zusammenfassen.

Was ist Code-Abdeckung?

Strukturelle Codeabdeckung ist die Identifizierung von Code, der ausgeführt und protokolliert wurde, um festzustellen, ob das System angemessen getestet wurde.

Die Codeabdeckung drückt den Grad aus, in dem der Quellcode der Anwendung von allen Testpraktiken, einschließlich Einheitentests, manuellen Tests, automatisierten Funktionstests und dergleichen, ausgeübt wird. Es auch:

  • Ermöglicht genauere Qualitäts- und Abdeckungsmetriken.
  • Legt toten Code und ungetestete oder unzureichend getestete Teile der Anwendung offen.

Infolgedessen bietet die Anwendungsabdeckung einen äußerst aussagekräftigen Einblick in das Risiko. In den meisten Organisationen sind Unit-Tests das primäre Mittel für die Fahrabdeckung. Und obwohl Unit-Tests eine wertvolle Testpraxis sind, die auch mehrere prozessorientierte Vorteile bietet, ist es auch teuer in Bezug auf das Fachwissen und die Zeit, um die Tests zu erstellen, zu verwalten und zu warten.

Die Codeabdeckung kann als Teil des Continuous Integration (CI)-Prozesses sowie als Teil des Entwickler-Desktop-Workflows genutzt werden. Sie können auch erweiterte Analysen des Quellcodes durchführen und anhand der vom Entwickler vorgenommenen Codeänderungen ermitteln, welche Komponententests erneut ausgeführt werden müssen.

Plug-in-Elektrofahrzeug mit Glühen und Bewegungsunschärfe und roten Lichtspuren 3D-Rendering

Diese Code-Coverage-Tools sind besonders nützlich in Branchen für die eingebettete Entwicklung von sicherheits- und sicherheitskritischen Anwendungen, in denen Softwaresysteme nicht ausfallen können oder Menschenleben verloren gehen.

Die Gründlichkeit der Abdeckung in sicherheitskritischen Systemen hängt von der in verschiedenen Branchen verwendeten Metrik für die Anwendungssicherheitsintegritätsstufe (SIL oder ASIL) und der in der Avionik üblichen Entwicklungssicherheitsstufe (DAL) ab. Gründlichkeit bezieht sich auf die strukturellen Elemente im Code. Diese werden typischerweise in Code-Anweisung, Verzweigung, modifizierte Bedingungsentscheidungen und aufgeschlüsselt Mit Parasoft können Sie auch auf eine viel feinere Ebene der Abdeckungsgranularität aufschlüsseln, wie der Objektcode oder die Assemblersprache.

Wie wird die Codeabdeckung gemessen?

Die Codeabdeckung wird häufig durch Codeinstrumentierung identifiziert oder gemessen. Dies erfolgt durch Anreichern des Quellcodes mit zusätzlichem Verfolgungscode, um während der Ausführung festzustellen, ob jede Anweisung, Verzweigung und/oder der Entscheidungspfad für modifizierte Bedingungen (MC/CD) ausgeführt wurde.

Was man über Code Bloat wissen sollte

Es ist wichtig zu wissen, dass die Code-Instrumentierung Code-Bloat verursacht. Die Zunahme der Codegröße ist normalerweise kein Problem. Bei eingebetteten Zielen mit Speicherbeschränkungen kann sich die Erhöhung auf die Fähigkeit auswirken, den Code zum Testen auf Ihre Zielhardware zu laden.

Schritte zum Verhindern von Code-Bloat für eingebettete Ziele

  1. Instrumententeil des Codes.
  2. Führen Sie den Test durch.
  3. Sammeln Sie die Metriken zur Codeabdeckung.
  4. Wiederholen Sie dies, indem Sie den anderen Teil des Codes instrumentieren und das, was Sie gerade getestet haben, de-instrumentieren.
  5. Nachdem Sie alle Teile des Codes getestet haben, führen Sie die Ergebnisse der Testabdeckung zusammen, um eine vollständige, gemessene Ansicht der Codeabdeckung für die gesamte Anwendung zu erhalten.

Welcher Prozentsatz der Codeabdeckung ist ideal?

Die prozentualen Ziele für die Codeabdeckung können in einigen Fällen subjektiv sein. In anderen Fällen sind sie obligatorisch. Beim Erstellen sicherheitskritischer Anwendungen, bei denen ein Versagen zum Tod führen kann, erfordern behördliche und branchenspezifische Standards eine 100-prozentige Abdeckung struktureller Vorschriften.

Bei Anwendungen, die nicht sicherheitskritisch sind, wird die Codeabdeckung in der Regel der Entwicklungsorganisation überlassen. Das übliche Komfortniveau für diese Art von Umständen ist das Erreichen eines Ziels von 80 % Codeabdeckung.

Die 6 wichtigsten Vorteile der Codeabdeckung

Antworten "Bin ich mit dem Testen fertig?"

Die Codeabdeckung kann helfen, die Testvollständigkeit zu messen und garantiert, dass Sie jede einzelne Codezeile in Ihrer Anwendung während der Ausführung überprüft haben. Die Nutzung einer Kombination von Testmethoden wie statischer Analyse, Komponententests, Systemtests, Leistungstests und dergleichen ist der beste Weg, um die Codequalität sicherzustellen.

Erfüllen Sie die Anforderungen zur Einhaltung der Code-Abdeckung

Erfüllen Sie die Code-Coverage-Anforderungen für funktionale Sicherheitsstandards wie DO-178B/C, ISO 26262, ISO 21434, IEC 62304, IEC 61508 und EN 50128. Die Code-Coverage-Anforderungen tragen dazu bei, die Sicherheit und Zuverlässigkeit von Codes zu gewährleisten, indem ungetesteter Code offengelegt und gelöscht wird Defekte.

Reduzieren Sie die Kostendefekte

In der Produktion gefundene Codefehler sind die teuersten. Verhindern Sie, dass sie durch die Ritzen rutschen, indem Sie Code hervorheben, der nicht getestet wurde, bevor Sie Ihre Anwendung freigeben. Dies kann am Arbeitsplatz des Entwicklers erfolgen oder im Rahmen der Continuous Integration (CI)-Pipeline automatisiert werden.

Führen Sie die Überprüfung der Baugruppe / des Objektcodes durch

Für die absolut strengsten sicherheitskritischen Anforderungen an die Codeabdeckung, wie z. B. DO-178C Level A, bietet Parasoft Codeabdeckung auf Baugruppenebene. Sparen Sie mit unserer automatisierten Lösung Tage - sogar Wochen - arbeitsintensiven, fehleranfälligen manuellen Aufwand.

Erfüllen Sie die Codeabdeckung auf Host- und Zielhardware

Gründliche Tests von Embedded Safety und sicherheitskritischen Anwendungen erfordern Tests auf der Zielhardware und in der Hostumgebung. Parasoft bietet Code-Instrumentierung, um strukturelle Code-Coverage für Statement, Branch, Modified Condition Decision Coverage (MC/DC) und mehr zu erfassen und zu melden.

Erreichen Sie eine 100% ige Codeabdeckung

Obwohl Sie durch Komponententests im Allgemeinen 100 % strukturelle Codeabdeckungsziele erreichen können, sparen Sie Zeit und Mühe, indem Sie die Ergebnisse der Codeabdeckung, die Sie automatisch aus Systemtests erhalten, aggregieren. Vervollständigen Sie dann den verbleibenden aufgedeckten Code mithilfe von Unit-Tests.

Tools zur strukturellen Codeabdeckung

Stellen Sie die Produktsuite von Parasoft bereit, um die strukturelle Codeabdeckung von Anwendungen durchzuführen, die in C, C ++, Java, C # und VB.NET geschrieben wurden.

Parasoft C/C++-Testsymbol

Parasoft C / C ++ test

Sammeln Sie die Abdeckung von Unit-Tests, Systemtests, manuellen Tests sowie allen anderen verwendeten Testausführungsmethoden. Parasoft C/C++test unterstützt eine Reihe von Abdeckungsmetriken (Branch, Statement, MC/DC usw.), die Teams in der nativen und anwendungsübergreifenden Entwicklung verwenden können.

Parasoft Jtest-Symbol

Parasoft Jtest

Erfassen und überwachen Sie die Codeabdeckung während manueller oder automatisierter Funktionstests, die in Ihrer Java-Anwendung durchgeführt werden. Benutzer können Abdeckungsdaten und Testergebnisse senden, um sie zur Analyse zusammenzuführen und zu korrelieren, was Einblicke in die Testqualität der Anwendung und Ihre Testqualität bietet.

Parasoft dotTEST-Symbol

Parasoft dotTEST

Sammeln Sie Informationen zur Codeabdeckung für Standalone- und Webanwendungen, die in C# und VB.NET geschrieben wurden. Installieren Sie die überwachte Anwendung auf demselben Computer, auf dem dotTEST installiert ist, oder auf einem anderen Computer.

8 Best Practices für die Codeabdeckung

Die Ermittlung der Codemenge, die während des Testens ausgeführt wird, ist eine leistungsstarke Metrik, um das in der Anwendung verbleibende Risikoniveau zu verstehen. Hier sind einige Best Practices, die Sie befolgen sollten.

CI-Pipeline

Die Integration von Tests und Codeabdeckung in Ihr Build-System erhöht die Effizienz, fördert die Zusammenarbeit und bietet mehr Transparenz über Ihren gesamten Softwareentwicklungslebenszyklus.

Systemtests

Nutzen Sie Ihre Systemtests, um Codeabdeckung zu erhalten und fehlende Tests zu identifizieren, die versteckte Fehler aufdecken können.

Abdeckungsberater

Verlieren Sie keine Zeit damit, alle Eingabewerte und Vorbedingungen zu bestimmen, die in einem Testfall erforderlich sind, um eine schwer fassbare Anweisung, Verzweigung oder MC/CD-Codezeile abzudecken. Nutzen Sie den Deckungsratgeber.

Gesamtabdeckung

Verwenden Sie die verschiedenen Testmethoden, die Sie durchführen müssen, um Ihre Abdeckungsanforderungen zu beschleunigen. Die aggregierte Abdeckung kann aus System-, Integrations-, Einheiten- und manuellen Tests erhalten werden.

Automatisierte Testfallgenerierung

Parasoft-Lösungen können Unit-Testfälle automatisch analysieren und generieren, um Null-Zeiger-Probleme, Grenzwertbedingungen, Division durch Null und viele andere Arten von Fehlern auszuschließen. Darüber hinaus können diese Testfälle aktiviert werden, um eine Codeabdeckung zu erzeugen und in einigen Fällen eine strukturelle Codeabdeckung von bis zu 90 % zu erreichen.

Teilinstrumentierung

Code-Instrumentierung verursacht Code-Bloat und die Zunahme der Codegröße kann sich auf die Fähigkeit auswirken, den Code zum Testen auf Ihre speicherbeschränkte Zielhardware zu laden. Instrumentieren Sie Teile Ihres Codes gleichzeitig, führen Sie Ihre Tests durch und aggregieren Sie Ihre Abdeckungsmetriken aus jedem Lauf.

Debugger für Abdeckung

Wenn Sie eine 100%ige strukturelle Codeabdeckung erfüllen müssen, aber defensiven Code haben, der nur ausgeführt wird, wenn das System in einen Fehlerzustand eintritt, der Wochen, Monate oder sogar Jahre (oder vielleicht nie) dauern kann, verwenden Sie Ihren Debugger, um die erforderlichen Bedingungen zu simulieren und Durchführen einer visuellen Inspektion der Codeausführung/-abdeckung.

Toter Code

Wenn Code gefunden wird, weil er keinen Weg zu seiner Ausführung hat, stellen Sie aus Sicherheitsgründen sicher, dass er gelöscht wird und niemals ins Feld gelangt.

So beginnen Sie mit der Codeabdeckung

Screenshot des Dashboards zur vollständigen Codeabdeckung von Parasoft Report Center.

Parasoft-Codeabdeckung innerhalb der IDE- und DTP-Dashboard-Berichts- und Analyselösungen.

1. Machen Sie sich mit Ihren Deckungsanforderungen vertraut

Um mit der Erfassung der Codeabdeckung zu beginnen, machen Sie sich mit Ihren Anforderungen an die Abdeckung vertraut. Vielleicht erfordern Ihre Branche und die Art der Anwendung keine Erfassung von Abdeckungsmetriken, Sie möchten jedoch die Codequalität sicherstellen oder verbessern, sodass 75 % möglicherweise Ihr ursprüngliches Ziel sind.

Wenn Ihre Branche die Einhaltung eines funktionalen Standards wie DO-178C für die Avionik oder ISO 26262 und ISO 21434 für die Automobilindustrie oder IEC 62304 für die Medizintechnik erfordert, bestimmen Sie, ob Sie eine 100-prozentige Codeabdeckung benötigen oder ob ein anderer Prozentsatz der Codeabdeckung empfohlen wird. Informieren Sie sich auch darüber, welchen strukturellen Codeabdeckungstyp Sie erfüllen müssen. Es könnte die Funktion, Zeile, Anweisung, Block, Aufruf, Pfad, Entscheidung, einfache Bedingung, MC/DC, Objekt/Assembly oder eine Kombination davon sein.

2. Erhalt der Code-Abdeckung

Eine der einfachsten Möglichkeiten, Codeabdeckung zu erhalten, ist während der Implementierung, wenn Ingenieure Unit-Testfälle erstellen, um ihren Code zu testen. Mit Lösungen wie Parasoft C/C++test und Jtest,

  • Benutzer erhalten eine sehr kurze Lernkurve, da es sich direkt in Ihre IDE integriert und diese Funktionalität bereitstellt.
  • QA-Teams können diese Unit-Testfälle für Regressionstests und/oder als Teil des Build-Prozesses in einem automatisierten CI-Pipeline-Workflow wiederverwenden.

Beachten Sie, dass das Instrumentieren des Codes zu Code-Bloat führen kann, und wenn Sie auf Zielhardware testen, müssen Sie möglicherweise eine Teilinstrumentierung durchführen. Instrumentierter Code kann auch die Leistung der Ausführung verändern, daher sollten Sie sich mit verschiedenen Optimierungsfunktionen vertraut machen, die Ihnen zur Verfügung stehen.

3. Sammeln und Melden Ihrer Codeabdeckungsmetriken

Das Erfassen und Melden Ihrer Codeabdeckungsmetriken ist von entscheidender Bedeutung. Es gibt mehrere Methoden, je nachdem, ob Ihre Anwendung auf einem eingebetteten Ziel oder einem vollständig mit Ressourcen ausgestatteten System oder Server ausgeführt wird.

Letztendlich werden Sie Abdeckungsdaten abrufen oder zusammenführen, um Ihre vollständigen Metriken zur Codeabdeckung zu erhalten. Abdeckungsberichte können von Ihrer IDE generiert und in das Berichts- und Analyse-Dashboard DTP von Parasoft exportiert werden. In DTP können Benutzer die Bereiche mit hohem Risiko visuell inspizieren, verstehen, was als Nächstes angegangen werden sollte, und Compliance- und Auditberichte erstellen.

Warum Parasoft Code Coverage Tools?

Die Lösung von Parasoft für die Code-Coverage liefert kritisches Feedback über die Vollständigkeit und Gründlichkeit des Testprozesses, indem sie Tests und strukturelle Code-Coverage-Ergebnisse korreliert. Sie können diese Ergebnisse oder Metriken verwenden, um die Vollständigkeit von Tests auf Unit-, Integrations- und Systemebene durch unsere Unterstützung aller wichtigen Arten der Codeabdeckung (Funktion, Aufruf, Zeile, Anweisung, Block, Pfad, Entscheidung, einfache Bedingung und MC/ DC), einschließlich Objekt-/Baugruppenabdeckung.

Coverage-Ergebnisse sind direkt in der IDE verfügbar, mit bequemen Ansichten und Hervorhebungen im Quellcode-Editor sowie in Form von statischen HTML- oder PDF-Berichten und dynamischen Berichten über das zentralisierte Berichts-Dashboard von Parasoft.

Benutzer können Anwendungen überwachen, die nativ auf dem Desktop, plattformübergreifend mit Simulatoren oder auf echter Embedded-Hardware ausgeführt werden. Das Coverage-Modul von C/C++test ist optimiert, um die Auswirkungen auf die Ausführungsleistung und den binären Footprint des Tests zu minimieren, wodurch es für den Einsatz mit serverbasierten High-End-Anwendungen sowie sehr eingeschränkten Systemen auf Basis von 16-Bit . geeignet ist Mikrocontroller.

In Verbindung mit der Process Intelligence Engine von Parasoft profitieren Anwender von der Testauswirkungsanalyse. Für jeden durchgeführten Test, einschließlich manueller, systembasierter oder UI-basierter Tests, werden Tests nicht nur für Test/Fail und Ergebnisse, sondern auch für ihre Auswirkungen auf die Codebasis aufgezeichnet.

Jeder weitere Test wird mit diesen vorhandenen Informationen überlagert, wodurch ein vollständiges Bild von Testerfolg und -abdeckung entsteht. Wenn Code geändert wird, sind die Auswirkungen auf den zugrunde liegenden Datensatz deutlich sichtbar und heben Coverage-Tests hervor, die jetzt fehlschlagen oder Code, der jetzt nicht getestet wurde. Die Erhebung dieser Informationen in verschiedenen Detailgraden ermöglicht es Entwicklern und Testern, schnell zu erkennen, was für den nächsten Testlauf geändert/korrigiert werden muss.

Mit Parasoft können sich Teams auf die Codeabdeckung für die Bereiche der aktiven Entwicklung konzentrieren, anstatt auf die gesamte Codebasis, was insbesondere bei der Arbeit mit Legacy-Codebasen problematisch sein kann. Anstatt nur zu versuchen, eine Abdeckungsnummer für die gesamte Codebasis zu erreichen, hilft Ihnen Parasoft dabei, die Teile des Codes zu lokalisieren, die sich ändern.

Das Reporting-Dashboard von Parasoft korreliert die Daten von C/C++test mit beobachteten Änderungen in der Codebasis, um das Entwicklungsteam darauf zu konzentrieren, eine höhere Codeabdeckung für diese spezifischen, modifizierten Teile der Codebasis zu erreichen. Mit Parasoft können Sie die Auswirkungen von Änderungen minimieren, indem Sie die Änderung selbst effizient verwalten.

Häufig gestellte Fragen