Einhaltung der statischen Analyse- und Codierungsstandards für autonome Fahrsoftware
Von Ijaz Sarwar
18. Dezember 2019
5 min lesen
Das Testen von Codes für den Bau autonomer Fahrzeuge zur Erfüllung von Compliance-Standards kann eine Herausforderung darstellen. Erfahren Sie, wie der Codierungsstandard AUTOSAR C++14 helfen kann.
Zum Abschnitt springen
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. Aber es ist nicht so einfach, einen effizienten Softwareentwicklungsprozess aufzubauen, der Qualitätsinitiativen wie statische Analysen und die Einhaltung von Codierungsstandards umfasst, die die erfolgreiche Zertifizierung des autonomen Autos 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 widerspenstigsten Entwickler überzeugen
Die Technologie des autonomen Fahrens befindet sich noch in einem sehr frühen Stadium. Ein Großteil des erstellten Quellcodes ist nur ein Prototyp, um neue Ideen zu testen. Einige Entwickler wollen keine Zeit damit verschwenden, sie mit dem Codierungsstandard kompatibel zu machen, sie wollen einfach nur schnell etwas schreiben und es testen. Eine typische Geschichte, die ich gehört habe, ist: „Ich möchte diesen neuen Algorithmus nur testen, wenn er funktioniert, werde ich den Code neu schreiben, um ihn sauber zu machen.“ Das klingt harmlos, aber die Realität ist, dass es nur eine wachsende technische Verschuldung ist.
Wenn wir von Prototyp zu Prototyp wechseln, nehmen wir normalerweise viel Code mit, statistisch können es bis zu 80 % des Codes sein. Wir können es uns also nicht leisten, etwas mit schlechtem Code zu prototypisieren und später zu reparieren, weil wir von Anfang an wussten, dass wir dafür keine Zeit haben werden. Selbst wenn es sich also 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, frühzeitig einen Coding-Standard-Compliance-Prozess erfolgreich einzuführen, wird es zwangsläufig bereits eine (erhebliche) Menge an Code geben, die bereits vom Team erstellt wurde, und einige, die vererbt wurden. Und während Sie das statische Analysetool (Parasoft C/C++test) und den Standard (AUTOSAR) auswählen, erstellt das Team in der Zwischenzeit eine Menge 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:
- 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).
- 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
- 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.