Hände, die ein Loch stopfen

(Embedded) Software-Wartung: Wie optimiert man den Aufwand?

Was sollte man schon bei der Entwicklung beachten? Auch bei embedded Software?

Lesezeit 5 min

Geändert

Softwareentwicklung ist ein Projekt, d.h. eine Aufgabe mit Anfang und Ende. Darauf folgt die Wartung und Pflege der Software, diese kann sich je nach Produkt über viele Jahre “ohne Ende” hinziehen. Dadurch sind die Aufwände, die Kosten und die Energie, welche in der Summe in die Wartung gesteckt werden, oft viel höher als in die für die erste Entwicklung.

Daher stellen sich zwei grundsätzliche Fragen, welche wir hier beantworten möchten:

  • Wie kann man Software so entwickeln, dass die Wartung weniger Aufwand verschlingt (Frontloading)?
  • Wie kann man die Wartung so durchführen, dass sie effektiv und effizient ist.

Warum sollte ich mich mit Software Maintenance auseinandersetzen?

  • Software wird heute über einen langen Zeitraum genutzt und muss gewartet werden (z.B. ist aufgrund der hohen Komplexität vielfach eine Neuentwicklung nicht realistisch).
  • Viel Knowhow steckt in der Software (Sourcecode) und ist nirgends dokumentiert. D.h.bei einer Neuentwicklung muss dieses Wissen wieder neu erarbeitet werden.
  • Während der Nutzung der Software ist heute oft Maintenance notwendig oder erwünscht.
  • Der für die Wartung erforderliche Aufwand steigt oft im Laufe der Zeit kontinuierlich an, in manchen Fällen sogar exponentiell. Dies hat zur Folge, dass der Aufwand und die Dauer von Updates so gross werden, dass die Software nicht mehr sinnvoll genutzt werden kann. Daher sollte eine effiziente Wartung angestrebt werden, die diesen Anstieg des Aufwands gering hält.

Was sind die Gründe für Software Maintenance?

  • Bug Fixes
  • Security Issues
  • Veraltete («outdated») Software Komponenten (z.B. Betriebssysteme: kennt noch jemand Windows CE?)
  • Neue Features (neue Funktion)
  • Neue regulatorische Anforderungen/ Normen
  • "Modernisierung" (z.B. State of the Art User Experience)
  • Performance-Verbesserungen (Verbesserung eines Features, generelle Software Performance, z.B. Latenzen, Durchsatz)
  • Abgekündigte Elektronik Komponenten und Probleme mit der Verfügbarkeit und Lieferbarkeit von Komponenten
  • Preis-Optimierungen (z.B. Verwendung günstigerer Hardware Komponenten bei Embedded Software)
  • Werterhaltung der Entwicklung/des Produktes, denn Maintenance ist häufig günstiger als Neuentwicklung
     

Was beeinflusst die Wartbarkeit einer Software («Stellschrauben»)?

  • Funktionsumfang: Produkte mit weniger Funktionsumfang sind einfacher zu warten
  • Wartungsintensive Funktionalität: zum Beispiel sind Features mit Connectivität wegen der Cybersicherheit aufwendig in der Wartung
  • Wissens-Management
  • Dokumentation
  • Traceability (Req., Bugs, Design, Tests)
  • Wissenstransfer (z.B. Schulung von neuen Entwicklern)
  • Software Qualität (funktional und nicht-funktional)
  • Entwicklungskosten vs Produktkosten: Zum Beispiel Hardware Resource-Usage (Preis-optimiert vs. Hardware Reserven)

Vor der Software-Entwicklung: Was muss ich mir für eine effiziente Wartung überlegen?

  • Wie lange ist mein Produkt auf dem Markt?
  • Anforderungen bez. Maintenance, z.B. Security aus CRA (Cyber Resilience Act)?
  • Wie wichtig ist die Erweiterbarkeit meiner Software?

Wie beeinflussen Entwicklungs-Entscheidungen die Software-Wartbarkeit?

Entscheide über diese Punkte sollten die Wartung mit einbeziehen:

  • Minimalismus: Nur Funktionalität implementieren die auch gebraucht wird
  • Dokumentation: bringt viele Chancen, birgt aber auch grössere Risiken! Deshalb sollte bewusst geplant und ein gemeinsames Verständnis erarbeitet werden
    • Wieviel Dokumentation macht Sinn?
      • Es ist wichtig eine gute Balance zu finden: Ohne Dokumentation lässt sich das Wissen nicht erhalten. Zu viel Dokumentation ist aber ein Hindernis bei der Effizienz.
      • Während der Maintenance muss die Dokumentation immer auch aktualisiert werden. 
      • Ist die Korrektheit der Dokumentation nicht gewährleistet, so wird diese auch nicht genutzt werden.
    • Was soll dokumentiert werden?
      • Oft werden Details der erstellten Software beschrieben. Diese Info kann aber oft gut aus dem aktuellen Code extrahiert werden (besonders heute mit Hilfe von AI). Nützlicher sind deshalb Hintergrund Info wie Rationales (warum wurde etwas so gelöst) und Hintergrund-Informationen (z.B. Design-Entscheide).
    • Wo/ wie kann dokumentiert werden?
      • separate Dokumente (Text, Diagramme wie z.B. UML)
      • Kommentar im Source Code
      • Meta-Info in der Versionsverwaltung (z.B. Detailierte Infos in Git Commit Logs)
  • Software-Architektur
  • Ressourcen-Optimierungen
    • RAM, ROM, Rechenzeit/Prozessor-Last, Interface Bandwidth Usage: gibt es Raum für Erweiterungen?
  • Software Qualität (funktional): Reduktion der Wartung durch Vermeidung von Fehlern
    • Reviews (Fokus auf korrekte Funktion)
    • Teststrategie: Planen was wie wann getestet wird
      • Full Tests vs Regressionstests?
      • manuell vs. automatisiert?
      • Test-Abdeckung entsprechend der gewählten Strategie
  • Software Qualität (nicht-funktional)
    • Reviews (Fokus auf nicht-funktionale Aspekte wie Lesbarkeit, Erweiterbarkeit)
    • Refactoring (Code aber auch Architektur)
    • Automatisierte Codeanalyse (Qualität messbar machen, zum Beispiel mit Cyclomatic Complexity)
    • KI (Künstliche Intelligenz)-generierter Code: Einsatz von KI planen und Wartbarkeit kontinuierlich prüfen und verbessern
  • Einfaches Deployment
  • Entwicklungs-Tools
    • Z.B. bekomme ich die Lizenzen auch in Zukunft?

Kann mir KI bei der Wartung helfen?

Wartung ist ein gutes Anwendungsgebiet für KI (Künstliche Intelligenz), sie kann bei folgenden Aufgaben unterstützen:

  • Analyse der bestehenden Software
  • Fehlende Dokumentation erstellen mit Hilfe von KI
  • Refactoring / technische Schulden
    • Zuerst Testabdeckung mit AI erhöhen, damit die Korrektheit nach einem Refactoring besser geprüft werden kann
    • Auffinden von nicht mehr benötigtem Code
    • Code Reviews

Was muss ich mir während der Software-Wartung und Erweiterung überlegen?

  • Wie lange ist mein Produkt noch auf dem Markt?
  • Änderungen an Anforderungen bezüglich Maintenance, z.B. Security gemäss CRA (Cyber Resilience Act)?
  • Was erschwert aktuell die Maintenance?
    • Und dann diese Schwierigkeiten angehen
  • Handlungsbedarf oder Risiken bezüglich Lizenzierung von Entwicklungstools oder SW-Kompenenten?

Welche Massnahmen machen die Wartung effizienter?

  • Reduktion der Komplexität: Entfernung von nicht mehr relevanter Funktionalität
  • Software-Architektur: Refactoring
  • kontinuierliches Code Clean-Up
    • alter, unused Code entfernen
    • Lesbarkeit des Codes erhalten/ verbessern
    • Re-Design; z.B. Bereinigung von allfälligen "Quick-Fixes" und Workarounds
  • Anpassungen, Wechsel Entwicklungs-Tools (z.B. Wechsel zu State-of-the-Art Tools)
  • Erfahrene und kompetente Entwickler einsetzen

Warum das wichtig ist

Wartung und Erweiterungen der Produkte und vor allem der Software sind eine unausweichliche Konsequenz des Erfolges Ihres Produktes am Markt. 

Brauchen Sie Sie Unterstützung mit Software-Wartung oder Erweiterung Ihrer Produkte? Solcept wartet Produkte, Elektronik und Software und wir entwickeln Ihre Produkte so, dass sie einfach zu warten und zu erweitern sind.

 

Roger Hilzinger und Matthias Eggenberger

Haben Sie zusätzliche Fragen? Haben Sie eine andere Meinung? Wenn ja, mailen Sie mir oder kommentieren Sie Ihre Gedanken unten!

Autor

Kommentare

Keine Kommentare

Was ist Ihre Meinung?

Projekte? Ideen? Fragen? Machen wir einen kostenlosen Erst-Workshop!