Wie viele Details müssen in die erste Iteration des Projekts eingefügt werden?


15

Ich habe gerade ein neues persönliches Projekt (Python) gestartet und schreibe, was einem "groben Entwurf" des Programms gleichkommt, dem Minimum, das erforderlich ist, um das zu tun, was ich tun möchte. Ich füge noch keine umfangreichen Fehler- / Ausnahmebehandlungs- oder ästhetischen UI-Elemente hinzu (auch wenn ich weiß, dass diese Dinge letztendlich benötigt werden), und die Dokumentation ist gerade ausreichend, um mir in Zukunft zu helfen, zu sehen, was ich getan habe.

Ist es gegen einen bestimmten Grundsatz des Projektdesigns / -managements, so hart anzufangen? Ich bin ein Wissenschaftler, kein Programmierer, daher bin ich in diesen Dingen nicht auf dem neuesten Stand. Die Hauptfrage ist also, ob es einen Konsens darüber gibt, wo man zwischen den beiden Extremen von:

  1. Schreiben Sie von Anfang an gründlichen und qualitativ hochwertigen Code mit der gesamten Ausnahmebehandlung, von der Sie wissen, dass Sie sie letztendlich benötigen.

  2. Schreiben Sie von Anfang an einen minimal arbeitenden Rohentwurf und füllen Sie später alle Details aus.

Verwandte Frage: Wann ist es in Ordnung, die "Ordentlichkeit" des Designs zu opfern, um ein Projekt fertigzustellen?


1
Hinweis für potenzielle Antwortende: Das OP fragt speziell, wie die Codequalität gegen die Entwicklungsgeschwindigkeit in den (vermutlich) frühen Iterationszyklen eines Projekts abgewogen werden kann. Die Frage ist nicht, ob das Endprodukt von hoher Qualität sein soll (Robus-Fehlerbehandlung usw.), sondern wann der Prototyp beginnen soll, Code von hoher Qualität aufzunehmen oder in ihn umzuwandeln.
Lilienthal

Antworten:


10

Es gibt keine einheitliche Antwort, da dies ausschließlich vom Projekt abhängt. Wir müssen hier über zwei Dinge nachdenken. Was ist Ihr letztendliches Ziel? Wie erwartest du es zu erreichen?

Endresultat

Schreiben Sie Mars Orbiter-Steuerungssoftware? Dann stellen Sie besser sicher, dass Sie den bestmöglichen Code schreiben. Stellen Sie sicher, dass jede Ausnahme in einer vernünftigen Angelegenheit behandelt wird.

Schreiben Sie ein Programm, das nur von Ihnen ausgeführt wird und von Zeit zu Zeit nur manuell ausgeführt wird? Dann kümmern Sie sich nicht um Ausnahmen. Kümmere dich nicht um schwere Architektur. Bringen Sie es an den Punkt, an dem es für Sie funktioniert.

Wie erwartest du es zu erreichen?

Machst du eine schwere Wasserfallentwicklung, bei der du viel Zeit damit verbringst, herauszufinden, was benötigt wird, und dann wirst du monatelang losziehen und dich weiterentwickeln? Wenn ja, dann möchten Sie die oben genannte Zielqualität ziemlich früh erreichen. Planen Sie Ihre gesamte Fehlerprüfungsinfrastruktur zu Beginn.

Führen Sie eine hochagile Entwicklung durch, bei der Sie ein oder zwei Wochen lang etwas zusammenstellen, was dann den Interessengruppen gezeigt wird, die unter Umständen radikale Überarbeitungen verlangen, und bei der Sie erwarten, dass Sie in der Lage sind, über viele Sprints von 1 bis 2 Wochen zu iterieren bis du das Ziel getroffen hast? Dann ist es vielleicht besser, wenn Sie etwas zum Laufen bringen, das aber schnell zerbrechlich ist, und nur Gürtel und Hosenträger hinzufügen, wenn sich die Produktanforderungen verfestigen.

Wenn Sie die Kontrolle über den Wasserfall oder die agile Entscheidung haben (was eigentlich ein Kontinuum und keine binäre Entscheidung ist), treffen Sie diese Entscheidung auf der Grundlage der erwarteten Änderung. Wenn Sie sicher sind, dass Sie genau wissen, wie das Endergebnis aussehen wird, ist der Wasserfall die beste Wahl. Wenn Sie nur eine vage Vorstellung davon haben, womit Sie enden müssen, ist Agile Ihre beste Wahl. (Agile ist heutzutage populärer, nicht weil es von Natur aus besser ist, sondern weil die zweite Situation weitaus häufiger vorkommt.)

Finden Sie jetzt Ihre eigene Antwort

Für die meisten liegt die Antwort irgendwo in der Mitte. Beantworten Sie beide Fragen zu Ihrem Projekt, und es sollte Sie in eine grundlegende Richtung führen.

Ich kann das für mich selbst sagen, wenn ich oft einmalige Skripte schreibe, die miserabel gestaltet sind und keine Fehler bei der Prüfung haben. Ich kümmere mich auch um Produktionscode, wo Fehlerbehandlung und Architektur große Aufmerksamkeit erhalten. Es hängt alles davon ab, was Sie tun.

Eine letzte Einschränkung: Wenn Sie sich für einmalige Skripte entscheiden, die schnell und einfach ausgeführt werden können, stellen Sie sicher. Leider kommt es häufig vor, dass schnelle und schmutzige Skripte, die etwas Interessantes tun, in eine breite Verwendung gebracht werden, wenn andere sie bemerken. Stellen Sie sicher, dass in diesem Fall Zeit zum Aushärten zur Verfügung steht.


Sehr hilfreiche Informationen! Meins ist ein kleines Projekt, das für den Lebensunterhalt von niemandem entscheidend ist, und ich möchte bald ein Feedback zu einem Minimal-Arbeitsmodell, um ein Gefühl dafür zu bekommen, wie sich die Menschen über die Gesamtstruktur fühlen. Ich denke, ein grober Entwurf ist in Ordnung, aber Ihr letzter Punkt ist ausgezeichnet: Eine andere Befürchtung ist, dass ich einen Entwurf fertig stelle, aber dann niemals die Verbesserungen vornehme, die ich vornehmen müsste, um ihn auf das Niveau einer guten Programmierung zu bringen (im Gegensatz zu "ihm") funktioniert gerade noch "programmieren").
Neuronet

1
@neuronet: Manchmal reicht die "es funktioniert kaum" Robustheit aus. Eine Möglichkeit, darüber nachzudenken, besteht darin, die Frustration bei der Arbeit mit der Software mit der erforderlichen Robustheit zu vergleichen. Je frustrierender die Probleme mit der Software sind, desto wichtiger ist es, dass sie gelöst werden.
Bart van Ingen Schenau

11

Alle Konzepte und Muster für Software-Design und -Codierung entstehen als Reaktion auf ein Problem. Das Muster oder Konzept ist eine Lösung für dieses Problem. Im Laufe der Zeit werden einige Muster als bevorzugte Lösungen "bekannt", da sie das Problem auf eine Weise lösen, die bestimmte Anforderungen an Konsistenz, Vertrautheit, Leistung, Wartbarkeit usw. erfüllt.

Daraus folgt, dass Sie das Muster nicht benötigen , wenn das Problem, das das Softwaremuster lösen soll, in Ihrer speziellen Software nicht vorhanden ist. Darüber hinaus müssen alle Diskussionen darüber, welche Muster Ihre Software möglicherweise benötigt, auch detaillierte Diskussionen über Ihre vorgeschlagene Software beinhalten: Was soll sie tun? Welches Problem löst es? Wie viele Benutzer wird es geben? Werden die Benutzer in irgendeiner Weise Daten austauschen? Und so weiter.

Das Problem, das Ausnahmen lösen sollen, ist, wenn etwas passiert, woran der Code nichts ändern kann. Ein Beispiel wäre eine Datei / Öffnen-Operation, bei der ein Dateiname angegeben wird, der auf dem Speichermedium nicht vorhanden ist. Ausnahmen geben dem Code die Möglichkeit, dem Anrufer zu sagen: "Es ist etwas passiert, das mich daran hindert, fortzufahren, und ich kann nichts dagegen tun, also gebe ich auf." Wenn in Ihrem Code keine Stellen vorhanden sind, an denen solche Bedingungen vorliegen, benötigen Sie keine Ausnahmen. Oder Sie können einfach einen Fehlercode zurückgeben und die Ausnahme insgesamt vermeiden.

Wenn Sie Erfahrung sammeln, lernen Sie Softwaremuster kennen und erfahren, wann ihre Verwendung angemessen ist. Sie wissen auch, wie viel Vorab-Design Sie benötigen. Auch dies hängt ganz von der Anwendung ab, die Sie schreiben. Kleine Dienstprogramme werden grundsätzlich anders geschrieben als große Unternehmensanwendungen, mit anderen Worten.


Gute Punkte: Ich habe in meiner Frage klarer gemacht, dass ich Dinge, die ich weiß (basierend auf anderen Projekten), die ich letztendlich in einem abgeschlossenen Projekt brauche, aufschiebe.
Neuronet

Ich hoffe, ich habe klargestellt, dass Sie diese Dinge auch dann nicht brauchen, wenn Sie sie kennen, wenn Sie sie nicht brauchen.
Robert Harvey

4

Hierfür gibt es einen sehr einfachen und praktischen Ansatz, der für eine Vielzahl kleiner bis mittlerer Projekte geeignet ist. Auch wenn es bei Mars Explorers wahrscheinlich nicht gut funktioniert.

Ermitteln Sie zunächst, was das System tun soll, und notieren Sie sich die einzelnen Funktionen. Dies kann so raffiniert sein wie ein User Story Board oder so einfach wie ein paar Aufzählungszeichen, die auf einem Blatt Papier vor Ihnen notiert sind. Aber es ist wichtig, dass Sie wissen, was Sie wollen.

Erstellen Sie auf dieser Grundlage den allgemeinen Aufbau des Systems. Auch hier handelt es sich häufig nur um eine kurze Darstellung der verschiedenen Klassen / Module und ihrer Beziehung zueinander, die jedoch so komplex sein kann wie ein gesamtes Dokument. Wichtig ist, dass Sie eine Vorstellung davon haben, wie Sie das System implementieren werden. Aber dies wird wahrscheinlich verfeinert, wenn Sie daran arbeiten. Versuchen Sie also nicht, komplex und detailliert vorzugehen.

Aus all diesen Funktionen wird herausgearbeitet, was die wichtigsten Dinge sind, die das Programm tun muss - die Kernfunktionen.

Implementieren Sie sie dann einzeln. Das Wichtigste dabei ist nun, dass sichergestellt wird, dass nach der Implementierung einer Funktion diese ausgeführt wird und vollständig funktioniert. Im Idealfall wird dies von einem Komponententest begleitet, der sicherstellt, dass sie weiterhin funktioniert. Normalerweise gehe ich davon aus, dass ich so beschäftigt sein werde, dass ich keine Zeit mehr habe, auf das Feature zurückzukommen und es zu beheben.

Sobald die Kernfunktionen implementiert sind, versuche ich im Allgemeinen, das System so nah wie möglich an der Produktionsumgebung einzusetzen. Dies gibt Ihnen a) alle Fehler, die Sie möglicherweise früher übersehen haben, und b) Sie erhalten eine gute Vorstellung von der Priorität der nächsten Funktionen.

Anschließend können Sie die verbleibenden Funktionen nach Bedarf weiter implementieren.

Codequalität im Vergleich zu Funktionen

In Anbetracht des oben Gesagten neige ich dazu, Features der Codequalität vorzuziehen, wenn ich eine Frist setzen muss. Einfach deshalb, weil mein Management davon ausgeht, dass etwas erledigt ist, wenn ich es erledige, zumindest in meinem Tätigkeitsbereich. Und dass sie mir die nächste Aufgabe geben können. Ich habe nicht viel Zeit, um Code nachträglich schöner zu machen.

Was ist nun mit der Ausnahmebehandlung?

Wenn Sie dies nicht sofort implementieren möchten, können Sie dies einfach als eine weitere Funktion in der Liste auflisten. Und wenn Sie dazu kommen, können Sie das umsetzen. Aber höchstwahrscheinlich gibt es in Ihrem Fall viele andere Dinge, die zuerst wichtiger sind.

Es gibt jedoch eine Mindestanforderung für Ausnahmen: Stellen Sie sicher, dass der Benutzer benachrichtigt wird, wenn etwas schief geht - egal wie hässlich die Ausgabe sein mag. Schlucke keine Ausnahmen irgendwo hin.


1
"Ich gehe normalerweise davon aus, dass ich so beschäftigt sein werde, dass ich keine Zeit mehr haben werde, auf die Funktion zurückzukommen und sie zu beheben." Das ist die Sorge, die ich habe, die ich hätte erwähnen sollen. Ich bin froh, dass du es erwähnt hast und für den hilfreichen Beitrag.
Neuronet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.