Wie kann man eine agile Methodik für die Entwicklung von Firmware / Embedded-Systems-Software anwenden?

17

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.

hopia
quelle
Ich verstehe, dass die finalisierte Hardware erst spät im Entwicklungszyklus verfügbar ist, aber haben Sie keinen Prototyp oder Debug-Hardware, keine Entwicklungsplatine oder zumindest keinen Herstellersimulator zum Testen? Oder fangen wir hier von vorne an?
Kevin Vermeer
3
Ich habe mit einem agilen Entwickler über meinen Embedded-Job gesprochen. "Eine Veröffentlichung alle 6-8 Wochen!?!?" er sagte. "Das ist eine sehr lange Zeit". "Nein, du hast mich verhört", sagte ich, "es sind 6 bis 8 Monate "
AShelly
2
Ich bin neugierig, welche Art von Produkt mehr als 100 eingebettete Ingenieure hat.
Pemdas
@reemrevnivek - normalerweise gibt es ein Evaluierungsboard aus früheren Projekten, das verwendet werden könnte. Manchmal ähneln sie dem neuen Produkt. Selbst dann, wenn all Ihre Tests auf der Evaluierungsplatine verlaufen, wenn Sie die Firmware tatsächlich auf dem Endgerät ausführen, brechen die Tests meistens ab, weil es einige neue Dinge gab, die Hardware-Leute in letzter Minute oder vielleicht hinzugefügt haben hat uns anfangs nicht erwähnt ...
hopia

Antworten:

10

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.). .

Kristopher Johnson
quelle
Lassen Sie die Chiphersteller auch den relevanten Teil des Simulatorcodes bereitstellen.
Rwong
Bis Sie diese Dinge haben, hat ein Konkurrent bereits ausgeliefert
Bill
Wenn Sie mehr als 100 Ingenieure haben, können Sie mit Sicherheit einen brauchbaren Simulator in kürzerer Zeit erstellen, als Ihre Konkurrenten liefern werden. Dies gilt insbesondere dann, wenn Ihre Konkurrenten ihre Software erst testen können, wenn sie die Hardware erhalten.
Kristopher Johnson
Ja, ich bin damit einverstanden, dass Simulatoren der Schlüssel sind. Der Entwurf des gesamten Systems basiert also von Anfang an darauf, wie effizient Sie das System in testbare Komponenten aufteilen können. Nun, wie man all diese Leute davon überzeugen kann, agil zu werden, ist eine andere Frage ........
hopia
@ Rechnung Das ist sehr wahrscheinlich. Dies bedeutet jedoch wahrscheinlich, dass sie ein ungetestetes minderwertiges Produkt versandt haben, und das Produkt des OP wird sie aus dem Wasser blasen. Zumindest sollte es so sein.
Juli
2

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.

function deliversJIT( company ) { 
    return company.isJIT() && map( deliversJIT, company.suppliers() );
}

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.

xtofl
quelle
+1 für Agilität ist nur möglich, weil das zugrunde liegende Zeug gründlich entworfen / gemacht wurde.
Bill
1

Agiles Manifest: http://agilemanifesto.org/

"Individuen und Interaktionen über Prozesse und Werkzeuge"

  • Lerne mehr kennen. Schieben Sie weniger Papier.

"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"

  • Während komplexe Integration einen komplexen Plan erfordert, kann das gesamte "Programm" (oder die Sequenz von Projekten) nicht zu früh konkretisiert werden.

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.

S.Lott
quelle
0

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.

Bruce
quelle