C eingebettete automatische Einheitentestgenerierung

8

Gibt es eine SW, um Komponententests in C- und Embedded-Anwendungen zu generieren? Der Grund, warum ich frage, ist, dass mein Chef mir sagte, dass er von jemandem gehört hat: "Sie brauchen ein Werkzeug, um den Code zu analysieren und 80% aller relevanten Testfälle automatisch zu erstellen, die restlichen 20% verwenden Sie Ihre gesamte Zeit und konzentrieren sich auf", sonst es würde "zu viel Zeit" dauern.

Ich bin sehr skeptisch gegenüber dieser Aussage und kann nicht klar sehen, welche Tests automatisch generiert werden könnten und ob sie überhaupt gut wären.

Ich kann jedoch sehen, dass es möglich ist, Schnittstelleneinheitentests automatisch für die API zu generieren: s.

Kann mich jemand zu diesem Thema aufklären?

    
Henrik 11.05.2010, 11:14
quelle

7 Antworten

5

Ihr Chef hat das falsche Ende des Stocks.

Ich kenne keine Werkzeuge, die Komponententests für Sie generieren.

Was er vielleicht verwechselt, ist Codeabdeckung und Komponententests . Während sie verwandt sind, sind sie in der Tat separate Probleme.

Code-Coverage wird Ihren Code instrumentieren und sobald Sie fertig sind, geben Sie an, wie viel Ihrer Quelle im Lauf verwendet wurde. Dies ist beim Komponententest nützlich, da es Ihnen zeigt, wo Sie getestet haben und wo Sie Ihre Arbeit konzentrieren müssen.

Es ist ziemlich einfach, die ersten zwei Drittel des Codes zu bekommen, aber abnehmende Renditen bedeuten, dass man sich einer Magie von 100% annähern muss. Das kostet viel Zeit und Mühe.

    
graham.reeds 11.05.2010, 12:07
quelle
5

Ich empfehle das Tool für die API-Gesundheitsprüfung :

  

Ein automatischer Generator von Grundeinheitstests für eine gemeinsame C / C ++ Bibliothek. Es ist in der Lage, (in den meisten, aber leider nicht allen Fällen) Eingabedaten für Parameter zu erzeugen und einfache ("Vernunft" oder "flache") Testfälle für jede Funktion in der API durch die Analyse von Deklarationen im Header zu erstellen Dateien.

     

Die Qualität der generierten Tests ermöglicht die Überprüfung der Abwesenheit von kritischen Fehlern in einfachen Anwendungsfällen. Das Tool ist in der Lage, generierte Tests zu erstellen und auszuführen und Abstürze (segfaults), Abbrüche, alle Arten von ausgesendeten Signalen, Programm-Rückkehrcode ungleich Null und Programmbehang zu erkennen.

Einzigartige Funktionen:

  • Automatische Generierung von Eingabeargumenten und Testdaten (auch für komplexe Datentypen)
  • Moderne Spezialtypen anstelle von Fixtures und Templates

Siehe Beispiele für FreeType2 .

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

    
aponomarenko 26.01.2011 11:05
quelle
2

Zunächst einmal, was meinst du mit Komponententest und generiere Komponententests?

Meinst du damit ein Framework, ein Test-Harness generieren oder einen Test mit Daten- und Daten-Checks oder Assertions generieren, der deinen Code tatsächlich aufruft? Und wie wird dieser Test im zweiten Fall generiert?

Grundlegend, warum testen Sie? Folgen Sie einem Standard, der ein gewisses Maß an Tests erfordert, oder versuchen Sie "nur" in späteren Entwicklungsphasen Risiken und Kosten zu reduzieren? Oder vielleicht bauen Sie auf einem bestehenden System auf und möchten nur sicherstellen, dass Sie keine vorhandenen Funktionen unterbrechen.

Eine frühere Antwort erwähnt Cantata, wir haben vor kurzem eine neue Version mit einer Komponente namens "Baseline-Tests" veröffentlicht. Dies könnte genau das sein, was Sie suchen. Es wird für C-Code eine Reihe von Komponententests erstellen, die Testfälle enthalten, die eine gute Chance haben, jede Ihrer Quelldateien vollständig auszuprobieren. Das Tool erreicht dies, indem es Ihre Quelle liest und eine Reihe von Tests erstellt, die die Ausführung auf jedem Pfad verfolgen, um das gewünschte Abdeckungsziel zu erreichen - 100% Aussage, Entscheidung oder sogar MC / DC-Abdeckung. Die Absicht ist, Ihren Quellcode als Teil der fortlaufenden Entwicklung eines Legacy-Systems zu "basiseln" oder Lücken nach funktionalen oder vielleicht auch Systemtests zu schließen.

Weitere Informationen (und kostenlose Bewertungen) finden Sie auf der Cantata ++ Webseite

    
Richard 04.02.2011 20:12
quelle
1

Googeln "Unit Test Generator" macht eine Menge Dinge, aber ich weiß nicht, ob sie gut sind, oder ob sie zu Ihrem Fall passen.

Es ist kein Unit-Test, aber Sie können Code-Checks mit Lint oder verwandten Tools durchführen. Siehe: Ссылка Ich denke, ein aktuelles Open-Source-Tool ist splint Ссылка

Jon Bentleys Bücher haben eine gute Diskussion über die Rolle von "Scaffolding" -Code, einschließlich Testgerüsten.

    
Sandy 11.05.2010 12:56
quelle
0

Wir verwenden hier CANtata , wo ich für die Generierung von Unit-Tests / Code-Coverage arbeite. Es ist anständig, obwohl ich mir vorstellen kann, dass es ein bisschen teuer ist.

    
espais 11.05.2010 13:08
quelle
0

Wir verwenden IBM RTRT

Ссылка

Obwohl wir es in unserem Anwendungsfall nicht verwenden, um die Tests zu generieren, habe ich einige Möglichkeiten gesehen, um zumindest das Skelett zu erzeugen.

    
XAder 11.05.2010 14:04
quelle
0
  

Gibt es eine SW, um Komponententests in C- und Embedded-Anwendungen zu generieren?

Ja. Rational Test Realtime von IBM wird die gute Wahl sein.

  

ein Werkzeug, um den Code zu analysieren und 80% aller relevanten Testfälle automatisch zu erstellen

Nein. Es gibt kein Werkzeug, das diese Arbeit für alle Arten von C-Quellcodes ausführen kann.

Aber für einige Fälle ja. Zum Beispiel, in meinem Fall habe ich eine große Menge von C-Quellcodes benötigt, um vom Kunden getestet zu werden. Da jedoch jede Quelldatei sehr ähnlich ist, erstellen wir ein kleines Tool, das jede Datei liest und einen Testfall generiert (in der Skriptsprache des Unit Testing Tools) und dann vom Unit Testing Tool ausführt. Und ja, in diesem Fall spart es 80% Aufwand.

Sie könnten also überlegen, dies zu tun, die ähnlichen Quellcodes zu finden und Ihr eigenes Werkzeug zu erstellen, das einen Testfall für das ähnliche erzeugen kann.

    
Nik 02.08.2015 04:33
quelle