Ich habe mich immer gefragt, wie man agile Methoden wirklich in großen komplexen eingebetteten Systemsoftware (über 100 Ingenieure) anwendet. Die Firmware-Entwicklung hat einige einzigartige Eigenschaften, die es schwierig machen, agil zu arbeiten (dh Hardware ist erst spät im Entwicklungszyklus verfügbar; Sobald das Produkt veröffentlicht ist, kann die Firmware nicht einfach aktualisiert werden; usw.)
Die Norm in dieser Art von Entwicklung ist dicke Dokumentation und anstrengende Peer Reviews. Sie können eine einfache Code-Korrektur wie das Umbenennen einer Variablen ohne 2-3 Signaturen nicht durchführen. (Ich übertreibe ein bisschen, aber das ist typisch. Außerdem nehmen viele Leute Verknüpfungen an und die Projektmanager genehmigen sie sogar, besonders angesichts der harten Marktfristen.)
Ich würde gerne Tipps oder Richtlinien zur Einführung einer agilen Methodik für Firmware-Entwicklungsprojekte hören.
quelle
Antworten:
Ich denke, zwei Techniken sind der Schlüssel:
Entwickeln Sie einen vollständigen Simulator oder eine Testumgebung für die Hardware, damit Sie die Software so entwickeln können, als hätten Sie echte Hardware. Knausern oder nehmen Sie keine Abkürzungen hier: eine gute Simulator Entwicklung wird sich auszahlen.
Schreiben Sie viele Unit-Tests gegen den Simulator.
Sobald Sie diese Dinge in Gang gesetzt haben und die Leute sicher sind, dass der Simulator und die Komponententests eine genaue Vorstellung davon geben, wie die Dinge mit der Hardware funktionieren, ist es einfacher, andere agile Techniken anzuwenden (kurze Iterationen, unermüdliches Refactoring usw.). .
quelle
Die Auswirkungen von Agile auf einen Entwicklungsprozess, an dem mehrere Lieferanten beteiligt sind, können mit den Auswirkungen eines Unternehmens auf die JIT verglichen werden.
Um JIT zu liefern, muss jeder Lieferant des Unternehmens JIT liefern.
Wenn Sie ein komplexes Produkt nach agilen Methoden entwickeln möchten, sollte jede Untergruppe in der Kette in der Lage sein, auf diese Weise zu arbeiten.
In Bezug auf die "inkrementelle" Entwicklung (auch bekannt als Tracer Bullets von vor 15 Jahren) würde dies bedeuten, dass der "Kern" sehr bald für den Fahrer freigegeben wird und dass der Basistreiber dem Integrator zur Verfügung steht und die grafische Benutzeroberfläche entwickelt werden, mit einem einzigen Knopf und einem Bearbeitungsfeld gleichzeitig beit.
Der schwierige Teil besteht darin, die Hardware-Designer, die aus einer soliden Ingenieursdisziplin stammen, davon zu überzeugen, sich unserer Tüftler-Gesellschaft anzuschließen.
Das zweitschwerste ist, einen Weg zu finden, um eine schrittweise Entwicklung in einer Welt zu ermöglichen, in der ein Hardwaredruck drei Wochen im Voraus bestellt werden muss. Ich denke Emulatoren, FPGA ist hier. Ich bin allerdings kein Hardware-Typ.
Wenn Sie bereit sind, auf die inkrementelle Hardwareentwicklung zu verzichten, können Sie genau wie an den Grenzen einer JIT-Kette einen Puffermechanismus vorsehen, der es den Agile-Teams ermöglicht, Fortschritte zu erzielen.
Seien wir nicht blind: Agile muss sich auch mit schweren Prozessen auseinandersetzen! Bitten Sie das Agile-Team nicht, im nächsten Sprint die Java-Codebasis auf Python umzustellen. Nur weil einige der Teile wirklich sehr stabil sind, können wir unsere agilen Moves darüber tanzen.
quelle
Agiles Manifest: http://agilemanifesto.org/
"Individuen und Interaktionen über Prozesse und Werkzeuge"
"Arbeitssoftware über umfassende Dokumentation"
Prototyp- und Build-Technologie spitzt sich früh und häufig zu.
Lösen Sie das eigentliche Problem des Benutzers, anstatt die genaue Einhaltung einer Spezifikation zu gewährleisten. Das bedeutet evolutionäre Lösungen. Die Idee, dass wir es richtig bauen müssen, weil wir es nie wieder bauen können, ist falsch. Planen Sie die Iteration. Machen Sie es Teil der Marketing- und Rollout-Strategie.
"Kundenkooperation über Vertragsverhandlungen"
Hyperkomplexe Veränderungsprozesse sind nur Mittel, um dem Kunden ein "Nein" zu sagen.
Das Sperren aller Anforderungen von vornherein und das Auferlegen einer Änderungskontrolle ist eine andere Art, "Nein" zu sagen.
Wenn Sie bereits mehr als eine Version planen, können Sie Anforderungen leichter auf eine spätere Version verschieben. Sobald der Kunde das Gerät mit der eingebetteten Software hat, ändert sich die Priorität der nächsten Version.
"Umsteigen auf einen Plan"
Eine vollständig agile Methodik (dh Scrum) ist für ein eingebettetes System möglicherweise nicht sinnvoll.
Das Agile-Manifest bietet jedoch Möglichkeiten, Veränderungen zu ermöglichen, ohne ein einfaches Chaos zuzulassen.
quelle
Mein Problem mit Scrum in eingebetteten Systemen ist, dass es viele Aufgaben zu erledigen gibt, insbesondere in den frühen Stadien, die nicht nachweisbar sind. Wir haben mit einem Entwicklungsboard begonnen, ohne Betriebssystem, ohne Display, ohne serielle Kommunikation usw. Wir hatten unser Display für 6 Sprints nicht.
Die ersten 4 Sprints waren: Starten des RTOS Erstellen von Tasks Schreiben von Netzwerk- und seriellen Treibern Schreiben von Interrupt-Routinen für Schaltflächen, Kommunikationen usw. Schreiben der primären Datenbankklassen und -methoden Schreiben eines seriellen Debug-Menüs
Die meisten dieser Aufgaben eignen sich nicht für User Stories. Tatsächlich war die einzige Schnittstelle zum gesamten System das in Sprint 3 integrierte Serial Debug-Menü, sodass am Ende der Sprints nichts zu demonstrieren war. Sogar das serielle Menü war für den internen Gebrauch gedacht und kein Endbenutzer.
Natürlich hat jede Klasse, die wir schreiben, zugehörige Komponententests und wir verwenden ein Komponententest-Framework, um die Ausführung aller Tests zu automatisieren.
Am Ende haben wir "User Stories" -Sätze wie "Als Entwickler ..." geschrieben, mit denen ich nicht zufrieden bin. Bei der Verwendung von Target Process (www.targetprocess.com) gibt es jedoch kein Konzept für einen Rückstand eine Aufgabe oder lästige Pflicht.
Ich würde gerne hören, wie andere mit diesen Situationen umgegangen sind.
quelle