Rapid Prototyping und Refactoring

9

Manchmal, wenn ich ein kleines Projekt starte (wie eine Android-App), weiß ich nicht, welcher Ansatz am Ende funktionieren wird, und ich gehe einfach zu einem Ansatz und probiere es aus. Aber wenn ich diesen Ansatz noch nie benutzt habe (für eine Art Anwendung, die ich noch nie programmiert habe), ist es, als würde ich in unbekanntes Terrain treten. Ich weiß nicht, welche Bibliotheken ich verwenden soll (vielleicht muss ich mehrere Bibliotheken ausprobieren) und es gibt so viele Unbekannte (wie: wie man rohe Audiodaten in Android bekommt)

Dann läuft mein Entwicklungsprozess so ab:

  • Schreiben Sie einen Code, um zu sehen, ob der Ansatz eine Chance hat. (Je unsicherer der Ansatz ist, desto hässlicher wird der Code.)
  • Wenn es funktioniert, überarbeiten Sie viel, bis es schön ist

Ich denke, es könnte Zeitverschwendung sein, wenn ich mein Software-Design an dieser Stelle detailliert planen würde. Es wäre, als würde ich eine Reise ohne Karte planen.

Ist das Teil der Aglie-Entwicklung? Wie gehen Sie mit unbekanntem Terrain in der Softwareentwicklung um?

Puckl
quelle
Dies wird in Clean Code 2 als Mittel zur iterativen Entwicklung erwähnt. Ob Sie an dieses Buch glauben oder nicht, liegt bei Ihnen.
Rig

Antworten:

11

Das hat nichts mit Agilität zu tun, aber die Leute gehen davon aus, dass dies der Fall ist, weil sie glauben, dass Agilität das ist. kopflose Hühnerentwicklung in einer Hippie-Gemeinde.

Was Sie tun, ist die Bewertung von Technologien, da Sie derzeit nicht über genügend Erfahrung verfügen, um ein Urteil zu fällen. Dies ist gut und endet nie, da fast täglich neue Bibliotheken, Frameworks, Sprachen und Plattformen erscheinen.

Wie Sie mit dem Unbekannten umgehen, ist eigentlich eine wirklich gute Frage, und es kommt darauf an, die Alternativen zu erforschen, zu bewerten und dann eine auszuwählen.

Die Fähigkeiten, die dazu neigen, mit Agile in Verbindung gebracht zu werden, die hier helfen, umfassen das Erstellen von Code, der so einfach und sicher zu überarbeiten ist. TDD ist ein gutes Beispiel. Es ermutigt Sie, Ihre Entwicklung in Bezug auf die Ergebnisse zu betrachten. "Dieser Code sollte dieses Ergebnis erzeugen", das den Geist fokussiert und die Menge an Code reduziert, die nicht zur Lösung des Ziels beiträgt.

Wenn Sie Code nach den SOLID-Prinzipien (Akronym) schreiben, können Sie später eine Bibliothek ersetzen, wenn Sie die falsche Wahl getroffen haben oder, wie so oft, aus Ihrer Wahl herauswachsen.

Es ist gut, dass Sie diese Art von Frage stellen. Es gibt zu viele Entwickler, die aus verschiedenen Gründen nicht riskieren, "ignorant" zu wirken, wenn sie sich Zeit nehmen, um die richtige Technologie auszuwählen. Machen Sie Fehler früh im Projekt, nicht spät. Experimentieren ist der Schlüssel, keine Verschwendung, also denke ich, dass Sie es richtig machen.

Ian
quelle
2

Ist das Teil der Aglie-Entwicklung? Wie gehen Sie mit unbekanntem Terrain in der Softwareentwicklung um?

Was Sie beschrieben haben, ist nicht agil. Bei der agilen Entwicklung geht es mehr darum, adaptive Planung, evolutionäre Entwicklung und Bereitstellung mit einem zeitgesteuerten iterativen Ansatz zu fördern. Agile fördert eine schnelle und flexible Reaktion auf Veränderungen. Wenn Sie Ihren Code im Verlauf der Entwicklung neu faktorisieren, sind daher einige agile Methoden enthalten.

Der Umgang mit unbekannten Teilen des Projekts beginnt mit der Erfassung der bekannten Anforderungen mit einem hochrangigen Design. Sobald Sie die meisten Komponenten zur Hand haben, können Sie nach der richtigen Lösung suchen. Das heißt, der Aufbau eines kleinen Proof-of-Concept vor der vollständigen Entwicklung ist der Ansatz, den unser Team verfolgt.

Es gibt ein Softwareentwicklungsprinzip namens SOLID . Nach meiner Erfahrung ist die Anwendung auf Probleme immer ein Fortschritt bei der Verbesserung der Codebasis Ihres Projekts.

Yusubov
quelle
2

Abhängig vom Projekt kann es durchaus sinnvoll sein, Ihre technischen Forschungen und Untersuchungen im Rahmen der Entwicklung durchzuführen, wenn Sie alleine an einem kleinen Projekt arbeiten. Und obwohl dies kein Teil von Agile ist, könnte natürlich eine agile Methodik verwendet werden, um dies zu steuern. Dies macht es jedoch sehr schwierig, den Prozess vorherzusagen. Könnte in Ordnung sein, noch schneller, wenn Sie alleine an einem kleinen Projekt arbeiten, das ganz Ihnen gehört, lassen Sie Ihre Anforderungen sich entfalten, während Sie sie lernen. Verwenden Sie dabei gute Prinzipien und seien Sie konsequent, und Sie sollten nicht so viel neu faktorisieren müssen.

Bei der Arbeit verwenden wir Kanban, Scrum und traditionellere Wasserfallansätze. Abhängig vom Projekt finde ich, dass komplexe Entwicklungen mit genau definierten Vorabanforderungen nicht am besten für Agilität geeignet sind, viele werden jedoch anderer Meinung sein.

Bevor wir mit der Arbeit an einem agilen Projekt beginnen (alles andere als das einfachste), erstellen wir eine Dokumentation. Wir haben ein Modell (wenn die Benutzeroberfläche fokussiert ist), eine Reihe von Anforderungen und eine funktionale Spezifikation.

Die Entwicklung wird gebeten, die technische Spezifikation aus der Funktionsspezifikation zu erstellen. Während dieses Prozesses werden wir die Technologie spezifizieren und alle erforderlichen Voruntersuchungen durchführen. Dieser Prozess scheint mir so wichtig zu sein, da er die Möglichkeit bietet, Lücken in den Anforderungen / Funktionsspezifikationen zu erkennen - und den Menschen mit der Erfahrung und dem Systemwissen, um solche Entscheidungen zu treffen, die großen Technologieentscheidungen im Voraus zu ermöglichen.

Das Wesentliche ist jedoch, dass die Funktionsspezifikation eine Liste von Aufzählungspunkten sein kann und die technische Spezifikation normalerweise ein Modell mit einigen Aufzählungspunkten und Technologiesteuerungen ist, in einigen Fällen nur 3 oder 4 Seiten.

Selbst wenn wir ein agiles Projekt ausführen, erstellen wir Dokumentation:

  • Alle Unterlagen sind kostenpflichtig.
  • Das Entwickeln gegen sich bewegende und schlecht definierte Anforderungen auf hoher Ebene ist mit Kosten verbunden.
  • Das richtige Gleichgewicht zu den oben genannten hängt von Ihrem Projekt, der Kultur und den Menschen ab.
  • Wir dokumentieren Just in time, Dokumente sind veraltet.
  • Wir dokumentieren kaum genug / gerade genug.
  • Wir pflegen oder aktualisieren diese Dokumente nicht, wir geben uns nicht viel Mühe. Sie sind klein. Wir erwarten, sie wegzuwerfen.
  • Wir bügeln die großen Unbekannten wie Technologieentscheidungen, trübe Anforderungen und Architektur im Voraus aus.
  • Wir wissen, was wir entwickeln, bevor wir anfangen.
  • Wir vertrauen darauf, dass die Entwickler fundierte Entscheidungen in Bezug auf die Dokumentation treffen und alle Probleme besprechen.
  • Wir legen Wert auf Kommunikation gegenüber Dokumentation. Daher erwarten wir, dass alle Beteiligten häufig kommunizieren.
  • Wir dokumentieren Systeme (Übersicht) nach der Entwicklung, nicht während, nicht vorher.

Sie sehen, es gibt einen kleinen Wasserfall in unserem agilen Prozess.

Wenn Sie alleine arbeiten, erstellen Sie ein Vorabmodell (Diagramm!) Und spielen Sie mit der Technologie und wählen Sie sie aus. Wenn Sie dann dieses Konzept der Anforderungen auf hoher Ebene haben, laufen Sie voran und entwickeln Sie sich auf agile iterative Weise, aber berücksichtigen Sie gute Prinzipien und Konsistenz im Laufe der Zeit und Sie müssen weniger und mehr Faktoren neu faktorisieren.

Wenn jedoch echte Kosten anfallen (kein Hobby), wissen Sie im Allgemeinen, was Sie entwickeln, bevor Sie Code schreiben, aber verschwenden Sie nicht zu viel Zeit damit, Dokumentationen zu schreiben, die schnell überflüssig werden, da Sie Ihre Meinung ändern und sollten Ändern Sie Ihre Meinung während der Entwicklung, wenn Sie besser informiert werden. Und Ihr Projekt könnte den Kurs enorm ändern, aber von einer guten, klar definierten Grundlage ausgehen.

Gavin Howden
quelle
1

So starte ich ungefähr neue Projekte und es hat ziemlich gut geklappt, vorausgesetzt, es handelt sich um kleinere Projekte. Zum Beispiel würde ich diesen Weg nicht gehen, wenn ich ein ORM oder etwas in dieser Größenordnung schreiben würde. Gelegentlich greife ich auf formellere Recherchen zurück, wenn ich wirklich überfordert bin. Aber zum größten Teil fange ich einfach an, Code zu schreiben und zu sehen, was passiert. Sie müssen jedoch darauf vorbereitet sein, viel Code wegzuwerfen, wenn Sie dies tun.

ConditionRacer
quelle