Fitnesstracker, Geldautomat und zentrale Heizungsanlage haben eines gemein: Sie funktionieren dank Embedded Software. Diese steuert, überwacht und regelt die Geräte – und zwar so, dass es der Nutzer gar nicht bemerkt.
Damit diese Anwendungen unauffällig im Hintergrund ablaufen können, bedarf es jedoch gerade in der schnelllebigen Umgebung des IoT eines besonderen Know-hows bei der Entwicklung.
Die Dokumentation und das organisierte Testen gehören beim Embedded Development zu den größten Herausforderungen. Unsere Experten von Concept Reply zeigen, was Sie dabei beachten sollten und welche Prozesse und Tools eine erfolgreiche Entwicklung ermöglichen.
Die Softwaredokumentation ist ein wesentlicher Bestandteil der Softwareentwicklung. Sie erläutert den Verwendungszweck und die Möglichkeiten, die die Software bietet. Zudem verbessert eine gute Dokumentation die Effizienz während des Entwicklungsprozesses und die Wartbarkeit der Software. Bei der Dokumentation sollten daher die folgenden Tipps beachtet werden:
Beim Embedded Development ist es ratsam, eine README-Datei bereitzustellen, die grundlegende Informationen über den Zweck und Anweisungen zum Erstellen bzw. Ausführen der Software enthält. Zudem sollte diese über Protokolldefinitionen, Verzweigungsstrategien, Codestil und Teststrategie Aufschluss geben.
Die Architekturdokumentation sollte ein integraler Bestandteil jedes Embedded Software-Projektes sein. Es ist wichtig, dass diese leicht zugänglich und einfach zu aktualisieren ist. Aus diesem Grund ist der Erfahrung von Reply nach der 'Dokumentation-as-Code'-Ansatz der Schlüssel zum Erfolg. Dabei ist die Verknüpfung des Projektstatus mit der Dokumentation essenziell. Aus diesem Grund empfehlen wir die Verwendung von PlantUML und des C4-Modells. Die Beschreibung sollte als Markdown-Datei direkt im Code-Repository gespeichert werden. Das ermöglicht einen einfachen Zugriff, eine unkomplizierte Aktualisierung und die Möglichkeit der Versionskontrolle.
Für den Code selbst ist die Verwendung des Industriestandards Doxygen hilfreich. Dieser ist frei verfügbar, einfach zu bedienen und kann in das Build-System integriert werden. Das ermöglicht eine automatische Ausführung bei jedem Build. So kann der Zugang zu APIs gewährleitet werden, was bei der Analyse von Abhängigkeiten nützlich sein kann.
Neben der Dokumentation, die Auskunft über die allgemeine Teststrategie, die verwendeten Tools und die durchgeführten Tests gibt, müssen auch die Testergebnisse selbst dokumentiert werden. Ein vordefiniertes Format (Testbericht) ist dabei essenziell. Dieses sollte mit jedem Release zur Verfügung gestellt werden, damit der Stand des Projekts zu jedem spezifischen Release-Punkt leicht nachvollziehbar ist.
Leider wird das Testen immer wieder als nicht notwendig für das Endprodukt bewertet, weshalb es oft weggelassen wird. Deshalb sollten Aufwandsschätzungen, wann immer es möglich ist, das Testen bereits mit einbeziehen. Wenn die Tests von Anfang an eingeplant sind, ist der Aufwand für diese nicht allzu groß. Die Vorteile sind vielfältig: Tests zeigen, ob die Implementierung die Anforderungen erfüllt, sie sorgen für eine verbesserte Qualität und reduziert die Fehler, bevor das Produkt den Benutzer erreicht. Zudem können Sie die Gesamtkosten der Entwicklung senken.
Wenn es möglich ist, sollte eine umfassendere Teststrategie umgesetzt werden. Auf jeden Fall sollten jedoch die folgenden Tests durchgeführt werden:
überprüfen das Verhalten einer einzelnen Komponente, die vom Rest des Systems isoliert ist. Eine Komponente kann eine einzelne Funktion oder eine Sammlung verwandter Funktionen sein. Bei Unit-Tests wird der Rest des Systems simuliert. Wenn sie zu Beginn des Projekts eingerichtet werden, können Unit-Tests parallel neben der Implementierung geschrieben werden – ohne viel Aufwand zu verursachen. Idealerweise sollte die Ausführung der Unit-Tests automatisiert werden, um eventuelle Regressionen frühzeitig zu erkennen.
sind ein zusätzlicher Baustein neben den Unit-Tests. Anstatt die Module isoliert zu testen, werden mehrere Module kombiniert, um ihr Verhalten und ihre Interaktionen zu untersuchen. Die Herausforderungen bei den Integrationstests sind ähnlich wie bei den Unit-Tests – obwohl weniger vom System simuliert werden muss, kann die Hardwareabhängigkeit immer noch ein Problem darstellen. Wenn die Komplexität des Systems gering genug ist, kann es sinnvoll sein, Integrationstests zu überspringen und sie durch umfassendere Funktionstests zu ersetzen.
werden durchgeführt, um zu bestätigen, dass sich die erforderliche Funktionalität wie erwartet verhält. Spezifische Nutzungspfade werden auf der Grundlage der Anforderungen definiert und getestet, ohne Einblick in die interne Struktur des Programms zu haben. Auch wenn es nicht realistisch ist, dass jeder Anwendungsfall durch Tests abgedeckt wird, sollten die Tests dennoch durchgeführt werden. Ein umfassender Satz von Tests, der die wichtigsten Aspekte der Software abdeckt, sollte dafür definiert werden.
Wir arbeiten ausschließlich nach diesen Grundsätzen. Unsere Experten verfügen über eine ausgeprägte Expertise und unterstützen Sie gerne bei Ihrem Embedded Development-Projekt. Dabei berücksichtigen wir Ihre spezifische Situation und die Tools, die Ihnen bereits vertraut sind. Gemeinsam entwickeln wir mit Ihnen auf Basis dessen sichere, zuverlässige und kosteneffiziente Produkte oder verbessern Ihre Prozesse.
Concept Reply ist ein auf die Erforschung, Entwicklung und Validierung innovativer Lösungen spezialisierter IoT-Softwareentwickler und unterstützt seine Kunden aus der Automobil-, Fertigungs- und Smart-Infrastructure-Industrie sowie anderen Branchen in allen Fragen rund um das Internet der Dinge (IoT) und Cloud Computing. Ziel ist es, End-to-End-Lösungen entlang der gesamten Wertschöpfungskette anzubieten: von der Definition einer IoT-Strategie über Testing und Qualitätssicherung bis hin zur Umsetzung einer konkreten Lösung.