Haben wir die Verantwortung, alten Code zu verbessern?


64

Ich habe einen alten Code durchgesehen, den ich geschrieben habe. Es funktioniert, aber es ist kein großartiger Code. Ich weiß jetzt mehr als damals, also könnte ich es verbessern. Es ist kein aktuelles Projekt, aber es ist aktueller, funktionierender Produktionscode. Haben wir die Verantwortung, zurück zu gehen und den Code zu verbessern, den wir in der Vergangenheit geschrieben haben, oder ist die richtige Einstellung "Wenn er nicht kaputt ist, reparieren Sie ihn nicht"? Meine Firma hat vor ein paar Jahren einen Code-Review-Kurs gesponsert, und einer der wichtigsten Aspekte war, dass er manchmal gerade gut genug ist. mach weiter.

Also, sollten Sie es irgendwann einfach als gut genug bezeichnen und weitermachen oder versuchen, Projekte voranzutreiben, um alten Code zu verbessern, wenn Sie denken, dass es besser sein könnte?


Tun Sie dies in Ihrer Freizeit oder auf dem Firmengelände?
JBRWilkinson

42
In den meisten Fällen liegt Ihre Hauptaufgabe darin, dem Unternehmen einen Mehrwert zu verschaffen . Wenn Sie etwas tun, das sich nicht direkt auf das Endergebnis auswirkt, ist alles andere umsonst. Alter getesteter Arbeitscode ist getesteter Arbeitscode . Berühren Sie ihn, um ihn genau wie eine Vergoldungsübung zu verbessern. Jetzt wird er zu neuem, ungetestetem und damit nicht mehr funktionierendem Code , was keinen Mehrwert für das Endergebnis darstellt.

7
Fragen Sie Ihren Chef, was er von Ihnen erwartet. Sie werden höchstwahrscheinlich aufgefordert, es in Ruhe zu lassen. Nach meiner Erfahrung sollten Codeänderungen nur im Rahmen einer tatsächlichen Lieferung vorgenommen werden. Zufällige Änderungen haben im Laufe der Zeit eine zu große Wahrscheinlichkeit, Fehler einzuführen, was zu lange dauert, um sie zu beheben, da Sie die Änderungen nicht im Blick haben.

1
Fügen Sie einige Kommentare zu möglichen Verbesserungen in der Dokumentation hinzu und lassen Sie es dabei?
James P.

2
Schreiben Sie Einheiten- oder Regressionstests. Ändern Sie den Code nicht, aber ermöglichen Sie es jemandem, später mitzukommen und die erforderlichen Änderungen sicher vorzunehmen, obwohl er mit dem Code nicht vertraut ist.
James Youngman

Antworten:


66

Es sei denn, Sie nehmen Änderungen an diesem "alten Code" vor, um Fehler zu beheben oder Funktionen hinzuzufügen, und ich würde mich nicht darum kümmern, ihn zu verbessern. Wenn Sie es eventuell verbessern möchten, stellen Sie sicher, dass Unit-Tests vorhanden sind, mit denen der Code getestet wird, bevor Sie mit der Umgestaltung beginnen.

Sie können den "alten Code" verwenden, um bessere Methoden zu erlernen. Wenn Sie dies tun, handelt es sich um eine Teilzeit-Lernerfahrung, und Sie sollten nicht erwarten, dass dieser Code das ersetzt, was derzeit von Clients / Kunden veröffentlicht oder bereitgestellt wird.


4
Was ich dachte, ist "Softwarefäule" und Theorie der zerbrochenen Fenster von den pragmatischen Programmierern und den Auswirkungen der Software-Entropie. pragprog.com/the-pragmatic-programmer/extracts/software-entropy
jmq

5
Sofern Sie nicht durch die Umgestaltung von Code, der bereits funktioniert und in der Produktion ist, einen Mehrwert für das Unternehmen schaffen, ist es schwierig, die erforderliche Zeit zu rechtfertigen, um die "Softwarefäule" bei Ihren Vorgesetzten zu beseitigen. Tun Sie dies nur, wenn Sie aktiv an diesem Code arbeiten, da sonst nur die Refactoring-Erfahrung von Nutzen ist, die Sie gewinnen würden.
Bernard

11
@jmquigley, Software verrottet nur, wenn der Quellcode geändert wird, und zerbrochene Fenster wirken sich nur aus, wenn sie gesehen werden. Eine alte Codebasis funktioniert, wenn sie nicht berührt werden muss, so lange wie es die Umgebung zulässt.
Péter Török

2
Versuchen Sie nicht, Fehler in ein Arbeitsprogramm
einzufügen, während

4
Ich denke, Code 'rot' ist eine unglückliche Metapher. Code verrottet nicht, wenn Sie nichts tun, ändert er sich überhaupt nicht. Wenn überhaupt, wird die Code-Arbeit härter - Sie führen Entropie ein, während Sie sie bearbeiten, und Sie können diese Entropie entfernen, indem Sie viel Energie für die Umgestaltung aufwenden (ähnlich wie beim Neugießen / Schmieden)
jk.

32

Überarbeiten Sie die Codebereiche, die Sie am häufigsten ändern müssen . Da Sie diese Bereiche häufig besuchen, verbessert das Refactoring Ihr Verständnis für den Code und die Lesbarkeit, wenn Sie sie erneut besuchen müssen, wohingegen es keinen Grund gibt, Code zu refactor, den niemand mehr sehen wird.

Wenn Sie Codebereiche nur dann umgestalten, wenn Sie sie ändern müssen, gibt dies Ihnen eine gültige Entschuldigung, wenn Ihr Umgestalten eine Regression verursacht . Versuchen Sie natürlich, Ihre Refactorings mit Unit-Tests abzudecken, aber dies ist nicht immer möglich, insbesondere mit Legacy-Code, und Sie sollten damit rechnen, dass große Refactorings von Zeit zu Zeit zu Regressionen führen.

Wenn Sie Features hinzufügen müssen und Ihr Design Sie verlangsamt oder zu Duplikaten führt, müssen Sie den Refactor ausführen . Wenn ich Code entwerfe, kann ich fast nie genau vorhersagen, welche Änderungen in Zukunft erforderlich sein werden. Wenn ich jedoch neue Funktionen hinzufüge, wird der gemeinsam genutzte Code in der Regel umgestaltet. Bis ich einen dritten Feature / Refactoring-Zyklus hinzugefügt habe, zahlt sich mein Refactoring bereits aus und mein gemeinsam genutzter Code ist ziemlich stabil.

TLDR: Refactor nach Bedarf, es besteht keine Verpflichtung.


Könnten Sie genauer sagen, was Sie unter "Refactoring verursacht eine Regression" verstehen? Ist das Refactoring dazu gedacht, das Design Ihrer Software zu verbessern, ohne deren Verhalten zu ändern? Kannst du ein Beispiel geben?
Manfred

3
@ John: Ja, das ist der Zweck des Refactorings: den Code verbessern, aber das Verhalten beibehalten.
Bernard

@John jedes nicht-triviale Refactoring birgt das Risiko, dass sich das Verhalten unbeabsichtigt ändert, insbesondere wenn keine Regressionstests durchgeführt werden.
Garrett Hall,

14

Alles, was Sie tun, hat Kosten. Sie haben nur eine begrenzte Zeit zum Programmieren. Alles, was Sie in der Programmierung tun, sollte mit "Was ist der Vorteil davon?" Verglichen werden. und "Was bringt es, etwas anderes zu tun?"

Wenn Sie die Opportunitätskosten nicht berücksichtigen (Was kostet es, etwas anderes zu tun?), Ist die Qualität kostenlos. Es ist besser, den Code zu verbessern. Du wirst etwas lernen. Es wird besser laufen. Es wird mehr verkaufen.

Die eigentliche Frage ist, was das nächstbeste ist, was Sie mit Ihrer Zeit anfangen können. Und dann müssen Sie Kompromisse eingehen.

Wird es mehr von der Software verkaufen?

Wird es weniger Kopfschmerzen verursachen?

Was wirst du lernen?

Wird es ästhetisch ansprechender?

Verbessert es Ihren Ruf?

Stellen Sie diese Fragen (und alle anderen für Sie relevanten) für diese und andere Aktivitäten in Ihrer Warteschlange. Dies hilft Ihnen bei der Beantwortung, wenn es sich lohnt, sie zu beheben. Diese Kompromisse sind der Grund, warum Wirtschaftlichkeit für Programmierer wichtig ist. Joel hat es vor mir gesagt, und ein alter Mentor hat es mir sogar vor Joel gesagt.

Oder wenn Sie eine einfachere Antwort wünschen, hören Sie einfach auf, fernzusehen, bis Sie den Code festgelegt haben. :-)


4
Aus einem realen Beispiel, das nicht in Software enthalten ist, zu leihen, werden einige Transportunternehmen ihre Mitarbeiter aus verschiedenen Gründen dafür bezahlen, ihre Anlagen zu reinigen und zu polieren, oft, weil dies den Fahrern / Betreibern hilft, Stolz auf "ihre" Einheit aufzubauen, damit sie besser aufpassen davon, und schenken Sie ihm mehr Aufmerksamkeit; Probleme schnell und bequem abwenden. Aus dem gleichen Grund, wenn es Meilen zu machen gibt, steigen Sie in den LKW und fahren Sie ihn und sorgen Sie sich um die Reinigung nach ein paar tausend Meilen (von Küste zu Küste).
JustinC

@justinC - genau! Ihr Beispiel erfasst sowohl einen anderen Grund als auch Opportunitätskosten.
MathAttack

Kosten (oder Wert usw.) sind in der Tat das Schlüsselwort für die richtige Antwort. Es sollte einen Mehrwert für die gesamte Summe bedeuten, auch wenn das Berühren von altem Code dazu führen kann, dass Daten zerstört werden (Wert entfernen), egal wie viel optimierter es auch aussehen mag.
Cregox

6

Ich denke, Sie sollten sich zunächst die Frage stellen, die Sie vermisst zu haben scheinen. Inwiefern ist der Code schlecht? Und damit stellen Sie sich wirklich die folgenden Fragen:

  • Tut der Code nicht das, was er tun soll?
  • Verursacht der Code Probleme bei der Wartung der Software?
  • Ist der Code vollständig in sich geschlossen?
  • Planen Sie, den Code in absehbarer Zeit jederzeit zu aktualisieren oder zu ersetzen?
  • Gibt es ein solides Geschäftsmodell, mit dem Sie den von Ihnen betroffenen Code aktualisieren können?

Wenn es eine Sache gibt, die ich im Laufe der Jahre gelernt habe, ist es, dass Sie es sich nicht leisten können, sich selbst nachträglich zu erraten. Jedes Mal, wenn Sie ein Problem im Code lösen, erfahren Sie etwas und werden wahrscheinlich sehen, wie Ihre Lösung - oder etwas Ähnliches - eine bessere Lösung für ein Problem gewesen sein könnte, das Sie vor Jahren anders gelöst haben. Das ist gut so, denn es zeigt Ihnen, dass Sie aus Ihren Erfahrungen gelernt haben. Die eigentliche Frage ist jedoch, ob der von Ihnen zuvor geschriebene Code wahrscheinlich zu einem Legacy-Problem wird, das mit der Zeit immer schwieriger zu bewältigen ist.

Worüber wir hier wirklich sprechen, ist, ob der Code, der Sie stört, einfach oder schwierig zu warten ist und wie kostspielig diese Wartung im Laufe der Zeit sein dürfte. Dies ist im Wesentlichen eine Frage zur technischen Verschuldung, und ob es sich lohnt, diese Verschuldung mit ein wenig chirurgischer Wartung abzuzahlen, oder ob die Verschuldung klein genug ist, dass Sie sie für eine Weile abrutschen lassen können.

Diese Fragen müssen unbedingt mit Ihrer gegenwärtigen und zukünftigen Arbeitsbelastung verglichen werden und sollten ausführlich mit Ihrem Management und Ihrem Team besprochen werden, um ein besseres Verständnis darüber zu erhalten, wo Ihre Ressourcen investiert werden sollen und ob sich Ihr alter Code lohnt die Zeit, die Sie möglicherweise dafür aufwenden müssen - wenn überhaupt. Wenn Sie ein gutes Geschäftsmodell für die Einführung von Änderungen erstellen können, dann tun Sie dies auf jeden Fall, aber wenn Sie vor dem Drang stehen, Code zu basteln, weil Sie sich für die Art und Weise, wie Sie ihn geschrieben haben, verlegen fühlen, dann schlage ich vor, dass es keine gibt Raum für persönlichen Stolz, wenn es darum geht, alten Code zu pflegen. Entweder funktioniert es, oder es funktioniert nicht, und es ist entweder leicht zu warten oder teuer zu warten, und es ist niemals gut oder schlecht, einfach weil Ihnen die heutige Erfahrung gestern nicht zur Verfügung stand.


5

Auf jeden Fall verbessern sich nicht nur aus Gründen es zu verbessern. Wie andere gesagt haben (und es ist gesunder Menschenverstand), werden wir alle mit der Zeit besser (für einen gewissen Wert von "besser"). Das heißt, die Überprüfung des Codes (entweder formal oder informell) beleuchtet häufig diese Teile und Stücke, von denen wir uns wahrscheinlich gewünscht haben, dass sie nie wieder das Licht der Welt erblicken würden.

Obwohl ich nicht der Meinung bin, dass wir die Verantwortung haben , Code zu verbessern, der nicht grundlegend kaputt ist, unsicher ist oder von Funktionen auf einer veralteten / EOL-Liste abhängt, habe ich in dieser Situation in der Vergangenheit einige Dinge getan :

  • Identifizieren Sie die Mitarbeiter im Team, die wirklich daran arbeiten, den Code zu verbessern, als eine Art Gehirnreinigung oder nette, mundgerechte Aufgabe, die ein Erfolgserlebnis vermittelt, und finden Sie Zeit im Zeitplan, damit sie dies regelmäßig tun können. Ich habe immer mindestens eine dieser Arten von Leuten in einem Team gehabt, und dieser Ansatz kann auch die Moral (oder zumindest die Stimmung) verbessern, wenn wir alle in einer Ruhe- oder Ruhephase sind.

  • Verwenden Sie es als Grundlage für eine Lernübung. Für Praktikanten, Studenten oder neue / jüngere Teammitglieder bietet die Überarbeitung des alten Codes unter Anleitung älterer Teammitglieder die Möglichkeit, mit neuen Teammitgliedern zu kommunizieren, mehr über das System zu verstehen und sich an das Schreiben zu gewöhnen. Aktualisieren von Unit-Tests und Arbeiten mit kontinuierlicher Integration. Es ist wichtig zu beachten, dass diese Übung mit Anleitung durchgeführt wird und klar umrissen ist , um den Code zu verbessern, da er nicht den aktuellen Standards / Normen entspricht.

Also keine Verantwortung, es zu reparieren, aber das alte Zeug kann wirklich nützlich sein. Und Unit Tests und CI sind deine Freunde!


4
Einem Neuling schlechten Code zu geben, ist das schlimmste Anti-Muster des Projektmanagements, sie sehen es und denken, es ist richtig und duplizieren es einfach. Schlechter Code verbreitet sich wie Krebs, weil schlechte Ratschläge wie dieser vorliegen.

1
@JarrodRoberson Danke, dass Sie darauf hingewiesen haben, was ich hätte deutlicher machen sollen. Ich habe meine Antwort dahingehend bearbeitet, dass ich dies ganz speziell als Teil einer Lernerfahrung mache und sie mit einem Mentor zusammenarbeiten. Es ist keine Situation, in der man sie in die Tiefe wirft.
Jcmeloni

Ich denke immer noch, dass es so formuliert ist, dass die Leute lesen werden: "Gib es den Neulingen - Praktikanten und Studenten, besonders." und hör auf zu lesen, damit du es verstehst. Wenn es so formuliert wäre, als es mit einem Senior-Mitglied und einem Junior-Mitgliedspaar begann, das den XP-Stil programmiert, oder so ähnlich, wäre es vielleicht nicht so schlimm. Ich habe Probleme mit den Vergoldungsaspekten und habe das Risiko hinzugefügt, Dinge zu ändern, um sie auch beim ersten Aufzählungspunkt zu ändern.

1
Code-Überprüfungen dienen dazu, zu verhindern, dass fehlerhafter Code in die Versionskontrolle gelangt. Sie dienen nicht dazu , fehlerhaften Code nachträglich zu identifizieren. Dann ist es viel zu spät.

@JarrodRoberson Vielen Dank, dass Sie auf die Probleme hingewiesen haben, die Sie mit meiner vagen und leider möglicherweise irreführenden Sprache hatten. Ich habe mehr Änderungen vorgenommen und stehe zu dem, was jetzt da ist.
Jcmeloni

2

Nicht unbedingt. Wenn Sie jedoch eine Codewartung durchführen und zufällig auf etwas stoßen, das besser sein könnte, können Sie dies ändern, sofern Sie über die entsprechenden Komponententests verfügen, um sicherzustellen, dass Sie keine Regression erstellt haben.

Wenn es solche Tests nicht gibt und Sie nicht sicher sind, ob sie sich genau so verhalten, wie sie sollten, sollten Sie sie lieber in Ruhe lassen.


4
Ich würde hinzufügen "und wenn es nicht viel Zeit zum geplanten Zeitplan hinzufügt"
HLGEM

2

Aus der Sicht eines Ingenieurs würde ich sicher sehr gerne an altem Code arbeiten, bis er nicht mehr verbessert werden kann. Aber gibt es ein Geschäftsmodell dafür? Letztendlich trägt der Kodex zur Rentabilität Ihres Arbeitsplatzes bei. Wenn nicht, lass es einfach.

Es gibt eine große Einschränkung, wenn Sie durch die Verbesserung des Codes verhindern, dass ein Fehler auftritt (denken Sie an die großen Y2K-Bälle hier oben). und diskutieren Sie die Konsequenzen der Verbesserung des Codes.


2

Was mich betrifft, kann die Frage umformuliert und verallgemeinert werden: "Warum sollte jemand zusätzliche Ressourcen ausgeben (Zeit, Geld, Mentales usw.), wenn dieses konkrete Stück Code jetzt gut funktioniert? Ist es nicht eine Verschwendung von Ressourcen? ? "

Jedes Mal, wenn ich einen Legacy-Code finde, denke ich über verschiedene Dinge nach, die mir wichtig erscheinen.

  1. Was soll ich ändern?
  2. Muss ich diesen Code unterstützen? Wie schnell kann es passieren (nahe / ferne Zukunft)?
  3. Ist dieser Code komfortabel genug, um damit zu arbeiten? (Jetzt sofort)
  4. Kann ich sicher sein, dass alle von mir vorgenommenen Änderungen sicher sind? Verschiedene Tests helfen in der Regel bei der Beantwortung dieser Frage.
  5. Welche Konsequenzen kann ich haben, wenn ich bei der Änderung des Codes einen Fehler mache? Ist es möglich, meine Änderungen schnell rückgängig zu machen? Wird es Zeitverschwendung sein?
  6. ...

Eigentlich sollten Sie sich viele Fragen stellen. Es gibt keine vollständige und endgültige Liste. Nur Sie und wahrscheinlich Ihre Teamkollegen können die Antwort finden.

PS Mir ist aufgefallen, dass ich den Code sehr oft umschreibe, während mein Freund und Teamkollege dazu neigen, ihn unangetastet zu lassen. Das liegt daran, dass wir die genannten Fragen unterschiedlich beantworten. Und ich muss sagen, dass wir sie sehr oft falsch beantworten ... weil wir die Zukunft nicht vorhersagen können.


2

Muss Microsoft Windows aktualisieren? Müssen sich alle * nix Distros weiterentwickeln? Oder ein praktischeres Beispiel: Fährt jeder noch Autos aus den 1970er Jahren?


1

Normalerweise können Sie Code beim zweiten Mal besser schreiben. Sie haben mehr über die Domäne gelernt, indem Sie sie ursprünglich geschrieben haben.

Es gibt keine einfache Antwort, ob es sich lohnt, sich neu zu orientieren. Im Allgemeinen sollten Sie dies nicht tun, es sei denn, a) es ist eine gute Lernübung für Sie oder b) Sie würden auf lange Sicht mit besserem Code Zeit sparen. Denken Sie daran, dass bei jeder Änderung Fehler auftreten können.

Als Randnotiz würde ich Unit-Tests nachdrücklich befürworten. Es ist sehr einfach, Refracoring zu verarschen, besonders wenn Sie kein aktuelles Verhalten haben, das mit automatisierten Pausen deutlich gekennzeichnet ist.


1

Ich glaube, dass wir die Verantwortung haben, den bestmöglichen Code zu schreiben, den wir heute können. Das bedeutet, dass wir alles verwenden, was wir in der Vergangenheit gelernt haben, und uns weigern, Abkürzungen in unserem Design vorzunehmen. Wenn aufgrund von Termindruck etwas reduziert wird, sollte man meiner Meinung nach nicht einmal an die Qualität unserer Software denken, zum Beispiel an die nette kleine animierte Büroklammer ...

Wenn Sie jetzt arbeiten und feststellen, dass der Code, mit dem Sie interagieren müssen, nicht in dem Maße geschrieben ist, wie Sie gerade schreiben können, ist es sinnvoll, ihn zu korrigieren, WENN Sie es auf kontrollierte methodische Weise tun können. Ich persönlich habe nur sehr wenig Erfahrung mit dieser Art von Refactoring, wie jeder (fast jeder?). Ich habe das Ganze ausprobiert "Lasst uns einfach alles ändern und beten, dass es funktioniert" und bin so schlimm genug durchgefallen. Ich würde vorschlagen, sich Martin Fowlers Diskussionen (entweder sein Buch oder einen von vielen Artikeln ) zu diesem Thema anzuschauen. Er scheint den größten Teil der aktuellen Überlegungen zu diesem Prozess inspiriert zu haben.

Natürlich kann es vorkommen, dass Sie den Code nicht wie gewünscht bereinigen können. Joel Spolsky hat einen Artikel darüber geschrieben, warum Sie möglicherweise ein paar Wochen darauf verwenden möchten, Ihren Code einfach umzugestalten. Lesen Sie es hier und ja, es ist ein bisschen alt, aber ich denke, die Informationen sind immer noch relevant.

Ich hoffe das hilft


1

Ich habe das Gefühl, dass das Umgestalten / Verbessern von altem Code den Programmierer selbst definiert. Wenn Sie den Code, den Sie vor einem Jahr geschrieben haben, verbessern möchten, werden nur Ihre Fortschritte angezeigt. Wenn die Anwendung dadurch verbessert wird und Sie über die Fähigkeit, die Zeit und die Genehmigung zur Verbesserung verfügen, können Sie dies tun.


1

Besser / verbessert ist ein Mehrachsenvergleich. Denken Sie, Sie können es schneller, kleiner, ressourcenschonender, lesbarer, nützlicher, präziser, flexibler, allgemeiner und auf mehr Systemen lauffähig machen und die Abhängigkeit von einem separaten Produkt beseitigen?

Warum sollte Ihr Unternehmen Sie dafür bezahlen, diesen Code neu zu schreiben, anstatt neuen Code zu schreiben oder einen anderen Code zu schreiben?

Sie sollten Verbesserungen vornehmen, wenn sich eine Gelegenheit bietet. Gelegenheit bedeutet jedoch, dass Sie entweder bereits am Code arbeiten oder einen geschäftlichen Grund für die Änderung angegeben haben.

Wenn eine Änderung in der Produktion vorgenommen wird, besteht die Gefahr, dass Dinge kaputt gehen (Einheits- und Funktionstests verringern diese Chance nur, sie beseitigen sie nicht) und sollten nur durchgeführt werden, wenn der erwartete Nutzen das Risiko überwiegt.

Was ist ein weiterer zu berücksichtigender Punkt? WOLLEN Sie diese Änderung auf die Produktion oder einfach auf die Entwicklungsbranche übertragen? Die Balken für die beiden Szenarien sind völlig unterschiedlich. Wenn es nur in der Entwicklungsbranche eingesetzt wird und möglicherweise nie in Produktion geht, bedeutet Gelegenheit im Grunde, dass Sie sich den Code aus irgendeinem Grund ansehen und es nicht zeitaufwändig ist, dies zu tun. Es kann nach Bedarf überprüft werden, falls jemals ein Push stattfinden sollte, und es kann weggelassen werden, wenn es zu diesem Zeitpunkt als ungerechtfertigt angesehen wird. Wenn es andererseits jetzt zur Produktion geht, wie ich oben sagte, müssen Sie prüfen, ob diese Änderung die Kosten wert ist: in Bezug auf die Zeit, die für den Push aufgewendet wurde, und die Vorteile der Verwendung des neuen Codes.


Änderungen des Produktionscodes, die nicht für die Produktion vorgesehen sind? Aber werden in der Entwicklungsbranche gehalten? hmm. Glaube nicht, dass ich das akzeptieren würde. Es wird nur dazu dienen, die spätere Entwicklung zu verwechseln und zu verschärfen, da niemand sicher sein kann, ob es (erneut) geändert werden sollte oder nicht, um anderen Änderungen zu entsprechen, die für die Produktion vorgesehen sind.
Marjan Venema

@MarjanVenema: Als die Entwicklung gestoppt wurde, sollten alle Zweige identisch sein. Wenn Sie später etwas sehen, das verbessert werden kann, aber nicht verbessert werden muss, verbessern Sie es im Entwicklungszweig und lassen Sie es dort, bis die Entwicklung wieder aufgenommen und ein neuer Push durchgeführt wird.
Jmoreno

Ah, ok, ich verstehe. Für mich bedeutet das, dass es erst später für die Produktion bestimmt ist. Und es ist ein ziemliches Risiko, wenn Sie nicht sicherstellen, dass in Ihrem Issue-Tracking-System ein begleitendes Problem vorliegt, sodass die Tester / QA-Abteilung auch Ihre "Verbesserungen" in den Griff bekommen. Andernfalls werden sie es ungetestet in die Produktion schaffen, da sie mit anderen Änderungen mitfahren.
Marjan Venema

@MarjanVenema: Vielleicht hätte ich sagen sollen, dass ich die Produktion sofort aufnehmen will. Wenn Sie sich sicher sind, dass die Änderung niemals durchgeführt werden würde, nehmen Sie die Änderung nicht vor. Wenn OTOH, sind Sie unsicher, aber die Änderung ist einfach durchzuführen und Sie sind bereits da ... Nehmen Sie die Änderung vor. Was das Verfolgen und Testen betrifft, sollte dies durch "Überprüfung nach Bedarf" abgedeckt werden.
Jmoreno

hmm, ich denke, ich würde mich dafür entscheiden, die Änderung nicht vorzunehmen, es sei denn, sie steht in direktem Zusammenhang mit dem, woran ich arbeite. Und da wir eine Branche pro Ausgabe haben, weiß ich immer, wann (welche Veröffentlichung) etwas in Produktion gehen wird. Ich bin außerdem der Meinung, dass jede vorgenommene Änderung getestet und nicht "nur" nach Bedarf überprüft werden muss. Die Einschätzungen der Menschen darüber, was ein Risiko darstellt, sind unterschiedlich, und ein zweites Augenpaar geht niemals in die Irre. Andererseits arbeite ich hauptsächlich mit serverseitigem Code, bei dem Änderungen die an Clients zurückgegebenen Ergebnisse geringfügig beeinflussen können. Die Risikobewertung für Änderungen am clientseitigen Code ist möglicherweise einfacher.
Marjan Venema

1

Eine gute Faustregel ist, dass Sie, wenn Sie Zeit brauchen, um zu verstehen, was der Code tut, und wenn diese Zeit durch einige gut ausgewählte Refactorings in Zukunft verkürzt werden könnte, die Bedürfnisse des Unternehmens und Ihres Teams bedienen diese Schritte unternehmen.

Wenn der Code nicht von Ihrer Analyse profitiert, wenn die Feldnamen nicht Ausdruck der Codeabsicht sind und die Methoden nicht in lesbare Abschnitte unterteilt wurden, hat das Unternehmen etwas Wertvolles verloren: Ihren Kenntnisstand. Mit Tools wie Visual Studio und ReSharper sind solche Refactorings sicher, logisch neutral und von potenziell hohem Wert für die zukünftige Produktivität und das Vertrauen der Entwickler.

Wie Onkel Bob Martin sagt: "Verlassen Sie den Campingplatz immer sauberer, als Sie ihn vorgefunden haben."


1

Dies ist eine Frage, die Sie dem Management Ihres Unternehmens stellen sollten.

Haben Sie die Zeit und die Ressourcen, um zurück zu gehen und Änderungen am alten Code vorzunehmen?

Haben Sie die Zeit und die Ressourcen, um ein QA-Team zu testen, was Sie geändert haben, um sicherzustellen, dass es nicht kaputt ist?

Ich bin zuvor in diese Falle geraten, als ich mich in einem Modul befand, das einen Fehler behebt, und habe gesehen, wie ich oder jemand anderes einen ineffizienten oder ineleganten Code geschrieben habe, ihn geändert und am Ende mehr Probleme zu lösen gehabt, als wenn ich nur einen Fehler behoben hätte Der Fehler, den ich beheben sollte.


0

Es hängt davon ab, ob.

Wenn der fragliche Code wirklich kaputt ist und Fehler enthält, die zwangsläufig an einer Stelle auftauchen (z. B. ein Zähler, der irgendwann überläuft und böse Probleme verursacht), lohnt es sich, diese zu beheben - aber wenn Sie Setzen Sie alle möglichen Sicherheitsvorkehrungen in Kraft, um neue Fehler zu vermeiden: Stellen Sie sicher, dass Sie aussagekräftige Komponententests haben, die alles abdecken, was Sie berühren, lassen Sie alle Änderungen von einer kompetenten Person überprüfen, bestehen Sie auf gründlichen Tests, und stellen Sie sicher, dass Sie zu den alten zurückkehren können Sie können die Daten jederzeit sichern, bevor Sie in die Produktion gehen, zuerst in einer Akzeptanzumgebung bereitstellen und sie von tatsächlichen Benutzern testen lassen usw. Sie sollten auch die Genehmigung einholen, bevor Sie fortfahren: Wenn der Fehler wirklich eine Zeitbombe ist und Ihr Manager ist etwas kompetent,Sie können ihn / sie davon überzeugen, dass Sie das Problem beheben (und wenn Sie keine Genehmigung erhalten, ist dies möglicherweise ein Zeichen dafür, dass Sie sich irren).

OTOH, wenn Ihre Beschwerde nur ein Mangel an Code-Eleganz ist, dann trauen Sie sich nicht, sie anzufassen. Es leistet seit einiger Zeit treue Dienste in der Produktion, eine Änderung des Codes würde Sie nur zufriedenstellen, aber keinen Mehrwert schaffen, und wie bei jeder Änderung besteht die Gefahr, dass Sie etwas kaputt machen. Selbst wenn Sie dies nicht tun, ist Ihre Zeit wertvoll (im wahrsten Sinne des Wortes: Sie werden für das bezahlt, was Sie tun, und jede Minute Ihrer Zeit kostet Geld), und da Sie keinen tatsächlichen Wert hinzufügen, wäre dies eine Änderung ein Nettoverlust für das Unternehmen und das Projekt.

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.