Seien Sie am 30. April dabei: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Registrierung

Regressionstests eingebetteter Systeme

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
8. Juni 2023
7 min lesen

Codeänderungen können große Auswirkungen auf Ihre Software haben. Regressionstests helfen Softwareentwicklern, Codeänderungen zu testen. Hier entdecken wir, wie die Analyse-Engine von Parasoft Ihnen dabei helfen kann, einen Einblick in die Auswirkungen der an Ihrer Software vorgenommenen Änderungen zu erhalten.

Entwicklungsteams Regressionstests durchführen um zu überprüfen, ob die Codeänderungen (Behebung eines Fehlers oder Hinzufügen neuer Funktionen) in einer Softwareanwendung nicht dazu führen, dass ein weiterer Fehler eingeführt oder eine der Funktionen des vorhandenen Systems unterbrochen wird.

Bei vielen, wenn nicht den meisten eingebetteten Systemen führen Teams am Ende des Lebenszyklus Regressionstests durch, um die Stabilität jeder Softwareversionsversion zu bestimmen. Dies ist ein iterativer Prozess, der fortgesetzt wird, bis das Projekt das Ende der Entwicklung oder Wartung erreicht hat.

In anderen Workflows sind Regressionstests eine Aktivität, die die tägliche Realität von Entwicklern darstellt. In der Tat kann man argumentieren, dass in iterativen und agilen Prozessen die meisten Tests Regressionstests sind. Bevor wir weiter gehen, schauen wir uns an, was Regressionstests sind und warum sie einen so großen Teil der Softwareentwicklungspraktiken ausmachen.

Was ist Regressionstest?

Eine Regression ist „ein Trend oder eine Verschiebung hin zu einem niedrigeren oder weniger als perfekten Zustand“, was wir alle versuchen zu vermeiden, wenn wir Software entwickeln. Regressionstests helfen dabei, Fehler zu finden, die sich in unsere Software einschleichen, wenn wir neue Funktionen hinzufügen, Fehler beheben und Änderungen an den Testfällen selbst vornehmen.

Im Rahmen der meisten Softwareentwicklungsprozesse führen Entwickler Regressionstests durch, nachdem sie Änderungen an der Software vorgenommen haben. Diese Tests stellen fest, ob sich die neuen Änderungen auf den vorhandenen Betrieb der Software ausgewirkt haben.

Regressionstests sind natürlich erforderlich, zeigen jedoch nur an, dass die letzten Codeänderungen nicht dazu geführt haben, dass Tests fehlgeschlagen sind. Es gibt keine Garantie dafür, dass die Änderungen selbst funktionieren. Darüber hinaus kann die Art der Änderungen, die die Notwendigkeit von Regressionstests begründen, über die aktuelle Anwendung hinausgehen und Änderungen an Hardware, Betriebssystem und Betriebsumgebung umfassen.

Warum Regressionstests in eingebetteten Systemen wichtig sind

Da eingebettete Systeme in der Regel sicherheitskritische Einschränkungen aufweisen, testen Entwicklerteams das System oder Subsystem auf Regressionen. Das Testen findet möglicherweise am Ende jedes iterativen Lebenszyklus des Systems oder Subsystems statt. Dies bedeutet, dass alle Komponententestfälle, die für eine frühere Softwaresystem- oder Subsystemversion definiert wurden, sowie die neuen Komponententestfälle, die zur Überprüfung neuer Funktionen hinzugefügt wurden, ausgeführt werden müssen, um Regressionen in der Software verfügbar zu machen.

Wenn ein vorheriger Unit-Test-Fall bestanden wurde und jetzt fehlschlägt, wurde möglicherweise eine mögliche Regression festgestellt. Neue Funktionen können den Fehler verursachen. Wenn dies das Szenario ist, muss der Testfall möglicherweise aktualisiert werden, indem Änderungen der Eingabe- und Ausgabewerte berücksichtigt werden.

Es ist auch wichtig zu verstehen, dass Regressionstests nicht nur Unit-Testfälle implizieren. Regressionstests für eingebettete Systeme umfassen auch die Ausführung von Integrationstestfällen, Systemtestfällen, Leistungstestfällen, Stresstestfällen und mehr. In der Tat sollten Entwickler alle zuvor erstellten Testfälle ausführen, um Folgendes sicherzustellen:

  • Es gibt keine Regressionen.
  • Aufbau eines neuen, qualitativ hochwertigen Softwareversions-Releases.

Beides ist von entscheidender Bedeutung, da jedes neue Software-System oder Subsystem auf der vorherigen Version erstellt oder entwickelt wird. Wenn Sie kein solides Fundament haben, kann das Ganze zusammenbrechen.

Parasoft C / C ++ test kann automatisch Testfälle generieren. Wenn Sie sie mit manuell erstellten Testfällen kombinieren, erhalten Sie eine Gesamtmenge: eine Testsuite. Entwickler und Tester führen die Testsuite aus, um Anwendungsfehler zu identifizieren.

Der Parasoft C / C ++ - Test erfasst die Testergebnisse und identifiziert Fehler bei der Analyse und Behebung. Nach diesem ersten Zyklus können Teams die vorhandenen Testfälle oder die Testsuite für Regressionstests wiederverwenden.

Infografik, die zeigt, wie neue Komponententests nach Validierung zu Regressionstests werden, und Regressionstests sind die akkumulierten Tests im Laufe der Zeit.
Jeder neue Einheitentest wird nach seiner Validierung zu einem zukünftigen Regressionstest. Regressionstests sind akkumulierte Tests im Laufe der Zeit.

Regressionstests in der agilen Entwicklung

Es ist wahrscheinlich offensichtlich, dass Updates und Änderungen an der Software getestet werden müssen. In diesem Sinne sind Regressionstests ein offensichtlicher Schritt im Entwicklungsprozess. In der modernen Softwareentwicklung mit agilen Prozessen und kontinuierlicher Integration und Bereitstellung werden Regressionstests zu einem entscheidenden Schritt in jedem Zyklus.

Wenn die Software wächst, wächst auch die Reihe der Regressionstests. Wenn die Suite wächst, wächst auch die Ausführungs- und Debugging-Zeit und häufig der Engpass in der Pipeline. Es ist schwierig, eine agile Entwicklung und eine optimierte DevOps-Pipeline zu haben, ohne fokussierte und optimierte Regressionstests.

Regressionstests für eingebettete Geräte

Die Arbeit an eingebetteten Systemen erweitert das Testen um eine weitere Dimension, da es häufig vorzuziehen oder erforderlich ist, Tests auf der Zielhardware durchzuführen. Regressionstests können aufgrund der Komplexität des Initiierens und Beobachtens von Tests an eingebetteten Zielen schwieriger sein. Hinzu kommt der eingeschränkte Zugriff auf Zielhardware, den Softwareteams aufgrund der hohen Kosten dieser Zielsysteme haben.

Daher wird eine wiederverwendbare und konfigurierbare Testautomatisierungslösung eingerichtet, die nahtlos und kontinuierlich von der Ausführung auf einem Host und/oder einem virtuellen System übergehen kann – und zur Verifizierung und Bestätigung auf dem Zielsystem - bietet erhebliche Einsparungen bei Ressourcen, Zeit und Kosten.

Entwicklungsteams verwenden können Parasoft zum Ausführen von Unit-Tests auf der Hostplattform, dem Zielprozessorsimulator oder dem eingebetteten Ziel. Der Testrahmen von Parasoft C/C++test ist optimiert, um minimalen zusätzlichen Aufwand für den binären Fußabdruck oder die Prozesszyklen zu verursachen, und wird in Form von Quellcode geliefert. Das bedeutet, dass Teams die erforderlichen plattformspezifischen Modifikationen anpassen können. Dies ist notwendig, da die Erfassung von Testergebnissen und Codeabdeckungsdaten aus dem Zielsystem für sicherheitskritische Systeme unerlässlich ist und von den Prozessstandards wie gefordert wird DO-178B / C., ISO 26262 , IEC 62304Und vieles mehr.

Infografik mit einer allgemeinen Ansicht zum Bereitstellen, Ausführen und Beobachten von Tests vom Host zum Ziel im Parasoft C / C ++ - Test.
Eine allgemeine Ansicht zum Bereitstellen, Ausführen und Beobachten von Tests vom Host zum Ziel in Parasoft C / C ++ - Tests.

Darüber hinaus bietet der Parasoft C / C ++ - Test dedizierte Integrationen mit eingebetteten IDEs und Debuggern, die die Ausführung von Testfällen reibungslos und automatisiert machen. Unterstützte IDE-Umgebungen umfassen Eclipse, VS-Code, Green Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS, Visual Studio und viele andere. Alle Parasoft C / C ++ - Tests anzeigen Technische Daten.

Best Practices und Techniken für Regressionstests

Im Mittelpunkt des Regressionstests stehen die Testfälle der vorherigen getesteten Softwareversion. Bei Regressionstests geht es darum, vorhandene Testfälle wiederzuverwenden, um einen Rückgang der Codequalität zwischen jedem Software-Update und einer neuen Version zu erkennen. Daher bestehen Best Practices aus Automatisierung anwenden um die große Sammlung von Regressionstestfällen zu verwalten.

Um eine solide Testsuite für jeden durchgeführten Regressionstest sicherzustellen, sollten die Teams die folgenden Aufgaben ausführen.

  • Identifizieren Sie Testfälle, die aktualisiert werden müssen.
  • Aktualisieren Sie Testfälle, um Codeänderungen zu testen.
  • Erstellen Sie neue Testfälle, um neuen Code zu testen.
  • Löschen Sie irrelevante Testfälle.

Da es Tausende von Testfällen geben kann, möchten Qualitätssicherungsteams die Verwaltung von Regressionstests automatisieren. Unternehmen möchten eine Lösung einführen, die automatisch die Testfälle identifiziert, die aufgrund von Softwareänderungen aktualisiert werden müssen. Nachfolgend werden Änderungsbasistests für Java-, C#- und VB.Net-Testlösungen erläutert. Lösungen wie Parasoft beschleunigen Änderungen an der bestehenden Testfalllogik, einschließlich Stubbing und Verwaltung von Variationen von Eingabe- und Ausgabetestwerten.

Für neu hinzugefügten Code müssen neue Testfälle erstellt werden. Parasoft ermöglicht die automatisierte Generierung von Unit-Testfällen. Darüber hinaus trägt eine grafische Oberfläche dazu bei, die manuelle Testfallerstellung zu beschleunigen. Vergessen Sie bei gelöschtem Code nicht, alle entsprechenden irrelevanten Tests zu löschen.

Wie entscheide ich mich für einen Regressionstest?

Die größte Herausforderung beim Regressionstest besteht darin, zu bestimmen, welche Teile einer Anwendung getestet werden sollen. Es ist nicht ungewöhnlich, standardmäßig alle Regressionstests auszuführen, wenn Zweifel an den Auswirkungen kürzlicher Codeänderungen bestehen. Es ist dieser „Alles-oder-Nichts“-Ansatz. Bei großen Softwareprojekten wird dies jedoch zu einem riesigen Unterfangen und beeinträchtigt die Produktivität des Teams. Diese Unfähigkeit, das Testen zu fokussieren, beeinträchtigt viele der Vorteile iterativer und kontinuierlicher Prozesse – möglicherweise noch verstärkt bei eingebetteter Software, wo Testziele eine begrenzte Ressource darstellen.

Was benötigt wird, ist eine Möglichkeit, zu ermitteln, welche Tests erneut ausgeführt werden müssen, und die Testbemühungen zu fokussieren (Unit-Tests, automatisierte Funktionsprüfungund manuelles Testen) zur Validierung der Funktionen und des zugehörigen Codes, die von den letzten Änderungen betroffen sind. Verwendung einer Kombination der proprietären Coverage-Analyse-Engines von Parasoft (C / C ++ - Test für C & C ++, Test für Java und dotTEST für C #) und die Process Intelligence Engine (PIE) innerhalb Parasoft DTPEntwickler und Tester können die Änderungen in der Codebasis zwischen Builds verstehen und mit dieser verbesserten Effizienz das Versprechen von Agile einlösen. Diese Form der intelligenten Testausführung wird als Testauswirkungsanalyse bezeichnet, manchmal auch als änderungsbasiertes Testen.

Verstehen Sie die Auswirkungen von Codeänderungen auf das Testen mit der Testauswirkungsanalyse

Die Testauswirkungsanalyse verwendet Daten, die während Testläufen und Codeänderungen zwischen Builds gesammelt wurden, um zu bestimmen, welche Dateien geändert wurden und welche spezifischen Tests diese Dateien berührten. Die Analyse-Engine von Parasoft kann das Delta zwischen zwei Builds analysieren und die Teilmenge der auszuführenden Regressionstests identifizieren. Es versteht auch die Abhängigkeiten von den Einheiten, die geändert wurden, um zu bestimmen, welche Welligkeit die an anderen Einheiten vorgenommenen Änderungen bewirken.

Parasoft Jtest und dotTest bieten Einblicke in die Auswirkungen von Softwareänderungen und geben Empfehlungen, wo Tests hinzugefügt und weitere Regressionstests durchgeführt werden sollten. Sehen Sie sich unten den beispielhaften änderungsbasierten Testbericht an.

Screenshot eines auf Änderungen basierenden Testberichts von Parasoft DTP mit Bereichen des getesteten und nicht getesteten Codes.
Ein Beispiel für einen änderungsbasierten Testbericht von Parasoft DTP. Es werden Bereiche des Codes angezeigt, die getestet und nicht getestet wurden.

Regressionstest früher und öfter

Durch die Optimierung der Regressionstests mit der Analyse der Testauswirkungen wird die Gesamtlast der Tests erheblich gesenkt. Entwickler und Tester können sich ausschließlich auf den betroffenen Code und die betroffenen Tests konzentrieren. Die Ergebnisse?

  • Weitere Tests zur Erhöhung der Codeabdeckung.
  • Mehr Zyklen, um zu einem besseren Produkt zu gelangen.
  • Oder eine Kombination aus beiden.

Regressionstests sind keine Belastung mehr, sondern ein wichtiger Schritt zur Verbesserung der Produktqualität und -sicherheit. Es werden Metriken generiert, mit denen Qualität, Sicherheit und Gesamtfortschritt gemessen werden können.

Dank modernster Toolunterstützung und zielbasierter Tests ist es auch möglich, Regressionstests zu starten, sobald Entwickler Code erstellen. Jeder neue Komponententest wird im Laufe der Zeit zu einem Regressionstest, und Entwickler können sofort auf veränderungsbasierte Tests zurückgreifen.

Eine frühzeitige Durchführung von Regressionstests (Verschiebung nach links von der Entwicklungszeitachse) bedeutet eine frühere Erkennung von Fehlern. Das Verschieben nach links spart sofort Zeit und Geld. Das zahlt sich später im Software-Lebenszyklus noch mehr aus.

Unterschätzen Sie diesen Gewinn nicht. Dadurch können erhebliche nachgelagerte Kosten eingespart werden. Durch die frühere Erkennung von Fehlern im SDLC werden die Kosten für deren Behebung gesenkt und die Auswirkungen auf nachgelagerte Aktivitäten verringert. Schauen Sie sich das Diagramm unten an.

Animiertes Diagramm. Jones, Kapern. Angewandte Softwaremessung: Globale Analyse von Produktivität und Qualität. Zeigt gefundene Fehler nach links verschieben.

Zusammenfassung

Regressionstests sind eine Kernaktivität beim Testen eingebetteter Software. Für jede neu hinzugefügte Funktion, Fehlerbehebung oder Konfigurationsänderung sind Tests erforderlich, um zu bestätigen, was bereits funktioniert und weiterhin funktioniert. Mit zunehmendem Projekt und zunehmender Softwarekomplexität steigt jedoch auch die Anzahl der Regressionstests.

Schließlich wird eine Testautomatisierung erforderlich, um die Testlast zu bewältigen. Neue Technologien wie die intelligente Testausführung erleichtern Regressionstests. Entwickler und Tester konzentrieren sich auf Tests, mit denen der geänderte und betroffene Code speziell getestet wird.

Durch die Kombination von Prozessverbesserungen wie Agile, CI/CD und DevOps mit der Automatisierung von Softwaretests ist es möglich, mit Regressionstests fast unmittelbar nach dem Schreiben des Codes zu beginnen. Es verlagert die Tests effektiv nach links und erkennt Fehler früher, wenn sie kostengünstiger und einfacher zu beheben sind.

So optimieren Sie Unit-Tests für eingebettete und sicherheitskritische Systeme