Regressionstests eingebetteter Systeme

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance

Von Ricardo Camacho

19. November 2020

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.

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

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.

Optimieren von Unit- und Regressionstests für eingebettete Systeme

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.
  • Erstellung einer neuen, zuverlässigen Softwareversion.

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.

Die Einrichtung einer wiederverwendbaren und konfigurierbaren Testautomatisierungslösung, die nahtlos und kontinuierlich von der Ausführung auf einem Host und/oder einem virtuellen System – und zur Verifizierung und Validierung auf dem Zielsystem – übergehen kann, bietet erhebliche Einsparungen bei Ressourcen, Zeit und Kosten 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.

Wie entscheide ich mich für einen Regressionstest?

Die zentrale 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 der letzten Codeänderungen bestehen. Es ist dieser "Alles oder Nichts" -Ansatz. Bei großen Softwareprojekten wird dies jedoch zu einem großen Unterfangen und beeinträchtigt die Produktivität des Teams. Diese Unfähigkeit, das Testen zu fokussieren, behindert viele der Vorteile iterativer und kontinuierlicher Prozesse - möglicherweise noch verstärkt durch eingebettete Software, bei der Testziele eine begrenzte Ressource darstellen.

Was benötigt wird, ist eine Möglichkeit zu identifizieren, welche Tests erneut ausgeführt werden müssen, und die Testbemühungen (Komponententests, automatisierte Funktionstests und manuelle Tests) auf die Validierung der Funktionen und des zugehörigen Codes zu konzentrieren, die von den letzten Änderungen betroffen sind. Verwenden einer Kombination der von Parasoft entwickelten proprietären Coverage Analysis Engines (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 erreichen. Diese Form der intelligenten Testausführung wird als Testauswirkungsanalyse bezeichnet (manchmal auch als veränderungsbasiertes Testen bezeichnet).

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 C / C ++ - Test, Jtest und dotTest bieten Einblicke in die Auswirkungen von Softwareänderungen und Empfehlungen, wo Tests hinzugefügt und weitere Regressionstests ausgeführt werden können. Siehe den folgenden Änderungs-basierten Testbericht.

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 diese Auszahlung nicht. Dies kann erhebliche nachgelagerte Kosten einsparen. Das frühere Auffinden von Fehlern im SDLC senkt die Kosten für die Behebung und verringert die Auswirkungen auf nachgelagerte Aktivitäten. 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 können Regressionstests fast sofort nach dem Schreiben des Codes gestartet werden. Es verschiebt die Tests effektiv nach links und erkennt Fehler früher, wenn sie billiger und einfacher zu beheben sind.

So optimieren Sie Unit-Tests für eingebettete und sicherheitskritische Systeme
Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance

Von Ricardo Camacho

Sr. Technical Product Marketing Manager für die eingebetteten Testlösungen von Parasoft. Ricardo verfügt über Erfahrung in der SDLC- und Testautomatisierung eingebetteter Echtzeit-, sicherheitskritischer Anwendungen sowie in der Softwarekonformität mit Industriestandards.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.