Techblog

Software für Smart Devices: Neue Herausforderungen für Entwicklerteams

Von Alexandra Mesmer

23. März 2022

Ein Blick auf das Handy verrät, wieviel Strom die Solarzellen auf dem Dach produzieren. Über die Smartwatch lässt sich das Schonwaschprogramm von unterwegs starten. Nur zwei Beispiele von vielen, die schon heute Realität sind. In einem durchschnittlichen Haushalt haben bereits 50 Geräte eine Verbindung ins Internet, Tendenz steigend. 

Connected World

Die vernetzte Welt nimmt in Privathaushalten wie in Industrie und Handel immer konkretere Formen an. Für Alex Hofmann, CTO von MaibornWolff, steht die „Connected World“ darum als Megatrend im Zentrum unserer Techvision 2025. Diese zunehmend vernetzte Welt bedeutet nicht nur viel Arbeit für das Softwareengineering, sondern geht mit neuen Anforderungen einher. „Software für Smart Devices wie einen Rasenmähroboter oder eine Waschmaschine zu bauen, ist eine neue Disziplin im Softwareengineering“, sagte Alex Hofmann kürzlich auf der Softwareengineering 22, der Tagung der Gesellschaft für Informatik.

Fragen für Entwicklerteams

Die Unterschiede zum klassischen Softwareengineering in der Cloud macht Alex Hofmann an verschiedenen Punkten fest: Zunächst sollten die Entwickler:innen die Ressourcen auf dem Gerät immer im Blick behalten, zumal diese auf Smart Devices im Gegensatz zu Cloud-Anwendungen begrenzt seien. Das beginne mit der Wahl der geeigneten Programmiersprache, so der CTO: „Aktuell ist C/C++ noch sehr verbreitet, aber Rust und Go kommen.“ Weitere Fragen, die sich Entwicklungsteams stellen sollten, sind: Funktioniert Garbage Collection trotz eingeschränktem Speicher auf dem Gerät? Funktioniert Containerisierung? Wie kann ich ein Remote Update auf dem Gerät durchführen?

Alex Hofmann, CTO von MaibornWolff

Alex Hofmann, CTO von MaibornWolff: "Die zunehmend vernetzte Welt bringt uns viel Arbeit im Softwareengineering und fordert die klassische Softwareentwicklung in neuer Art und Weise."

Begrenzter Speicher auf Smart Devices

Permanentes Monitoring ist eine zweite Herausforderung: Wie ist der Speicher beziehungsweise die CPU auf dem Smart Device ausgelastet? Laut Alex Hofmann darf man nicht vergessen, dass die Mittel zur Skalierung des Speicherplatzes begrenzt sind. Darum empfiehlt er, das Monitoring von Anfang an bereits in der Architektur zu berücksichtigen.

Tech Stack tiefer verstehen

Wer bislang „klassische“ Software entwickelte, muss sich bei Software für Smart Devices mit neuen Komponenten auseinandersetzen und diese verstehen lernen. Ein Beispiel hierfür sind die im Gerät verbauten Chips, die intelligenten Sensoren oder die Aktoren, also Baueinheiten, die ein elektrisches Signal in mechanische Bewegungen oder Veränderungen physikalischer Größen wie Druck oder Temperatur umsetzen und damit aktiv in den gesteuerten Prozess eingreifen. Über welche Module läuft die Input-Output- (I/O)-Kommunikation? Muss ich spezielle Echtzeit oder Safety Subdomänen einrichten? Das sind wesentliche Fragen.

Kommunikationsdesign für Smart Devices

„In Cloud-Umgebungen kann man keine Echtzeitkommunikation garantieren. Auf dem Device muss man das jedoch häufig tun, um Gefahren zu erkennen und sofort zu reagieren, z.B. den Motor an- oder auszuschalten.“, benennt Alex Hofmann eine weitere Herausforderung für das Softwareengineering von Smart Devices. 

Er empfiehlt darum, auf dem Gerät die Domänen für Echtzeit- beziehungsweise Nicht-Echtzeitkommunikation strikt zu trennen, und diese Trennung gegebenenfalls sogar auf der Prozessorebene zu verankern.

Um hochfrequente Kommunikation in der Cloud zu ermöglichen, kommen Instrumente wie das Nachrichtenprotokoll MQTT (Message Queuing Telemetry Transport), REST (Representational State Transfer) oder das von Google entwickelte Framework gRPC zum Einsatz. „Auf dem Device muss alles oft hochfrequenter und ressourcen-optimierter sein”, sagt Alex Hofmann. NATS, DBus, UDS, Sockets, Shared Memory sind daher genutzte Ansätze.

Remote Software Update 

Entscheidender Erfolgsfaktor für Smart Devices ist jedoch das so genannte Remote Software Update. Alex Hofmann erklärt die Hintergründe: „Das Produkt entwickelt sich ständig weiter. Neue Features und Fehlerbehebungen müssen schnell auf die Geräte im Feld verteilt werden.“

Wer remote ein neues Update auf ein Gerät erfolgreich einspielen will, muss im Vorfeld schon potenzielle Probleme mitdenken. Das beginnt beim Ausfall des Netzes über Probleme auf dem Gerät selbst bis hin zu Rollbacks, doppelten Updates oder Versionskonflikten.

Um eine hohe Robustheit beim Update herzustellen, rät der CTO zum Rollout in beherrschbaren Schritten: „Iterative Rollouts und detailliertes Monitoring sind notwendig, um Probleme im Feld früh zu erkennen und darauf zu reagieren.“

Neben möglichen Problemen ist auch die Sicherheit beim Update von Anfang an mitzudenken. Signierte Software und Gerätezertifikate sind laut Hofmann essenzielle Anforderungen, die im Entwicklungs- und Fertigungsprozess berücksichtigt werden müssen.

Abhängigkeit von Hardware

Die Hardware, also das Gerät selbst, ist für das Softwareengineering auf dem Gerät entscheidend. Die Hardwareentwicklung muss häufig parallel zur Software stattfinden. Dazu Alex Hofmann: „Simulationsumgebungen müssen frühzeitig aufgebaut werden. Häufige Synchronisationspunkte zwischen Soft- und Hardwareentwicklung sind absolut erfolgskritisch.“ Man sollte sich fragen, ob es sinnvoller ist, Hardware und Software in getrennten Teams oder in einem Team zu entwickeln. 

Zudem müssen die Entwicklerteams ihre Arbeit unter eine mittelfristige Perspektive stellen. In der Regel müssen mehrere Hardwaregenerationen unterstützt werden. Wichtige Fragen sind in dem Zusammenhang: Wie bildet man diese Unterschiede in der Softwarearchitektur ab? Wo muss ich mich eng an Hardware-Details koppeln, wo kann ich abstrahieren?

Auch die Lebenszeit eines Produkts gilt es zu berücksichtigen, sagt Alex Hofmann: „Hardware ist oft mehrere Jahre, manchmal Jahrzehnte im Feld. Bekomme ich in zehn Jahren noch Treiberupdates oder Sicherheits- Patches?“