© Liashko/Shutterstock.com
IoT für Webentwickler: Unit Testing

Internet of Tests?!


Im vorigen Teil der IoT-Serie haben wir gesehen, wie man mit PlatformIO Embedded-Projekte in Cloud-basierte Continuous-Integration-Dienste integriert. Neben dem Kompilieren und Flashen ist auch das automatisierte Testen eine wesentliche Aufgabe für CI-Dienste. In diesem letzten Teil der Serie erkunden wir Unit Testing mit PlatformIO.

Unit Testing gehört für Softwareentwickler zur täglichen Routine, häufig auch in der Variante des Test-driven Developments: Zuerst die Tests schreiben, Implementierung ergänzen, bis alle Tests grün sind, um danach ggf. ein Refactoring anzugehen. Im Embedded-Bereich ergeben sich hier zusätzliche Herausforderungen. Zum einen läuft der Code auf einer anderen Hardwareplattform als auf dem Entwicklungssystem, zum anderen spricht er zwangsläufig Teile dieser Hardware an, die auf dem Entwicklungssystem gar nicht zur Verfügung stehen. Weiterhin hat man im Laufe des Produktlebenszyklus nicht nur mit verschiedenen Versionen der Firmware zu tun, sondern auch mit verschiedenen Versionen der Hardware. Erhöhte Komplexität und Variantenreichtum führen damit auch zu dem Wunsch, Tests möglichst automatisiert in verschiedenen Konstellationen durchführen zu können. Der Fokus dieses Teils der Artikelserie liegt darauf, die praktische Umsetzbarkeit von PlatformIOs test-Kommando für eigene Embedded-Projekte zu zeigen. Das PlatformIO-Feature „Local Unit Testing“ kann in der Community Edition als Testversion nach einer Registrierung dreißig Tage lang kostenlos ausprobiert werden.

Was soll man testen und wo?

Firmware für Devices besteht aus mehreren Teilen, die untereinander verschiedene Abhängigkeiten besitzen können: C Libraries, Board-spezifischer Code und ggf. ein Real-Time Operating System (RTOS) werden in der Regel vom Hersteller in angepasster Form mitgeliefert, anwendungsspezifischer Code vom Entwickler kann Abhängigkeiten von diesen Teile haben oder allgemeingültig sein (z. B. eine Zustandsmaschine). Abbildung 1 gibt eine Übersicht.

schmidt_iot_teil4_1.tif_fmt1.jpgAbb. 1: Firmwarebestandteile

C Libraries und Bestandteile sind bereits vom Hersteller getestet. Hardwareunabhängiger Code, z. B. Regelwerke oder Devicelogik, kann Unit-getestet werden, und zwar auch unabhängig vom Device, z. B. auf einem CI-Server. Hardwarespezifischer wird auf dem Zieldevice oder auf einem Emulator getestet. Schließlich kann das ganze Device über seine Außenschnittstellen (z. B. APIs) Ende-zu-End getestet werden.

Für die Zusammenstellung von Code und Unit-Tests in einem Entwicklungsprojekt ist ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang