2010-01-26 5 views
13

Ich arbeite an einem agilen Projekt mit Scrum.In der agilen Entwicklung, wie geht es Ihnen mit dem "weniger wohlüberlegten" Code, der aus einer sprintorientierten Denkweise resultiert

Sprints sind gekommen und gegangen und wir haben erfolgreich Meilensteine ​​erreicht. Das System funktioniert gut genug, um die aktuellen Kundenanforderungen zu erfüllen.

Es bleibt jedoch ein System übrig, das dringend umstrukturiert werden muss, da ein Großteil der Entwicklung mit wenig Zukunft durchgeführt wurde (stattdessen lag der Fokus auf dem vorliegenden Sprint).

Wie geht man am besten damit um? Sprint (s) für das Refactoring?

Antwort

25

Ja, die gelegentliche davon ist manchmal keine schlechte Sache. Aber wenn Sie mit Scrum agil sind, dann versuchen Sie vermutlich, der Test-Driven Development (TDD) zu folgen, und es ist wichtig, dass Sie sich daran erinnern, dass die Sequenz rot-grün ist, nicht nur rot-grün. Schlechter Qualitätscode ist nicht der Output der agilen Entwicklung, sondern der armen agilen Entwicklung.

+0

+1 Mehr wenn ich könnte - es macht mich traurig, wenn agile eine rep schlecht architected Code bekommt, wenn agile mit TDD * explizit ist * entwickelt, um die verbessern Code-Architektur durch kontinuierliche Verbesserung. –

+2

Ich stimme nicht zu, TDD wird oft nicht gut ausgerichtete Systeme gleichsetzen. TDD sollte auch als "wenn angebracht" -Ansatz verwendet werden. Während ich mit Rot-Grün-Refraktor zustimme, glaube ich, eine Menge Leute hängen auf diese und als Folge - Entwicklung deutlich verlängern. TDD ist ideal für die Fokussierung auf Mikro-Teile einer App. Es wird sich natürlich erweitern und in einen besser gestalteten Workflow wachsen, aber das führt nicht immer zu einem guten Makro-Design. Sprint Level Refraktoren sind dafür von entscheidender Bedeutung. – Chance

+2

@Chance: (1) ** Jede Methode, die nur schlecht angewendet oder falsch angewandt wird, führt zu einem schlecht aufgebauten und geschriebenen System. (2) TDD ist eine Entwicklungsmethodik, die oft innerhalb eines agilen Gesamtprozesses angewendet wird, und mein Kommentar, wenn Sie ihn lesen, sprach von der Ausgabe von ** agiler Entwicklung **, nicht speziell TDD. Wenn Sie versuchen, TDD zu verwenden, um Probleme auf höherer Ebene wie architektonische Probleme zu lösen, werden Sie scheitern. TDD entspricht nicht immer einem gut durchdachten System, genau wie ein Fahrversuch die Fähigkeit, ein Omelett zu kochen, niemals misst! Aber gut gemacht TDD ** verschärft nicht die Situation. –

3

Wo ich arbeite, haben wir Sprints gewidmet Bugs und technical debt. Es funktioniert gut für die Verbesserung der Dinge und den Geist der kontinuierlichen Verbesserung in gewissem Maße.

Etwas zu erwägen ist hier, ob es Verbesserungen gibt, die der Kunde will, aber nicht angefordert hat. Scheint der Kunde wirklich zufrieden mit dem aktuellen System oder funktioniert es gerade so gut, dass er sich nicht beschweren will?

7

Sie müssen nicht unbedingt einen ganzen Sprint dem Refactoring widmen, es kann auch auf der Aufgabenebene arbeiten. Wenn Sie eine Geschichte haben, die die Arbeit mit einem haarigen Code erfordert, fügen Sie eine Refactoring-Aufgabe in diese Geschichte als eine Art Voraussetzung dafür ein, dass alles vernünftig mit diesem Teil gemacht wird. Auf diese Weise machen Sie Fortschritte bei den Funktionen, aber Sie erhalten auch ein Refactoring inkrementell.

5

Für mein Team starte ich in der Regel alle drei bis vier Monate einen Refactoring-Sprint. Wenn man bedenkt, dass wir 2-wöchige Sprints fahren, ist das ein Refactoring-Sprint, etwa alle sieben Sprints.

Ich laufe den Refactoring Sprint wie jeden anderen Sprint - streng 2 Wochen Zeitlimit. Manchmal laufen wir sogar nur 1 Woche Refactoring Sprints (wenn etwas Dringendes kommt).

Ein Hinweis auf Refactoring Sprint: nicht zu ehrgeizig sein:

  1. Erkennen, dass Refactoring eine unendliche Zyklus ist: Sie werden immer einen besseren Weg finden, Dinge zu tun.
  2. Es ist in Ordnung, wenn Sie nur 10% refaktorieren, was refaktoriert werden muss.
  3. Behandeln Sie Refactoring wie alle anderen Storys, so dass Sie Prioritäten setzen müssen, was zu refaktorieren ist, und erkennen Sie, wo in Ihrem Code am meisten Refactoring erforderlich ist. Der einzige Unterschied besteht darin, dass ich die Entwickler beim Refactoring von Storys Prioritäten setzen ließ.
  4. Ein partieller Refactor lässt Ihren Code immer noch in einem besseren Zustand als keinen Refactor. Außerdem erleichtert es das weitere Refactoring.
  5. Das Refactoring passiert auch außerhalb von Refactoring-Sprints, wenn an Stories gearbeitet wird, aber nur, wenn das Refactoring eine tief hängenden Frucht ist, die die Fertigstellung von Stories nicht beeinträchtigt.

Dies ist, was ich persönlich als Leitfaden zum Refactoring verwenden. Es macht das Refactoring nicht nur beherrschbar, sondern ist auch ein guter Indikator dafür, wann man es übertreibt.

8

Haben Sie eine Definition von 'erledigt'?

Wenn Sie Codierung abgeschlossen haben und bereit sind, zu lesen, sollten Sie Ihre Teams Definition von ‚done‘

Diese Definition sollte unter anderem beinhalten, welche den Annahmekriterien erfüllt/Code-Review/Testbericht/und Treffen vereinbarten Kodierungsstandards.

Wenn nach mehreren Sprints Ihre Code-Basis ernsthaft Refactoring benötigt, würde ich vorschlagen, Ihre Definition von done braucht Überprüfung.

Hier ist ein Artikel aus Scrum Alliance Ihr auf die Definition 'definition of done'

Verwandte Themen