Embedded World Conference 2018 Software Engineering als Disziplin

Die Mitglieder des embedded world Conference steering boards geben in dieser Serie der DESIGN&ELEKTRONIK Einblicke in die von ihnen verantworteten Themenbereiche. Im Folgenden berichtet Dr. Klaus Grimm über den Bereich des Software Engineering.

In diesem Artikel hat Professor Peter Fromm das Thema System Engineering mit all seinen Aspekten vorgestellt und als Klammer über die drei klassischen Entwicklungsdisziplinen Mechanik, Elektronik und Software dargestellt. Das heißt auch, dass das Thema Software Engineering als ein wesentlicher Bestandteil der Entwicklung von eingebetteten Systemen gesehen werden muss. Unter Software Engineering, im Deutschen sehr oft als Softwaretechnik bezeichnet, versteht man im Allgemeinen die Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die ingenieurmäßige Entwicklung und Anwendung von Software beziehungsweise softwarebasierten Systemen.

Um die Entwicklung von Software und softwarebasierten Systemen zu strukturieren, sind verschiedene Prozessmodelle definiert worden. Eines der bekanntesten Modelle für die Softwareentwicklung ist das V-Modell, das bereits Mitte der achtziger Jahre in Deutschland entwickelt wurde. Es beschreibt die einzelnen Entwicklungsschritte von der Erfassung und Dokumentation der Anforderungen über den Softwareentwurf und die Realisierung des Systems bis hin zur Verifikation und Validation, inklusive Analyse, Test und Wartung der Software. Dabei wurde ein sequenzielles Vorgehen zugrunde gelegt. Im Laufe der Zeit hat sich ein eher iteratives, inkrementelles Vorgehen durchgesetzt, wobei der mittlerweile weit verbreitete aus der IT stammende Ansatz der Agilen Methoden eine konsequente Weiterentwicklung darstellt. Eine spannende Frage bleibt, ob beziehungsweise wie die Agilen Methoden im Bereich der Entwicklung eingebetteter Systeme eine effektive und effiziente Alternative darstellen und insbesondere den Anforderungen an die Entwicklung von sicherheitskritischer Software gerecht werden können.

Ein weiterer wichtiger Aspekt bei der Entwicklung und Zulassung von softwarebasierten Systemen ist der Reifegrad des Entwicklungsprozesses. In der Vergangenheit wurden verschiedene Reifegradmodelle definiert, wie das Capability Maturity Modell (CMM), das 1991 auf Initiative des US-Verteidigungsministeriums vom Software Engineering Institute der Carnegie Mellon University in Pittsburgh definiert wurde. Derartige, auf die Bewertung einer Organisation gerichtete Reifegradmodelle können ein wichtiger Indikator für die Qualität der entwickelten Software sein, ersetzen aber nicht auf die konkret zu entwickelnden Systeme abzielende Maßnahmen zur Sicherstellung von Zuverlässigkeit und Sicherheit von eingebetteten Systemen. 

Komponenten- oder funktionsorientiert? 

Eine wichtige Entscheidung bei der Softwareentwicklung betrifft die Frage, ob ein System komponenten- oder funktionsorientiert entwickelt werden soll. Generell unterstützt die Funktionsorientierung die konsequente Berücksichtigung der übergeordneten Systemfunktionen. Eine komponentenbasierte Entwicklung setzt schwerpunktmäßig auf die Zusammensetzung eines Systems aus zum Teil bereits existierenden Komponenten. 

In der Phase der Verifikation und Validation von Software sind zwei grundsätzlich verschiedene Ansätze zu unterscheiden. Bei der statischen Analyse wird der Code untersucht ohne die Hardware zu berücksichtigen. Hier können bereits in einer frühen Phase der Entwicklung Fehler im Code aufgedeckt werden. Bei den dynamischen Analysen wird das Zusammenspiel mit der Hardware geprüft, unter Einbeziehung des später zu erwartenden Realzeitverhaltens der Software.

Beim System Engineering spielt oft auch die funktionale Sicherheit des Systems eine entscheidende Rolle. Die existierenden Standards definieren auch hier klare Vorgaben für den Softwareanteil des Systems. Darüber hinaus gibt es softwarespezifische Standards, deren Ziel es ist, die Qualität der Software zu gewährleisten. Ein wichtiges Beispiel ist der MISRA-C-Standard, der von der englischen MISRA (Motor Industry Software Reliability Association) erarbeitet wurde, zuerst in der Automobilbranche zum Einsatz kam und mittlerweile weit verbreitet ist.

Aktuelle Herausforderungen 

Im Bereich der eingebetteten Systeme kann und darf die Software nicht ohne Einbeziehung der Hardware und der übergeordneten Systemaspekte betrachtet und behandelt werden. Insbesondere bei der Entwicklung von Software für Systeme mit hohen Zuverlässigkeits- und/oder Sicherheitsanforderungen ist die Systemsicht von entscheidender Bedeutung. Wesentliche Herausforderungen sind dabei die Verfolgbarkeit von Anforderungen und Design-Entscheidungen von der System- auf die Softwareebene, wie sie bereits in verschiedenen Standards gefordert wird. Diese sogenannte Traceabilty ermöglicht nicht nur die Kontrolle darüber, ob alle Anforderungen im Entwurf und bei der Realisierung und Validation des Systems berücksichtigt wurden, sondern erleichtert auch die Auswirkung von nachträglichen Änderungen in der Spezifikation, im Entwurf und/oder in der Software zu erkennen und entsprechend zu berücksichtigen. 

Ein sehr wichtiger Aspekt in Bezug auf das korrekte Funktionieren von Software in eingebetteten Systemen ist neben der reinen Funktionalität das Laufzeitverhalten des Programms. In eingebetteten Systemen spielt das Echtzeitverhalten oft eine entscheidende Rolle. Auch hier ist die Systemsicht unabdingbar, aber auch auf Softwareebene können bereits frühzeitig aufschlussreiche Analysen durchgeführt werden, bevor die Hardware ins Spiel kommt. Eine zusätzliche Herausforderung stellt der Einsatz von Multicore-Prozessoren dar, der durch die echte Nebenläufigkeit von Prozessoren neue Anforderungen insbesondere an das Softwaredesign stellt.

Oft sind Änderungen oder Erweiterungen in bereits bewährten Softwaresystemen erforderlich. Der Umgang mit sogenannter Legacy Software stellt eine große Herausforderung dar. Abhängig vom Umfang der Dokumentation der existierenden Software sind detaillierte Analysen erforderlich, um das korrekte Zusammenwirken der alten und neuen Softwareanteile zu gewährleisten. Eine Portierung auf neue Architekturen wie Multicore bringt zusätzliche Schwierigkeiten mit sich.

In zunehmendem Maß wird auch in eingebetteten Systemen sogenannte Free-and-Open-Source-Software (FOSS) eingesetzt. Abgesehen von der Frage, wie diese Software optimal in die Systemarchitektur und -funktionalität integriert werden kann, stellen sich wichtige Fragen der Haftung und des Urheberrechts.

Bedingt durch den Einsatz von Software auch in Systemen, die aus Platz- oder Kostengründen klare Speicherplatzrestriktionen haben, kommt der Speicherplatzverwaltung eine wichtige Rolle zu. In der Praxis sind immer wieder auch sicherheitskritische Systeme abgestürzt, weil zu viele Softwarefunktionen gleichzeitig Speicherplatz angefordert haben, die Verwaltung des Speichers aber nicht ausreichend geregelt war.

In der embedded world Conference 2018 in Nürnberg werden wir diese Aspekte kompetent und umfänglich adressieren. Um zu einem für alle gewinnbringenden Erfahrungsaustausch zu kommen, setzen wir auf Ihre aktive Beteiligung.