Mittlerweile hat es sich herumgesprochen, dass die VHIT-Methode (vom Hirn ins Terminal) mit der heutigen und künftig noch weiter steigenden Komplexität von Embedded- und Echtzeit-Software/ Echtzeit-Systemen nicht mehr vereinbar ist. Im Folgenden sind wichtige Aktivitäten in der Embedded-Software-Analyse, im Embedded-Software-Design beziehungsweise im SW-Engineering kurz beschrieben, die Sie in der Software-Entwicklung durchführen.
Requirements Engineering steht am Projektbeginn
Als Grundlage für die Software-Entwicklung erfassen Sie in der Rolle des Software-Anforderungsanalysten zu Beginn die Anforderungen. Im Rahmen des Requirements Engineering (Anforderungsentwicklung, Anforderungsanalyse) sammeln Sie die Anforderungen der Stakeholder.
Sie unterscheiden zwischen funktionalen und nicht-funktionalen Anforderungen (u.a. Software-Qualitätsmerkmale) und formulieren qualitativ hochwertige Anforderungen. Im Rahmen des Anforderungsmanagements verwalten und pflegen Sie die Anforderungen mit geeigneten Requirements Management Tools.
Der Software-Architekt definiert die Software-Architektur
In der Rolle des Software-Architekten verfügen Sie über viel Erfahrung in der Software-Entwicklung und beherrschen das Thema Software-Architektur in der Praxis. Unter den Aspekten der Wiederverwendbarkeit, Austauschbarkeit, Erweiterbarkeit und Portierbarkeit entwickeln Sie idealerweise eine nicht monolithische Software-Architektur, die die identifizierten Softwarearchitektur-Anforderungen und Einflussfaktoren bestmöglich erfüllt.
Die SW-Architektur beschreibt die grobe Struktur und auch das darauf basierende interaktive Verhalten (Kommunikation). Software-Komponenten, Software-Schichten, Software-Subsysteme, Schnittstellen und deren Funktionen (Operationen/Methoden) und optional die wichtigsten Module/Klassen repräsentieren typische Architekturbausteine. Sie nutzen zur Architekturentwicklung Architekturrichtlinien, Architekturprinzipien, Architekturmuster (Patterns) und Softwarearchitektur-Beispiele. Sie als Software-Architekt treffen wichtige Entscheidungen. Beispielsweise legen Sie fest, ob Sie eine synchrone Architektur, eine asynchrone Architektur oder eine Mischform aus beidem entwickeln.
Free, Open Source oder kommerziell
Sie entscheiden, ob es sich um ein Echtzeit- oder „nur“ um ein eingebettetes System handelt. Sie bestimmen über die verwendeten Middleware-Komponenten, wie Feldbus- und Kommunikationsstacks, Flash-Filesysteme und Grafikbibliotheken). Diese Software-Komponenten sind als Free Software, Open Source Software und kommerzielle Software erhältlich.
Für die Laufzeitarchitektur wählen Sie basierend auf Auswahlkriterien ein geeignetes Echtzeit-/Embedded-Betriebssystem (Real-Time Operating System) aus. Bei Multicore- und Multiprozessor-Systemen verteilen Sie die Software auf verschiedenen Rechenknoten und führen bei Bedarf Virtualisierung und Hypervisor ein. Der Software-Architekt erzeugt die Embedded-Softwarearchitektur-Dokumentation.
Der Software-Designer verfeinert die Software-Architektur
Als Software-Designer verfeinern Sie die SW-Architektur so, dass der Software-Entwickler sie später in der festgelegten Programmiersprache C oder C++ implementieren kann. Dabei entwickeln Sie konkrete Module/Klassen mit allen Daten und Funktionen sowie deren Verbindungen/Relationen. Sie meistern Ihre Aufgaben und Herausforderungen mit praxisbewährten Designmustern (Design Patterns) für Embedded-Software. Im Algorithmen-Design beschreiben Sie das genaue Verhalten etwa mittels Zustandsautomaten. Sie adaptieren die Software-Architektur über Treiber an Ihre konkrete Hardware und deren Peripherien. Der Software-Designer erzeugt die Embedded-Software-Design-Dokumentation. Bei der folgenden Embedded-Programmierung sind die unbedingte Einhaltung der Architekturvorgaben und Designvorgaben kontinuierlich zu überprüfen.
Software-Entwicklung mit der UML (Unified Modeling Language)
Unabhängig davon, ob Sie prozedural, strukturiert, objektbasiert oder objektorientiert Software programmieren, ist als Notation in Analyse, Design und zur Software-Dokumentation die UML (Unified Modeling Language) sehr hilfreich. Die UML spezifiziert verschiedene Diagramme: Use Case Diagram, Package Diagram, Component Diagram, Deployment Diagram, Class Diagram, Object Diagram, Composite Structure Diagram, Acitvity Diagram, State Machine Diagram, Sequence Diagram, Communication Diagram, Timing Diagram, Interaction Overview Diagram und Profile Diagram.
Teile dieser Diagramme sind auch zur Anforderungsanalyse und in der Softwareentwicklung nutzbar. Mit der Anwendung der UML praktizieren Sie modellgetriebene SW-Entwicklung. Aus den UML-Designmodellen generieren Sie mit der richtigen UML Case-Tool-Unterstützung den Programmcode in C und/oder C++. Automatische Codegenerierung unterstützt toolabhängig die Erzeugung von Software zur Simulation auf den Entwicklungshost oder dem Target, aber auch direkt die Erzeugung des Produktionscodes. In mittelständischen und kleineren Firmen und Unternehmen repräsentieren Sie als Software-Entwickler in Personalunion all diese Rollen oder einen Teil davon: Anforderungsanalyst, Software-Architekt und Software-Designer.