Parasoft-Logo
Titelbild des Whitepapers

Whitepaper

DevOps Best Practices für die Automobilsoftwareentwicklung

Bevor Sie loslegen, sehen Sie sich unten eine Vorschau an.

Zum Abschnitt springen

Übersicht

Da die Automobilindustrie weiterhin auf einen Agile EntwicklungsmethodikSie decken dabei weitere Prozesse auf, die beschleunigt werden können, wie beispielsweise die Bereitstellung durch DevOps, insbesondere durch kontinuierliches Testen. DevOps zielt darauf ab, alle notwendigen Schritte zu automatisieren, die erforderlich sind, um Anwendungscode zu erstellen und an den Endbenutzer auszuliefern.

DevOps Es funktioniert wie ein Förderband, um den Anwendungscode durch die verschiedenen Phasen zu transportieren. Die heutigen DevOps- und Continuous-Everything-Initiativen erfordern die Fähigkeit, die mit einem Release-Kandidaten verbundenen Risiken sofort und kontinuierlich zu bewerten.

Kontinuierliches Testen bietet eine automatisierte und unaufdringliche Möglichkeit, unmittelbares Feedback zu den Geschäftsrisiken eines Software-Releasekandidaten zu erhalten. Es unterstützt Entwicklungsteams dabei, die Geschäftserwartungen zu erfüllen, und hilft Managern, fundierte Abwägungsentscheidungen zu treffen, um den Geschäftswert eines Releasekandidaten zu optimieren. Ein Großteil davon wird durch Continuous Integration (CI) realisiert.

In diesem Whitepaper werden wir uns mit Folgendem befassen: Best Practices für DevOps in der Automobilsoftware:

  • Nutzen Sie Testautomatisierung, um kontinuierliche Integration zu ermöglichen.
  • Beseitigen Sie Validierungs- und Verifizierungshindernisse durch kontinuierliche Tests auf Host- und Zielsystemen.
  • Nutzen Sie Container, um konsistente, reproduzierbare und sichere Entwicklungsumgebungen zu schaffen.
  • Erweitere die Testabdeckung durch automatisierte Testgenerierung und intelligente Testausführung.
  • Treffen Sie datengestützte Entscheidungen auf Basis zentralisierter Berichte und Analysen.

Nutzen Sie Testautomatisierung, um kontinuierliche Integration zu ermöglichen

Es ist wichtig, die DevOps-Phasen vollständig zu verstehen und zu wissen, wann man die richtigen Tools einsetzt, um optimale Ergebnisse zu erzielen. Auf dem Markt gibt es diverse bewährte CI/CD-Pipeline-Tools und -Lösungen, die Ihre DevOps-Implementierung unterstützen. Zu den in der Automobilindustrie eingesetzten Tools gehören unter anderem Parasoft, Jenkins, GitHub, GitLab, Azure DevOps, Bitbucket, Bamboo und Docker (Container).

Kontinuierliche Integration

Eine der Kernkomponenten von DevOps ist die kontinuierliche Integration (CI). CI bezeichnet das Zusammenführen von Code-Features, Fehlerbehebungen oder kleineren Änderungen mithilfe von Prozessen, die Versionskontrolle und Software-Build-Automatisierung umfassen. Ziel von CI ist es, eine konsistente und automatisierte Methode zum Erstellen, Verpacken und Testen von Anwendungen in einer sogenannten Software-Pipeline zu etablieren.

In den meisten Fällen ist das Testen das größte Hindernis für eine reibungslose und effiziente CI-Pipeline. Manuelles Testen kommt nicht in Frage, daher bleibt nur die Wahl zwischen automatisiertem Testen oder gar keinem Testen. Automatisiertes Testen Es umfasst mehr als nur Unit-Tests, sondern auch Best Practices wie statische Analysen und Regressionstests. Automatisierte Tests liefern unmittelbares Feedback, das zur Anpassung und Neuplanung für die nächste Iteration oder den nächsten Sprint genutzt wird.

Testautomatisierung im CI/CD-Workflow

Testautomatisierung im DevOps-Kontext bedeutet die Automatisierung von Testmethoden. Es ist wichtig, mit den einzelnen Phasen dieser Methodik vertraut zu sein und zu wissen, wo die Testverifizierungs- und Validierungsmethoden ausgelöst werden müssen.

Vielleicht haben Sie auch schon den Begriff DevSecOps gehört, der die Praxis von Integration von Sicherheit in den DevOps-WorkflowDies erfordert einen Mentalitätswandel in den Teams, um Sicherheitstools und -praktiken in diese Methodik zu integrieren. Sicherheit ist für viele Automobilhersteller aufgrund regulatorischer Anforderungen aus WP.29 R155 und der Notwendigkeit, Prozesse aus Standards wie … zu integrieren, wichtig geworden. ISO 21434 .

Ein wichtiger Vorteil des CI/CD-Pipeline-Workflows ist der Feedback-Mechanismus, der dafür sorgt, dass der kontinuierliche Prozess reibungslos funktioniert. Störungen in diesem Mechanismus führen zu Ineffizienzen, die wiederum Verzögerungen bei Entwicklung und Bereitstellung zur Folge haben.

Wie Testautomatisierungstools beim Unit-Testing helfen

Testautomatisierungstools bieten eine Möglichkeit, die folgenden Hürden bei Unit-Tests zu überwinden:

  • Unit-Test Und Assertionsframeworks bieten standardisierte Ausführungsformate wie CPPUnit.
  • Die IDE-Integration liefert die Ergebnisse der Unit-Tests direkt an den Entwickler.
  • Die geführte Generierung von Unit-Tests reduziert den Programmieraufwand.
  • Funktions-Mocking isoliert den Code von seinen Abhängigkeiten.
  • Die Codeabdeckung zeigt an, welcher Code ausgeführt wurde.
  • Host- und zielbasierte Testausführung.

Durch eine effizientere Gestaltung der Tests innerhalb der CI/CD-Pipeline ist es möglich, die Testabdeckung mit jedem Zyklus zu verbessern und den Projektfortschritt durch kontinuierliches Testen nicht zu behindern.

Code

Statische Analysewerkzeuge sind während der Codierungsphase sowohl aus Qualitäts- als auch aus Sicherheitsgründen unerlässlich, sowie im Hinblick auf Einhaltung der CodierungsstandardsFür Automobilsoftware, die beispielsweise MISRA C oder C++ entsprechen muss, sind saubere Berichte beim Codieren und Einchecken erforderlich, um die kontinuierliche Einhaltung sicherzustellen.

Bauen

Die Build-Phase löst sowohl eine anwendungsweite statische Analyse als auch Regressionstests aus. In dieser Phase werden statische Analysetools für den gesamten Projektumfang ausgeführt, was eine höhere Genauigkeit ermöglicht und potenziell übersehene Fehler auf Komponentenebene aufdeckt. Ebenfalls in dieser Phase werden die Regressionstests gestartet. Die Ergebnisse der Regressionstests bestimmen die nächste Phase, das Testen.

Test

In dieser Phase beginnt das Testen neu hinzugefügter Funktionen sowie die Behandlung fehlgeschlagener Regressionstests. Die Ergebnisse der Regressions- und Neutests bestimmen den nächsten Planungszyklus.

Beseitigen Sie Validierungs- und Verifizierungshindernisse durch kontinuierliches Testen auf Host- und Zielsystemen

Die kontinuierliche Integration ist nur ein Teil eines kontinuierlichen Entwicklungsprozesses, der Tests und Auslieferungen erfordert, um die Vorteile dieses Ansatzes voll auszuschöpfen.

Kontinuierliche Prüfung Es bietet eine automatisierte und unaufdringliche Möglichkeit, sofortiges Feedback zu einem Software-Releasekandidaten zu erhalten. Kontinuierliches Testen ist nicht einfach nur mehr Testautomatisierung. Ziel ist es, Qualität und Sicherheit als Teil eines kontinuierlichen Integrations-, Release- und Bereitstellungsprozesses in das Produkt zu integrieren.

Einige kontinuierliche Testaktivitäten

  • Nutzen Sie frühzeitig die statische Analyse. Zur Erkennung von Fehlern und Sicherheitslücken. Die Früherkennung, üblicherweise auf dem Entwickler-Desktop, verhindert, dass Fehler Zeit beim Unit-Testing verschwenden und in den Software-Build gelangen.
  • Einen Codierungsstandard durchsetzen Um den erforderlichen Unternehmens- und Branchenstandards wie MISRA C/C++ oder SEI CERT C zu entsprechen, ist die Einhaltung eines Codierungsstandards unerlässlich. Dadurch wird verhindert, dass ganze Fehlerklassen und schlechte Codierungspraktiken in den Build gelangen und später zu größeren Problemen führen.
  • Automatisierte Testausführung auf Host- und Zielsystemen Sobald die Einheiten codiert und die integrierten Subsysteme bereit sind, werden die erforderlichen Tests zur Verifizierung der Einheiten durchgeführt. Diese umfassen nichtfunktionale Tests, Lasttests, Sicherheitstests und Leistungstests. Die Tests werden direkt vom CI-Orchestrierungssystem ausgeführt. Die Ergebnisse dieser Tests werden in denselben Build übernommen und zusammengeführt. Die Codeabdeckung (Anweisung, Zweig und MC/DC) wird nach Einheit, Datei, Test und Build-Nummer abgeglichen.
  • Anforderungen nachvollziehbar machen Ziel ist es, Code, Tests und andere Ressourcen mit den Anforderungen der Stakeholder abzugleichen. Dies ermöglicht eine objektive Bewertung der Anforderungen, die wie erwartet funktionieren, derjenigen, die einer Validierung bedürfen, und derjenigen, die gefährdet sind.
  • Anwendungstest-Auswirkungsanalyse Um den Fokus auf die relevanten Testbereiche zu richten, ist es wichtig, die Testbemühungen gezielt einzusetzen. Aus Risikoperspektive hat Codeänderung Auswirkungen auf mehr als nur die Software selbst. Sie betrifft auch relevante Tests und Assets. Wenn Teams Codeänderungen vornehmen, stellen sich Fragen: Benötigen wir neue Tests oder müssen bestehende angepasst werden? Welche Auswirkungen hat dies auf Abhängigkeiten? Automatisierung hilft Teams, sich ausschließlich auf die betroffenen Tests zu konzentrieren.
  • Testdaten automatisch pflegen Um die Effektivität einer kontinuierlichen Teststrategie zu steigern, sind gute Testdaten und deren Managementpraktiken erforderlich. Diese erhöhen die Testabdeckung und führen zu genaueren Ergebnissen. Die Entwicklung und der Zugriff auf Testdaten können jedoch hinsichtlich Zeitaufwand, Arbeitsaufwand und Compliance eine erhebliche Herausforderung darstellen.
  • Setzen Sie auf Tests und Datengenerierung Um kontinuierliches Testen zu ermöglichen, können Sie fortlaufend Daten generieren, die für das jeweilige Szenario geeignet sind, anstatt sich auf Produktionsdatenquellen zu verlassen und darauf zu hoffen, dass alle benötigten Daten am richtigen Ort vorhanden sind. Die Kombination von Datengenerierung und Simulation erlaubt es Ihnen, die richtigen Daten zum richtigen Zeitpunkt am richtigen Ort einzufügen.

Kontinuierliche Tests auf Host- und eingebetteten Automobil-Zielsystemen

Auf Entwicklungsebene unterscheidet sich die Softwareentwicklung im Automobilbereich kaum von der typischen Anwendungsentwicklung. Sie erfordert IDEs, Compiler, statische und dynamische Analyse sowie Build-Tools. Allerdings sind die Tools oft auf andere Architekturen ausgerichtet als die, auf denen sie laufen, beispielsweise Host- und Zielumgebung. Unterschiedliche Tool-Versionen sind wichtig, um eine einheitliche Entwicklungsumgebung für das gesamte Team zu gewährleisten.

Automatisierte Tests für Automobilsoftware Die Durchführung von Tests auf eingebetteten Systemen ist aufgrund der Komplexität ihrer Initiierung und Überwachung eine größere Herausforderung, ganz zu schweigen vom eingeschränkten Zugriff der Softwareteams auf die Zielhardware. Die Automatisierung von Softwaretests ist unerlässlich, um kontinuierliches Testen im Automobilbereich vom Host-Entwicklungssystem bis zum Zielsystem zu ermöglichen.

Das Testen von Automobilsoftware ist besonders zeitaufwändig. Die Automatisierung der Regressionstestsuite ermöglicht erhebliche Zeit- und Kosteneinsparungen. Darüber hinaus sind Testergebnisse und die Erfassung von Codeabdeckungsdaten aus dem Zielsystem unerlässlich für die Validierung und die Einhaltung von Normen.

Die Rückverfolgbarkeit zwischen Testfällen, Testergebnissen, Quellcode und Anforderungen muss erfasst und aufrechterhalten werden, was bedeutet, dass die Datenerfassung bei der Testdurchführung von entscheidender Bedeutung ist.

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.

Unterstützte IDE-Umgebungen

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. Unterstützte IDE-Umgebungen sind:

  • Eclipse
  • VS-Code
  • MS Visual Studio
  • Grüne Hügel Multi
  • Wind River Werkbank
  • IAR EW
  • ARM-MDK
  • ARM DS-5
  • TI CCS und mehr

Automatisierte Regressionstests

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. Sollten Änderungen vorgenommen werden, schlagen diese Testfälle fehl und das Team wird auf das Problem aufmerksam gemacht. 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.

Nutzen Sie Container, um konsistente, reproduzierbare und sichere Entwicklungsumgebungen zu schaffen.

Entwicklungsteams wissen, dass CI/CD-Workflows unabhängig davon funktionieren, ob sie containerisiert sind oder nicht. Der Vorteil von Containern für DevOps-Teams liegt darin, dass Anwendungen einfach bereitgestellt und gepatcht werden können. Unternehmen können Container bedarfsgerecht skalieren, um Entwicklung, Tests und Produktion in agilen und DevOps-Umgebungen zu beschleunigen.

Bei der Verwaltung komplexer Entwicklungsumgebungen, insbesondere im sicherheitskritischen Bereich, haben Teams normalerweise mit den folgenden Herausforderungen zu kämpfen:

  • Synchronisieren von Upgrades für das gesamte Team auf eine neue Version eines Tools wie eines Compilers, Erstellen einer Toolchain usw.
  • Dynamisches Reagieren 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 bzw. CI/CD.
  • Die Möglichkeit, die Entwicklungsumgebung zu versionieren und sie so wiederherzustellen, dass sie die ältere Version des Produkts bedient, die mit einer bestimmten Toolchain zertifiziert wurde.
  • Onboarding und Einrichtung neuer Entwickler.

Alle diese Probleme lassen sich mit Containern leicht lösen. Jeder Container enthält standardisierte Versionen der Entwicklungswerkzeugkette, darunter statische Analysetools, Compiler, IDE und Build-Tools. Diese Container werden zentral aktualisiert und bedarfsgesteuert bereitgestellt, sobald ein Entwickler am Projektcode arbeitet.

Die einheitliche Entwicklungsumgebung verhindert Fehler, die durch leicht unterschiedliche Tool-Versionen auf den Rechnern der Entwickler entstehen könnten. So wird sichergestellt, dass alle die korrekte Version jedes Tools verwenden, was später für die Einhaltung gesetzlicher Bestimmungen wichtig sein kann. Container ermöglichen zudem die zentrale Aktualisierung von Tools und gewährleisten, dass diese Aktualisierungen umgehend im gesamten Unternehmen verfügbar sind.

Zusammenfassung

DevOps in der Automobilsoftware erfordert sofortigen und kontinuierlichen Einblick in die Risiken und die Qualität jedes Release-Kandidaten. Kontinuierliches Testen liefert diesen Einblick durch automatisiertes Echtzeit-Feedback. Die Umstellung von der traditionellen Wasserfallentwicklung auf agile Methoden und CI/CD kann zwar für eingebettete, sicherheitskritische Systeme eine Herausforderung darstellen, ist aber mit der richtigen Vorbereitung und bewährten Verfahren machbar. Dazu gehören die Automatisierung von Tests zur Unterstützung der kontinuierlichen Integration, die Beseitigung von Verifizierungs- und Validierungsengpässen durch Tests auf Host- und Zielsystemen, der Einsatz von Containern für konsistente und sichere Entwicklungsumgebungen, die Erweiterung der Testabdeckung durch automatisierte Testgenerierung und intelligente Testausführung sowie die Nutzung zentralisierter Berichte für datengestützte Entscheidungen. Zusammengenommen reduzieren diese modernen Techniken die Ineffizienzen manueller Automobiltests erheblich und machen die heutigen automatisierten Ansätze wesentlich effektiver.

Bereit, tiefer einzutauchen?

Vollständiges Whitepaper anfordern