Ich verwende seit ungefähr drei Jahren eine agile Methodik (SCRUM) und sehe bestimmte Vorteile darin, insbesondere in dem kurzfristigen Feedback auf vielen Ebenen (von Kunden, die frühzeitig auf implementierte Funktionen zugreifen, von Testern, die Funktionen wie testen können) Sobald sie implementiert sind, von anderen Entwicklern, die sehr früh Feedback zu neuem Code durch Überprüfung usw. geben können.
Andererseits habe ich zwei offene Probleme, von denen ich das erste in dieser Frage zu erklären versuchen werde.
Problem: Schwierigkeit, ein gutes Design zu bekommen
Ich versuche, das Refactoring durchzuführen, sobald der Code unordentlich wird. Ich schreibe so viele Unit-Tests wie möglich (was hilft , Fehler im Allgemeinen und beim Refactoring im Besonderen zu vermeiden). Andererseits ist es mir nicht möglich, ein komplexes Feature in kleinen Schritten mit täglichen Commits zu entwickeln und den Code kontinuierlich zu überdenken, wenn er unstrukturiert wird.
Das einzige gut gestaltete Modul, das ich in letzter Zeit herstellen konnte, wurde auf eine andere Weise entwickelt: Ich analysierte das Problem einige Tage lang (ich hatte das Problem tatsächlich einige Monate lang durch den Kopf gegangen, bevor ich ernsthaft daran arbeitete) ), skizzierte noch ein paar Tage lang einen ziemlich detaillierten Entwurf aller beteiligten Klassen und ihrer Beziehungen, schloss mich dann in mein Büro ein und schrieb den gesamten Code auf, indem ich etwa drei Wochen lang ohne Unterbrechung arbeitete. Das Ergebnis war das Beste, was ich seit einiger Zeit produziert habe, mit sehr wenigen Fehlern, die relativ einfach zu lokalisieren und zu beheben waren, und mit einem sehr klaren Design, das seitdem keine relevanten Änderungen mehr erforderlich gemacht hat.
Bis jetzt fand ich es viel effektiver, mir ein Gesamtbild von dem zu machen, was ich vorab machen wollte, als in kleinen Schritten mit dem Schreiben von Code zu beginnen, in der Hoffnung, dass das große Bild dabei magisch auftaucht. Mit meiner besten Mühe hat mich der Ansatz der Entwicklung mit kleinen Schritten immer zu einem schlechteren Design geführt.
Frage : Hat jemand eine ähnliche Erfahrung gemacht? Wende ich SCRUM falsch an oder was muss ich beachten, wenn ich in kleinen Schritten entwickeln und trotzdem eine gut gestaltete Software erhalten möchte? Oder sollte ich eine Design User Story planen, bevor ich mit dem eigentlichen Coding beginne? Wird dies als eine gute Vorgehensweise angesehen, zumindest für Funktionen, die komplexer als der Durchschnitt sind?
NOTIZ BEARBEITEN
Mir ist bewusst, dass gutes Design nichts Absolutes ist und keinen eigenen Wert hat, sondern vom Kontext abhängt und dass man ein Design anstreben sollte, das für das jeweilige Problem gut genug ist .
Zum Beispiel ist mir gutes Design (zu sehr) egal, wenn ich eine einfache Komponente implementieren muss, die (1) so schnell wie möglich bereit sein muss, (2) nur einmal verwendet wird, (3) nicht von anderen Teilen des Systems (YAGNI) verwendet.
Gutes Design ist mir wichtig, wenn eine Komponente (1) mehrmals und in mehreren verschiedenen Releases eines Produkts verwendet wird, (2) über die Zeit gewartet und erweitert werden muss, (3) viele andere Komponenten davon abhängen .
The only well-designed module I could produce recently I obtained by taking a different approach- Sie haben Ihre eigene Frage beantwortet. Sie müssen noch einige Up-Front - Design; Man kann nicht erwarten, dass ein gutes Design durch Refactoring einfach organisch wächst. So funktioniert das nicht.