Machen Sie manuelle Regressionstests schneller, intelligenter und zielgerichteter. Sehen Sie es in Aktion >>
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 Strukturelle Codeabdeckung für C- und C++-Entwicklung, wobei der Schwerpunkt auf der Bedeutung für sicherheitskritische Systeme liegt und verschiedene Messkriterien wie Anweisungs-, Zweig- und MC/DC-Abdeckung untersucht werden. Wir behandeln auch praktische Methoden zum Erreichen und Automatisieren der Codeabdeckung.
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:
Der gebräuchlichste Weg nach Codeabdeckung abrufen erfolgt durch Code-Instrumentierung. Dabei werden Ihrem ursprünglichen Quellcode kleine Codeteile hinzugefügt. Diese Ergänzungen verfolgen, ob eine Anweisung, Entscheidung oder ein Zweig ausgeführt wurde. Die Instrumentierung protokolliert diese Informationen anschließend, sodass Tools einen Abdeckungsprozentsatz berechnen und visualisieren können, welche Codeteile betroffen sind.
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.
Abdeckungsberater Funktionen können Ihren Code analysieren und spezifische Parameterwerte oder Vorbedingungen für Ihre Unit-Tests vorschlagen, um bestimmte Zeilen oder Zweige abzudecken. Dies kann die Erstellung von Testfällen drastisch beschleunigen.
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 strukturellen Abdeckungsanforderungen erfüllen. Diese generierten Tests umfassen häufig verschiedene Arten von Prüfungen, wie Nullzeigertests, Grenzwerttests und Mid-Max-Tests, um potenzielle Fehler aufzudecken und die Abdeckung 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.