Kaffeepause von 16:15 bis 16:45
14:45 Uhr
A Comparison of Popular C++ Coding Standards (Englisch)
Popular C++ coding guidelines in automotive software development
Details anzeigen
Autor:in:
Dr. Frank van den Beuken | Perforce Software | United Kingdom
Sprache:
English
Zielgruppe:
C++ software developers, quality assurance staff
Voraussetzungen:
Basic knowledge of C++ programming language
Überblick und Zusammenfassungen:
Title: Popular C++ coding guidelines in automotive software development
Subtitle: Safe and secure automotive software development.
This year's State of Automotive Software Development Report presents the responses of 400 automotive development professionals to questions regarding current practices and emerging trends within the automotive software industry.
With the continued growth in the development of electric and semi-autonomous vehicles, as well as the subsequent increase in software components, the findings continue to show that security is as important as safety as a major concern. This is reflected in the increasing requirements to comply with security standards.
The report shows that MISRA still is the most popular coding standard in the automotive industry, with 42% of the respondents using MISRA coding standards.
Given the long history of MISRA and its automotive roots, this is not surprising.
AUTOSAR C++14, a more recent coding standard developed in the context of automotive software platforms whose final update was in 2018, came third with 36%.
The C++ Core Guidelines standard is the surprise coming in second with 39%, even though this standard has no apparent relation with the automotive industry.
Its popularity probably is explained by the fact that it covers the latest C++ language features which developers want to use.
This standard, launched by Bjarne Stroustrup and Herb Sutter, is a living document under continuous improvement.
The C++ Core Guidelines were also used as source for AUTOSAR C++14 because of its coverage of the latest C++ language features.
AUTOSAR C++14 includes a comparison between the two standards that shows that 30% of the C++ Core Guidelines conflict with AUTOSAR rules.
A new version of MISRA C++ has been released recently with novel guidance for C++17 as a successor of AUTOSAR C++14. The new MISRA standard inherits many rules from AUTOSAR but does not refer to the C++ Core Guidelines directly.
We will compare various aspects of these C++ coding standards including philosophy, guidelines, enforcement and claiming compliance.
Because MISRA C++:2023 did not accept all AUTOSAR rules, we will evaluate whether the portion of rules conflicting with the C++ Core Guidelines still is so large.
Art der Vermittlung:
Presentation
Nutzen:
Gain insight in the use of coding standards to improve C++ code quality.
15:35 Uhr
Parallelization of C++ Code Using C++17 (Englisch)
Parallelism benefits, common pitfalls and solutions
Details anzeigen
Autor:in:
Klaas van Gend | High Tech Institute | Netherlands
Sprache:
English
Zielgruppe:
Software Engineers, Software Architects
Voraussetzungen:
Knowledgeable in C++, preferably at least up-to-date to C++11
Überblick und Zusammenfassungen:
In 2023, multicore software should be easier to write than ever. Modern programming languages such as Scala and Rust are maturing, programming frames are getting easier to use and C# and good old C++ have been embracing parallelism as part of their standard libraries.
In C++, parallel versions of most algorithms were already introduced as far back as 2017. These include initializing, sorting, accumulating and transforming. Seemingly free performance boosts that are easy to apply: just provide an “execution policy”. But, running on a big multicore machine, why don’t you get the expected speedup?
Adding parallel execution often only runs a little or no faster at all on a multicore processor. And to make matters worse, all kinds of elusive errors tend to pop up.
Klaas van Gend shows some valid use cases for using the parallel algorithms and some other features from C++11 to C++20. He discusses implementation details in the various popular compilers: gcc, clang, and visual studio.
To get true benefits from multicore systems, the software architecture likely must change. Introducing some appropriate Parallel Patterns can help streamline development and limit exposure of developers to low-level problems like data races, or deadlocks. Parallel Patterns allow the developers to discuss their designs at a higher level and focus on their real problems: handling large amounts of data, complex calculations or transformations, or fast non-blocking event handling.
Klaas will discuss some parts of Berkeley’s Parallel Pattern Language and their benefits.
Art der Vermittlung:
presentation with example code
Nutzen:
learning about the benefits of parallelism, common pitfalls and solutions.
16:45 Uhr
Beyond Protobuf
C++ Compile-Zeit-Reflection zur Harmonisierung verschiedener Schnittstellenformate
Details anzeigen
Autor:innen:
Michael Thoma | HENSOLDT Sensors GmbH | Germany
Dr. Pierre Bayerl | HENSOLDT Sensors GmbH | Germany
Sprache:
Deutsch
Zielgruppe:
Software- und Systemingenieure, Software Architekten
Voraussetzungen:
C++ Kenntnisse
Überblick und Zusammenfassungen:
Datenaustauschformate und Schnittstellen Design spielen eine entscheidende Rolle für die Qualität eines Softwaresystems. Es erleichtert die Interoperabilität zwischen Systemen mit verschiedensten Anforderungen, z.B. eingebettete Echtzeitsysteme und Webapplikationen. Weiter fördert eine zentrale Spezifikation der Schnittstellen die Wartbarkeit und Prüfbarkeit.
Zur Beschreibung solcher Datenformate existieren unzählige öffentliche Spezifikationen, oft mit dazugehörigen Implementierungen, wie z.B. OMG IDL, Google Protocol Buffers oder JSON-Schema. Weiter existieren auch viele proprietäre Formate. Unser Beitrag fokussiert sich auf die Interoperabilität verschiedener derartiger Schnittstellenformatspezifikationen innerhalb von C++ Projekten.
Die Herausforderung bei der Integration von Schnittstellen in C++ Projekten sind die Vielzahl an verschiedenen Anforderungen an die zugrundeliegenden Systeme. Diese reichen von Bare-metal-Systemen ohne Speicherdynamik bis zu Webservern.
Unser Ansatz in C++, um diesen Anforderungen gerecht zu werden, ist eine Kombination aus simplen C++ Structs und einer einfachen C++ Compile-Zeit-Reflection API. Dieser Ansatz erlaubt es uns, einfachen und effizienten Code zu generieren. Dabei können verschiedene Spezifikationsformate ineinander überführt werden, ohne das C++ zero-overhead Prinzip zu verletzen.
Anhand verschiedener Anwendungsbeispiele zeigen wir die Vorteile unseres Ansatzes: (1) Die einfache Verifikation einer C++ Implementierung gegen eine Referenzimplementierung in Python (Back-to-Back-Testing). (2) Die Integration von C++ Software in verschiedenen Microservice Umgebungen, wie z.B. Googles gRPC und einer OpenAPI Implementierung. Dabei heben wir hervor, wie sich dieses Vorgehen positiv auf die Zusammenarbeit in funktionsübergreifenden Teams auswirken kann und wie C++ Code für eingebettete Systeme einfach und effizient mit z.B. Webtechnologien verbunden werden kann.
Art der Vermittlung:
Präsentation von Implementierung und Anwendungsbeispielen
Nutzen:
Der Vortrag zeigt anhand von Fallbeispielen, wie die Brücke zwischen verschiedenen Schnittstellenspezifikationsformaten geschlagen werden kann. Unsere vorgeschlagene Compile-Zeit-Reflection API demonstriert den Einsatz von moderner C++ Metaprogrammierung. Wir illustrieren außerdem, wie durch eine sprachunabhängige Schnittstellenspezifikation interdisziplinäre und teamübergreifende Code-Ownership gefördert wird.
17:35 Uhr
Suchst du noch oder simulierst du schon?
Einsatz von Simulationen zur besseren Fehlersuche
Details anzeigen
Autor:in:
Frank Listing | VoltStorage GmbH | Germany
Sprache:
deutsch
Zielgruppe:
Entwickler, nicht nur embedded
Voraussetzungen:
solide Programmierkenntnisse
Überblick und Zusammenfassungen:
Trotz aller technischen Möglichkeiten ist die Fehlersuche auf einem embedded Device oft schwierig oder nahezu unmöglich. In vielen Fällen gleicht die Suche einer Raterunde.
Abhilfe bietet hier eine Simulation, die die Ausführung der Software auf dem PC ermöglicht. Damit ist ein einfacheres Debuggen möglich. Weiterhin können Signale injiziert werden, die mit der realen Hardware nicht möglich sind, bzw. diese zerstören würden.
Weiterhin bietet eine Simulation auch die Möglichkeit, Teile der Software zu testen, bevor die Hardware zur Verfügung steht.
Der Vortrag zeigt, dass nicht in jedem Fall ein teures Tool eingekauft werden muss und dass auch mit relativ geringem Aufwand beachtliche Ergebnisse erreichbar sind. Weiterhin werden verschiedene Komplexitäts- und Ausbaustufen aufgezeigt und verglichen.
Der ganze Vortrag basiert auf zwei realen Simulationsansätzen, die im aktuellen Projekt unserer Firma eingesetzt werden.
Art der Vermittlung:
Erklärung der Prinzips mit Beispielen aus dem aktuellen Projekt
Nutzen:
Die Teilnehmer erhalten Tipps und Anregungen, um Fehlersuche und Test in (nicht nur) embedded Projekten zu vereinfachen.