Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »
Erfahren Sie mehr über Parasoft C/C++test.
Nehmen Sie an unserer monatlichen 30-minütigen Produktdemo teil.
Jetzt registrierenWeiterführende Inhalte
WEBINAR
Strukturelle Abdeckung ist die Identifizierung von Code, der ausgeführt und protokolliert wurde. Es gibt mehrere Gründe, warum es wichtig ist, diese Aktivität für eingebettete sicherheitskritische Systeme durchzuführen. Zum einen muss festgestellt werden, ob die Software ausreichend getestet wurde. Eine weitere besteht darin, Compliance- und Zertifizierungsanforderungen zu erfüllen. Möglicherweise möchten Sie auch sicherstellen, dass Ihre Software keinen toten Code enthält.
Diese Präsentation befasst sich eingehend mit der strukturellen Codeabdeckung in der C- und C++-Entwicklung . Der Fokus liegt dabei auf ihrer Bedeutung für sicherheitskritische Systeme. Verschiedene Messkriterien wie Anweisungs-, Zweig- und MC/DC-Abdeckung werden erläutert. Zudem werden praktische Methoden zur Erreichung und Automatisierung der Codeabdeckung vorgestellt.
Wir zeigen Ihnen die strukturelle Codeabdeckung für Anweisung, Zweig und MC/DC sowie automatisierte Berichte und Metriken für Codeabdeckung und Codekomplexität.
Bei der Codeabdeckung geht es darum, zu ermitteln, welche Teile Ihres Codes während des Tests tatsächlich ausgeführt wurden. Sie ist eine wichtige Kennzahl, um festzustellen, ob Ihre Software gründlich genug getestet wurde. Bei sicherheitskritischen eingebetteten Systemen ist dies für die Einhaltung von Vorschriften und die Zertifizierung von entscheidender Bedeutung. Außerdem hilft sie Ihnen, toten Code zu finden und zu eliminieren – Code, der nie ausgeführt wird.
Im Wesentlichen beantwortet die Codeabdeckung die Frage: „Habe ich genug getestet?“ Sie hilft auch, Fehler in ungetesteten Abschnitten aufzudecken. Die große Frage ist: Wollen Sie diese ungetesteten Bereiche riskieren? In vielen regulierten Branchen haben Sie möglicherweise keine Wahl – Sie müssen möglicherweise eine 100-prozentige Abdeckung erreichen.
Während der Demonstration werden die wichtigsten Funktionen vorgestellt:
Die gängigste Methode zur Ermittlung der Codeabdeckung ist die Codeinstrumentierung. Dabei werden dem ursprünglichen Quellcode kleine Codeabschnitte hinzugefügt. Diese Ergänzungen protokollieren, ob eine Anweisung, eine Entscheidung oder ein Zweig ausgeführt wurde. Die Instrumentierung speichert diese Informationen, sodass Tools den Abdeckungsgrad berechnen und visualisieren können, welche Codeabschnitte ausgeführt wurden.
Möglicherweise sehen Sie Ihren Code grün hervorgehoben (getestet) mit einigen roten Teilen (ungetestet). Einige Tools zeigen teilweise abgedeckten Code an, oft in Gelb. Dies kann bei einem if Anweisung mit mehreren Bedingungen, bei der nicht alle möglichen Ergebnisse dieser Bedingungen getestet wurden.
Wenn wir über strukturelle Abdeckung sprechen, betrachten wir verschiedene Möglichkeiten, um zu messen, wie gründlich die Struktur des Codes getestet wurde. Obwohl Begriffe manchmal überladen sind oder branchenübergreifend unterschiedlich interpretiert werden, sind die wichtigsten Typen für sicherheitskritische C- und C++-Anwendungen:
true und false Ergebnisse einer if Anweisung) wurde ausgeführt.(A && B), MC/DC erfordert Tests, die zeigen A das Ergebnis zu ändern, während B ist festgelegt und B das Ergebnis zu ändern, während A ist behoben, zusätzlich zum Testen aller Zweige.Es gibt noch weitere Typen, wie etwa Bedingungsabdeckung (Testen einzelner Bedingungen) und Zeilenabdeckung (Sicherstellen der Ausführung jeder Zeile, was sich von der Anweisungsabdeckung unterscheiden kann, wenn mehrere Anweisungen in einer Zeile stehen). Anweisung, Verzweigung und MC/DC werden in Sicherheitsstandards jedoch am häufigsten genannt.
Das manuelle Ermitteln der genauen Testfälle, die zum Erreichen bestimmter Abdeckungsziele erforderlich sind, kann unglaublich zeitaufwändig sein. Glücklicherweise können Tools erheblich helfen.
Die Funktionen von Coverage Advisor analysieren Ihren Code und schlagen spezifische Parameterwerte oder Vorbedingungen für Ihre Unit-Tests vor, damit diese bestimmte Zeilen oder Zweige erreichen. Dies kann die Erstellung von Testfällen erheblich beschleunigen.
Die automatisierte Generierung von Unit-Testfällen ist eine weitere leistungsstarke Funktion. Tools können automatisch eine Reihe von Unit-Tests generieren, die nicht nur die Funktionalität prüfen, sondern auch Ihre Anforderungen an die strukturelle Testabdeckung erfüllen. Diese generierten Tests umfassen häufig verschiedene Arten von Prüfungen, wie z. B. Nullzeigertests, Grenzwerttests und Midmax-Tests, um potenzielle Fehler aufzudecken und die Testabdeckung zu verbessern.
Es ist selten, dass eine einzelne Testmethode eine 100%ige Abdeckung erreicht, insbesondere wenn Ihr Ziel hoch ist. So können verschiedene Methoden kombiniert werden:
Moderne Tools ermöglichen die Zusammenführung der Abdeckungsergebnisse aus diesen verschiedenen Testmethoden. Dadurch erhalten Sie eine konsolidierte Ansicht Ihrer gesamten Codeabdeckung und erfüllen Compliance-Anforderungen, die eine Kombination von Metriken zulassen.
Für die moderne Entwicklung ist die Integration der Codeabdeckung in Ihre Continuous Integration/Continuous Delivery (CI/CD)-Pipeline entscheidend. Tools können Ihre Anwendung im Rahmen des Build-Prozesses instrumentieren, Rohdaten zur Codeabdeckung während automatisierter Tests erfassen und diese Daten anschließend in Ihrer IDE oder einem zentralen Dashboard (wie der DTP – Development Testing Platform von Parasoft) protokollieren.
Dies ermöglicht kontinuierliches Feedback zu Codequalität und -risiken und ermöglicht so eine bessere Entscheidungsfindung während des gesamten Entwicklungslebenszyklus. Integrationen mit gängigen CI/CD-Tools wie Jenkins, GitLab und Azure DevOps sind üblich.
Strukturelle Codeabdeckung ist ein wichtiges Verfahren zur Gewährleistung der Qualität, Sicherheit und Zuverlässigkeit von Software, insbesondere in regulierten Branchen. Durch das Verständnis der verschiedenen Abdeckungsarten, die Nutzung von Automatisierung und die Integration der Abdeckungsanalyse in Ihren Entwicklungsworkflow können Sie Compliance-Anforderungen effektiv erfüllen und robustere Software erstellen.