Parasoft-Logo

Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »

Geometrischer Hintergrund mit einem Hauch von Blau und Grün
Titelbild des Whitepapers „Leitfaden zu CI/CD für Automotive DevOps“

Whitepaper

Leitfaden zu CI/CD für Automotive DevOps

Neugierig, was der Ratgeber beinhaltet? Unten finden Sie eine Vorschau.

Zum Abschnitt springen

Übersicht

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.

Automatisierung in CI/CD

Kontinuierliche Integration setzt auf automatisierte Build- und Deployment-Prozesse, um langsame, manuelle Arbeitsabläufe zu vermeiden, die die 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 für die ADAS-Entwicklung

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.

Infografik zur kontinuierlichen Integration als Teil eines kontinuierlichen Entwicklungszyklus.

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.

Automatisierte Tests für Automobilsoftware ist aufgrund der Komplexität der Initiierung und Beobachtung von Tests auf eingebetteten Systemen, des eingeschränkten Zugangs zur Zielhardware und der Notwendigkeit eines praktikablen kontinuierlichen Testens von den Host-Entwicklungssystemen zu den Zielsystemen eine größere Herausforderung.

Automatisierte Tests vom Host zum Ziel

Eine Lösung wie Parasoft C / C ++ test Es wird mit einem optimierten Testframework geliefert, um den zusätzlichen Aufwand für den Binärspeicherbedarf zu minimieren, und stellt dieses in Form von Quellcode zur Verfügung, sodass es bei Bedarf an plattformspezifische Änderungen angepasst werden kann.

Durchführung von Unit-Tests und Codeabdeckung auf der Zielhardware

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 Eclipse, VS-CodeGreen Hills Multi, Wind River Workbench, IAR EW, ARM MDK, ARM DS-5, TI CCS, Visual Studio und viele andere.

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 Entwicklungsplattform auf dem Desktop jedes Entwicklers

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:

  • Synchronisierung von Upgrades für das gesamte Team auf eine neue Version eines Tools wie eines Compilers oder einer Build-Toolchain
  • Dynamische Reaktion auf einen neuen Sicherheitspatch für die Bibliothek oder das Software Development Kit (SDK)
  • Sicherstellung der Konsistenz der Toolchain für alle Teammitglieder und der automatisierten Infrastruktur (CI/CD).
  • Versionierung der Entwicklungsumgebung und Wiederherstellung der älteren Produktversion, die mit einer bestimmten Toolchain zertifiziert wurde
  • Einarbeitung und Einrichtung neuer Entwickler

All diese Probleme lassen sich mit Containern leicht lösen.

Verwendung eines befehlszeilenbasierten Tools mit einer containerisierten Kompilierungstoolchain

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.

Vorteile von CI/CD

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:

  • Integrationstests werden früh und oft durchgeführtDas bedeutet, dass Fehler früher aufgedeckt werden und somit einfacher und kostengünstiger behoben werden können.
  • Regressionstests beginnen früher So können neue Funktionen getestet werden, um zu sehen, wie sie sich auf bestehenden Code auswirken. Nach jeder Iteration werden der Regressionstestsuite neue Tests hinzugefügt.
  • Inkrementelle Verbesserungen Das Produkt lässt sich leichter weiterentwickeln, indem neue Funktionen hinzugefügt und getestet sowie Fehler behoben werden. Qualität und Sicherheit lassen sich so einfacher schrittweise integrieren.
  • Ermöglicht kontinuierliches Testen und BereitstellenDiese sind gleichwertige Bestandteile des kontinuierlichen Entwicklungsprozesses. Kontinuierliche Integration allein ist ohne sie nicht effektiv. kontinuierliche Prüfung und kontinuierliche Lieferung

 

CI/CD erfordert kontinuierliches Testen

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.

Statische Analyse

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.

Durchsetzung von Codierungsstandards

Hilft den erforderlichen Branchenstandards entsprechen wie MISRA C/C++ oder CERT C/C++, wodurch verhindert wird, dass ganze Fehlerklassen und schlechte Programmierpraktiken in den Build gelangen.

Automatisierte Testausführung

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.

Rückverfolgbarkeit der Anforderungen

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.

Testwirkungsanalyse

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.

Testdatenverwaltung

Erhöht die Effektivität der kontinuierlichen Teststrategie erheblich. Gute Testdaten und Praktiken zur Verwaltung von Testdaten erhöhen die Abdeckung und erzielen genauere Ergebnisse.

Shift Left mit CI/CD

Die Fahrt nach nach links verschiebenSicherheit und Zuverlässigkeit im Softwareentwicklungszyklus (SDLC) basieren auf dem Bestreben, Fehler und Sicherheitslücken 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 logisch, 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:

  • Testautomatisierung verbessern
  • Erhöhen Sie die Codeabdeckung
  • Automatisierte bidirektionale Rückverfolgbarkeit
Diagramm mit der Y-Achse, die den Prozentsatz der Defekte anzeigt, und der X-Achse, die die Entwicklungsstadien anzeigt und zeigt, wie die Kosten von Defekten steigen, je später sie im Entwicklungslebenszyklus gefunden werden.
Das frühzeitige Auffinden und Beheben von Sicherheitslücken ist kostengünstiger und weniger riskant.

Verbesserung der Sicherheit mit DevSecOps

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, DevSecOps verlagert die Sicherheit nach linksDies ist besonders wichtig bei Software, die als eingebettete sicherheitskritische Software eingestuft wird.

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.

Beschleunigen Sie die Sicherheit mit CI/CD

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.

Zusammenfassung

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.

Entwicklerteam

Bereit, tiefer einzutauchen?

Vollständiges Whitepaper anfordern