Cantata ist das dynamische Tool für Unit- und Integrationstests in C und C++. Das Werkzeug hilft, Tests zu atomatisieren. Und schafft so die Basis, die Sicherheitsstandards für Software zu erfüllen. Was in der Softwareentwicklung best practise ist, kann mit Cantata ganz einfach in den Programmieralltag umgesetzt werden.

Welches sind die effektivsten und effizientesten Kombinationen von Testtechniken für Ihre C- und C++-Codes? Mit Cantata können Sie sie auswählen.

Was auch immer in C und C++ möglich ist, mit Cantata können Sie es umsetzen. Denn Cantata Tests laufen auf jedem Code-Editor.

Gezielte Flexibilität

Keine einzelne Tool-Suite kann alle Arten von Tests unterstützen – da macht auch Cantata keine Ausnahme. Der Fokus von Cantata liegt auf den Anforderungen an Unit- und Integrationstests, die an standardkonformen C- und C++-Code in eingebetteten Systemen gelegt werden.

Wie sollen Ihre Unit- und Integrationstests gestaltet sein, damit sie Ihre Anforderungen erfüllen? Wie können Sie Ihre eigenen Tests verbessern? Mit Cantata stellen Sie sich Ihr optimales Test-Set zusammen.

"Module testing early during development is becoming more important due to the increasing complexity of software. In practice Cantata has proved successful and increased unit testing efficiency. Cantata from QA Systems offers an ideal solution for the creation and execution of unit and integration tests, including coverage analysis."

Matthias Schmidt, Test management, Verification and Validation, Bosch Engineering GmbH

"Through years of experience in unit testing using Cantata for various platforms and languages… we are confident in suggesting Cantata to our clients."

Padmakumar TV, Senior Engineering Specialist, TATA Elxsi

Testtechniken: Das kann Cantata

TESTS AUF BASIS DER ANFORDERUNGEN

Macht die Software tatsächlich das, was sie tun soll? Mit Cantata testen Sie Ihre Software auf Basis Ihrer Anforderungen (Low-Level Anforderungen, Spezifikationen oder Modelle).

Der Cantata Test Harness testet den Code über ein Testskript. Dabei ruft es Funktionen mit ausgewählten Inputs (Parameter und Daten) auf. Der Abgleich des tatsächlichen mit dem erwarteten Verhalten der Software erfolgt automatisiert.

Da die Anforderungen in die Cantata-IDE importiert werden können, ist es viel einfacher, Testfälle zu definieren und die Anforderungen mit Testfällen und Testskripts nachzuverfolgen (weitere Informationen finden Sie in der Funktionalität „Cantata Anforderungen nachverfolgen“)

ROBUSTHEITSTESTS

Cantata unterstützt dynamische Stabilitätstests. So kann geprüft werden, ob der Code auch mit abweichenden Bedingungen fertig wird. Dabei werden Techniken eingesetzt, die von allen Sicherheitsstandards verlangt werden. Zum Beispiel:

  • abnormal system initialization
  • invalid inputs & data
  • failure mode handling
  • boundary values
  • arithmetic edge conditions
  • timing constraints
  • memory allocation
  • error seeding

Stabilitätstests sind mit den Cantata Robustness Regel-Sets ganz einfach. Die Regel-Sets enthalten vordefinierte Werte für die Basisdatentypen in Testschleifen. Alle verfügbaren globalen Daten werden automatisch auf unbeabsichtigte Änderungen geprüft. Mit den Cantata Testskripten und dem Wrapping können ganz einfach abweichende Testvorbedingungen erstellt werden. Genauso einfach ist es, Fehler während der Tests gezielt zu platzieren (weitere Informationen finden Sie in der Funktionalität „Cantata Einzigartige Aufrufsteuerung„).

STRUKTURTESTS

Gibt es Code, der bei Anforderungs- oder Stabilitätsstests übersehen wurde? Mit Strukturtests werden diese Testlücken lokalisiert und identifiziert

Die Cantata Codeabdeckung (innerhalb und außerhalb der Cantata- Tests) findet diese Lücken – im speziellen Kontext oder ganz allgemein. Wie schließt man diese Lücken? Entweder mit weiteren Testfällen auf Basis neuer Testfälle. Dabei wird dokumentiert, weshalb der Code nicht in einem speziellen Kontext ausgeführt werden soll. Oder, indem man redundaten Code entfernt (weitere Informationen finden Sie in der Funktionalität „Cantata Codeabdeckung“).

Cantata AutoTest generiert automatisch ganze Testskripte oder zusätzliche Testfälle. So wird das Ziel einer 100-Prozent-Abdeckung für C und C++ Code erreicht (weitere Informationen finden Sie in der Funktionalität „Cantata AutoTest“)

TEST DRIVEN DEVELOPMENT (TDD)

Cantata ermöglicht das Schreiben von Tests, sobald Funktionsprototypen innerhalb von Headerdateien erstellt werden. Dies gibt Ihnen die Gelegenheit Tests zu erstellen, bevor das Gerüst/der Aufbau der zu testenden Software vollständig implementiert ist. Cantata für TDD erweitert die traditionellen Black-Box-TDD-Techniken, indem es Zugang zu vollwertigen White-Box-Tests auf verkapselten Code Interna wie privaten/statischen Daten und Funktionen bietet.

BLACK-BOX-TESTS

Beim Black-Box-Testen wird der Code nur über seine Schnittstellen geprüft. Ob sich der Code korrekt verhält, kann hier auch ohne Kenntnis der internen Gegebenheiten geprüft werden.

Cantata bringt mehr Leistung ins Black-Box-Testen. Dieselben Funktionen können mit großen Daten-Sets – Input-Parameter oder Datenwerten – aufgerufen werden.

Die Reihenfolge der erwarteten Aufrufe und erwarteten Rückgabewerte kann variieren – abhängig von den Eingabedaten-Sets. Daneben werden die globalen Daten-Outputs während des Tests geprüft.

Die parametergesteuerten Testdaten-Sets von Cantata können über CSV importiert oder exportiert werden. Bei der Auswahl der Testvektoren hilft ein GUI-kombinatorischer Effektrechner. Die automatische Abdeckungsoptimierung in Cantata findet das jeweils bestmögliche Set der Testvektoren, das benötigt wird, um die Abdeckungsziele zu erreichen.

WHITE-BOX-TESTS

Bei White-Box-Tests greift der Test auch auf eingeschlossene Code-Interna zu (private bzw. statische Daten und Funktionen).

Cantata gewährt Testern direkten Zugriff darauf, ohne dass der produktive Code mit bedingter Kompilierung verunreinigt wird. Für den Fall einer vollautomatischen Erreichbarkeitsausstattung geschieht dies nur während des Tests.

VERFAHRENS- UND ZUSTANDSTESTS

Cantata Verfahrenstests prüfen die Prozesslogik oder Algorithmen in Funktionen, indem sie geeignete Parameter-Sets oder Dateneingaben nutzen und prüfen, ob die Aufrufe und Wiedergabewerte so sind, wie es erwartet wird. Cantata analysiert den Source Code, um Testskripte zu generieren mit den notwendigen Test-Hooks auf Funktionsparametern und den für die User zugänglichen Daten für Eingabe und Prüfung.

Zustände werden über Auslösebedingungen getestet. Sie schaffen Ereignisse, um korrekte Zustandsübergänge zu prüfen. Cantata-White-Box-Tests macht das besonders effizient, denn es verfügt über einen direkten Zugang zu lokalen statischen Funktionsdaten.

Um sicher zu sein, dass der Code auch in verschiedenen Zuständen getestet worden ist, kann die benutzerdefinierte Kontext-Codeabdeckung in Cantata eingesetzt werden (weitere Informationen finden Sie in der Funktionalität „Cantata Codeabdeckung“).

OBJEKTORIENTIERTES TESTEN

Die Cantata OO-Style-Tests stehen als Klassen für Testmethoden, Templates oder Clusterklassen zur Verfügung. Sie bieten:

  • Automatisierte Wiederverwendung von Testfällen über eine parallele Vererbungshierarchie
  • Automatisierte Testklassen-Vererbungsstruktur über vererbte Klassen
  • Automatisierte konkrete Umsetzungen abstrakter Basisklassen (ABCs) oder Pure Virtual Methods (PVMs)

Um die Klassenabhängigkeitsketten aufzubrechen und isolierte C++-Tests zu vereinfachen, findet und löst Cantata automatisch Abhängigkeiten auf undefinierte Verweise, die nicht direkt von der Software während des Tests aufgerufen werden (weitere Informationen finden Sie in der Funktionalität „Cantata Einzigartige Aufrufsteuerung – Wrapping“).

ISOLIERTE UNITTESTS

Cantata schreibt nicht vor, welcher Teil des Codes als Unit getestet wird oder wie sehr jede Unit vom Rest des Systems abgetrennt wird. Cantata ist da völlig flexibel. Die automatisch konfigurierbare Generation von Stubs und Isolates zum Simulieren und die Wrapper für das interne und externe Abfangen von Aufrufen machen es während des Tests möglich. Cantata prüft, sobald eine Unit kompiliert wird, ob die internen Prozesse richtig laufen und ob die Interfaces (Parameter und Daten) korrekt eingesetzt werden. Und das ohne Zugriff auf den Rest des Systems.

Dafür erstellt Cantata einen initialen ausführbaren Testfall für jede Funktion und jede Methode in der oder den ausgewählten Quelldatei/en. Die Cantata Unittests rufen eine Funktion auf und initialisieren dabei alle Input- und Output-Parameter, die verfügbaren Daten und erwarteten Aufrufreihenfolge. Die einzelnen Testfälle sind voneinander unabhängig, ebenso wie die Plattformen, auf denen sie laufen. So verhindert man eine Verkettung von Abhängigkeiten.

INTEGRATIONSTESTS

Integrationstests mit Cantata sind im Grunde große Unittests. Aus mehreren Units wird jedoch eine Gruppe gebildet, die dann als einzelne ausführbare Datei arbeitet. Ein solcher Test kann das interne Verhalten jeder Unit prüfen. Viel wichtiger ist aber, dass gleichzeitig die Interaktionen der einzelnen Units geprüft werden, zum Beispiel:

  • inter-unit memory allocation
  • order of data read / writes
  • order of calls between units

Die Integrationstests mit Cantata sind flexibel. Die Zugangspunkte für Testskripte sind frei wählbar, ob es sich nun um interne oder externe Simulationen (Stubs oder Isolates) handelt. Oder um Wrapper für verschiedene Integrationstestarten (top-down, bottom-up oder all-as-one).
Es ist auch möglich, die Cantata Wrapper in einer Testumgebung einzusetzen, die nicht von Cantata bereitgestellt wird. Damit gewinnen Sie eine bessere Kontrolle über die Integrationstests.

Die oben dargestellten Techniken können in unterschiedlichen Kombinationen angewendet werden, sodass sie mit den Anforderungen der Sicherheitsstandards und den Best-Practises der Industrie perfekt übereinstimmen.

Wie werden Testfälle optimal aufgebaut? Welche Anforderungen stellen die einzelnen Sicherheitsstandards? Weitere Informationen erhalten Sie in unseren umfangreichen „Resources“.