Evolution der Codierungsstandards, wie gehen Sie damit um?

12

Wie gehen Sie in einem Projekt für die vorhandene Codebasis mit der Evolution der Codierungsstandards / Styleguides um? Nehmen wir an, jemand in Ihrem Team hat einen besseren Weg zur Objektinstanziierung in der Programmiersprache gefunden. Es ist nicht so, dass die alte Art schlecht oder fehlerhaft ist, es ist nur so, dass die neue Art weniger wortreich ist und sich viel eleganter anfühlt. Und alle Teammitglieder mögen es wirklich. Würden Sie den gesamten vorhandenen Code ändern?

Angenommen, Ihre Codebasis umfasst mehr als 500.000 Codezeilen. Möchten Sie trotzdem den gesamten vorhandenen Code ändern? Oder würden Sie nur neuen Code an den neuen Standard halten lassen? Grundsätzlich die Konsistenz verlieren?

Wie gehen Sie mit der Entwicklung der Codierungsstandards in Ihrem Projekt um?

Ward Bekker
quelle

Antworten:

16

Es gibt Codierungsstandards, um Teams produktiver zu machen. Theoretisch erleichtern sie das Verstehen, Ändern und Testen von Code. In der Praxis können sie eine gefährliche Menge an Metaarbeit erzeugen. Teams schreiben vorhandenen Code immer wieder neu, um die korrekteste und eleganteste Lösung zu finden. Leider scheint das Meta-Work-Problem in Teams schlimmer zu sein, in denen jeder engagiert, leidenschaftlich und besessen davon ist, das Richtige zu tun.

Als Berater, der von Projekt zu Projekt wechselt, habe ich festgestellt, dass eine exzellente Disziplin mit einem starren Kodierungsstandard viel weniger zum Erfolg eines Projekts beiträgt als exzellente Entwickler, die an Ergebnissen interessiert sind. Inkonsistente Codierungsstile stören erstaunliche Entwickler nur geringfügig. Sie sind produktiv mit oder ohne Konsistenz. Zugegeben, wenn sie auf inkonsistenten Code stoßen, werden sie nach dem aktuellen Code fragenstandard und bleib dabei. Sie werden jedoch nicht darauf bestehen, jede Codezeile im Projekt auf den aktuellen Standard zu aktualisieren. Sie bestehen nicht darauf, weil sie Best Practices kommen und gehen gesehen haben. Die richtige Art, heute etwas zu tun, ist nicht die gleiche wie die richtige Art, morgen etwas zu tun. Wenn dies der Fall wäre, würden sich Ihre Codierungsstandards nicht weiterentwickeln. Wenn sich also die richtige Art und Weise, etwas zu tun, mit der Zeit ändert, ist unsere Definition von "richtig" möglicherweise fehlerhaft.

Das heißt nicht, dass Standards keine Rolle spielen. Denken Sie daran, dass das Ziel von Standards die Produktivität ist. Wenn Sie nicht garantieren können, dass sich das erneute Schreiben auf einen neuen Standard langfristig bezahlt macht, dann verschwenden Sie keine Zeit damit. Es ist viel einfacher, einen neuen Standard in neuem oder überarbeitetem Code zu rechtfertigen. Eleganz ist cool, aber nicht das Gleiche wie Ergebnisse.

Corbin March
quelle
5

Was wir tun, ist Evolution (nicht Revolution) auch für die Codebasis, wir würden den aktualisierten Standard verwenden, wenn;

  • neuer Code wird geschrieben
  • Code wird überarbeitet
  • Fehler sind behoben
  • Neue Teile werden zu einer vorhandenen Klasse hinzugefügt

Es ist wichtig, dass Ihre Codebasis konsistent ist. Wenn durch die Änderung die Möglichkeit einer Verwechslung zwischen "altem" und "neuem" Code besteht, ist es möglicherweise besser, die Aktualisierung Ihres Codierungsstandards für das nächste Projekt zu reservieren.

rsp
quelle
3

Erstens würde ich solche "Best Practices" nicht in die (obligatorischen) Kodierungsrichtlinien aufnehmen. Sie könnten in einem Anhang zum Beispiel erwähnt werden, als ein Beispiel , wie Sie könnten etwas tun, aber nicht , dass es sollte auf dieser Weise durchgeführt werden.

Es gibt jedoch zwei Fälle, die für Änderungen an einem Codierungsstandard in Betracht gezogen werden müssen:

  1. Änderungen, die die Lesbarkeit nicht beeinträchtigen, auch wenn alter und neuer Code gemischt werden, ohne den alten Code zu aktualisieren.
    Diese Änderungen können sofort zum Codierungsstandard hinzugefügt werden und müssen für alle neuen und geänderten Codes berücksichtigt werden. Alter Code sollte schrittweise angepasst werden, wenn es die Zeit erlaubt und Änderungen in diesem Bereich vorgenommen werden.
    Ein Beispiel für diese Art von Änderung, auf die ich tatsächlich gestoßen bin, ist eine Änderung der Copyright-Erklärung am Anfang jeder Datei.
  2. Änderungen, die die Lesbarkeit beeinträchtigen, wenn alter und neuer Code gemischt werden.
    Diese Änderungen sollten entweder auf einmal auf die gesamte Codebasis angewendet oder überprüft werden, wenn sie wirklich benötigt werden.
    Ein Beispiel für diese Art von Änderung ist eine Änderung der Einrückung oder der Platzierung von Klammern.
Bart van Ingen Schenau
quelle
2

Dies hängt wirklich von der Art des Produkts ab, das Sie erstellen:

  • Bei einer kommerziellen Anwendung, die hausintern geschrieben wurde und die Sie für Kunden bereitstellen, sollte Ihr Hauptziel der Umsatz sein. Solange der alte Code nicht fehlerhaft ist, spielt es keine Rolle, dass neue Codierungsstandards entwickelt wurden. Sie sollten sich darauf konzentrieren, Ihrem Produkt neue Funktionen hinzuzufügen und Umsatz zu generieren. Passen Sie auf jeden Fall die neuen Codierungsstandards für neuen Code an, aber das Ändern des gesamten vorhandenen Codes wäre Zeitverschwendung.
  • Wenn Sie ein Open-Source-Produkt entwickeln oder ein Produkt, bei dem mehrere Unternehmen (möglicherweise sogar Ihre Kunden) die Quelle sehen und bearbeiten, wird die Lesbarkeit des Codes viel wichtiger. In diesem Fall sollte abhängig von genau eine vernünftige Entscheidung getroffen werden Wie viel Code muss geändert werden und welche Vorteile ergeben sich auf lange Sicht? Obwohl wir alle schönen Code mögen, bedeutet die Tatsache, dass für ein kommerzielles Unternehmen, das mit Closed Source zu tun hat, die ständige Anpassung neuer Standards langfristig Umsatzverluste bedeutet.
mrwooster
quelle
1
Ich werde hinzufügen, dass es auch von Ihrer Testabdeckung abhängt. Ich habe einige ziemlich große Zeilen über 10.000 mit viel Vertrauen überarbeitet, da die kritische Funktionalität durch Integration und Unit-Tests abgedeckt wurde.
Martijn Verburg
@ Martijn - Guter Punkt, das ist auch sehr wahr.
Mrwooster
0

Persönlich würde ich mich dafür entscheiden, alte Codes beizubehalten und neue Standards zu befolgen, egal was Sie neu machen. Genauer gesagt, ich werde in old.c keine doppelten Standards verwenden. Aber wenn ich new.c erstelle, kann es die neueren, verfeinerten Syntaxen verwenden :)

Barun
quelle
Können Sie die Gründe für diese Entscheidung erläutern?
Ward Bekker
Äh ... man kann sagen, es ist eine Art Intuition. Basierend auf dem, was mrwooster oben gesagt hat, werde ich, wenn es sich um eine kommerzielle App handelt, nicht meine Zeit damit verschwenden, nur ein paar kosmetische Änderungen vorzunehmen. (Denken Sie daran, die Funktionalität bleibt gleich). Angenommen, die Änderung besteht nicht nur darin, wie Sie Objekte instanziieren. Aber sagen wir auch, wie Sie auf die Methoden zugreifen. Dann muss eine Menge Code repariert werden, mit einer guten Chance, Fehler einzuführen. Also, lass den alten Mann lieber dort bleiben.
Barun