10 Stimmen

C eingebettet automatische Generierung von Einheitstests

Gibt es eine SW zur Erstellung von Unit-Tests in C und eingebetteten Anwendungen? Der Grund, warum ich frage, ist, dass mein Chef mir sagte, er habe von jemandem gehört, dass "Sie brauchen ein Tool, um den Code zu analysieren und 80% aller relevanten Testfälle automatisch zu erstellen, die restlichen 20% verwenden Sie Ihre ganze Zeit und konzentrieren sich auf", sonst würde es "zu viel Zeit".

Ich stehe dieser Aussage sehr skeptisch gegenüber und kann nicht klar erkennen, welche Art von Tests automatisch generiert werden könnten und ob sie überhaupt etwas taugen würden.

Ich kann mir jedoch vorstellen, dass es möglich wäre, automatisch Schnittstellentests für die APIs zu erstellen.

Kann mich jemand über dieses Problem aufklären?

6voto

linuxbuild Punkte 15460

Ich empfehle API-Sanity-Checker Werkzeug:

Ein automatischer Generator für grundlegende Einheitstests für eine gemeinsam genutzte C/C++-Bibliothek. Er ist in der Lage, vernünftige (in den meisten, aber leider nicht allen Fällen) Eingabedaten für Parameter zu generieren und einfache ("sanity" oder "shallow"-Qualität) Testfälle für jede Funktion in der API durch die Analyse von Deklarationen in Header-Dateien zu komponieren.

Die Qualität der generierten Tests erlaubt es, die Abwesenheit von kritischen Fehlern in einfachen Anwendungsfällen zu überprüfen. Das Tool ist in der Lage, generierte Tests zu erstellen und auszuführen und Abstürze (Segfaults), Abbrüche, alle Arten von ausgegebenen Signalen, Programmrückgabecodes ungleich Null und Programmaufhängungen zu erkennen.

Einzigartige Merkmale:

  • Automatische Generierung von Eingabeargumenten und Testdaten (auch für komplexe Datentypen)
  • Modern spezielle Typen anstelle von Vorrichtungen und Schablonen

Siehe Beispiele für FreiTyp2 .

enter image description here

Ich bin der Autor dieses Projekts und Sie können mir alle Fragen dazu stellen.

5voto

graham.reeds Punkte 15745

Ihr Chef hat das falsche Ende der Fahnenstange erwischt.

Mir sind keine Tools bekannt, die Unit-Tests für Sie generieren.

Was er vielleicht falsch versteht, ist Code-Abdeckung y Unit-Tests . Obwohl sie miteinander verbunden sind, handelt es sich doch um unterschiedliche Themen.

Code Coverage instrumentiert Ihren Code und gibt Ihnen nach Abschluss der Ausführung Auskunft darüber, wie viel von Ihrem Quellcode während der Ausführung verwendet wurde. Dies ist beim Unit-Testing nützlich, da es Ihnen effektiv zeigt, wo Sie getestet haben und wo Sie Ihre Arbeit konzentrieren müssen.

Es ist relativ einfach, die ersten zwei Drittel des Codes abzudecken, aber mit abnehmenden Erträgen braucht man viel Zeit und Mühe, um in die Nähe der magischen 100% zu kommen.

2voto

Sandy Punkte 51

Wenn man nach "Unit Test Generator" googelt, findet man eine ganze Menge, aber ich weiß nicht, ob sie etwas taugen oder ob sie für Ihren Fall geeignet sind.

Es handelt sich nicht um Unit-Tests, aber Sie können den Code mit Lint oder ähnlichen Tools überprüfen. Siehe: http://www.lysator.liu.se/c/ten-commandments.html Ein aktuelles Open-Source-Tool ist splint http://www.splint.org/

In den Büchern von Jon Bentley wird die Rolle von "Scaffolding"-Code, einschließlich Test-Scaffolds, gut diskutiert.

2voto

Richard Punkte 41

Zunächst einmal, was meinen Sie mit Unit-Test und Unit-Tests generieren?

Meinen Sie die Erstellung eines Frameworks, eines Test-Harness, oder meinen Sie die Erstellung eines Tests mit Daten und Datenüberprüfungen oder Assertions, der tatsächlich Ihren Code aufruft. Und in letzterem Fall, wie wird dieser Test generiert?

Noch grundsätzlicher: Warum testen Sie? Befolgen Sie eine Norm, die ein bestimmtes Maß an Tests vorschreibt, oder versuchen Sie "nur", Risiken und Kosten in späteren Entwicklungsphasen zu reduzieren? Oder vielleicht bauen Sie auf einem bestehenden System auf und wollen nur sicherstellen, dass Sie keine bestehenden Funktionen zerstören.

In einer früheren Antwort wurde Cantata erwähnt. Wir haben kürzlich eine neue Version mit einer Komponente namens "Baseline Testing" veröffentlicht. Dies könnte genau das sein, wonach Sie suchen. Es erstellt für C-Code eine Reihe von Unit-Tests, die Testfälle enthalten, die eine gute Chance haben, jede Ihrer Quelldateien vollständig zu testen. Das Tool erreicht dies, indem es Ihren Quellcode liest und eine Reihe von Tests erstellt, die die Ausführung auf jedem Pfad vorantreiben, um Ihr gewünschtes Abdeckungsziel zu erreichen - 100% Anweisungs-, Entscheidungs- oder sogar MC/DC-Abdeckung. Das Ziel ist es, Ihren Quellcode als Teil der laufenden Entwicklung eines Altsystems zu überprüfen oder Lücken in der Abdeckung nach funktionalen oder Systemtests zu schließen.

Siehe die Kantate++ Webseite für weitere Informationen (und kostenlose Bewertungen)

1voto

erik Punkte 3900

Wir verwenden CANtata hier, wo ich arbeite, für die Erstellung von Unit-Tests / Code Coverage. Seine anständige, obwohl ich mir vorstellen, es ist ein bisschen teuer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X