Empfohlenes Webinar: MISRA C++ 2023: Alles, was Sie wissen müssen | Zum Video

Einhaltung von Codierungsstandards für das Testen von Software für autonomes Fahren

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
20. Oktober 2023
9 min lesen

Die Codierungsstandards für autonome Fahrzeuge ändern sich aufgrund der Weiterentwicklung der Technologie und der Bedürfnisse der Menschen ständig. Lesen Sie weiter, um mehr über die Herausforderungen beim Testen von Software für autonomes Fahren und Best Practices zur Sicherstellung der Einhaltung von Codierungsstandards zu erfahren.

Autonomes Fahren stellt im Vergleich zu herkömmlichen Anforderungen zusätzliche Herausforderungen an die Compliance bei der Entwicklung von Fahrzeugen. Darüber hinaus ist autonomes Fahren ein äußerst wettbewerbsintensiver Bereich. Wer als Erster ein zertifiziertes Produkt auf den Markt bringen kann, hat einen deutlichen Vorteil gegenüber der Konkurrenz. Daher können Entwickler statische Analysen und andere Qualitätsinitiativen leicht als Hindernis für die Entwicklung betrachten.

Obwohl die kulturelle Akzeptanz für Entwicklungsteams eine Herausforderung darstellen kann, ist die Aufklärung über die Qualitätsprozesse, die für die sicherheitskritische Softwareentwicklung erforderlich sind, von entscheidender Bedeutung für schnellere, kostengünstigere Arbeitsabläufe mit besserer Dokumentation und höheren Compliance-Raten. Wie gehen Sie also beim Testen von Software für autonomes Fahren vor?

Lassen Sie uns die Welt der selbstfahrenden Autos, der statischen Analyse, der Anforderungen an die funktionale Sicherheit und mehr erkunden.

Was ist autonomes Fahren?

Beim autonomen Fahren fahren Fahrzeuge selbstständig, ohne dass ein menschliches Eingreifen erforderlich ist. Dieser Vorgang nutzt eine Vielzahl von Technologien, darunter Algorithmen der künstlichen Intelligenz, Sensoren, Kameras, Mikroprozessoren und mehr. Bedenken Sie, dass „selbstfahrend“ und „autonom“ nicht dasselbe sind.

Auch bei einem selbstfahrenden oder automatisierten Auto ist irgendwann menschliches Eingreifen erforderlich. Vollständig autonome Fahrzeuge können ihre Umgebung ohne menschliches Zutun erfassen und navigieren. Um den Grad der Autonomie eines Autos zu kategorisieren, gibt es sechs Stufen, die 2014 von SAE International entwickelt wurden.

  • Stufe 0. Das System hat keine ständige Kontrolle über das Fahrzeug und kann nur vorübergehend eingreifen oder Warnungen ausgeben.
  • Stufe 1. Dieses fortschrittliche Fahrerassistenzsystem (ADAS) ist in vielen Autos für Sicherheitsausstattungen wie Rückfahrkameras, adaptive Geschwindigkeitsregelung, Spurverlassenswarnungen und mehr vorhanden.
  • Stufe 2. Dieses ADAS-System erfordert, dass der Mensch als Fahrer fungiert, aber während der Fahrt lenken und beschleunigen oder bremsen kann.
  • Stufe 3. Diese Kategorie von selbstfahrenden oder automatisierten Fahrsystemen (ADS) kann beispielsweise ein Auto parken, aber der Mensch muss bereit sein, das Fahrzeug zu bedienen, da er weiterhin der Hauptbetreiber des Autos ist.
  • Stufe 4. Das Fahrzeug ist größtenteils autonom und erfordert kaum die Aufmerksamkeit eines menschlichen Fahrers.
  • Stufe 5. Ein völlig autonomes Fahrzeug, das in allen Situationen fahren kann. Zum Zeitpunkt des Schreibens dieses Blogs haben wir dieses Niveau des autonomen Fahrens noch nicht vollständig erreicht.

Dieses Ebenensystem legt nahe, dass die Automatisierung linear zunimmt, was nicht immer der Fall ist. Es bleibt jedoch ein nützliches Hilfsmittel zur Klassifizierung von Automatisierungsarten in Fahrzeugen.

Was ist autonome Fahrsoftware?

Autonome Fahrsoftware ist jede Software, die auf autonomen Fahrplattformen verwendet wird. Dazu gehört weit mehr als nur künstliche Intelligenz und maschinelles Lernen. Dazu gehören auch Dinge, die in nicht autonom fahrenden Fahrzeugen zu finden sind, wie zum Beispiel elektronische Steuergeräte oder Steuergeräte. Diese computergestützten Bordressourcen steuern alles von den Bremsen über Türen bis hin zu Fahrerassistenzsystemen. Es sind jedoch neuronale Netze, die das autonome Fahren vorantreiben.

Diese Netzwerke können Datenmuster finden, die maschinelle Lernalgorithmen analysieren und in Aktionen umsetzen können. Eine Beispielsituation könnte sein, dass das System des autonomen Autos erkennt, dass eine grüne Ampel auf Gelb wechselt und als Reaktion darauf langsamer wird.

Wie funktioniert Software für autonomes Fahren?

Software für autonomes Fahren nutzt viele Arten von Sensoren, um Daten wahrzunehmen und zu analysieren. Sie können bestimmen, wo sich ein Fahrzeug im physischen Raum oder im Verhältnis zu Objekten wie Bordsteinen oder anderen Autos befindet. Andere Software zeichnet einen Weg für das Fahrzeug zu einem bestimmten Ort auf oder steuert Beschleunigung, Bremsen, Lenkung und mehr.

Es ist genau so, wie Sie ein Fahrzeug bedienen würden – nur dass es eine Reihe von Programmen, Algorithmen und KI ist, die das für Sie erledigen.

Was ist das Testen von Software für autonomes Fahren?

Wie jedes System, das für den menschlichen Gebrauch konzipiert ist, erfordern autonome Fahrplattformen strenge Tests und die Einhaltung spezifischer Standards. Zum Beispiel, ISO 26262 fungiert als Automotive-Standard für funktionale Sicherheit für den gesamten Automotive-Produktentwicklungsprozess. Es hilft Automobilherstellern, die Auswirkungen von System- und Hardwarefehlern zu erkennen, zu verwalten und abzuschwächen, um die Sicherheit zu gewährleisten. Allerdings reicht es nicht aus, alle technischen Herausforderungen abzudecken, die autonome Fahrzeuge mit sich bringen. Sie können die vorgesehene Leistung erbringen, sind jedoch realen Szenarien wie extremen Wetterbedingungen oder dem Verhalten von Menschen nicht gewachsen. Betrachten wir zum Beispiel das Dartverhalten von Kindern auf der Straße oder das eines betrunkenen Erwachsenen.

Anstelle vieler interessanter Szenarien und um bei der Analyse von Umwelt- und menschlichem Verhalten zu helfen, wurde die Automobilnorm ISO 21448:2021 hinzugefügt, um Hinweise zu den anwendbaren Design-, Verifizierungs- und Validierungsmaßnahmen sowie zu Aktivitäten während der Betriebsphase zu geben erforderlich, um die Sicherheit der beabsichtigten Funktionalität (SOTIF) zu erreichen und aufrechtzuerhalten.

AUTOSAR, oder Automotive Open System Architecture, ist eine Partnerschaft interessierter Gremien, die standardisierte Softwarearchitekturen für Steuergeräte in Fahrzeugen verfolgen und entwickeln. Darüber hinaus erstellt MISRA, die Motor Industry Software Reliability Association, Richtlinien, nach denen Entwickler elektronische Komponenten für die Automobilindustrie erstellen können.

Daher geht es beim Testen von Software für autonomes Fahren um mehr als nur um die Prüfung, ob die Softwarekomponenten auch im Fehlerfall Sicherheit gewährleisten. Dazu gehört das Testen der autonomen Reaktion des Fahrzeugs auf reale Bedingungen und die Gewährleistung der Sicherheit. Darüber hinaus müssen Organisationen nachweisen, dass die autonome Software alle regulatorischen Anforderungen erfüllt.

Wie werden autonome Fahrzeuge getestet?

Autonome Fahrzeuge erfordern Simulationen realer Testfälle. Dazu gehören realistische Fahrumgebungen, Modelle anderer Fahrzeuge und Situationen, denen automatisierte Autos begegnen würden. Da es sich jedoch um computergestützte Systeme handelt, müssen auch Bedenken hinsichtlich Cyberangriffen berücksichtigt werden.

Codierungsstandards für autonome Fahrsoftware verstehen

Die Codierungsstandards für autonome Fahrzeuge entwickeln sich ständig weiter, da sich auch die Technologie und die Bedürfnisse der Menschen weiterentwickeln. Dennoch können Entwickler beim Schreiben von Code für die Autos von morgen jederzeit auf traditionelle sicherheitskritische Compliance-Standards zurückgreifen.

Gemeinsame Codierungsstandards in der Softwareindustrie

Es gibt eine Reihe allgemeiner Codierungsstandards für Software für verschiedene Branchen. Ein Codierungsstandard an sich ist jedoch lediglich eine Reihe von Codierungsregeln, Best Practices und Richtlinien, nach denen Entwickler Code schreiben sollten.

Dies geht über allgemeine Ratschläge wie die Einschränkung der Verwendung globaler oder standardisierter Namenskonventionen hinaus. Es gibt Richtlinien oder Best Practices von Einzelpersonen und Unternehmen mit jahrzehntelanger Erfahrung in der Softwareentwicklung, die eine Steigerung der Codequalität garantieren.

Von der Automobilindustrie bis hin zu medizinischen Geräten, der Luftfahrt, dem Schienenverkehr und mehr haben Branchen C- und/oder C++-Sicherheitscodierungsstandards übernommen. Einige davon umfassen:

  1. MISRA C 2023 ist der neueste Codierungsstandard der C-Programmiersprache für Codesicherheit, Zuverlässigkeit und Portabilität für eingebettete Systeme.
  2. MISRA C++ 2023, der bald angekündigte Codierungsstandard für C++ 17-Codesicherheit, Sicherheitszuverlässigkeit und Portabilität für eingebettete Systeme.
  3. AUTOSAR C ++ 14 ist der Codierungsstandard für C++ 14-Codesicherheit, Zuverlässigkeit und Portabilität für eingebettete Systeme. Es wird durch MISRA C++ 2023 ersetzt.
  4. SEI CERT C. ist der sichere Codierungsstandard der C-Programmiersprache, um Software-Sicherheitsrisiken zu identifizieren und Schwachstellen in den entwickelten Anwendungen wirksam zu reduzieren.
  5. SEI CERT C++ ist der sichere Codierungsstandard der C++-Programmiersprache, der dazu beiträgt, die Sicherheit von Software zu erhöhen und Schwachstellen in den entwickelten Anwendungen zu reduzieren.

Codierungsstandards speziell für autonomes Fahren

Wenn es um autonomes Fahren geht, sollten Teams die zuvor aufgeführten Codierungsstandards verwenden. Dies wären diejenigen, die dringend empfohlen werden, aber aufgrund der Natur autonomer Fahrzeuge reichen diese Sicherheitscodierungsstandards nicht aus.

Andere Standards wie CWE und OWASP verfügen über Codierungsregeln und -richtlinien, gehen jedoch über den Rahmen des Codes hinaus. Sie berücksichtigen auch den gesamten Entwicklungsablauf, Organisationsrichtlinien und Prozesse, die Menschen befolgen müssen, um die Sicherheit autonomer Fahrzeuge zu gewährleisten.

Bei der Betrachtung autonomer Fahrzeuge und der fortschrittlichen KI-Systeme, die mit autonomen Prozessen verbunden sind, kommen zusätzliche Standards und Vorschriften ins Spiel. Diese Liste erhebt keinen Anspruch auf Vollständigkeit, bietet jedoch allgemeine Hinweise:

  1. ISO 26262 , funktionale Sicherheit von Straßenfahrzeugen
  2. ISO 21434 , Cybersicherheit von Straßenfahrzeugen
  3. ISO 21448 , SOTIF (Sicherheit der beabsichtigten Funktionalität)
  4. Automotive SPICE, Qualitätsmanagement
  5. UNECE WP.29, Fahrzeug-Cybersicherheit

Wichtige Aspekte autonomer Fahrzeuge, die diese und andere Standards berücksichtigen, sind:

  • Echtzeitbeschränkungen. Autonomes Fahren erfordert die Verarbeitung von Daten in Echtzeit. Daher müssen die Systeme in der Lage sein, große Datenmengen schnell zu verarbeiten, um Entscheidungen in Sekundenbruchteilen treffen zu können.
  • Cyber ​​Security. Ein gehacktes Fahrzeug ist eine schlechte Nachricht. Codierungsstandards sollten Eventualitäten für solche Szenarien gewährleisten.
  • Interaktionen zwischen Mensch und Maschine. Der Mensch ist unberechenbar. Entwickler müssen daher die Erwartung auf das Unerwartete einbauen.

Herausforderungen beim Testen von Software für autonomes Fahren

Der inhärente sicherheitskritische Charakter der Entwicklung von Software für autonomes Fahren erfordert natürlich gründliche und kontinuierliche Tests. Aber wie alle Arten der Softwareentwicklung birgt auch die Entwicklung KI-gesteuerter Systeme ihre eigenen Fallstricke und Herausforderungen.

  • Einhaltung mehrerer Codierungsstandards. Diese Aufgabe erfordert Planung, konsistente Tests und dass Entwickler aufmerksam darauf achten müssen, wie sie Code schreiben.
  • Cybersicherheitsrisiken. Alle computergestützten Systeme sind anfällig für Sicherheitsrisiken. Die Übernahme eines autonomen Fahrzeugs durch einen Bösewicht ist beispielsweise eine reale Situation, die während der gesamten Entwicklung und Erprobung vorhergesehen werden sollte.
  • Legacy-Code. Unabhängig davon, ob es sich um Ihren eigenen alten Code oder um etwas Geerbtes handelt, kann Legacy-Code ein Hindernis bei der Entwicklung darstellen. Behandeln Sie es mit zwei Mantras: „Sauber, so wie Sie es machen“ und „Keine neuen Verstöße“.
  • Erfassung von Fahrzeugdaten. Für wirklich autonomes Fahren müssen Tonnen neuer Daten in Echtzeit gesammelt, analysiert und überprüft werden. Daher sind robuste Systeme rund um die Datenerfassung wichtig.
  • Tech-Schulden. Einige Entwickler möchten effizienter arbeiten, indem sie nicht alles, was sie schreiben, vor dem Testen standardkonform machen. Dies könnte dazu führen, dass Prototypen mit nicht sicherheitskonformem Code erstellt werden, was zu Verzögerungen führt. Es ist besser, die Reinigung unterwegs durchzuführen.
  • Einschränkungen des Testens. Das Testen jeweils nur eines Prototyps verlangsamt alle möglichen Aktualisierungen, und Fehler können sich als kostspielig erweisen.
  • Automatisierungsfreundliche Infrastruktur. Öffentliche Straßen und Autobahnen stellen in ihrem derzeitigen Zustand ein erhebliches Hindernis für autonome Fahrzeuge dar. Sie sind auf menschliche Fahrer ausgerichtet. Dadurch kann die Entwicklung von Software für diese Systeme erschwert werden.
  • Sich weiterentwickelnde Technologie. KI und maschinelles Lernen verändern sich rasant, aber auch Hilfstechnologien beim autonomen Fahren wie Sensoren, Radar usw. verändern sich rasant.

Best Practices zur Sicherstellung der Einhaltung von Codierungsstandards

Compliance zu erreichen ist keine leichte Aufgabe. Selbst die erfahrensten Profis können in gewisser Weise scheitern. Aber es gibt allgemeine Best Practices außerhalb der Softwareentwicklung für autonomes Fahren, von denen alle Softwareentwickler profitieren.

Codierungsstandards von Anfang an festlegen

Unabhängig vom Umfang, Zeitplan oder Budget des Projekts ist die Festlegung von Erwartungen und Standards zu Beginn von entscheidender Bedeutung. Dies stellt nicht nur sicher, dass Ihr Code für alle im Team leichter verständlich ist, sondern stellt auch sicher, dass es weniger Probleme bei der schnellen Behebung von Fehlern gibt. Niemand muss telefonieren oder ein Ratespiel spielen.

Regelmäßige Codeüberprüfungen und Audits

Genau wie kontinuierliches Testen ermöglicht Ihnen die regelmäßige Überprüfung des Codes, Standards besser durchzusetzen und Probleme frühzeitig zu beheben. Dadurch können Sie Dinge wie tiefe Verschachtelung, unleserlichen Code, korrekte Namenskonventionen und mehr erkennen.

Kontinuierliche Schulung und Kompetenzentwicklung

Die studentische Denkweise – auch als Experte auf einem Gebiet – kann dazu beitragen, Ihre Fähigkeiten zu stärken und zu verbessern. Daher lohnt es sich, in die Ausbildung und Schulung Ihrer Entwickler zu investieren, die über das hinausgeht, wofür sie ursprünglich eingestellt wurden. Außerdem verändert sich die Technologie ständig. Das bedeutet, dass Ihr Team mithalten muss.

Nutzung von Automatisierung und Werkzeugen

Statische Analysetests sind nicht die Lieblingsbeschäftigung jedes Entwicklers. Durch die Automatisierung ist es jedoch viel einfacher geworden, die Vorteile solcher Testarten zu nutzen. Die Nutzung aller Tools im Arsenal, einschließlich KI und maschinellem Lernen, ist in einem agilen oder Shift-Links-Setup ein Kinderspiel.

Dokumentation & Berichterstattung

Auch hier gilt: Der einfachste Weg, Probleme zu vermeiden, besteht darin, sie von vornherein zu verhindern. Dokumentation und Berichterstattung ermöglichen es den Teams, bei Bedarf Querverweise zu erstellen, sodass sie nicht zusätzliche Zeit in Anspruch nehmen müssen, um die Person ausfindig zu machen, die den Code ursprünglich geschrieben hat. Oder schlimmer noch, sie machen einfach eine Annahme und machen mit etwas weiter, das nicht nutzbar ist.

Vorteile des Testens

Bei der Einführung der statischen Analyse mit dem bald angekündigten MISRA C++ 2023 und dem bald erscheinenden alten AUTOSAR C++ 14-Codierungsstandards kann Compliance als nachhaltiger Prozess entmutigend wirken. Doch selbst in einem so innovativen Bereich wie dem autonomen Fahren bleiben Tests ein integraler Bestandteil der Best Practices.

Testen mit Tools wie z C/C++-Test von Parasoft Integriert Vorteile in Ihren Arbeitsablauf, darunter:

  1. Zertifizierung und Compliance. Alle Automobilorganisationen erkennen ISO 26262 als den wichtigsten Standard für funktionale Sicherheit an, der die Genehmigung und Zertifizierung vereinfacht. Autonome Fahrzeugsoftware muss genehmigt und zertifiziert werden, bevor sie in die Massenproduktion geht, sodass Sie durch frühzeitige und häufige Tests schneller zur Zertifizierung gelangen können.
  2. Qualität zu geringeren Kosten. Durch die Erstellung von qualitativ hochwertigem, konformem Code von Anfang an und das Testen so früh wie möglich können Probleme schneller behoben werden. Sie vermeiden häufige Fallstricke, da Entwickler von Anfang an Best Practices übernehmen. Um komplexe Software schnell zu erstellen, ist es wichtig, Tests durchzuführen, während Code geschrieben wird. Die statische Analyse ist eine der Methoden, die gut in dieses Bild passt.
  3. Verantwortlichkeit und Dokumentation. Da Millionen von Autos auf den Straßen unterwegs sind, wird es zu Unfällen kommen, von denen einige auf Softwarefehler zurückzuführen sind. Organisationen müssen nachweisen können, dass sie praktisch alles Mögliche getan haben, um Sicherheitsrisiken vorzubeugen. Ein dokumentierter Prozess zur Einhaltung von Codierungsstandards wird sich als vorteilhaft erweisen.
  4. Prüfung in geschlossenen Kreislaufsystemen. Das Erstellen von Testfällen in virtuellen Umgebungen trägt dazu bei, Testkosten und -zeit zu reduzieren. Die Simulation verschiedener Situationen für die Analyse ermöglicht winzige Optimierungen oder größere Überarbeitungen während des gesamten Testprozesses, um verwertbarere Daten zu erhalten.

Zukünftige Trends und Überlegungen zum Testen von Software für autonomes Fahren

Es gibt zahlreiche Unternehmen, die versuchen, als Erste ein wirklich autonomes Fahrzeug auf den Markt zu bringen. Diese Technologie erfordert umfassende Tests, um Leben zu schützen, richtig zu funktionieren und sich an den Alltag anzupassen.

Obwohl es sich nicht um ein offizielles Dokument der National Highway Traffic Safety Administration (NHTSA) handelt, hat das Institute of Electrical and Electronics Engineers (IEEE) im Jahr 2022 einen vorläufigen Satz von Richtlinien für ADS-Standards veröffentlicht IEEE P2846 Draft Standard für Annahmen für Modelle im sicherheitsbezogenen automatisierten Fahrzeugverhalten versucht, die einzigartigen Probleme mit Autonomie und Fahren anzugehen. Allerdings ist die Bereitstellung einer Standardrichtlinie für diesen Anwendungsfall nicht die einzige zukünftige Überlegung.

Wie bereits erwähnt, stützen sich Softwaretests für autonomes Fahren auch auf die reale Welt, um tatsächlich selbstfahrende Autos zu ermöglichen. Die traditionelle Technologie und die Verhaltensweisen, mit denen wir navigieren, müssen sich möglicherweise mit der weit verbreiteten Einführung des automatisierten Fahrens ändern. Es stellt sich die Frage: Was wäre, wenn Städte so gestaltet würden, dass sie von Menschen genutzt werden und keine Autos parken?

Zusammenfassung

Die Einbeziehung statische Analyse oder andere Arten von kontinuierlichen Tests in Ihren Workflow liefern greifbare Ergebnisse. Aber mit Tools wie einer der vielen Lösungen von Parasoft ist es viel einfacher, die Sicherheitskonformität mit Software für automatisierte Autos zu erreichen. Denken Sie daran, Folgendes zu tun:

  1. Machen Sie deutlich, warum Sie testen.
  2. Reduzieren Sie die Kosten verspäteter Veröffentlichungen.
  3. Gestalten Sie die Einführung so relevant und reibungslos wie möglich.
  4. Gehen Sie bei der Implementierung Ihres statischen Analysetools bewusst vor.
  5. Wählen Sie die richtigen Regeln und Prüfer für einen Workflow aus, der sich in die Prozesse der Entwickler integriert.

Mit dem Ziel, effizient, gründlich und entwicklerorientiert zu sein, werden Sie die Einhaltung der Sicherheitsvorschriften schneller erreichen, als Sie denken.

Erfahren Sie mehr über die entscheidende Rolle, die ISO 26262 in der Automobilindustrie für die Bereitstellung sicherer Software spielt.