Frage

Ich habe vor kurzem begonnen habe, auf ein sehr großes C ++ Projekt arbeiten, das, nachdem 90% der Umsetzung abgeschlossen, festgestellt hat, dass sie 100% Zweigüberdeckung während des Tests nachweisen müssen. Das Projekt ist auf einer Embedded-Plattform (Green Hills Integrität) gehostet. Ich suche nach Anregungen und Erfahrungen von anderen auf Stackoverflow, die Code-Coverage-Produkte in ähnlichen Umgebungen verwendet hat. Ich habe Interesse an positiven und negativen Kommentaren in Bezug auf diese Arten von Werkzeugen.

War es hilfreich?

Lösung

100% Zweigüberdeckung? Das ist ganz die Forderung, zumal einige Zweige (Standardwerte in case-Anweisungen für Zustandsmaschinen, zum Beispiel) sollen nicht möglich sein, zu laufen. Ich erwarte, dass es einige Ausnahmen, und wenn es nicht sind Sie vielleicht verstehen müssen, was Deckung Tests und kann nicht erreichen, bevor Sie beginnen - sonst werden Sie Ihre Haare, oder noch schlimmer am Ende ziehen - gibt falsche Daten.

Die meisten Deckung Tests für eingebettete Systeme sind tatsächlich auf PC ausgeführt. Der Code wird portiert, bestimmte Aspekte des Mikrocontrollers sind in Software emuliert und Bullseye oder einem anderen ähnlichen PC Code Coverage Dienstprogramm ausgeführt wird. Der Grund, warum dies geschehen ist, ist, dass es zu viele Mikrocontroller und Compiler / Debugger / Testumgebungen Code-Coverage-Tools für jeden zu entwickeln.

Wenn Code-Coverage-Tools Sie für eine bestimmte Embedded-Plattform existieren sie nicht so mächtig sind, konfigurierbar, einfach zu bedienen und fehlerfrei wie die für die PC-Plattform entwickelt. Die Prozessoren haben nicht oft die Spur Fähigkeit (ohne High-End-Emulation Hardware) erforderlich, um eine gute Codeabdeckung durchführen, ohne das Einfügen zusätzlicher Debug-Code in Ihre Firmware, die dann Folgen und Nebenwirkungen hat, die schwer zu kontrollieren, vor allem mit Timing-Probleme in Echtzeitsysteme.

Portierungs Code über nicht sehr schwierig ist, so lange wie Sie können abstrakt die Hardware-spezifischen Code (und da Sie verwenden C ++ richtig, dass einfach sein sollte, nicht wahr? ;-D). Das größte Problem, das Sie den Weg laufen müssen, ist Arten, die während besser in C ++ angegeben, als sie in C noch einige Probleme aufwerfen waren. Stellen Sie sicher, dass Sie mit einem types.h oder ähnlichem Setup speziell den Compiler zu sagen, genau das, was jeder Typ Sie verwenden ist und wie sie interpretiert werden sollen.

Danach können Sie in der Stadt gehen auf dem PC, um die Kernlogik zu testen. Sie können sogar die geringen Hardware-Treiber testen, ob Sie die Software-Emulation in der Entwicklung, die für die interessiert sind, obwohl Timing-Probleme etwas lästig sein können.

Software-Test-Tools wie MxVDev führen viele der Mikrocontroller-Emulation für Sie und helfen bei der Timing-Probleme wie gut, aber Sie werden noch ein bisschen Arbeit selbst mit einer solchen Hilfe.

Wenn Sie dies auf dem System tun muss selbst, werden Sie einen Emulator für den Prozessor mit einer Deckungssumme Fähigkeit erwerben müssen - keine billiger Satz (viele Emulatoren Kosten nach oben von $ 30k für den vollständigen Satz von Werkzeugen und Emulations-Hardware) , aber es ist eine der viele Werkzeuge in hohen Zuverlässigkeit Umgebungen wie die Automobil- und Luftfahrtindustrie verwendet wird.

-Adam

Disclaimer:. Ich für das Unternehmen arbeiten, die MxVDev produziert

Andere Tipps

Wir haben verwendet Cantata und Vector in der Vergangenheit für Unit-Tests und Code-Coverage. Wir verwenden auch die Greenhills Tools und beide dieser Werkzeuge arbeiten mit den greenEntwicklungsTools. Wir führen die meisten unseren Test auf dem PPC-Simulator und nur Test ausführen, die über einen JTAG-Pod auf der Ziel-Hardware auf Hardware angewiesen. Canatata und Vector gegossen ist sehr ähnlich mit catata nur etwas einfacher zu bedienen und hat etwas mehr Features, aber die kleinen Extras machen einen großen Unterschied in der Benutzererfahrung.

Generell gilt: Wenn Sie Sie ein hohes Maß an Zweigüberdeckung erreichen wollen, müssen Sie den Code für die Testbarkeit entwerfen. Je mehr Sie testen die mehr Sie lernen über prüfbaren Code zu schreiben.

Wir haben auch versucht, PC-Tests im Vergleich zu Embedded-Test hat uns Probleme wegen Endianess aber das ist nur ein Problem bei der Hardware-Ebene.

Darüber hinaus diese Werkzeuge sind zertifiziert nach RTCA / DO-178B-Standard.

Wie bei Adam, wir Port unsere eingebetteten Code auf einem PC-basierten Gurtzeug und tun die meisten aus Abdeckung und Profilierung gibt. Ich habe verwendet AutomatedQA AQTime und Compuwares DevPartner, beide sind gute Produkte,

Wenn Sie hatte Abdeckung ob-Board zu tun, müssten Sie eine Abdeckung Profiler verwenden, die eine instrumentierte Version der Quelle erstellt. Es gibt sowohl kommerzielle als auch Open-Source-Tools zur Verfügung, dies zu tun, aber IMO, fügt es eine Menge Arbeit für nicht viel zu gewinnen.

100% Abdeckung ist ehrgeizig, wie Sie eine Menge von Fehlerinjektion benötigt, in alle Ihre Fehler-Handler und Exception-Handler zu erhalten. IMO, würde dies auch einfacher sein, in einem Gurtzeug zu tun, als an Bord.

Es ist auch beachtenswert, wem auch immer für 100% Code Coverage, dass 100% Codeabdeckung in keiner Weise entspricht 100% Testabdeckung gebeten hat. Betrachten Sie zum Beispiel die folgende Funktion;

int div(int a, int b)
{
return (a/b);
}

100% Codeabdeckung erfordert nur uns einmal diese Funktion aufzurufen, 100% Testabdeckung würde viel mehr Anrufe erfordern. Mein eigener Test strategey beinhaltet automatisierte Testfälle zu entwickeln, um mir ein akzeptables Maß an Testabdeckung und mit einem Code-Coverage-Tool lediglich als Hilfsmittel für ungetestete Bereiche zu suchen. In gewissem Maße hängt es von Ihrem Test Budget; für mich zu 100% Codeabdeckung zu teure Art und Weise für das, was es bietet.

Siehe SD C ++ Test Coverage . Dies ist eine Familie von (Zweig) Testabdeckung Werkzeugen für eine Vielzahl von Dialekten von C ++ (ANSI, GNU, MS ...), die gut auch in tatsächlichen Embedded-Systemen Hardware aufgrund spielen, einen sehr geringen Platzbedarf zu haben und mit einem leicht Art und Weise gesammelt Testabdeckung Daten zu exportieren. Es gibt eine GUI Abdeckung Anzeige, die auf Ihrem aktuellen Embedded-Hardware abhängig ist, dass auch eine vollständige Abdeckung Bericht Zusammenfassung erzeugen.

[Ich bin ein Haupt in der Firma, die diese Werkzeuge zur Verfügung stellt.]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top