7 Minuten Lesezeit Mit Insights von Nikolaus Naredi-Rainer Lead Systems Architect nikolaus.naredi-rainer@zuehlke.com Markus Zahner Lead Embedded Software Architect markus.zahner@zuehlke.com Romano Roth Chief of DevOps & Partner romano.roth@zuehlke.com Die Software, die auf Embedded- und IoT-Geräten ausgeführt wird, gibt in den letzten Jahren immer häufiger den Ausschlag für Erfolg oder Misserfolg der mit ihr betriebenen Geräte am Markt und bei der Kundschaft. Unternehmen, die mit innovativen Hardwareprodukten den Markt verändert haben, verfolgen zusätzlich zum „Minimal Viable Product“-Konzept für die Hardware vielfach einen softwareorientierten Ansatz. Dem stehen Unternehmen gegenüber, die ihren Marktanteil schrittweise über viele Jahre ausbauen und Innovationen inkrementell entwickeln. Dieses Szenario der Softwareentwicklung bringt angesichts des organischen Wachstums dieser Unternehmen und ihrer Prozesse einen hohen Ressourcenverbrauch und eine Vielzahl manueller Schritte mit sich. Auch wenn manche Unternehmen ihre Entwicklung als „agil“ bezeichnen, sind die Prozessphasen üblicherweise voneinander getrennt und lösen sich der Reihe nach ab. Nach dem (erfolgreichen oder nicht erfolgreichen) Abschluss einer Phase landen die Arbeitsergebnisse nach dem Motto „Nach mir die Sintflut“ an der sogenannten „Wall of Confusion“. Dieses Vorgehen bringt die folgenden Hauptprobleme mit sich, die sich in den verschiedensten Unternehmen auf die gleiche Weise wiederholen: Die Vielzahl manueller Schritte bremst den Gesamtprozess und leistet Fehlern Vorschub. Qualitätssicherung und Tests erfolgen in getrennten Phasen am Ende des Gesamtprozesses. Sicherheitsanforderungen und sonstige nicht funktionsbezogene Erfordernisse wie Last und Leistung oder Verwaltbarkeit werden erst kurz vor der endgültigen Bereitstellung diskutiert und überprüft. Da Arbeitsbereiche und Phasen voneinander getrennt sind, wird zu wenig kooperiert. Abbildung 1: Das Problem DevOps in der Embedded World: Raum für Neues und kürzere Time-to-Market Seitdem das Muster dieses Vorgehens und der damit verbundenen Probleme bekannt ist, hat sich eine Lösung herauskristallisiert: DevOps. DevOps ist eine Mentalität, eine Kultur und eine Reihe technischer Verfahren. DevOps gewährleistet Kommunikation, Integration, Automatisierung und die enge Zusammenarbeit aller Personen, die über den Wertstrom an Planung, Entwicklung, Testing, Bereitstellung, Freigabe und Verwaltung eines Produkts beteiligt sind. Abbildung 2: Die Lösung DevOps-Tools in der Embedded World: Automatisierung als Schlüsselfaktor DevOps soll die Markteinführung beschleunigen, Raum für Experimente eröffnen, Software in kürzeren Abständen herausbringen, die Vorlaufzeit für die Fehlerbehebung verkürzen und die durchschnittliche Wiederherstellungszeit verbessern. Während sich DevOps im reinen Softwarebereich fest etabliert hat, ist der Ansatz im Embedded-Bereich oft noch nicht vollständig angekommen. Einer der zahlreichen Gründe besteht darin, dass Embedded-Anwendungen und die verwendeten Tools häufig auf die spezifische Anwendung und die zugehörige Umgebung zugeschnitten sind. Es kommen unterschiedlichste Tools und eine große Bandbreite an Lösungen für verschiedene Automatisierungsgrade zum Einsatz. Deshalb lassen sich viele DevOps-Standardtools und -verfahren ohne Anpassungen nur eingeschränkt auf Embedded-Umgebungen übertragen. Das gilt insbesondere für die folgenden drei Schritte: Testing Überwachung Bereitstellung Dieser Blogbeitrag stellt das Testing und insbesondere das automatisierte Testing in den Vordergrund, da der Automatisierung bei DevOps eine Schlüsselfunktion zukommt. Um zu verstehen, warum automatisiertes Testing in der Entwicklung von Embedded Geräten besondere Schwierigkeiten mit sich bringt, ist zunächst ein Blick auf die Testpyramide nötig. Die Testpyramide ist ein System zur Priorisierung der Testaufgaben in der Entwicklung. Eine typische Pyramide hat drei oder mehr Ebenen, und zwar üblicherweise mindestens für Komponententests, Integrationstests und Systemtests. Je weiter unten an der Pyramide die Tests angesiedelt sind, insbesondere die Komponententests, desto isolierter und schneller und damit kostengünstiger lassen sie sich automatisieren. Die Automatisierung von Tests auf höheren Ebenen, z. B. Systemtests, ist demgegenüber komplexer und teurer. Case Study: Wie Sie DevOps-Herausforderungen für IoT-Geräte meistern Wer DevOps im Embedded-Bereich erfolgreich einsetzen möchte, muss die Automatisierung der komplexen Systemtests meistern. Hier erfahren Sie, wie führende Hersteller von IoT-Geräten das geschafft haben. End-to-End-Testing für eine Parkuhr Die Parkuhr unseres Kunden Digitalparking ist eine typische IoT-Anwendung: Daten, z. B. zu den Fahrzeugen, die einen Parkplatz für eine begrenzte Dauer belegen dürfen, werden erfasst und auf dem Gerät angezeigt. Dieselben Informationen sind auch online verfügbar, um die Steuerung zu erlauben und Live-Nutzungsdaten zum Parkplatz bereitzustellen. Für die automatisierten Systemtests wurde ein Komplettgerät mit zusätzlicher Hardware ausgestattet, sodass sich Nutzereingaben (wie Tastendruck oder Münzeinwurf) an der echten Hardware auslösen ließen. Mit diesem Versuchsaufbau konnten über 50 Testfälle automatisiert werden, die von Nutzerinteraktionen wie dem Bezahlen für ein abgestelltes Fahrzeug bis hin zur Überprüfung des Dateneingangs in der Cloud reichten. Auch komplexere Testfälle für Verwaltung und Installation lassen sich automatisieren. Dieser Testaufbau wird einerseits für regelmäßige Regressionstests genutzt, die den stabilen Betrieb des IoT-Geräts sicherstellen, und andererseits zur Replikation von Problemen, die sich in der Nutzungspraxis ergeben. Mehr dazu erfahren Sie in unserer Case Study „Eine Parkuhr für das Internet of Things“. Test zum Stromverbrauch Um seine Geräte energieeffizient zu betreiben, hat der globale Halbleiterkonstrukteur und -hersteller Texas Instruments (TI) die EnergyTrace™-Softwaresuite mit Tools für die automatisierte Leistungsmessung und -analyse entwickelt. Mit dieser Software können die Programmierer den Leistungsverbrauch der Geräte in Echtzeit messen und analysieren – in der Entwicklungsphase ebenso wie im Betrieb. Mithilfe von Funktionen der EnergyTrace-Software lassen sich Leistungsverbrauchstests automatisieren, unter anderem mit Tools für die kontinuierliche Leistungsprofilerstellung, die automatisierte Leistungsmessung und die Leistungsanalyse. Mit den automatisierten Leistungsverbrauchstests kann TI Probleme beim Leistungsverbrauch frühzeitig erkennen und das Design der Geräte anschließend iterativ verbessern. Dadurch kann TI energieeffizientere Geräte anbieten, die den Kundenanforderungen entsprechen. Security-Testing für IoT-Anwendungen Während sich Security-Tests bei laufenden Systemen (z. B. Penetrationstests) nur schwer automatisieren lassen, da dabei die Anfälligkeit des Geräts für unterschiedliche Angriffsarten getestet wird, ist dies für statische Codetests mit vertretbarem Aufwand möglich. Bei statischen Anwendungssicherheitstests (SAST) wird der Quellcode zur Kompilierzeit mithilfe von Tools (wie Sonar Cube) auf Sicherheitsrisiken analysiert. Bei der Einbindung in eine CI-Pipeline (hier für GitLab und GitHub beschrieben) verhindern solche Tools, dass anfälliger Code in den Codebestand übernommen wird. Daneben wird der Quellcode bei der statischen Codeanalyse auch vielfach mit einem „Secret Scanning“ auf die versehentliche Übernahme von Geheimnissen überprüft. Dadurch lassen sich mit diesen Tools Sicherheitsprobleme im Anwendungscode vermeiden (hier für GitLab und GitHub beschrieben). Dabei können auch in Drittanbieterbibliotheken, die eine Anwendung nutzt, Sicherheitsprobleme bestehen. Mit einer Softwarekomponentenanalyse (Software Composition Analysis, SCA) werden diese Abhängigkeiten anhand öffentlicher Datenbanken auf bekannte Sicherheitsrisiken überprüft. Diese Aufgabe lässt sich mit verschiedenen Tools automatisieren und auf diesem Weg regelmäßig ausführen, damit keine neuen Sicherheitsrisiken übersehen werden (hier für GitLab und GitHub beschrieben). Entdecken Sie weitere Möglichkeiten mit unserem „Industrial IoT Starterkit“. Kontinuierliche Integration für einen Medizinprodukte-Ofen Zühlke hat für die Entwicklung und Wartung eines Hochtemperatur-Spezialofens für Medizinprodukte ein System für automatisierte Tests entwickelt. Mit dem Robot-Framework als Grundlage wurde ein Testsystem implementiert, mit dem sich eine Vielzahl an Systemtests automatisch durchführen lässt. Dazu zählen unter anderem nutzerorientierte Anwendungsfälle sowie werkseitige Anwendungsfälle, z. B. in den Bereichen Kalibrierung und Wartung, wie die Aktualisierung der Firmware. Die Testautomatisierung wurde abschließend in den täglichen Entwicklungsablauf übernommen und in einer speziellen Pipeline eingesetzt, mit der die Systemtests bei allen in den Codebestand übernommenen Änderungen durchgeführt werden. Mit dieser Struktur kommt das Entwicklungsteam mit neuen Funktionen deutlich schneller voran. Zugleich kann es sich darauf verlassen, dass neue Releases nicht versehentlich Regressionen enthalten. Fazit: DevOps sichert Markterfolg und Kundenzufriedenheit Die kontinuierliche Qualitätssicherung für Embedded- und IoT-Geräte ist ein entscheidender Faktor für ihre Zuverlässigkeit, Sicherheit und Funktionsfähigkeit. Da die Software, die auf diesen Geräten ausgeführt wird, eine immer wichtigere Rolle für ihren Markterfolg spielt, gilt es unbedingt, einen DevOps-Ansatz zu verfolgen, der automatisierten Tests und der Zusammenarbeit in allen Phasen des Entwicklungsprozesses Priorität einräumt. Diese Art von Automatisierung lässt sich aufgrund des erhöhten Entwicklungsaufwands jedoch nicht ohne Weiteres für jedes neue Embedded-Produkt erreichen. In diesem Beitrag haben wir erläutert, welchen Aufwand Unternehmen zur Automatisierung ihrer Tests für IoT-Geräte betreiben. Das zeigt, wie wichtig es ist, den DevOps-Zyklus abzuschließen und die damit verbundenen Vorteile zu nutzen. Investitionen in solide Testprozesse gewährleisten unter dem Strich nicht nur den Markterfolg der Geräte, sondern auch die Nutzerzufriedenheit und das Vertrauen in ihre Funktionsfähigkeit und Sicherheit. Sie möchten mehr über den Nutzen von DevOps erfahren? Dann sprechen Sie uns an. Ansprechpartner für die Schweiz Romano Roth Chief of DevOps & Partner Seine Leidenschaft ist es, Unternehmen dabei zu unterstützen, Menschen, Prozesse und Technologien zusammenzubringen, damit sie ihren Kunden einen kontinuierlichen Mehrwert bieten können. Kontakt romano.roth@zuehlke.com +41 43 216 6651 Schreiben Sie uns eine Nachricht You must have JavaScript enabled to use this form. Vorname Nachname E-Mail Telefonnummer Message Absenden Bitte dieses Feld leer lassen Schreiben Sie uns eine Nachricht Vielen Dank für Ihre Nachricht.
Digitalisierung und Disruption – Ein klaffendes Loch im agilen Requirements Engineering Mehr erfahren
Digitalisierung und Disruption – Sustainability Transformation: vom Versprechen zur praktischen Umsetzung Mehr erfahren