Wir haben hier eine große alte Codebasis mit schlechtem Code, den Sie sich nicht vorstellen können.
Wir haben jetzt einige Qualitätsstandards definiert und möchten diese entweder in einer komplett neuen Codebasis erfüllen, aber auch, wenn Sie den alten Code berühren.
Und wir erzwingen diese mit Sonar (Code-Analyse-Tool), das bereits einige Tausend Verstöße aufweist.
Jetzt kam die Diskussion auf, um diese Verstöße für das Erbe zu verringern. Weil es Vermächtnis ist.
In der Diskussion geht es um Lesbarkeitsregeln. Wie viele verschachtelte ifs / for .. kann es haben.
Wie kann ich nun dagegen argumentieren, dass unsere Codierungsqualität bei Legacy-Code abnimmt?
Antworten:
Code ist nur ein Mittel zum Zweck. Was das Ziel sein mag, ist unterschiedlich, aber in der Regel ist es Gewinn.
Wenn es Profit ist; um dann erfolgreich zu argumentieren, dass alles, was Sie zeigen möchten, den Gewinn verbessert - z. B. durch Steigerung des Umsatzes, Reduzierung der Wartungskosten, Reduzierung der Entwicklungskosten, Senkung der Löhne, Reduzierung der Umschulungskosten usw. den Gewinn verbessern; dann sagst du meistens nur, es wäre eine lustige Art, Geld in die Toilette zu spülen.
quelle
Ich selbst und ich waren sowohl Produzent als auch Erhalter von Legacy-Code. Wenn Ihr Tool "Tausende von Verstößen" (oder sogar Hunderte von Verstößen) verursacht, vergessen Sie das Tool, es ist auf die Situation nicht anwendbar ...
Ich gehe davon aus, dass die ursprünglichen Entwickler schon lange nicht mehr zur Diskussion stehen. Es ist also niemand da, der das Warum und Warum des Design- und Codierungsstils versteht. Das Korrigieren von Hunderten oder Tausenden von Verstößen bedeutet nicht, hier und da ein paar Codezeilen neu zu schreiben. Stattdessen ist zweifellos eine Umgestaltung / funktionale Zersetzung erforderlich. Sie versuchen, dies mit einer großen vorhandenen Codebasis zu tun, ohne deren aktuelles Design genau zu verstehen, und Sie sind verpflichtet, eine ganze Reihe neuer Bugs / Probleme / etc. Einzuführen. Nur eine neue Dose Würmer, die noch schlimmer ist als die, die Sie jetzt haben (oder schlimmer als Ihr Werkzeug, das Sie jetzt >> denken <<).
Der einzig vernünftige Ansatz, um "Tausenden von Verstößen" entgegenzutreten, wäre das Neuschreiben von Grund auf. Ein langer und teurer Aufwand, der kaum an das Management zu verkaufen ist. Und in diesem Fall haben sie wahrscheinlich recht ...
Legacy-Code erfordert in der Regel nur Optimierungen. Zum Beispiel für das Jahr 2000 oder wenn die Aktien von 256 auf Dezimal gestiegen sind. Ich habe jede Menge Cr * P gemacht. Und viele andere ähnliche Sachen. Es ist in der Regel ziemlich "genau", dass Sie den manchmal schlechten Stil, die schlechte funktionale Zerlegung, das schlechte usw. "durchlesen" und die Sammlung von Stellen finden können, die geändert werden müssen. Und dann kann es Ihnen ein Rätsel bleiben, was "zwischen diesen Orten" passiert, dh was ist der Fluss auf höherer Ebene? Stellen Sie einfach sicher, dass Sie die lokalisierte Funktionalität verstehen, die Sie ändern, und testen Sie, testen Sie, testen Sie auf Nebenwirkungen usw., die von Ihrem lokalisierten Wissen nicht vorhergesehen werden können.
Wenn Sie sich so nicht durch Code zurechtfinden, sind Sie möglicherweise nicht die beste Person, um älteren Code zu verwalten. Einige Leute können mit einem leeren Bildschirm beginnen und schöne Programme schreiben, aber nicht mit einer großen Codebasis des Codes anderer Leute beginnen und ihn pflegen. Andere Leute können Code pflegen, aber nicht von vorne anfangen. Manche können beides. Stellen Sie sicher, dass die richtigen Personen Ihren Legacy-Code verwalten.
Es kann vorkommen, dass Sie Ihre alte Codebasis von Grund auf neu entwerfen und umschreiben möchten, wenn sich die geschäftlichen (oder sonstigen) Anforderungen so stark ändern, dass "Tweaks" am Hosenplatz den geänderten Anforderungen einfach nicht mehr gerecht werden . Zu diesem Zeitpunkt können Sie auch gleich ein neues Dokument mit den funktionalen Anforderungen verfassen und sicherstellen, dass alle Beteiligten an Bord sind. Es ist im Grunde ein ganz neues Ballspiel.
Die einzige >> falsche << Sache, die Sie tun müssen, ist, die Pflege von Legacy-Code so zu behandeln, wie Sie es bei der Neuentwicklung tun würden. Und dieses eine falsche Ding scheint genau der Weg zu sein, den Sie einschlagen möchten :) Nehmen Sie mein Wort dafür, das ist nicht das, was Sie tun wollen.
quelle
Die Frage ist nicht, wie gut oder schlecht dieser Code ist. Die Frage ist, wie viel Nutzen Sie aus wie viel Investition ziehen.
Sie haben also ein Tool, das Tausende von Dingen findet, die es nicht mag. Sie haben die Wahl, die Ergebnisse des Tools zu ignorieren oder Arbeit zu investieren, um Tausende von Dingen zu ändern. Das ist eine Menge Zeug. Die Leute werden nicht fokussiert, nicht während sie die Änderungen vornehmen, nicht während sie sie überprüfen, und dies wird nicht richtig getestet, da es Ewigkeiten dauert, um herauszufinden, wie man jede Änderung testet (oder nur ausprobiert), so dass es Fehler gibt. Also, bis Sie diese Fehler gefunden und behoben haben, haben Sie viel Zeit und Geld mit einem insgesamt negativen Ergebnis investiert.
Andererseits können Tools Dinge finden, die sie nicht nur "nicht mögen", sondern die Fehler oder potenzielle Fehler sind. Wenn der Legacy-Code noch weit verbreitet ist, kann das richtige Tool tatsächlich Fehler finden. Daher kann es sich lohnen, die Compiler-Warnungen einzeln zu aktivieren, zu überprüfen, ob sie nützlich sind (nicht alle sind nützlich), und diese Warnungen zu beheben.
quelle
Wenn es nicht kaputt ist, beheben Sie es nicht
Dies sollte praktisch auf jeden Softwareentwickler und -manager tätowiert werden, damit er es nie vergisst.
Ja, es verstößt gegen alle modernen Kodierungskonventionen. Ja, es ist in FORTRAN-77 mit einem Wrapper in C geschrieben, damit es von Python aus aufgerufen werden kann. Ja, das sind unstrukturierte GOTOs. Ja, es gibt ein Unterprogramm mit dreitausend Zeilen. Ja, die Variablennamen sind nur für einen Kroaten sinnvoll. usw. usw.
Aber wenn es über ein Jahrzehnt oder länger im Zorn getestet wurde und vergangen ist, lass es in Ruhe! Wenn die erforderliche Änderung gering ist, halten Sie sie so klein und lokal wie möglich. Alles andere birgt das größere Risiko, etwas zu beschädigen, das nicht repariert werden musste.
Natürlich stellt man manchmal fest, dass es sich wirklich um eine nicht zu wartende Kluge handelt und dass die einzige Möglichkeit, die "kleine" Modifikation zu berücksichtigen, darin besteht, sie von Grund auf neu zu schreiben. In diesem Fall müssen Sie zu demjenigen zurückkehren, der nach der Änderung fragt, und ihm mitteilen, was sie kosten wird (sowohl in Dollar oder Mannstunden für das Umschreiben als auch in Blutschweiß und Tränen für die unvermeidlichen neuen Fehler).
Vor langer Zeit gab es eine Reihe von Ausfällen bei einem der Festplattenlaufwerke von Digital. Am Ende haben sie sich alle bei gord zurückgerufen und ersetzt, was es gekostet hat. Anscheinend befand sich in der HDA ein Klebestreifen mit einem Filter. Das Konstruktionsmanifest sagte über den Klebstoff "Nicht parametrisch spezifiziert, KEINE ERSATZSTOFFE AKZEPTIERBAR". Ein Bohnenzähler "sparte" weniger als einen Cent pro Laufwerk, indem er einen anderen Klebstoff beschaffte. Es gab einen Dampf im HDA ab, der die Festplatte nach ein paar Betriebsjahren tötete. Es war nicht kaputt, bis er es reparierte. Zweifellos "es war nur eine winzige Veränderung ..."
quelle
Es ist definitiv nicht sinnvoll, die Qualitätsstufe für Legacy-Code zu verringern. Es ist auch nicht erforderlich, Warnungen sofort zu beheben. Stellen Sie einfach sicher, dass alle Ihre "neuen" Änderungen in jeder Komponente Ihres Projekts einem hohen Qualitätsstandard entsprechen. Dh kein Commit sollte die Anzahl der Warnungen jemals erhöhen.
Es ist ein einheitlicher und absolut einfacher Ansatz.
Es lässt zu, dass alter Legacy-Code unverändert funktioniert (da keine unnötigen Änderungen daran vorgenommen werden). Es stellt sicher, dass neuer Code von hoher Qualität ist. Es fallen keine zusätzlichen Kosten an.
quelle
Risikokontrolle….
Kosten….
Vorteil
Sie hoffen, dass die Einhaltung von Codierungsstandards zu einem besseren Code-Design führt.
Es ist jedoch sehr unwahrscheinlich, dass eine Person, die viele Wochen lang den Code ändert, um Warnungen aus einem Tool zur Überprüfung des Codestandards zu entfernen, das Design des Codes verbessert.
Empfehlung….
Persönlich erleben….
quelle
Ist die Diskussion über die Senkung der Schwellenwerte des Werkzeugs? ... oder habe ich es falsch verstanden. Es ist verwirrend geschrieben. Wenn nicht, verwerfen Sie bitte meine Antwort.
IMHO wäre es eine gute Idee, die Empfindlichkeit des Werkzeugs zu reduzieren. Warum? Weil es die haarigsten Teile des Codes hervorheben würde. Die Alternative besteht darin, Berichte mit Tausenden von Verstößen zu erstellen, die aufgrund ihrer Größe unbrauchbar werden.
... ansonsten sprechen Sie einfach mit den Beteiligten darüber und erfahren Sie auch deren Gründe.
quelle
Ich würde versuchen, den alten Code vom neuen sauberen Code zu trennen. In zB Eclipse können Sie dies tun, indem Sie sie in verschiedene Projekte einfügen, die sich gegenseitig verwenden. 'Clean'-Projekt und ' Legacy'-Projekt .
Auf diese Weise können Sie beide Projekte in Sonar mit unterschiedlichen Qualitätsstandards analysieren. Die Standards sollten sich nur in der Wichtigkeit der Regeln unterscheiden. Die Regeln selbst sollten gleich sein. Auf diese Weise können Sie im "Legacy" -Projekt sehen, was "repariert " werden muss, um die Standards des "Clean" -Projekts zu erfüllen .
Wann immer Sie es geschafft haben, einen alten Code auf die höheren Standards zu heben, können Sie ihn in das 'Clean'-Projekt verschieben.
In der täglichen Arbeit kann man es aufgrund der zeitlichen Verzögerung nicht schaffen, jede Klasse, die man berührt, an die „sauberen“ Projektstandards heranzuführen. Sie sollten jedoch versuchen, in kleinen Schritten dorthin zu gelangen, indem Sie versuchen, den Legacy-Code bei jeder Berührung ein wenig zu verbessern.
quelle