Nun, das Maß, das ich benutze oder das ich gerne benutze, ist folgendes:
Erstellen Sie für jede unabhängige, einzelne, einzeilige Take-it-or-Leave-it-Funktionsanforderung eine Momentaufnahme der Codebasis, bevor Sie sie implementieren. Implementieren Sie es dann, einschließlich des Findens und Behebens von Fehlern, die im Prozess aufgetreten sind. Führen Sie dann ein diff
zwischen der Codebasis vor und nach. Das diff
zeigt Ihnen eine Liste aller Einfügungen, Löschungen und Änderungen, die die Änderung implementiert haben. (Wie das Einfügen von 10 aufeinander folgenden Codezeilen ist eine Änderung.) Wie viele Änderungen gab es? Je kleiner diese Zahl ist, desto besser kann der Code gewartet werden.
Ich nenne das die Redundanz des Quellcodes, weil es wie die Redundanz eines fehlerkorrigierenden Codes ist. Die Informationen waren in einem Block enthalten, wurden jedoch als N Blöcke codiert, die alle zusammen ausgeführt werden müssen, um konsistent zu sein.
Ich denke, das ist die Idee hinter DRY, aber sie ist etwas allgemeiner. Der Grund, warum es gut ist, dass diese Anzahl niedrig ist, ist, dass Sie, wenn N Änderungen erforderlich sind, um eine typische Anforderung zu implementieren, und als fehlbarer Programmierer zunächst nur N-1 oder N-2 von ihnen korrekt ausführen 1 oder 2 Bugs. Zusätzlich zum Programmieraufwand für O (N) müssen diese Fehler entdeckt, lokalisiert und repariert werden. Deshalb ist kleines N gut.
Wartbar bedeutet für einen Programmierer, der nicht gelernt hat, wie der Code funktioniert, nicht unbedingt lesbar. Das Optimieren von N erfordert möglicherweise einige Dinge, die eine Lernkurve für Programmierer schaffen.
Hier ist ein Beispiel.
Eine Sache, die hilft, ist, wenn der Programmierer versucht, zukünftige Änderungen zu antizipieren und Anweisungen im Programmkommentar hinterlässt.
Ich denke, wenn N weit genug reduziert ist (das Optimum ist 1), liest sich der Quellcode eher wie eine domänenspezifische Sprache (DSL). Das Programm "löst" das Problem nicht so sehr, sondern "nennt" es "das Problem", da im Idealfall jede Anforderung nur als ein einziges Stück Code neu formuliert wird.
Leider sehe ich keine Leute, die sehr viel lernen, wie man das macht. Vielmehr scheinen sie zu glauben, dass mentale Substantive zu Klassen und Verben zu Methoden werden sollten, und alles, was sie tun müssen, ist die Kurbel zu drehen. Das führt nach meiner Erfahrung zu Code mit N von 30 oder mehr.