ASTQ Summit ist auf Anfrage verfügbar! Hören Sie, wie Branchenführer berichten, wie sie kontinuierliche Qualität liefern. Jetzt ansehen >>

X

Bewerten und gewährleisten Sie das Vertrauen in Ihre Testabdeckung

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 ausreichend getestet wurde. Die Codeabdeckung drückt den Grad aus, in dem der Quellcode der Anwendung durch alle Testverfahren, einschließlich Komponententests, manueller Tests, automatisierter Funktionstests und dergleichen, ausgeübt wird. Dies ermöglicht genauere Qualitäts- und Abdeckungsmetriken, während toter Code, ungetestete oder unzureichend getestete Teile der Anwendung aufgedeckt werden.

Infolgedessen bietet die Anwendungsabdeckung äußerst aussagekräftige Einblicke in das Risiko. In den meisten Organisationen sind Unit-Tests das primäre Instrument für die Abdeckung des Fahrens. Und während Unit-Tests eine wertvolle Testpraxis ist, die auch mehrere prozessorientierte Vorteile bietet, ist es auch teuer in Bezug auf das Know-how 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.

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 Metrik des Application Safety Integrity Level (SIL oder ASIL) ab, die in verschiedenen Branchen verwendet wird, und dem Development Assurance Level (DAL), der üblicherweise in der Avionik verwendet wird. Gründlichkeit bezieht sich auf die strukturellen Elemente im Code. Diese sind in der Regel auf die Code-Anweisung, Verzweigung, geänderte Bedingungsentscheidungen heruntergebrochen, und mit Parasoft können Sie auch auf eine viel feinere Ebene der Abdeckungsgranularität wie den Objektcode oder die Assemblersprache aufschlüsseln.

Vorteile der Codeabdeckung

Antworten: "Bin ich mit dem Test 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 Anforderungen an die Codeabdeckung für funktionale Sicherheitsstandards wie DO-178B/C, ISO 26262, IEC 62304, IEC 61508 und EN 50128. Die Anforderungen an die Codeabdeckung tragen dazu bei, die Codesicherheit, -sicherheit und -zuverlässigkeit zu gewährleisten, indem ungetesteter Code aufgedeckt und Fehler beseitigt werden.

Reduzieren Sie die Kosten von Defekten

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.

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. Eine aggregierte Abdeckung kann aus System-, Integrations-, Unit- 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

Die Codeinstrumentierung führt zu Code-Aufblähungen, und die Zunahme der Codegröße kann sich auf die Möglichkeit auswirken, den Code zum Testen auf Ihre speicherbeschränkte Zielhardware zu laden. Instrumentieren Sie Teile Ihres Codes nacheinander, führen Sie Ihre Tests aus und aggregieren Sie Ihre Abdeckungsmetriken aus jeder Ausführung.

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

Um mit der Erfassung der Codeabdeckung zu beginnen, machen Sie sich mit Ihren Abdeckungsanforderungen vertraut. Möglicherweise erfordern Ihre Branche und Art der Anwendung keine Abdeckungsmetriken, aber Sie möchten die Codequalität sicherstellen oder verbessern, daher könnten 75 % Ihr erstes Ziel sein.

Wenn Ihre Branche die Einhaltung eines Funktionsstandards wie DO-178C für Avionik oder ISO 26262 für Automotive oder IEC 62304 für Medizin erfordert, bestimmen Sie, ob Sie eine 100-prozentige Codeabdeckung benötigen oder ein anderer Prozentsatz der Codeabdeckung empfohlen wird. Außerdem sollten Sie wissen, welchen Coverage-Typ des strukturellen Codes Sie erfüllen müssen. Dabei kann es sich um Funktion, Zeile, Anweisung, Block, Aufruf, Pfad, Entscheidung, einfache Bedingung, MC/DC, Objekt/Assembly oder eine Kombination davon handeln.

Eine der einfachsten Möglichkeiten, Codeabdeckung zu erhalten, ist während der Implementierung, wenn Ingenieure Komponententestfälle erstellen, um ihren Code zu testen. Lösungen wie Parasoft C/C++test können direkt in Ihre IDE integriert werden und bieten diese Funktionalität und bieten dem Benutzer eine sehr kurze Lernkurve. Diese Unit-Testfälle können vom QA-Team für Regressionstests und/oder als Teil des Build-Prozesses in einem automatisierten CI-Pipeline-Workflow wiederverwendet werden.

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.

 

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 Coverage-Daten abrufen oder zusammenführen, um Ihre vollständigen Code-Coverage-Metriken zu erhalten. Abdeckungsberichte können aus 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.

Beispiel für Codeabdeckung

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

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

 

Warum Parasoft?

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

Strukturelle Codeabdeckung ist die Identifizierung von Code, der ausgeführt und protokolliert wurde, um festzustellen, ob das System ausreichend getestet wurde. Die Codeabdeckung drückt den Grad aus, in dem der Quellcode der Anwendung durch alle Testverfahren, einschließlich Komponententests, manueller Tests, automatisierter Funktionstests usw., verwendet wird. Dies ermöglicht genauere Qualitäts- und Abdeckungsmetriken, während toter Code, ungetestete oder nicht getestete Teile der Anwendung aufgedeckt werden. Infolgedessen bietet die Anwendungsabdeckung äußerst aussagekräftige Einblicke in das Risiko. In den meisten Organisationen sind Unit-Tests das primäre Instrument für die Abdeckung des Fahrens.

Die Codeabdeckung sollte durch Ihre Anforderungen oder Ziele für die Abdeckungsanforderungen bestimmt werden. Müssen Sie einen funktionalen Sicherheitsstandard (DO-178C für Avionik oder ISO 26262 für Automotive oder IEC 62304 für Medizintechnik) erfüllen, der eine Abdeckung von 100 % vorschreibt oder empfiehlt? Oder vielleicht möchten Sie einfach nur Ihre Codequalität verbessern, also könnten 60 % Ihr erstes Ziel sein. Bestimmen Sie außerdem, welchen Coverage-Typ des strukturellen Codes Sie erfüllen müssen. Dies können Aufruf, Zeile, Anweisung, Block, Funktion, Pfad, Entscheidung, einfache Bedingung, MC/DC, Objekt/Assembly oder eine Kombination davon sein.

Wir empfehlen eine Codeabdeckung von mindestens 60 %, die leicht zu erreichen sein sollte. Dies wird Ihnen etwas Trost geben, aber zu wissen, dass 40% des Codes nicht getestet wurden, kann Ihnen einige schlaflose Nächte bescheren.

Einige empfehlen 70-80%, aber der beste Weg, um festzustellen, ob Sie Ihren Abdeckungsprozentsatz erhöhen müssen, basiert auf der Anzahl der identifizierten Fehler. Wenn es sich um eine hohe Zahl handelt, ist die Codequalität ein Problem, und wir empfehlen, die Codeabdeckung zu erhöhen. Seien Sie sich bewusst, dass selbst bei einer 100%igen Codeabdeckung keine Garantie dafür ist, dass alle Fehler identifiziert wurden. Es bietet nur eine Reduzierung des Risikos.

Ja, eine 100%ige Codeabdeckung ist möglich. Dies erreichen Sie durch die Aggregation verschiedener Testmethoden und durch die Beobachtung der Codeausführung mit Ihrem Debugger. Unit-Tests können Sie beispielsweise Ihrem 100 %-Ziel sehr nahe bringen, aber für Codezeilen, deren Ausführung sehr spezifische Umstände erfordert, wie z. B. defensiver Code, kann es Wochen, Monate, Jahre dauern, oder Sie erreichen dieses Ereignis nie . Wenn Ihr Coverage-Tool keine Möglichkeit bietet, eine 100 %ige Codeabdeckung zu erreichen, können Sie Ihren Debugger verwenden und in einigen Fällen die Aufrufliste bearbeiten und den aufgedeckten Code durch Sichtprüfung durchgehen.

Zu wissen, dass Ihre Tests keinen ungetesteten Code ausgelassen haben, ist Ihr Signal. Ihre Ziele für die Analyse der Codeabdeckung sollten jedoch auf allen Compliance-Anforderungen oder dem Ziel Ihres Unternehmens basieren, die Codequalität zu verbessern. Wenn die Anforderung 100 % Anweisungsabdeckung, Zweigabdeckung und MC/DC-Abdeckung ist, ist dies Ihr Ziel. Wenn Sie alle Ihre Codezeilen getestet und den Prozentsatz der Abdeckung erreicht haben, den der Vertrag fordert, sind Sie fertig. Bedenken Sie, dass Open-Source-Tests nicht so genau oder zuverlässig sind wie professionell entwickelte Testtools. Daher sollten Sie zertifizierte Tools verwenden, wie sie Parasoft anbietet.

Absolut! Die Testautomatisierungslösungen von Parasoft verfügen über eine Integration in Azure-Pipelines und mit anderen Tools wie GitHub, GitLab, Jira und anderen, die Ihren Continuous Integration- und Continuous Delivery-Workflow automatisieren. Die Integrationen bieten Flexibilität, wie die Verwendung der Befehlszeilen-API, um nicht nur Code-Coverage-Tests, sondern alle Ihre Softwaretests durch Aufrufen all Ihrer Testsuiten zu automatisieren.