DevOps- und Continuous-Everything-Initiativen verlangen die Fähigkeit zur sofortigen und kontinuierlichen Bewertung der mit einem Release-Kandidaten verbundenen Risiken. Das ist bei der Entwicklung von Automotive-Software nicht anders. Kontinuierliche Integration kann hierbei erheblich helfen.
Kontinuierliches Testen bietet eine automatisierte Möglichkeit, um sofort Feedback zu den Geschäftsrisiken zu erhalten, die mit einem Software-Release-Kandidaten verbunden sind. Damit können Entwicklungsteams geschäftliche Erwartungen erfüllen und Manager fundierte Entscheidungen über Kompromisse treffen, um den geschäftlichen Wert eines Release-Kandidaten zu optimieren. Einen Großteil dieser Aufgabe erfüllt die kontinuierliche Integration.
CI/CD steht für die fortlaufende Integration (Continuous Integration) und Bereitstellung (Continuous Deployment). Durch die Kombination dieser beiden Begriffe entsteht eine automatisierte Pipeline, in welcher der Code erstellt, getestet und dann mithilfe automatisierter Prozesse bereitgestellt wird.
Dadurch arbeiten Entwicklungsteams in kürzeren Zyklen und einem strafferen Arbeitsablauf oder in anderen Worten: Teams, die CI/CD nutzen, haben in der Regel niedrigere Risiken, weniger Kosten und kürzere Entwicklungszeiten. Wie im CI/CD-DevOps-Zyklus dargestellt, ermöglicht die Feedback-Schleife den »kontinuierlichen« Aspekt der Methodik, um die Automatisierung zu ermöglichen. Allerdings ist es das automatisierte Testen, das den gesamten Kreislauf antreibt (Bild 1).
Da sich ein Großteil der Automobilentwicklung auf Software konzentriert, ist das Einspielen von Updates zur Routinearbeit geworden und nicht die Behebung von Hardwarefehlern. Die Einhaltung von Aktualisierungen funktionaler Sicherheitsstandards wie ISO 26262, AUTOSAR und anderen bedeutet, dass sich die Teams schnell anpassen müssen.
Um diese modernen Probleme bei der Entwicklung und Wartung von Automobilsoftware zu lösen, ist der Einsatz agiler Methoden, kontinuierlicher Tests und Automatisierung die beste Strategie.
CI/CD-Pipelines eröffnen der Entwicklung von Automotive-Software mehrere Vorteile:
➔ Code & Testabdeckung: Wenn die Teams erkennen, welcher Code durch die Ausführung von Testfällen abgedeckt wurde und welcher nicht, verstehen sie besser, wo Fehler lauern könnten. Es hilft auch zu wissen, wie viele weitere Testfälle es für die angestrebte Code-Abdeckung braucht, um genauere Ergebnisse zu erhalten.
➔ Code-Standards: Der Einsatz der statischen Analyse innerhalb des CI/CD-DevOps-Workflows erleichtert das Einhalten von branchenüblichen Programmieranforderungen wie MISRA C/C++.
➔ Kontinuierliche Testautomatisierung: Sie bringt enorme Arbeits- und Kostenreduzierung durch das Ausführen von Softwaretests auf einer automatisierten, kontinuierlichen Basis, die wenig menschliche Interaktion erfordert.
➔ Zeitlich vorverlegtes (Shift-Left-)Testen: Durch frühzeitiges und häufiges Testen treten weniger Bedrohungsvektoren, Fehler und Probleme im eigenen Arbeitsablauf auf. Fehler werden früher aufgedeckt, das führt zu einfacheren Korrekturen, kürzeren Bereitstellungszeiten und niedrigeren Projektkosten (Bild 2).
➔ Sicherheit: Der Einsatz von Programmierstandards für die statische Analyse wie SEI CERT C/C++ ermöglicht das frühzeitige Erkennen von Sicherheitsschwachstellen und Fehlern.
➔ Container: Diese können helfen, reproduzierbare, konsistente und sichere Entwicklungsumgebungen zu schaffen. Sie lassen sich zentral aktualisieren und werden dann bereitgestellt, wenn die Entwickler den Code aktualisieren.
➔ Datengesteuert: Die Voraussetzung für kontinuierliche Tests ist die Generierung und Analyse von Daten. Durch die Erstellung geeigneter Daten für bestimmte Szenarien, die man ausführen möchte, kann man das Szenario besser simulieren, anstatt sich auf Produktionsdatenquellen zu verlassen.
Für bestmögliche Ergebnisse ist es wichtig, die DevOps-Phasen vollständig zu verstehen und zu wissen, wann man die richtigen Tools einsetzen muss. Auf dem Markt gibt es bewährte CI/CD- Pipeline-Tools oder Lösungen, die die eigene DevOps-Bereitstellung unterstützen. Einige dieser Tools für die Automobilindustrie sind Azure DevOps, Bambus, Bitbucket, GitHub, GitLab, Jenkins oder Parasoft.
Werden Sicherheitstools und -praktiken in den DevOps Workflow integriert, spricht man von DevSecOps. Es erfordert ein Umdenken in den Teams. Die Übernahme von Sicherheit in den Arbeitsablauf ist von entscheidender Bedeutung, da sie für Automobilhersteller eine zentrale Rolle spielt. Dahinter stehen regulatorische Anforderungen aus WP.29 der UNECE und die Notwendigkeit, Sicherheitsprozesse aus Standards wie ISO 21434 zu integrieren.
Eine der Kernkomponenten von DevOps ist die CI, also das Zusammenführen von Code-Funktionen, Korrekturen oder kleinen Änderungen, unterstützt durch Prozesse, die Versions- kontrolle und Software-Build-Automatisierung umfassen. Automatisierte Verfahren variieren für Entwicklerteams je nach Projektumfang, Prioritäten, eingesetzten Tools, Budget und anderen Faktoren.
Kurz gesagt: Der typische Arbeitsablauf beginnt damit, dass die Entwickler einen Entwicklungszweig erstellen, von dem aus sie arbeiten (Bild 3). Sie führen eine Pull-Anfrage durch, schreiben Code und nehmen jeden Tag mehrmals Änderungen vor. Ein Push oder Commit für die Code-Änderung erfolgt, was zu einer Merge-Anfrage führt.
Der Code wird in ein Repository wie Git verschoben, in der Regel innerhalb einer DevOps-Plattform wie GitLab. Diese führt für jede Übergabe im Entwicklerzweig eine Pipeline aus bzw. GitLab erstellt den Code und führt automatisierte Testskripte aus (statische Analyse, Unit-Tests, Code-Abdeckung usw.). Auch Docker-Images können zur Erfüllung der Pipeline verwendet werden. Sobald der Code überprüft wurde, erfolgt seine Einbindung in den Hauptzweig.
Andere Code-Hosting-Plattformen wie GitHub sind ebenfalls weit verbreitet und können selbst gehostete Runner beherbergen. Bei diesen Läufern kann es sich um physische Server, virtuelle Maschinen oder Container-Images handeln, die vor Ort oder in einer öffentlichen Cloud wie Google Cloud ausgeführt werden.
Automatisierung ist nicht mehr genug. Aus diesem Grund gehen kontinuierliche Tests mit der Automatisierung in DevOps einher, um bessere Ergebnisse, kürzere Lebenszyklen und weniger Fehler zu erzielen. So können Teams schnell umdenken – eine notwendige Eigenschaft in der heutigen Welt der sich ständig ändernden Anforderungen und Aktualisierungen.
Die Erstellung einer eigenen Automotive CI/CD-DevOps-Pipeline ist vom Team, den jeweiligen Arbeitsabläufen, dem Projekt usw. abhängig. Im Allgemeinen bestimmen einige Schlüsselaspekte ihren Aufbau:
➔ Identifizieren der Zielhardware, des Softwarezwecks und der erwarteten Ergebnisse
➔ Kenntnis möglicher Risikofaktoren, Sicherheitslücken und Probleme
➔ Einrichten von automatisierten Tests durch Ermittlung, welche Tests automatisiert werden können und sollen, sowie ihrer entsprechenden Anwendung
➔ Einsatz der richtigen Tools, die die Entwickler beim Be- wältigen von Updates, Fehlern und allgemeinen Arbeitsabläufen am besten unterstützen
➔ Erstellen einer Dokumentation rund um das System für Transparenz und leichtere Kommunikation zwischen den Teammitgliedern
Hat ein Entwickler neuen Code erstellt oder eine Korrektur ausgeführt, löst das Übertragen in das Repository einen inkrementellen Build-Test und einen statischen Analysetest für die Einheit aus. Mit diesen Ergebnissen können die Entwickler bei Bedarf ein Refactoring durchführen. Sie können projektweite Builds auch manuell oder zu bestimmten Terminen während der Arbeitszeiten auslösen. Dadurch würde ein vollständiger statischer Analyselauf gestartet, gefolgt von einer Regressions- testsuite mit neuen und aktualisierten Unit-Tests.
Integrationspunkte für das automatisierte Testen
Durch die besondere Konzentration auf statische Analyse und Unit-Tests spielt die Testautomatisierung die wichtigste Rolle in der Code-, Build- und Testphase des SDLC.
➔ Code-Phase: Im Hinblick auf das Einhalten von Programmierstandards, Qualität und Sicherheit sind statische Analysewerkzeuge unerlässlich. Beispielsweise verlangt Automobilsoftware, die mit MISRA C oder C++ konform sein muss, saubere Berichte beim Programmieren und Check-in, um eine kontinuierliche Konformität zu gewährleisten.
➔ Build-Phase: In diesem Abschnitt werden statische Analysewerkzeuge ausgelöst und Regressionstests eingeleitet. Dies liefert einen vollständigen Umfang der Software mit präziser Fehlersuche und Daten für zukünftige Tests.
➔ Test-Phase: In diesem Schritt bearbeiten die Teams fehlgeschlagene Regressionstests und testen neu hinzugefügte Funktionen. Regressions- und andere Testergebnisse bestimmen den Planungszyklus.
Für die Integration wichtiger Qualitäts- und Sicherheitsprüfungen sind statische Analysewerkzeuge erforderlich.
CI/CD-Workflows funktionieren immer gleich, unabhängig davon, ob sie containerisiert sind oder nicht. Mit Containern können DevOps-Teams Anwendungen allerdings einfacher bereitstellen, patchen und skalieren, um sie an die Anforderungen des Unternehmens anzupassen (Bild 4).
Im Wesentlichen beschleunigen Container die Entwicklung, das Testen und die Produktion im Rahmen von Agile- und DevOps-Anwendungen. Geht es um die Verwaltung komplexer Entwicklungsumgebungen, insbesondere im sicherheitskritischen Bereich, haben Teams in der Regel mit nachfolgenden Herausforderungen zu kämpfen – sie alle lassen sich durch den Einsatz von Containern lösen:
➔ Synchronisieren von Upgrades für das gesamte Team auf eine neue Version eines Tools wie zum Beispiel eines Compilers, einer Build-Toolchain und anderen
➔ Dynamische Reaktion auf einen neuen Sicherheitspatch für die Bibliothek oder das Software Development Kit (SDK)
➔ Sicherstellen der Durchgängigkeit der Toolchain für alle Teammitglieder und die automatisierte Infrastruktur (CI/CD)
➔ Fähigkeit, die Entwicklungsumgebung zu versionieren und wiederherzustellen, um jene ältere Version des Produkts zu verwenden, die mit der spezifischen Toolchain zertifiziert wurde
➔ Einarbeitung und Einrichtung neuer Entwickler
Jede Strategie, welche die Markteinführungszeit verkürzt, die Kosten senkt und die Arbeit der Entwicklungsteams erleichtert, ist eine Win-Win-Situation. Die Übernahme der agilen Arbeitsweise und die Umstellung auf CI/CD-DevOps ist eine Notwendigkeit für Entwickler in der Automobilindustrie.
Aber nicht alle Tools, die zu diesem Zweck auf dem Markt sind, sind gleich, sondern einige heben sich vom Durchschnitt ab – wie die Parasoft-Lösung für CI/CD-DevOps-Anforderungen. Dieses Tool generiert automatisch Datenberichte, verfügt über eine intuitive, einsteigerfreundliche Benutzeroberfläche, unterstützt bei End-to-End-Systemtests und vieles mehr. Es erfüllt die Standards und Zertifizierungen, die für sicherheitskritische Software erforderlich sind. Zudem profitieren Parasoft-Benutzer von einer flexiblen, zentralisierten, webbasierten Schnittstelle zum Durchsuchen der Ergebnisse bei der Integration in CI/CD-Workflows.
Letztlich ermöglicht das dynamische web- basierte Reporting-Dashboard in Kombination mit der Process Intelligence Engine Quality-of-Life-Funktionen wie die Quellcode-Navigation, anpassbare Berichts-Widgets, erweiterte Analysefunktionen und eine erweiterte Filterung. Damit gehören für die Anwender Fragen zur Qualifizierung des Tools oder Schwierigkeiten bei der Aufzeichnung der Daten der Vergangenheit an. Stattdessen können sie über intelligente Berichte und Dashboards, die Daten über Unit-Tests, statische Analysen und andere Metriken liefern, den Fortschritt verfolgen
CI/CD DevOPs im Detail |
---|
Dieser Artikel liefert einen Überblick über CI/CD DevOps für Entwicklungsprojekte in der Automobilbranche, eine detaillierte Beschreibung bietet ein kostenlos erhältliches Whitepaper: |
https://prsft.co/3GEFGyH |
Der Autor
Ricardo Camacho
ist Senior Technical Product Marketing Manager für Parasofts Embedded-Testlösungen. Er hat Erfahrung im SDLC und in der Testautomatisierung von eingebetteten Echtzeit-, Sicherheits- und sicherheitskritischen Anwendungen sowie in der Einhaltung von Industriestandards bei Software.