Gehen Sie einen schnelleren, intelligenteren Weg zur KI-gestützten C/C++-Testautomatisierung. Erfahren Sie mehr >>
Whitepaper
Bevor Sie loslegen, sehen Sie sich unten eine Vorschau an.
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:
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).
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 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.
Testautomatisierungstools bieten eine Möglichkeit, die folgenden Hürden bei Unit-Tests zu überwinden:
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.
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.
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.
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.
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.
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.
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:
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.
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:
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.
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?