Ich glaube fest an die Pfadfinderregel :
Überprüfen Sie ein Modul immer sauberer, als Sie es ausgecheckt haben. "Egal, wer der ursprüngliche Autor war, was wäre, wenn wir uns immer bemühen, das Modul zu verbessern, egal wie klein es ist. Was wäre das Ergebnis? Ich denke, wenn wir Alle folgten dieser einfachen Regel, wir würden das Ende der unaufhaltsamen Verschlechterung unserer Softwaresysteme sehen, stattdessen würden unsere Systeme im Laufe der Entwicklung immer besser werden und wir würden eher sehen, dass sich Teams um das System als Ganzes kümmern als nur Einzelpersonen, die sich um ihren eigenen kleinen Teil kümmern.
Ich bin auch ein großer Anhänger der verwandten Idee des Opportunistischen Refactorings :
Obwohl es Orte für geplante Umgestaltungsbemühungen gibt, ziehe ich es vor, das Umgestalten als opportunistische Aktivität zu fördern, die immer und überall durchgeführt wird, wo Code bereinigt werden muss - von wem auch immer. Dies bedeutet, dass jemand zu jeder Zeit einen Code sieht, der nicht so klar ist, wie er sein sollte. Er sollte die Gelegenheit nutzen, ihn genau dort zu beheben - oder zumindest innerhalb weniger Minuten
Beachten Sie insbesondere den folgenden Auszug aus dem Refactoring-Artikel:
Ich bin vorsichtig mit Entwicklungspraktiken, die Reibungen für opportunistisches Refactoring verursachen. Meiner Meinung nach tun die meisten Teams nicht genug Refactoring. Daher ist es wichtig, auf alles zu achten, was die Leute davon abhält, es zu tun. Um dies zu vermeiden, sollten Sie sich darüber im Klaren sein, wann immer Sie sich von einem kleinen Refactoring entmutigt fühlen. Eines, von dem Sie sicher sind, dass es nur ein oder zwei Minuten dauert. Jede solche Barriere ist ein Geruch, der eine Unterhaltung auslösen sollte. Machen Sie sich also eine Notiz über die Entmutigung und bringen Sie sie mit dem Team in Verbindung. Zumindest sollte dies bei Ihrer nächsten Retrospektive besprochen werden.
Wo ich arbeite, gibt es eine Entwicklungspraxis, die starke Reibung verursacht - Code Review (CR). Immer wenn ich etwas ändere, das nicht im Rahmen meiner "Aufgabe" liegt, werde ich von meinen Gutachtern zurechtgewiesen, dass ich die Änderung schwieriger zu überprüfen mache. Dies gilt insbesondere dann, wenn es sich um ein Refactoring handelt, da dies den Vergleich von "zeilenweisen" Unterschieden erschwert. Dieser Ansatz ist hier der Standard, was bedeutet, dass opportunistisches Refactoring selten durchgeführt wird und nur "geplantes" Refactoring (das in der Regel zu wenig, zu spät ist) stattfindet, wenn überhaupt.
Ich behaupte, dass sich die Vorteile lohnen und dass drei Rezensenten etwas härter arbeiten werden (um den Code vorher und nachher tatsächlich zu verstehen, anstatt sich den engen Umfang der geänderten Zeilen anzusehen - die Rezension selbst wäre allein schon deswegen besser ), damit die nächsten 100 Entwickler, die den Code lesen und warten, davon profitieren. Wenn ich diese Argumentation meinen Reviewern vorstelle, geben sie an, dass sie kein Problem mit meinem Refactoring haben, solange es nicht in derselben CR enthalten ist. Ich behaupte jedoch, dass dies ein Mythos ist:
(1) Meistens fällt Ihnen erst mitten in Ihrem Auftrag ein, was und wie Sie umgestalten möchten. Wie Martin Fowler es ausdrückt:
Wenn Sie die Funktionalität hinzufügen, stellen Sie fest, dass ein Teil des Codes, den Sie hinzufügen, eine Verdoppelung mit einem vorhandenen Code enthält. Sie müssen daher den vorhandenen Code überarbeiten, um die Dinge zu bereinigen Besser, wenn die Interaktion mit vorhandenen Klassen geändert wurde. Nutzen Sie diese Gelegenheit, bevor Sie sich für erledigt halten.
(2) Niemand wird Sie positiv betrachten, wenn Sie CRs "refactoring" veröffentlichen, die Sie eigentlich nicht tun sollten. Ein CR hat einen gewissen Aufwand und Ihr Manager möchte nicht, dass Sie Ihre Zeit mit dem Refactoring verschwenden. Dieses Problem wird minimiert, wenn es mit der Änderung gebündelt ist, die Sie durchführen sollen.
Das Problem wird durch Resharper noch verschärft, da jede neue Datei, die ich der Änderung hinzufüge (und ich kann nicht im Voraus genau wissen, welche Dateien sich ändern würden), normalerweise mit Fehlern und Vorschlägen übersät ist - die meisten davon sind genau richtig und absolut verdient Festsetzung.
Das Endergebnis ist, dass ich schrecklichen Code sehe und ihn einfach dort lasse. Ironischerweise habe ich das Gefühl, dass das Korrigieren eines solchen Codes nicht nur mein Ansehen verbessert, sondern es tatsächlich senkt und mich als den "unkonzentrierten" Kerl auszeichnet, der Zeit damit verschwendet, Dinge zu korrigieren, die niemand interessiert, anstatt seine Arbeit zu erledigen. Ich fühle mich schlecht dabei, weil ich schlechten Code wirklich verachte und es nicht ertrage, ihn anzusehen, geschweige denn von meinen Methoden abzurufen!
Irgendwelche Gedanken darüber, wie ich diese Situation beheben kann?
your manager doesn't want you to "waste your time" on refactoring