Parasoft C/C++test 2022.2 unterstützt MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Einhaltung der statischen Analyse- und Codierungsstandards für autonome Fahrsoftware

Von Ijaz Sarwar

18. Dezember 2019

5  min lesen

Das Schreiben von Code für komplexe Funktionen wie autonomes Fahren erfordert große Teams talentierter Personen, die sehr oft ihre eigenen Ansichten darüber haben, wie qualitativ hochwertiger Code sichergestellt werden kann. Es ist jedoch nicht so einfach, einen effizienten Softwareentwicklungsprozess aufzubauen, der Qualitätsinitiativen wie statische Analyse und Einhaltung von Codierungsstandards umfasst, die die erfolgreiche Zertifizierung des autonomen Fahrzeugs ermöglichen.

Autonomes Fahren ist ein sehr wettbewerbsfähiger Bereich, und Entwicklergeschwindigkeit ist ein Mantra. Wer zuerst ein zertifiziertes Produkt auf den Markt bringen kann, hat einen erheblichen Vorteil gegenüber der Konkurrenz. Daher können Entwickler statische Analysen und andere Qualitätsinitiativen leicht als Hindernis betrachten. Insbesondere weil der Bereich des autonomen Fahrens nach Talenten hungert, stellen Unternehmen intelligente Entwickler ein, auch wenn sie keinen Hintergrund in Bezug auf Sicherheit haben. Entwickler mit einem Hintergrund ohne funktionale Sicherheitskultur kennen jedoch nicht alle Qualitätsprozesse, die für die sicherheitskritische Softwareentwicklung erforderlich sind. Dies kann das kulturelle Buy-In zu einer Herausforderung machen.

Internes Buy-In erhalten

Manchmal scheint es so, als ob die Schaffung eines internen Konsenses für qualitätsorientierte Praktiken einen Master-Abschluss in Psychologie oder die Fähigkeiten eines ausgebildeten Verhandlungsführers erfordert. In früheren Projekten war ich dafür verantwortlich, statische Analysen und die Einhaltung von AUTOSAR C ++ 14-Kodierungsstandards als nachhaltig einzuführen Prozess. Autonome Fahrsoftware ist sehr innovativ und die dafür verwendeten Softwarekomponenten werden mit modernem C ++ entwickelt. Vor diesem Hintergrund ist der Codierungsstandard AUTOSAR C ++ 14 der am besten geeignete Standard für autonome Fahrsoftware, da er modernes C ++ unterstützt und für eine sicherheitsorientierte Entwicklung entwickelt wurde.

Um die Unüberzeugten zu überzeugen, habe ich mehrere Präsentationen gehalten, in denen verschiedene Aspekte erörtert wurden. Trotz all dieser Diskussionen und Vereinbarungen widersetzen sich einige Entwickler der Analyse des gesamten von ihnen erstellten Codes. Hier sind einige der wichtigsten Punkte, auf die ich mich konzentriere, um die richtigen Prozesse einzurichten:

  • Zertifizierung - Autonome Autosoftware muss genehmigt und zertifiziert werden, bevor die Massenproduktion aufgenommen wird. Dieser Prozess sieht in verschiedenen Regionen der Welt unterschiedlich aus, aber alle Automobilunternehmen erkennen ISO 26262 als den wichtigsten Standard für funktionale Sicherheit an, der die Zulassung und Zertifizierung vereinfacht. Die Einhaltung der statischen Analyse und der Einhaltung der Codierungsstandards ist nach ISO 26262 erforderlich, und die mangelnde Einhaltung der Codierungsstandards für den Quellcode ist ein großes Hindernis im Genehmigungsprozess. Keine ernsthafte Unternehmensorganisation wird dieses Risiko berücksichtigen.
  • Bessere Qualität zu geringen Kosten - Wenn Sie von Anfang an qualitativ hochwertigen, kompatiblen Code erstellen und so früh wie möglich testen, ist es einfacher (dh schneller), Probleme zu beheben, und Sie vermeiden häufige Fallstricke, da Entwickler von Anfang an Best Practices anwenden. Die Entwickler (auch diejenigen, die neu in der sicherheitskritischen Kultur sind) werden lernen und es wird weniger Verstöße gegen statische Analysen geben. Es ist wichtig zu testen, während Code geschrieben wird, um komplexe Software in einem schnellen Tempo zu erstellen. Die statische Analyse ist eine der Methoden, die sehr gut in dieses Bild passt und eine wesentliche Grundlage für Sicherheit und Schutz bildet, indem Problemklassen beseitigt werden, die zu unvorhersehbarem Verhalten führen können. Wenn Entwicklern ein Tool zur Verfügung gestellt wird, mit dem die Ergebnisse in einer kurzen Rückkopplungsschleife mit einer geringen Anzahl von Fehlalarmen erstellt werden, erhöht sich die Akzeptanz dieser Testtechnologie. Und mit der Zeit beginnen Entwickler, es als Sicherheitsnetz zu betrachten, dh als etwas, das ihnen hilft, zuverlässigen Code zu erstellen. Ganz zu schweigen davon, dass dies für Agile / DevOps von entscheidender Bedeutung ist. Wenn Sie kurz vor der Veröffentlichung mit dem Scannen warten, werden Sie Monate damit verbringen, den Code zu reparieren.
  • Rechtsfragen - Die Einhaltung von Codierungsstandards ist ein Schutzschild für potenzielle rechtliche Probleme. Mit Millionen von Autos auf den Straßen werden Unfälle passieren. Einige von ihnen werden auf Softwarefehler zurückgeführt, die unvermeidlich sind. Unternehmen müssen nachweisen können, dass sie alles getan haben, was praktisch möglich ist, um Sicherheitsrisiken zu vermeiden. Das Fehlen eines dokumentierten Prozesses zur Einhaltung von Codierungsstandards ist sicherlich ein Problem im Falle eines Softwarefehlers, der zu einer Tragödie beigetragen hat. Wenn ich diesen Aspekt mit Entwicklern diskutiere, um den Effekt zu verstärken, möchte ich einige echte Unfälle einbeziehen, die durch Softwarefehler verursacht wurden, wie zum Beispiel die berüchtigte unbeabsichtigte Beschleunigung von Toyota.

Die widerstandsfähigsten Entwickler überzeugen…

Die autonome Fahrtechnik befindet sich in einem sehr frühen Stadium. Ein Großteil des erstellten Quellcodes ist nur ein Prototyp, um neue Ideen zu testen. Einige Entwickler möchten keine Zeit damit verschwenden, die Codierungsstandardkonformität zu gewährleisten. Sie möchten lediglich schnell etwas schreiben und es testen. Eine typische Geschichte, die ich gehört habe, lautet: „Ich möchte diesen neuen Algorithmus nur testen. Wenn er funktioniert, schreibe ich den Code neu, um ihn sauber zu machen.“ Das klingt unschuldig genug, aber die Realität ist, dass es nur eine wachsende technische Verschuldung gibt.

Wenn wir von Prototyp zu Prototyp wechseln, nehmen wir normalerweise viel Code mit, statistisch gesehen können es bis zu 80% des Codes sein. Wir können es uns also nicht leisten, einen Prototyp mit schlechtem Code zu erstellen und ihn später zu reparieren, da wir von Anfang an gewusst haben, dass wir dafür keine Zeit haben. Selbst wenn es sich um einen Prototyp handelt, muss der Code konform sein, da das Endprodukt eine erhebliche Menge an Code enthalten wird, der ursprünglich als Prototyp erstellt wurde.

Wenn Sie sich nicht darauf konzentrieren, es jetzt statt später zu tun, können Sie sich darauf konzentrieren, es jetzt zu tun Vermeiden Sie es, eine unbekannte Zeit zu verbringen Am Ende sehen die Entwickler darin, den Prozess zu verbessern, anstatt eine Verlangsamung einzuführen. Wenn Sie den Prozess effizient in den Workflow des Entwicklers integrieren können, ohne die Geschwindigkeit oder Kreativität zu beeinträchtigen, wird die Arbeit mit ihm viel einfacher. Es ist viel einfacher, etwas sauber und ordentlich zu halten, als am Ende ein großes Durcheinander zu beseitigen. Wenn Sie konsistente, wartbare Methoden zum Schreiben von kompatiblem Code erstellen, können Sie später weniger Probleme feststellen.

Dieser verdammte Legacy-Code…

Aber selbst wenn Sie in der Lage sind, einen Prozess zur Einhaltung von Codierungsstandards frühzeitig erfolgreich einzuführen, wird zwangsläufig bereits eine (erhebliche) Menge an Code vorhanden sein, die bereits vom Team erstellt und teilweise vererbt wurde. Und während Sie das statische Analysetool (Parasoft C / C ++ - Test) und den Standard (AUTOSAR) auswählen, erstellt das Team in der Zwischenzeit viel Code ohne Compliance-Richtlinien! Daher ist es wichtig, auch eine Richtlinie für Legacy-Code zu erstellen. Zwei großartige Richtlinien sind:

  • "Keine neuen Verstöße" - bei denen Sie die Erstellung von neuem Code erst abschließen können, wenn er kompatibel ist
  • "Clean as you go" - Wenn Sie die Datei berühren, müssen Sie sie bereinigen

Mit diesen Strategien können Sie Legacy-Code adressieren, neuen Code einführen und den Platz weiterhin aufgeräumt halten.

Zusammenfassung

Um die Prozesse zur Einhaltung statischer Analyse- und Codierungsstandards in der gesamten Entwicklungsorganisation erfolgreich anzuwenden, profitieren Sie von den folgenden Schritten:

  1. Stellen Sie sicher, dass jeder versteht, warum Sie dies tun (ohne Zeit darauf zu verwenden, können Sie nicht zertifiziert werden und werden auf dem Automobilmarkt nicht erfolgreich sein können).
  2. Gehen Sie auf die Kosten für verspätete Veröffentlichungen ein, wenn Sie die Qualität nicht als ständige Anstrengung betrachten, und zeigen Sie dem Team, was passiert, wenn Sie es bis zum Ende verlassen
  3. Machen Sie die Adoption so relevant und reibungslos wie möglich. Seien Sie absichtlich, wenn Sie Ihr statisches Analysetool implementieren, und stellen Sie sicher, dass Sie die richtigen Regeln und Prüfer auswählen und über einen Workflow verfügen, der in den vorhandenen Workflow der Entwickler integriert ist.

Holen Sie sich eine einheitliche C- und C ++ - Entwicklungstestlösung für eingebettete und sicherheitskritische Softwareprojekte

Von Ijaz Sarwar

Ijaz ist ein Ingenieur für funktionale Sicherheit mit mehr als 14 Jahren Erfahrung in der Softwareentwicklung / -prüfung. Seine jüngsten Erfahrungen konzentrierten sich auf die selbstfahrende Technologie, führten die Implementierung von ISO 26262 an und erstellten simulierte Szenarien, um die selbstfahrende Technologie rigoros zu testen.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.