Post on 16-Jul-2015
© Zühlke 2015
Agile Embedded – Eine Einführung
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 1
© Zühlke 2015
Agile Embedded
Agile Embedded - Eine Einführung | Henrik Puls
Das Manifest
Wir schätzen besonders•Individuen und Interaktion•Funktionierende Software•Zusammenarbeit mit dem
Kunden•Reagieren auf
Veränderungen
Hat auch seinen Wert•Prozesse und Werkzeuge•Umfassende Dokumentation•Vertragsverhandlung•Befolgen eines Plans
10. März 2015 Folie 3
© Zühlke 2015
Agile Embedded
Agile Embedded - Eine Einführung | Henrik Puls
Was dahinter steht
10. März 2015 Folie 4
© Zühlke 2015
Agile Embedded
• Eine Einheit aus Hard- und Software, die in einen technischen Kontext eingebunden ist
• Übernimmt z.B. Überwachungs-, Steuerungs-oder Regelfunktionen
• Interaktion mit der Außenwelt häufig über Schnittstellen, wie z.B. LIN oder CAN
• Häufig einschränkende Randbedingungen wie minimale Kosten, geringer Platz-, Energie- und Speicherverbrauch
• Für den Benutzer häufig unsichtbar
• Haben häufig einen sehr langen Lebenszyklus
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 5
© Zühlke 2015
Aussagen
Agile Embedded - Eine Einführung | Henrik Puls
Kontinuierliche Auslieferung?
Wir können erst Ausliefern wenn das
Produkt fertig ist!
10. März 2015 Folie 6
© Zühlke 2015
User Stories
User Stories
Agile Embedded - Eine Einführung | Henrik Puls
System
10. März 2015 Folie 7
© Zühlke 2015
System Stories
Das <System/Teil des Systems> soll <Aufgabe>wenn <Bedingung> um <Zweck>
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 8
© Zühlke 2015
Der agile Prozess
Agile Embedded - Eine Einführung | Henrik Puls
Am Beispiel Scrum
Product Backlog Sprint Backlog Potential ShippableIncrement
Priority driven Review & Retrospective
24h
30d
Small Releases
Scrum Meeting (15 min)• Was hast Du seit dem letzten Meeting getan?
• Behindert Dich etwas?
• Was wirst Du bis zum nächsten Meeting tun?
Frühe und Kontinuierliche Auslieferung?
Wir können erst Ausliefern wenn das
Produkt fertig ist!
Sprint
10. März 2015 Folie 9
© Zühlke 2015
Frühe und Kontinuierliche Auslieferung
Kontinuierliche Lieferung an Endkunden?
Kontinuierliche Lieferung eines messbarenFortschritts
Agile Embedded - Eine Einführung | Henrik Puls
Frühe und Kontinuierliche Auslieferung?
Wir können erst Ausliefern wenn das
Produkt fertig ist!
10. März 2015 Folie 10
© Zühlke 2015
Frühe und Kontinuierliche Auslieferung
Wird ein USB Stick eingesteckt, soll das System die Logdateien auf den USB Stick schreiben.
• USB Register können angesteuert werden
• USB Stick wird erkannt, sobald er eingestecktwurde
• Dateien können vom USB Stick gelesen werden
• Dateien können auf den USB Stickgeschrieben werden
• Logdatei auf den USB Stick schreiben
Agile Embedded - Eine Einführung | Henrik Puls
Ein Beispiel
Frühe und Kontinuierliche Auslieferung?
Wir können erst Ausliefern wenn das
Produkt fertig ist!
10. März 2015 Folie 11
© Zühlke 2015
Parallele Entwicklung von Hard- und Software
Auch ohne verfügbare Zielhardware kann die Entwicklung beginnen
• Entwickler Rechner
• Development Board
• Prototyp
Durch parallele Entwicklung ist eine frühzeitige Integration von Hard- und Software möglich.
Probleme können somit eher aufgedeckt werden.
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 12
© Zühlke 2015
Hardware
OS
Hardware
OS
Entwicklung auf dem PC
Agile Embedded - Eine Einführung | Henrik Puls
Die Voraussetzungen
Hardware Abstraction Layer
Applikation
OS Abstraction Layer
10. März 2015 Folie 13
© Zühlke 2015
Entwicklung auf dem PC
Agile Embedded - Eine Einführung | Henrik Puls
Die Voraussetzungen
CanMessage
CanTransceiver
+ SendMessage(in message: CanMessage)
«interface»ICanTransceiver
+Start()+Stop()+getRevolution()+setRevolution()+DriveController(in transceiver : ICanTransceiver)
DriveController
DriveSimulator
10. März 2015 Folie 14
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls
Unit Tests
TEST(DriveControllerTest, StopsDriveIfRevolutionGreater200){
DriveSimulator driveSimulator;DriveController underTest(driveSimulator);driveSimulator.setRevolution(201);
underTest.Stop();EXPECT_EQ(true, driveSimulator.stopCommandReceived);
}
CanMessage
CanTransceiver
+ SendMessage(in message: CanMessage)
«interface»ICanTransceiver
+Start()+Stop()+getRevolution()+setRevolution()+DriveController(in transceiver : ICanTransceiver)
DriveController
DriveSimulator
+StopsDriveIfRevolutionGreater200()
DriveControllerTest
10. März 2015 Folie 15
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls
Statische Analyse
Statische Analyse
Architektur Metriken Code-Checker
Stil Kodier-regeln
Laufzeit-fehler
Sicherheits-probleme
10. März 2015 Folie 16
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls
Continuous Integration
Check In
Feedback
Target
Versionsverwaltung
Build Agents
TeststandBuild Server
@
10. März 2015 Folie 17
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls
Mess- und Prüftechnik
10. März 2015 Folie 18
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls
Signaladaption
DUT
Signaladapter
10. März 2015 Folie 19
© Zühlke 2015
Testautomatisierung
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 20
© Zühlke 2015
Entwicklung im regulierten Umfeld
Die Entwicklung im regulierten Umfeld stellt besondere Anforderungen unter anderem bezüglich:
• Dokumentation
• Qualitätssicherung (Tests)
Sie fordert aber nicht die Verwendung eines spezifischen Lebenszyklus-Modells.
Aber am Ende muss eine Dokumentation gemäß V-Modell vorhanden sein.
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 21
© Zühlke 2015
Entwicklung im regulierten Umfeld
Aus der IEC 62304 (S 8):
„Diese Norm schreibt kein spezifisches Lebenszyklus-Modell vor. Die Anwender dieser Norm sind verantwortlich für die Auswahl eines Lebenszyklus-Modells für das Software-Projekt und für das Abbilden der Prozesse, Aktivitäten und Aufgaben dieser Norm auf dieses Modell“
Aus FDA Guidance „General Principles of Software Validation“ (S 11):
„…the software life cycle contains specific verification andvalidation tasks that are appropriate for the intended use ofthe software. This guidance does not recommend anyparticular life cycle models – only that they should be selectedand used for a software development project“Agile Embedded - Eine Einführung | Henrik Puls
Zitate
Weder IEC 62304…
… noch FDA schreiben ein spezifisches Lebenszyklus-Modell vor.
10. März 2015 Folie 22
© Zühlke 2015
Entwicklung im regulierten Umfeld
Die folgenden Prinzipien sind wichtig, unabhängig davon, welcher Software-Lebenszyklus verwendet wird:
• Alle Prozess-Ergebnisse sollten auf einem konsistenten Zustand gehalten werden. Wenn irgendein Prozess-Ergebnis erzeugt oder geändert wird, sollten alle damit zusammenhängenden Prozess-Ergebnisse sofort aktualisiert werden, um die Konsistenz untereinander und alle Abhängigkeiten, die explizit oder implizit von dieser Norm gefordert werden, aufrechtzuerhalten.
• Alle Prozess-Ergebnisse sollten verfügbar sein, wenn sie als Eingabe für weitere Arbeiten an der Software benötigt werden.
• Bevor eine Medizinprodukte-Software freigegeben wird, sollten alle Prozess-Ergebnisse untereinander konsistent sein, und alle Abhängigkeiten zwischen Prozess-Ergebnissen, die explizit oder implizit von dieser Norm werden, sollten beachtet werden.
Agile Embedded - Eine Einführung | Henrik Puls
Forderung der IEC 62304 (Anhang B)
Egal wie:Am Ende muss eine konsistente Dokumentation nach V-Modell stehen!
10. März 2015 Folie 23
© Zühlke 2015
Design und Dokumentation
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 24
© Zühlke 2015
Agile Praktiken
Agile Embedded - Eine Einführung | Henrik Puls
Pair programming und Code Reviews
10. März 2015 Folie 25
© Zühlke 2015
Agile Praktiken
Agile Embedded - Eine Einführung | Henrik Puls
KISS und Premature Optimization
10. März 2015 Folie 26
© Zühlke 2015
Refactoring
Agile Embedded - Eine Einführung | Henrik Puls
Changing shape not function
Refactor
10. März 2015 Folie 27
© Zühlke 2015
Änderungen der Anforderungen
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 28
© Zühlke 2015
Best practices
In den ersten Iterationen:
• Festlegung der grundlegenden Architektur
• Identifizieren von Schlüsselkomponenten und deren Schnittstellen
• Etablierung von Kodier Richtlinien und Code Analyse
In den folgenden Iterationen:
• Prüfen, ob die Architektur weiterhin tragfähig ist
• Prüfen, ob Anpassungen an denKodier Richtlinien erforderlich sind
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 29
© Zühlke 2015
Best practices
• Die Entwicklung sollte mit der möglichst leistungsfähigsten Hardware begonnen werden. (Pinkompatibel mit Zielhardware)
• Flash Memory und RAM sollten großzügig bemessen sein.
• Metriken etablieren, um Speicher- und Performancebedarf des Systems zu messen und Vorhersagen treffen zu können.
• Simulatoren sollten möglichst früh entwickelt werden.
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 30
© Zühlke 2015
Best practices
Agile Embedded - Eine Einführung | Henrik Puls
Agile Praktiken
Werkzeuge Keine Glaubenssätze
10. März 2015 Folie 31
© Zühlke 2015
Referenzen
• www.agilemanifesto.org
• James Grenning‘s Blog
• Daniel Mölle: Stabile Software durch Design for Testability(iX 11/2012, SlideShare)
• Matthias Kraaz: Wirtschaftlich testen(MEDengineering 9-10/2012, SlideShare)
• EN 62304
• FDA Guidance „General Principles of Software Validation“
Agile Embedded - Eine Einführung | Henrik Puls 10. März 2015 Folie 32
© Zühlke 2015
Zur Person
Agile Embedded - Eine Einführung | Henrik Puls
• Lead Software Architect
• 10 Jahre Berufserfahrung
• Schwerpunkte– Embedded Entwicklung– NET– Microsoft Azure– IoT
Zühlke Engineering GmbHGroße Elbstraße 8622767 HamburgDeutschland
Henrik Puls
Dipl.-Inform. (FH)
Henrik.Puls@zuehlke.com
10. März 2015 Folie 33