Schwerpunkte

Fehler in Änderungen vermeiden

Regressionstests von Software Code

08. April 2021, 07:00 Uhr   |  Von Ricardo Camacho

Regressionstests von Software Code
© shutterstock.com

Änderungen an Embedded-Softwarecode ist beim Entwickeln gängige Praxis. Jedoch können sich mit dem Anpassen neue Fehler einschleichen. Um das zu verhindern, setzen Entwickler auf Regressionstests.

Bei vielen, wenn nicht gar den meisten Embedded-Systemen, führen Entwicklerteams Regressionstests am Ende des Lebenszyklus aus. So wollen sie die Stabilität der einzelnen Softwareversionen bestimmen. Programmierer setzen den iterativen Prozess fort, bis das Projekt abgeschlossen ist. In anderen Arbeitsabläufen gehören Regressionstests zur täglichen Realität von Entwicklern. Man kann sogar behaupten, dass es sich bei den meisten Tests in iterativen und agilen Prozessen um Regressionstests handelt. Aber was genau sind Regressionstests – was macht sie zu einem so wichtigen Teil beim Entwickeln von Software?

Regressionstests ausführen

Eine Regression ist »ein Trend oder ein Verschieben in Richtung eines niedrigeren oder weniger als perfekten Zustands« – genau das versuchen Programmierer beim Entwickeln von Software zu vermeiden. Regressionstests helfen dabei, Fehler zu finden, die sich in Software einschleichen, wenn Entwickler neue Funktionen hinzufügen, Fehler beheben sowie Änderungen an den Testfällen vornehmen.
Regressionstests zählen zu den häufigsten Softwareentwicklungsprozessen. Entwickler führen sie nach Änderungen an der Software aus, um festzustellen, ob sich die neuen Änderungen auf den bestehenden Betrieb der Software auswirken. Regressionstests sind nötig, jedoch zeigen sie lediglich, dass die jüngsten Anpassungen im Code nicht zum Fehlschlagen der Tests führen. Es gibt keine Garantie dafür, dass die Anpassungen selbst funktionieren. Außerdem kann die Art der Änderungen, die Regressionstests nötig machen, über die aktuelle Anwendung hinausgehen und Modifikationen der Hardware, des Betriebssystems und der Betriebsumgebung umfassen.

Regressionstests in Embedded-Systemen

In der Regel gibt es bei Embedded-Systemen sicherheitskritische Einschränkungen, darum testen Entwicklerteams das System oder Subsystem auf Regressionen. Meist finden die Tests am Ende jedes iterativen Lebenszyklus des Systems oder Subsystems statt. Das bedeutet: Alle Unit-Testfälle, die für ein vorheriges Softwaresystem- oder Subsystem-Release definiert wurden, plus die neuen zum Verifizieren neuer Funktionen hinzugefügten Testfälle, sind auszuführen, um Regressionen in der Software aufzudecken.

Hat ein früherer Unit-Testfall bestanden und schlägt jetzt fehl, wurde möglicherweise eine Regression erkannt. Eine neue Funktion könnte den Fehler verursachen. In dem Fall ist unter Umständen das Aktualisieren des Testfalls unter Berücksichtigen der geänderten Ein- und Ausgabewerte nötig.

Es ist außerdem wichtig zu verstehen, dass Regressionstests nicht allein Unit-Testfälle beinhalten. Ebenso enthalten Regressionstests von Embedded-Systemen das Ausführen von Integrations-, System-, Leistungs-, Stresstestfällen und mehr. Eigentlich sollten Entwickler alle zuvor erstellten Testfälle ausführen, um folgendes zu gewährleisten:

  • Es liegen keine Regressionen vor.
  • Aufbau eines neuen, zuverlässigen Software-Releases.

Beides ist bedeutend, da Programmierer jedes neue Softwaresystem- oder Subsystem-Release auf dem vorherigen Release aufsetzen beziehungsweise entwickeln. Ohne ein solides Fundament kann das ganze Konstrukt zusammenbrechen.

Regressionstest
© Parasoft

Bild 1. Jeder neue Unit-Test entwickelt sich, sobald er validiert ist, zu einem zukünftigen Regressionstest. So sind Regressionstests im Laufe der Zeit akkumulierte Tests.

Hier kommt das Tool »C/C++test« von Parasoft ins Spiel: Es kann automatisch Testfälle generieren. Die Kombination von automatisch generierten Testfällen mit manuell erstellten Testfällen ergibt einen kollektiven Satz, eine Testsuite. Entwickler und Tester führen sie aus, um Anwendungsfehler zu identifizieren. C/C++test erfasst die Testergebnisse undidentifiziert die zu analysierenden und zu behebenden Fehler. Nach dem ersten Zyklus können Teams die vorhandenen Testfälle oder die Testsuite für Regres­sionstests wiederverwenden (Bild 1).

Regressionstests beim agilen Entwickeln

Es sollte einleuchtend sein, dass Updates und Änderungen an Software zu testen sind. So gesehen ist das Regres­sionstesten ein naheliegender Schritt im Prozess des Entwickelns. In der modernen Softwareentwicklung mit agilen Prozessen werden Regressionstests zu einem entscheidenden Schritt in jedem Zyklus.

Mit dem Wachstum der Software wächst ebenso die Suite der Regressionstests. Je größer die Software, desto länger dauern das Ausführen und Debuggen, was oft den Engpass darstellt. Ohne zielgerichtete und optimierte Regressionstests sind ein agiles Entwickeln und eine optimierte DevOps-Pipeline nur schwer zu realisieren.

Ausführen von Tests

Bei Embedded-Systemen ist es zudem oft erforderlich, die Tests auf der Zielhardware durchzuführen. Aufgrund des komplexen Initiierens und Beobachtens von Tests auf Embedded-Zielsystemen sind Regressionstests oft herausfordernd. Hinzu kommt der eingeschränkte Zugang zur Zielhardware, mit dem Softwaretteams aufgrund der hohen Kosten der Zielsysteme konfrontiert sind.

Hier spart eine wiederverwendbare und konfigurierbare Testautomatisierung Ressourcen, Zeit und Kosten. So können Entwickler nahtlos und kontinuierlich vom Ausführen auf einem Host und/oder einem virtuellen System zum Verifizieren und Validieren auf dem Zielsystem übergehen.

C/C++test
© Parasoft

Bild 2. So läuft das Bereitstellen, Ausführen und Beobachten von Tests vom Host zum Target in C/C++test ab.

Mit C/C++test können Entwicklerteams Unit-Tests auf der Host-Plattform, dem Zielprozessor-Simulator oder dem Embedded Target ausführen. Optimiert auf minimalen zusätzlichen Overhead für den binären Speicherbedarf oder Prozesszyklen, liefert Parasoft das Testkit des Tools in Form von Quellcode. So können Teams gewünschte plattformspezifische Anpassungen vornehmen. Das ist nötig, da das Erfassen von Test­ergebnissen und Codeabdeckungsdaten vom Zielsystem für sicherheitskritische Systeme unerlässlich ist und von Prozessstandards wie DO-178B/C, ISO 26262 oder IEC 62304 verlangt wird (Bild 2).

Weiterhin bietet das Tool C/C++test Integrationen in Embedded-Entwicklungsumgebungen (IDEs) und Debugger, die den Prozess des Ausführens von Testfällen reibungslos und automatisiert gestalten. Zu den unterstützten IDEs gehören unter anderem:

  • Eclipse
  • VS Code
  • Green Hills Multi
  • Wind River Workbench
  • IAR EW
  • Arm MDK
  • Arm DS-5
  • TI CCS
  • Visual Studio
Seite 1 von 2

1. Regressionstests von Software Code
2. Was ist zu testen und was nicht?

Auf Facebook teilen Auf Twitter teilen Auf Linkedin teilen Via Mail teilen

Das könnte Sie auch interessieren

Verwandte Artikel

Parasoft Corp.