Cantata Logo - unit and integration testing tool for C/C++


AutoTest


Automatisierte Generierung von Testfällen

Was ist Cantata AutoTest?

Cantata AutoTest erstellt komplette Unit-Testskripte oder fügt bestehenden Cantata Skripten Testfälle zu. Es analysiert den C-Source Code, um alle möglichen Pfade durch den Code zu ermitteln, wie es von den Zielvorgaben einer strukturellen Codeabdeckung erwartet wird: 

  • 100% function Entry-points 
  • 100% Statements 
  • 100% Decisions 
  • 100% Unique Cause MC/DC

Ein Algorithmus erstellt Testfallvektoren, die alle erforderlichen Code-Pfade ausführen. Dieser Algorithmus nutzt die mächtige Cantata Funktionalität, um Daten und Parameter festzulegen und die Funktionsaufrufschnittstellen zu kontrollieren. 

 

Die von AutoTest generierten Testfälle können genauso wie User-generierte Fälle editiert werden. Darüber hinaus verfügt jeder Testfall über eine Beschreibung, durch welche Code-Pfade er erstellt wurde. Das macht es so einfach, ihn zu warten. 

Procedural and state machine testing diagram - Cantata procedural tests verify the processing logic or algorithms in functions - flow chart

Wobei hilft mir AutoTest?

KONFIGURIEREN VON AUTOMATISCHER TESTERSTELLUNG

 

Die Erstelloptionen von AutoTest können ganz einfach konfiguriert werden. Das geht sowohl über die GUI, wie auch über die Kommandozeile: 

  • Erforderliche Codeabdeckung (Regel-Set)

  • Wie werden Funktionsaufrufe simuliert oder abgefangen?

  • Werden globale statische Variablen empfangen? 

  • Statische Funktionen für Isolation-Unit-Tests oder Gruppen-Integrationstests

  • Welche Daten werden geprüft (zum Beispiel globale Daten, Argumente von Funktionsaufrufen, Rückgabewerte)

  • Optionale Einstellung von globalen Variablen in Funktionsaufrufen, um bestimmte Ausführungspfade zu erreichen

  • Generierung von Grenzwerten für Laufzeiten, Pfade, Listen, etc.

AutoTest Code Generation Screenshot - AutoTest Generation options can be easily configured - GUI - command line
Cantata code coverage - Measure Coverage - Function entry points - function call-returns - basic blocks - statements - decisions -loops - relational operators - boolean operators conditions - MC/DC

Die Auswahl eines Regelsatzes für die Codeabdeckung legt automatisch die Testtiefe fest (d.h. die Zahl notwendiger Testfälle, um die vorgegebene Codeabdeckung zu erreichen). Der Style wird durch die AutoTest spezifischen und allgemeinen Cantata Optionen für die Codegenerierung festgelegt.


Isolation-Unit-Tests oder Cluster-Integrationstests sowie die Verwendung von Black-Box oder White-Box Testansätzen ermöglichen die Flexibilität, um initiale Vorgaben an die Testtiefe und die Testwartbarkeit für zukünftige Codeänderungen einzuhalten.

 

 

AutoTest Generation Report Screenshot - identify code testability issues - AutoTest provides useful insight into any testability issues within the source code

ASPEKTE DER CODETESTBARKEIT IDENTIFIZIEREN 

 

Nicht immer kann AutoTest Tests generieren. Auch sind manche Tests unvollständig. In solchen Fällen bietet der AutoTest Generation Report einen detaillierten Einblick in den Quellcode für alle Aspekte der Tests.

 

Warnhinweise zeigen, wo und weshalb es nicht möglich war, Testfälle zu generieren. Die Warnungen weisen auf mögliche Probleme im Quellcode hin. Oder darauf, dass es nicht möglich war, ihn dynamisch zu testen. Aus diesem Grund kann der AutoTest Generation Report auch dann eine wertvolle Ergänzung sein, wenn AutoTests nicht dynamisch ausgeführt werden. 

TESTS ERSTELLEN MIT VOLLER CODEABDECKUNG

 

Der Cantata AutoTest Generation Report zeigt, welche Codeabdeckung beim Ausführen des jeweiligen Tests erreicht werden kann. Da Testfälle mit AutoTest zunächst einmal erzeugt werden, um sie später auch auszuführen, finden sich fehlgeschlagene Prüfungen dort, wo Coverage Rule Set die Abdeckung gegen ein Ziel prüft.

 

Selbstverständlich ist das Erreichen der vollen Codeabdeckung nur Teil der Testziele. Die von AutoTest generierten Testfälle können überprüft und den Anforderungen passend zugeordnet werden (weitere Details finden Sie in der Funktionalität "Cantata Requirements Traceability". In diesem Fall verringert AutoTest den Aufwand der Entwickler drastisch, wenn es darum geht, Testfallvektoren auszuwählen, um die Anforderungen zu prüfen.

AutoTest Results Summary Screenshot - generate tests with full code coverage - build summary - results summary - coverage summary

LÜCKEN IN DER CODEABDECKUNG: WIE GEHT CANTATA MIT GRENZFÄLLEN UM? 

 

Bei sehr komplexem Code kann es passieren, dass nicht alle Ausführungspfade getestet werden können. Da helfen auch detaillierte Anforderungen und eingehende Robustheitstests nicht weiter. Das liegt daran, dass verschiedene Kombinationen von Eingabevektoren, die für die volle Abdeckung notwendig sind, nur schwer bestimmt werden können. Auch für solche Grenzfälle hat AutoTest eine Lösung: das Tool generiert Testfälle, die die Lücken in der Codeabdeckung schließen, sofern der Code nicht redundant ist.

 
Damit die vollständige Codeabdeckung erreichbar wird, ist es möglich, AutoTest an ausgewählten Funktionen auszuführen. Das geschieht mit einem zielgerichteten Set an Testfälle. Die Codeabdeckung in Cantata kann automatisch optimiert werden. Mit einem einzigen Klick ist es möglich, jeden Testfall zu löschen bzw. zu deaktivieren, wenn er für die erreichte Codeabdeckung nichts bringt.

 

 

AutoTest Coveragre Results Explorer Screenshot - plug edge case gaps in coverage - generating test cases to plug any gaps in code coverage if the code is not redundant
AutoTest Test Cases Screenshot - plug edge case gaps in coverage - generating test cases to plug any gaps in code coverage if the code is not redundant
Cantata AutoTest Test Safety net - Baseline regression testing

SICHERHEITSNETZ GENERIEREN MIT REGRESSIONSTESTS – SO GEHT ES 

 

Wenn bestehender Code Systemtests unterzogen werden muss, ist das einerseits teuer, andererseits verursacht jede Änderung im Code einen hohen Aufwand. Auch der Versuch, ein umfassendes Set an Unit-Tests von Grund auf neu zu erstellen, ist selten wirtschaftlich. Cantata AutoTest erstellt eine solche automatische Suite an Unit-Tests für den gesamten ausgewählten Code. Diese Tests dienen als Baseline-Sicherheitsnetz für zukünftige Regressionsfehler, wenn der Code sich ändert. Unit-Tests gehen mehr in die Tiefe und lokalisieren Fehler präziser. Das bedeutet viel weniger Abhängigkeit von teuren und zeitaufwendigen Systemtests.


Cantata AutoTest erstellt ein Set an Cantata Makefiles. Diese Makefiles können ganz einfach in jede Art von CI-Files integriert werden – ob kommerziell oder Open Source. So wird vollautomatisches Testen während der Entwicklung möglich, und zwar bei jeder Integration.

BESTEHENDE TEST-TOOLS GANZ EINFACH UPGRADEN

 

Auch wenn Sie bereits mit anderen Tools für Ihre Unit-Tests arbeiten, hat ein Upgrade auf Cantata viele Vorteile. Zum Beispiel, weil es viele moderne und leistungsfähige Möglichkeiten für Tests bietet. Oder wenn die bestehenden Tools nicht gut gepflegt werden. Oder wenn sie nicht oder nur eingeschränkt die Bedingungen für die Zertifizierung für die Sicherheitsstandards erfüllen.

 

 
Wie upgraden? Cantata AutoTest bietet da zwei Wege – und zwar hochgradig automatisiert:

 

Zum einen können bestehende Tests ganz einfach durch ein von Cantata AutoTest generiertes Set an Cantata Unit-Tests ersetzt werden.

 

Zum anderen können bestehende Unit-Tests in C (zum Beispiel xUnit-Tools) in Cantata Testskripte eingebunden werden. Das sichert Ihre Investition in die bereits bestehenden Testfälle – und ergänzt sie um die Leistung, die in Cantata steckt!

 

Man jumping from old computer to new laptop - Upgrade from legacy test tool

Wie arbeitet AutoTest?


AutoTest kann man entweder über einen Testskript-Wizard aufrufen. Oder es erstellt zusätzliche Testfälle in einem bestehenden Testskript im Testskript-Manager. Ist die Codebasis sehr groß, ist es unter Umständen besser, AutoTest über Kommandozeilen laufen zu lassen. 

AutoTest analysiert den Source Code und nutzt Cantata Optionen. Dabei entstehen:

  • AutoTest Generation Report. Er gibt sowohl einen Überblick, als auch Detailinformationen zu den erstellten Tests. 
  • Cantata Testskripte (oder zusätzliche Testfälle zu bestehenden Skripts) 
  • Cantata Makefiles zum Erstellen der Test-Executables 

Die automatisch generierten Tests werden dann gebaut und ausgeführt, wobei die üblichen Cantata Testergebnisse und -reports erstellt werden.

AutoTest Process Chart - Chart showing process of AutoTest testing source code

DER GENERIERUNGSALGORITHMUS IN AUTOTEST

 

Cantata AutoTest erstellt komplette Unit-Testskripte für Cantata aufgrund des Source-Codes. Dazu nutzt das Tool einen Algorithmus, der automatisch Testfallvektoren generiert. Diese Vektoren führen Code-Pfade aus, prüfen Daten und Parameter und erfassen alle Aufrufaufträge. Die Code-Pfade, die zum Generieren der Testfälle erstellt werden, sind über die Auswahl der Metriktypen in einem Regelwerk zur Codeabdeckung festgelegt. Metriktypen können unter anderem sein: Entry-point, Statement, Decision oder Unique-Cause MC/DC.

 

Verschiedene verfügbare Voreinstellungen können den Algorithmus des AutoTests beeinflussen. Das betrifft auch den geforderten Grad der Codeabdeckung, die Methode der Kontrollabrufe und welche Datentypen geprüft werden. Und nicht zuletzt, wie Daten modifiziert werden können, um Ausführungspfade, Zeitlimits, Pfadlimits und vieles mehr zu erzwingen. Diese Voreinstellungen beeinflussen die Art der Cantata Tests. Und sie begrenzen den Umfang der Testgenerierung. 

 

Wie gründlich getestet wird, kann vorab bestimmt werden. Ein White-Box- oder ein Black-Box-Konzept? Beides ist möglich. Die Entscheidung über die Art von Unit-Tests mit Cantata AutoTest hängt ab von den geplanten Zielen und wie sich der Code ändert. Zum Beispiel, um das Refakturieren statischer Funktionen zu erlauben, ohne vorhandene Black-Box-Tests zu zerstören.

 

 

AUTOTEST WARNUNGEN UND FEHLERMELDUNGEN

 

Sobald es zu unvollständigen Tests oder verdächtiger Codequalität kommt, gibt es Fehlermeldungen im AutoTest Generation Report. Diese Warnungen zeigen, wo es mögliche Probleme im Source Code gibt oder ob er dynamisch getestet werden kann. Sie können so einen erheblichen Wert darstellen.

 

Cantata AutoTest meldet:

  • unreachable Code (nicht erreichbarer Code), dort wo keine Testfälle generiert werden können
  • potential crash scenarios (mögliche Crash-Szenarien): Null-Pointer, Out-of-Bounds-Array-Indices, Decisions mit nicht-initialisierten Variablen und Divisionen durch Null 
  • type truncation (Typ-Trunkierung), wo Datenumwandlung zu Datenverlusten führen könnten
  • uninitialised data use (nicht-initialisierte Datenverwendung), zum Beispiel als Feld innerhalb einer großen Struktur 
  • non-constant static data within a function (nicht-konstante statische Daten innerhalb einer Funktion), so dass ihr Wert bei Start eines Testfalles unbekannt ist 
  • non-returning functions (nicht-wiederkehrende Funktionen), wenn eine Funktion die Kontrolle zum Aufrufer nicht zurückgibt. Cantata verfügt allerdings über die Fähigkeit, das für Testzwecke zu umgehen.
  • implicit function declarations (implizite Funktionsdeklarationen), wenn eine Funktion aufgerufen wird, bevor sie deklariert wurde.
Weitere Informationen zu Cantata Autotest

 

Mehr Informationen zu Cantata AutoTestest finden Sie in unserem White Paper:

Start
Trial
Learn
more
QA-Systems