Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »
Whitepaper
Neugierig, was der Ratgeber beinhaltet? Unten finden Sie eine Vorschau.
Das rasante Wachstum der Automobilsoftware – bedingt durch Fahrerassistenzsysteme (ADAS) und steigende Sicherheitsanforderungen – hat Entwicklung und Tests zunehmend kostspielig und komplex gemacht. Da moderne Fahrzeuge über 100 Millionen Codezeilen enthalten, setzen Automobilhersteller verstärkt auf CI/CD- und DevOps-Methoden, um die Markteinführungszeit zu verkürzen und Kosten zu senken.
Dieses Whitepaper erläutert, wie die Integration von automatisierten Tests – insbesondere statischer Analyse, Unit-Tests und struktureller Codeabdeckung gemäß ISO 26262 – in CI-Pipelines kontinuierliches Testen ermöglicht, die Produktivität deutlich steigert, den Testaufwand reduziert und die allgemeine Softwarequalität und -sicherheit verbessert.
Die kontinuierliche Integration ist auf automatisierte Build- und Deployment-Prozesse angewiesen, um langsame, manuelle Arbeitsabläufe zu vermeiden, die ihre Effektivität beeinträchtigen.
CI erfordert ein zentrales Quellcode-Repository, automatisierte Builds und die schnelle Behebung von Integrationsproblemen. CI/CD-Projekte scheitern jedoch häufig in der Testphase, da die Festlegung der Testkriterien und die Durchführung der Tests, insbesondere manuell, zeitaufwändig und kostspielig sind. Testautomatisierung ist zwar unerlässlich, aber allein nicht ausreichend. Dies unterstreicht den Bedarf an umfassenderen Teststrategien für eine nachhaltige kontinuierliche Bereitstellung.
CI/CD gewinnt in der Automobilsoftwareentwicklung immer mehr an Bedeutung. Projekte unterliegen jedoch oft Einschränkungen, die bei der Anwendungsentwicklung nicht auftreten.
Neben den physikalischen und rechnerischen Beschränkungen der Zielhardware gibt es auch Marktbeschränkungen. Automobilsoftware muss Anforderungen an Sicherheit, Zuverlässigkeit und extrem lange Lebenszyklen erfüllen – Produkte können jahrzehntelang auf dem Markt bleiben.
Auf der Entwicklungsebene benötigt Automobilsoftware IDEs, Compiler, statische und dynamische Analysetools sowie Build-Tools. Die Tools sind oft auf andere Architekturen ausgerichtet als die, auf denen sie laufen (Host- vs. Zielumgebung). Versionskonsistenz der Tools im gesamten Team ist unerlässlich.
Die Automatisierung auf Build-Ebene nutzt dieselben Techniken. Wenn jedoch Code ausgeführt werden muss, wird die Barriere zwischen Host und Zielsystem relevant. Automatisierung, die die Ausführung von Code erfordert, benötigt daher in der Automobil-Softwareentwicklung spezielle Unterstützung.
Die Automatisierung von Tests für Automobilsoftware ist aufgrund der Komplexität der Initiierung und Beobachtung von Tests auf eingebetteten Systemen, des eingeschränkten Zugriffs auf die Zielhardware und der Notwendigkeit eines praktikablen kontinuierlichen Testens von den Host-Entwicklungssystemen bis zu den Zielsystemen eine größere Herausforderung.
Eine Lösung wie Parasoft C/C++test verfügt über ein optimiertes Testframework, das den zusätzlichen Aufwand für den Binärspeicher minimiert und in Form von Quellcode bereitgestellt wird, sodass es bei Bedarf an plattformspezifische Änderungen angepasst werden kann.
Ein Überblick über die Bereitstellung, Ausführung und Beobachtung von Tests vom Host bis zum Zielsystem.
Ein großer Vorteil der Parasoft C/C++-Testlösung ist die nahtlose Integration mit eingebetteten IDEs und Debuggern, die die Ausführung von Testfällen reibungslos und automatisiert gestalten. Zu den unterstützten IDE-Umgebungen gehören unter anderem Eclipse, VS Code , Green Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS und Visual Studio.
Die Parasoft-Lösung unterstützt die Erstellung von Regressionstest-Baselines als organisierte Testsammlung und überprüft automatisch alle Ergebnisse. Diese Tests werden regelmäßig automatisch ausgeführt, um zu überprüfen, ob Codeänderungen die in den Regressionstests erfasste Funktionalität verändern oder beeinträchtigen. Bei nachfolgenden Tests meldet C++test Aufgaben, wenn Änderungen am im ersten Test erfassten Verhalten festgestellt werden.
Die Gleichwertigkeit der Fähigkeiten von Remote-Target-Ausführung und hostbasiertem Testen bedeutet, dass Automobil-Softwareteams die gleichen Vorteile der Automatisierung nutzen können wie jede andere Art der Anwendungsentwicklung.
Containerisierte Bereitstellungen von Entwicklungswerkzeugen werden für Automobilentwicklungsteams immer wichtiger. Obwohl Container ursprünglich zur Lösung von Problemen bei der Bereitstellung von Microservices und webbasierten Anwendungen entwickelt wurden, erfreuen sie sich in letzter Zeit zunehmender Beliebtheit bei Entwicklungsteams, insbesondere bei großen Teams, die Container zur Verwaltung komplexer Toolchains einsetzen.
Bei der Verwaltung komplexer Entwicklungsumgebungen, insbesondere in der Entwicklung sicherheitskritischer Software, haben Teams üblicherweise mit folgenden Herausforderungen zu kämpfen:
All diese Probleme lassen sich mit Containern leicht lösen.
Das Kommandozeilen-Tool Parasoft C/C++test Professional lässt sich einfach für die Verwendung mit einer Kompilierungs-Toolchain und einer in Containern bereitgestellten Ausführungsumgebung konfigurieren. Das Tool unterstützt Bereitstellungen auf Basis von Linux- und Docker-Containern.
Der größte Vorteil von CI/CD liegt in der Reduzierung des Projektrisikos. In der Vergangenheit setzten zu viele Projekte auf radikale Softwareintegrationen („Big Bang“), bei denen die Softwareteams ihre Software erst kurz vor Abschluss der Produktentwicklung integrierten. Diese Teams stießen auf massive Integrationsprobleme und standen oft unter enormem Zeitdruck, um das Projekt abzuschließen. Die Tests wurden sogar noch weiter ans Ende des Projekts verschoben, sodass sie schließlich zu spät und unzureichend waren.
Durch Continuous Integration verfügen Softwareteams stets über eine vollständige Produktversion, die für Tests, Auslieferung und Veröffentlichung bereit ist. Anstatt alles auf einmal zusammenzuführen, durchläuft das Team kontinuierlich kleinere Integrationsschritte, um Probleme frühzeitig zu erkennen und das Risiko einer späten Integration zu minimieren.
Hier sind weitere Vorteile der kontinuierlichen Integration:
Kontinuierliche Integration ist nur ein Teil eines kontinuierlichen Entwicklungsprozesses, der Tests und Auslieferung erfordert. Kontinuierliches Testen liefert automatisiertes, unaufdringliches und sofortiges Feedback zu Software-Releasekandidaten – nicht nur mehr Testautomatisierung, sondern die tatsächliche Integration von Qualität und Sicherheit in Produkte als Teil der CI-/Release-/Auslieferungsprozesse.
Die frühzeitige Erkennung von Fehlern und Sicherheitslücken auf dem Entwickler-Desktop verhindert, dass Fehler Zeit beim Unit-Testing verschwenden und in den Software-Build gelangen.
Hilft dabei, die erforderlichen Industriestandards wie MISRA C/C++ oder CERT C/C++ einzuhalten und verhindert so, dass ganze Fehlerklassen und schlechte Codierungspraktiken in den Build gelangen.
Erforderlich, sobald die Anwendung erstellt ist. Zu den erforderlichen Tests gehören Unit-Tests sowie nichtfunktionale Last-, Sicherheits- und Leistungstests, die direkt von CI-Orchestrierungssystemen ausgeführt werden.
Verknüpft Code, Tests und andere Ressourcen mit den Geschäftsanforderungen. Bietet eine objektive Bewertung nicht implementierter Anforderungen, Testlücken und des Fortschritts in Richtung Auslieferung.
Gibt vor, wo die Testbemühungen ansetzen müssen. Aus Risikosicht hat geänderter Code mehr Auswirkungen als nur auf die Software selbst – er betrifft auch relevante Tests und Assets.
Die Effektivität der kontinuierlichen Teststrategie wird deutlich gesteigert. Gute Testdaten und ein gutes Testdatenmanagement erhöhen die Testabdeckung und führen zu genaueren Ergebnissen.
Der Trend zu mehr Sicherheit und Zuverlässigkeit im Softwareentwicklungszyklus (SDLC) – also zu einer frühzeitigen Erkennung und Behebung von Fehlern und Sicherheitslücken – entspringt dem Wunsch, diese so früh wie möglich zu finden und zu beheben. Probleme lassen sich deutlich einfacher, kostengünstiger und mit geringerem Risiko frühzeitig beheben. Das klingt einleuchtend, doch die Softwarebranche ist voll von Beispielen, in denen kritische Fehler katastrophale Folgen hatten.
Die wichtigsten Voraussetzungen für Shift-Left-Tests liegen darin, Qualität von Anfang an in alle Anwendungen zu integrieren. Sicherheit lässt sich nicht nachträglich hinzufügen, sondern muss von vornherein eingebaut werden. Hier sind einige Empfehlungen für Shift-Left-Tests in der CI/CD-Pipeline, die die notwendige Plattform für kontinuierliches Testen schaffen:
Erwähnenswert ist, dass DevOps- und DevSecOps-Methoden die Nutzung von Automatisierung und kontinuierlichen Prozessen zur Etablierung kollaborativer Entwicklungszyklen gemeinsam haben. Während DevOps die Liefergeschwindigkeit priorisiert, rückt DevSecOps die Sicherheit frühzeitig in den Entwicklungsprozess , was insbesondere bei sicherheitskritischer Software für eingebettete Systeme von Bedeutung ist.
DevOps und DevSecOps basieren beide auf Automatisierung und kontinuierlicher Zusammenarbeit. DevSecOps legt jedoch einen stärkeren Fokus auf die frühzeitige Integration von Sicherheit in den Entwicklungsprozess – eine wesentliche Voraussetzung für eingebettete, sicherheitskritische Software. Durch die Förderung einer engeren Zusammenarbeit zwischen Entwicklern und Stakeholdern verbessert DevSecOps die Entwicklung sicherer Software. Testautomatisierung ist zwar ein wichtiger Faktor, aber nur ein Teil des Ansatzes. Da Tests häufig einen Engpass im Softwarelebenszyklus darstellen, verbessert die Vorverlagerung von Sicherheitsaktivitäten und die Reduzierung des nachgelagerten Testaufwands sowohl die Softwaresicherheit als auch die Entwicklungseffizienz erheblich.
Moderne DevSecOps-Initiativen erfordern die Fähigkeit, die mit einem Release-Kandidaten verbundenen Risiken sofort und kontinuierlich zu bewerten. Kontinuierliches Testen innerhalb der CI/CD-Pipeline bietet eine automatisierte und unaufdringliche Möglichkeit, sofortiges Feedback zu den Sicherheitsrisiken eines Software-Release-Kandidaten zu erhalten. Es unterstützt Entwicklungsteams bei der Einhaltung der Sicherheitsanforderungen und hilft Managern, fundierte Entscheidungen zur Optimierung des Release-Kandidaten zu treffen.
Kontinuierliches Testen ermöglicht eine quantitative Risikobewertung und liefert konkrete Maßnahmen zur Risikominderung, bevor die Produkte in die nächste Phase des Softwareentwicklungszyklus (SDLC) gelangen. Ziel ist es, unnötige Aktivitäten zu eliminieren, Qualität und Sicherheit zu verbessern und die Entwicklung auf eine erfolgreiche Veröffentlichung auszurichten.
Kontinuierliche Integration und Auslieferung sind in der Automobilentwicklung Standard. Die Umstellung von einem Wasserfallmodell auf CI/CD und agile Entwicklungsmethoden zahlt sich durch Risikominderung sowie Qualitäts- und Sicherheitsverbesserungen aus. Sicherheit hat für Automobilentwickler höchste Priorität, und CI/CD ermöglicht DevSecOps, wodurch Sicherheitsanforderungen und -kontrollen in alle Phasen der Entwicklungspipeline integriert werden.
Container eignen sich ideal für CI/CD. Sie ermöglichen schnelle Bereitstellung und Portabilität in verschiedenen Host-Umgebungen und bieten Unterstützung für Versionierung und zentrale Steuerung. Containerisierte Entwicklungsumgebungen sind für die sichere Entwicklung in einer DevSecOps-Pipeline wichtig, da sie eine reproduzierbare Anwendungsumgebung mit integrierten Sicherheitskontrollen bieten.
Das Testen ist mit Abstand die zeit- und ressourcenintensivste Aktivität in der Automobilentwicklung. Kontinuierliches Testen ist ein notwendiger Bestandteil einer reibungslos funktionierenden CI/CD-Pipeline und bietet einen Rahmen, um das Testen in frühere Phasen des Lebenszyklus zu verlagern.
Durch den gezielten Einsatz von Automatisierung und die Fokussierung auf die risikoreichsten Bereiche der Anwendung lässt sich der Testprozess so optimieren, dass er kontinuierliche Abläufe weniger behindert. Kontinuierliches Testen erfordert Tools zur Automatisierung und Optimierung. Tools, die eine höhere Codeabdeckung, intelligente Testausführung und bidirektionale Rückverfolgbarkeit ermöglichen, verbessern kontinuierliches Testen zusätzlich.
Bereit, tiefer einzutauchen?