Gehen Sie einen schnelleren, intelligenteren Weg zur KI-gestützten C/C++-Testautomatisierung. Erfahren Sie mehr >>
Machen Sie eine selbstgeführte Tour durch Parasoft C/C++test!
Erfahren Sie, wie Sie die Einhaltung von DO-178C erreichen.
LoslegenWEBINAR
Die Einhaltung der DO-178C-Vorschriften für Software in Avioniksystemen stellt besondere Herausforderungen dar, insbesondere wenn es darum geht, eine umfassende strukturelle Abdeckung auf Objektcodeebene sicherzustellen. Diese Präsentation untersucht praktische Methoden zur Optimierung dieses Prozesses und konzentriert sich dabei auf die Reduzierung des Testaufwands und die Beschleunigung der Markteinführung.
Lernen Sie Methoden kennen, um Tests zu fokussieren und redundanten Aufwand beim Testen der strukturellen Maschinencodeabdeckung zu reduzieren, wie in DO-178C 6.4.4.2 beschrieben. Hochentwickelte Quellsprachen wie C++ entwickeln sich ständig weiter. Je einfacher es für einen Entwickler ist, sich über eine höhere Quellsprache auszudrücken, desto schwieriger ist es, den entsprechenden, vom Compiler generierten Maschinencode zu verfolgen.
Anhand von Beispielen verfolgt diese Präsentation einen iterativen Ansatz für den Prozess der Erstellung einer vollständigen strukturellen Abdeckung von Maschinencode und zeigt Best Practices in der Praxis, um die Markteinführungszeit zu verkürzen.
Key Take Away
DO-178C-Konformität umfasst mehrere wichtige Ziele, die durch den Design Assurance Level (DAL) Ihrer Software beeinflusst werden können. Dazu gehören:
Parasoft bietet Lösungen zur Bewältigung dieser Herausforderungen, darunter Integrationen mit ALM-Tools zur Rückverfolgbarkeit, Unterstützung verschiedener Codierungsstandards und Funktionen zur gezielten Hardwareüberprüfung.
Entdecken Sie, wie DO-178C den Software-Compliance-Prozess strukturiert in unserem ausführlichen Ratgeber.
Korrektheit auf Objektcodeebene zu erreichen, ist eine anspruchsvolle Aufgabe. Die Strategie besteht darin, sich auf kleine, isolierte Lückenbereiche mit mangelhafter struktureller Abdeckung zu konzentrieren. Dazu werden die Ergebnisse von Testverfahren auf Quellcodeebene mithilfe von Objektinstrumentierung ausgewertet.
Durch Instrumentierung auf Quellcodeebene für Anforderungen, MCDC (Modified Condition/Decision Coverage) und On-Target-Tests erreichen Sie eine nahezu vollständige strukturelle Abdeckung auf Objektebene, ohne den Objektcode zunächst direkt untersuchen zu müssen. Kumulative Berichte können dann Ergebnisse verschiedener Testmethoden mit Instrumentierung auf Objektebene kombinieren.
Betrachten Sie eine einfache A OR B Ausdruck. Um eine 100%ige MCDC-Abdeckung auf Quellebene zu erreichen, sind drei Testläufe erforderlich, um A und B. Wenn dieser C-Code kompiliert wird, kann die resultierende Assembly unterschiedliche Verzweigungsstrukturen aufweisen.
Wenn Sie MCDC-Tests von Grund auf auf Assemblyebene durchführen, verpassen Sie möglicherweise die Abdeckung von Verzweigungsanweisungen, wenn Sie einen erforderlichen Testlauf auslassen. Wenn Sie jedoch bereits MCDC-Tests auf Quellcodeebene durchgeführt haben, ist dieser dritte Testlauf wahrscheinlich bereits enthalten, sodass Sie ohne zusätzlichen Aufwand eine vollständige Abdeckung auf Assemblyebene erhalten.
Compiler führen häufig implizite Prüfungen, Grenzwertprüfungen oder Optimierungen ein, die im Quellcode auf höherer Ebene nicht direkt erkennbar sind. Dies kann zu einer unzureichenden Abdeckung allein auf Quellcodeebene führen.
Beispielsweise kann beim Testen einer C-Funktion eine MCDC-Abdeckung von 100 % auf Quellcodeebene erreicht werden. Bei der Untersuchung der Assembly-Ausgabe kann jedoch eine Verzweigungsabdeckung von 97 % mit einer bestimmten Sprunganweisung (z. B. jump if above to L51) nicht ausgeübt wird.
Dieser Mangel könnte auf eine vom Compiler eingeführte Prüfung des Enumerationswerts außerhalb des zulässigen Bereichs zurückzuführen sein. Um dies zu beheben, können Sie einen spezifischen Testfall mit einem Parameter erstellen, der den Enumerationswert außerhalb des erwarteten Bereichs zwingt. Indem Sie diesen isolierten Test ausführen und seine Abdeckungsergebnisse mit Ihrer vorhandenen MCDC-Abdeckung zusammenführen, können Sie die Lücke schließen und die Gesamtabdeckung des Zweigs erhöhen.
Einige vom Compiler generierte Konstrukte, wie Dateiformatierung, funktionale Schnittstellen oder Systemprüfungen (z. B. Stack-Smashing-Schutz), sind möglicherweise nicht direkt im Quellcode abgebildet. Um diese abzudecken, müssen Sie die Produktions-Ausführbare selbst instrumentieren.
Wenn beispielsweise eine Funktion mit einem Stack-Check-Fail-Aufruf endet und dieser Pfad nicht durch Ihre Unit-Tests abgedeckt ist, instrumentieren Sie die Produktions-Ausführbare. Indem Sie diese instrumentierte Ausführbare ausführen und ihren Zustand manipulieren (z. B. einen Registerwert wie RCX um einen Sprung zum Scheitern zu bringen), können Sie den mangelhaften Pfad ausführen. Die Abdeckungsdaten aus dieser Ausführung können dann mit Ihren vorhandenen Abdeckungsberichten zusammengeführt werden, wodurch eine Anweisungsabdeckung von 100 % für diesen Abschnitt erreicht wird.