Die Software von IoT-Geräten ist oft fehlerbehaftet. Mit Over-the-Air-Updates ergeben sich jedoch neue Möglichkeiten für Entwickler, Bugs frühzeitig zu eliminieren. Was dahinter steckt, erläutert Dr. Johan Kraft.
Over-the-Air (OTA)-Updates sind einfach auszuführen: Download und Installation erfolgen oft unbemerkt im Hintergrund. Zusammen mit Software-Tracing, lassen sich mit OTA-Updates Qualität und Zuverlässigkeit von Embedded-IoT-Systemen verbessern. Jedoch weisen die Systeme trotz aller Mühen der Entwickler oft noch Bugs auf. Beim Programmieren entstehen pro 1.000 Codezeilen durchschnittlich 120 Bugs, wovon ungefähr 5 Prozent, also etwa 6 Bugs pro 1.000 Codezeilen, bis zum Ausliefern nicht behoben werden. Entwickler sollten sich nicht darauf verlassen, dass Anwender die Fehler melden. Zumal Benutzerantworten meist eher vage sind und kaum zum Beheben beitragen. Noch schwerer wiegen die Fakten, wenn es nicht um Tausende, sondern um Millionen von Geräten geht.
Außerdem treten die unentdeckten Bugs meist nicht sofort auf, sondern bereiten lediglich unter ganz bestimmten Bedingungen Probleme. Andernfalls hätten Entwickler sie bereits vor dem Ausliefern der Produkte gefunden. Mit einem OTA-Update lässt sich zwar das Problem im Feld lösen, jedoch benötigen Entwickler zusätzlich eine Art Rückmeldesystem, um überhaupt von Fehlern in den ausgelieferten Produkten zu erfahren – und das möglichst zügig. Beim Entwickeln von Mobile- und Cloud-Anwendungen ist die Vorgehensweise schon längst Standard (DevOps), ab sofort kommt sie ebenso für die Embedded-Entwicklung in Betracht.
Entscheidend für das Aufdecken und Lösen von Fehlern ist ein Zusammenspiel zwischen Software-Tracing, Cloud-Management und OTA-Updates. In einem System, das ohnehin von Ressourcenverknappung geprägt ist, muss der Tracing-Code möglichst effizient sein. Einerseits muss die Cloud sicher und transparent angebunden sein, andererseits sind die richtigen Daten zu übertragen. So können Entwickler Fehler schnell und einfach beheben. Der Cloud-Dienst muss also zunächst feststellen, welche Bugs neu und relevant sind und die Entwickler anschließend darüber informieren. Ist das geschehen, gilt es, die aktualisierte Software per OTA-Update an alle Geräte zu verteilen.
Seinen Anfang nimmt der Informationsfluss im Fehlerbehandlungs-Code des IoT-Geräts, beispielsweise in den bereits existierenden Sanity Checks und Fault Exception Handlern. Mithilfe eines Software-Agenten werden Firmware-Probleme als Warnung in den Cloud-Account eines Kunden hochgeladen. Ein solcher Alert kann neben der eigentlichen Fehlermeldung ebenso Zusatzinformationen umfassen, die für das betreffende Problem relevant sind – zum Beispiel Software-Zustandsvariablen und Inhalte von Hardware-Registern. Abhängig davon, wie gravierend der Fehler ist, wird der Alert entweder sofort oder nach einem Neustart des Geräts hochgeladen, sobald die Verbindung zur Cloud wiederhergestellt ist (Bild 1). Bestandteil der Warnung kann ebenso ein automatisch aufgezeichneter Trace der jüngsten Software-Ereignisse im Gerät sein. Hierin sind Detailangaben zum Fehler selbst sowie zum Kontext enthalten.
Hier kommt es entscheidend auf die Effizienz des Codes an, um möglichst wenig Speicher für den Trace in Anspruch zu nehmen. Wichtig ist eine solche Effizienz aus zwei Gründen: Erstens reduziert sich beim Zusammenstellen hinreichend langer Traces die Uploadzeit auf Bruchteile einer Sekunde. Zweitens werden die Cloud-Kosten für das Entgegennehmen und Abspeichern der Alerts minimiert. Es ist die Code-Effizienz, die den Einsatz der Trace-Technik im Feld, selbst in kleinen IoT-Geräten erlaubt.
Der Software-Agent lädt Warnmeldungen in die Cloud des Kunden hoch. Sie ist so konfiguriert, dass sie Alerts speichert und an eine Engine weiterleitet. Die Engine übernimmt das Klassifizieren, das statistische Aufarbeiten und das Benachrichtigen der Entwickler. Ferner bietet sie Konfigurations-Optionen. Beispielsweise um zu filtern, unter welchen Umständen die Meldungen an welche Empfänger zu verschicken sind. Sobald der Agent Entwickler über einen neuen Fehler informiert, können sie auf die Warnmeldung und Traces zugreifen.
Hierbei hat der Datenschutz eine hohe Priorität. Zum Beispiel darf ein Software-Trace niemals den Cloud-Account des Kunden verlassen. Für das Verarbeiten in der Cloud, welches ein externer Cloud-Dienst übernehmen kann, wird lediglich eine anonyme Signatur der Alarmmeldung benötigt. Eine solche Information lässt sich vollkommen transparent, konfigurierbar und für sich genommen bedeutungslos gestalten. Kommunikation und Speichern handhabt die bestehende IoT-Entwicklungsplattform, wobei sie beim Authentisieren und Verschlüsseln auf bewährte Verfahren zurückgreift.
Die Komplexität heutiger IoT-Systeme bringt es mit sich, dass Labortests nicht mehr in der Lage sind, sämtliche Softwarefehler aufzudecken und zu beseitigen. Echtzeit-Traces und Alerts können Bugs im Feld melden, sobald sie sich äußern. Hierbei wird die Fehlerbehebung mithilfe von automatischen Benachrichtigungen der Entwickler beschleunigt. Ein solches System muss skalierbar, sicher und für die Entwickler transparent sein. Einmal eingerichtet, informiert es Entwickler umgehend beim ersten Auftreten eines Fehlers. Zu dem Zeitpunkt wurde es vom Anwender oft noch nicht einmal bemerkt. Anschließend können die Entwickler dann die Vorteile der OTA-Updates nutzen, um ihr Produkt zügig zu verbessern.
Dr. Johan Kraft ist CEO und Gründer von Percepio. Dr. Kraft ist der ursprüngliche Entwickler von Percepio Tracealyzer, einem Werkzeug zur visuellen Trace-Diagnose. Seine angewandte akademische Forschung, die er in Zusammenarbeit mit der Industrie betreibt, konzentrierte sich auf die Timing-Analyse von Embedded Software. Dr. Kraft verfügt über einen Doktortitel in Informatik.