Ich habe die Verantwortung für eine Gruppe von 3 Entwicklern mit schrecklicher Codequalität in ihrem Projekt übernommen. Um die Codequalität zu erhöhen, wurden viele Meetings abgehalten und CI um eine Codequalitätskontrolle (Sonarqube) erweitert, um den Code zu überwachen und die Pipeline zum Scheitern zu bringen, wenn sie die Anforderungen nicht erfüllt.
Einer der Entwickler hat einen Weg gefunden, um Funktionskomplexitätsgrenzen zu umgehen und fehlerhaften Code zu übertragen (Beispiel unten). Meine Frage ist, wie ich das angehen soll, um zu verhindern, dass er und andere Entwickler Problemumgehungen verwenden, anstatt nachzudenken und ihre Codes zu reparieren.
switch (true) {
case (first & second & otherthing):
dosomething();
break;
case (unrelated_if || complex):
do_totally_unrelated_thing_to_previous_one();
break;
...
}
Persönlich finde ich die meisten dieser automatisierten Code-Tools nutzlos. Es gibt Zeiten, in denen es fehlschlägt, Dinge zu programmieren, die einfach Vorlieben sind, und Dinge, die unter bestimmten Umständen schlecht, aber unter anderen gut oder sogar notwendig sind. Und oft lassen sie den Entwickler unsicher, was die eigentliche Lösung sein sollte. Wenn Sie wissen, dass etwas fehlschlägt, aber nicht verstehen, warum es fehlschlägt oder was Sie stattdessen tun sollten, ist das Tool selbst fehlgeschlagen.
Was hilft, ist 100%iger Code-Review. Kein Code wird an den Produktionszweig übergeben, ohne durch eine Codeüberprüfung akzeptiert zu werden, und kein Entwickler hat das Recht, nur das Build-Team oder den Lead an den Produktionszweig zu übertragen.
Hier senden Sie den schlechten Code zurück, vorzugsweise mit einer Erklärung, warum er schlecht ist. Der Schlüssel ist, es schmerzhaft zu machen, den Code nicht zu reparieren. Ja, sie werden einige Male die Frist versäumen, weil der Code die Codeüberprüfung nicht bestanden hat. Und das müssen sie als Grund erklären. Dies führt dazu, dass Menschen mit geringerer Wahrscheinlichkeit denselben Fehler wiederholt machen, damit sie ihre Fristen einhalten können. Wenn es keine Schmerzen bereitet, schlechten Code zu schreiben, gibt es keinen Grund, ihn zu reparieren, da die menschliche Natur so ist, wie sie ist.
Allerdings müssen Sie und Ihr Team sich darüber einigen, was guter Code und was akzeptabler Code ist. Wenn Ihre Standards und ihre derzeit nicht übereinstimmen, muss dies in Gesprächen gelöst und ein akzeptabler Standard genehmigt werden. Wenn sie Beiträge zum Standard geleistet haben (und ja, das bedeutet, dass Sie ihre Standards zumindest teilweise kompromittieren und akzeptieren müssen, die Diskussion ist irrelevant, sogar kontraproduktiv, wenn Sie immer noch Endergebnisse diktieren), wird dies der Fall sein mehr kaufen, um es tatsächlich zu benutzen.
Sie haben ein Tool eingeführt, das Ihnen anscheinend nur im Weg steht. Der schreckliche Code, den Sie gepostet haben, wurde erstellt, weil der Entwickler ursprünglich Code erstellt hat, der von Ihrem Tool nicht akzeptiert wurde, und herausgefunden hat, wie er durch Verschlechtern des Codes akzeptiert werden würde. Das ist ganz dein Problem. Wenn Sie Situationen schaffen, in denen Menschen für das Falsche belohnt werden, werden sie das Falsche tun.
Was wir nicht wissen, wenn wir nur eine Seite der Geschichte hören, ist, ob sie eine schreckliche Codequalität haben oder ob sie Code haben, den Sie nicht mögen – was eine ganz andere Sache sein kann. Sie sind ein erfahrener Entwickler? Sagen Sie ihnen dann, wie sie den Code verbessern können, schicken Sie sie zu Schulungen und führen Sie Code-Reviews durch. Oder sind Sie ein spitzhaariger Chef? Lassen Sie sie in diesem Fall weitermachen.
Hier gibt es zwei Probleme:
ihre Codequalität ist schlecht
Sie arbeiten um Ihren Code Quality Enforcer herum
Überprüfen Sie jeden Pull-Request, den sie stellen. Wenn sie Code von schlechter Qualität begehen, erklären Sie, warum es schlechte Qualität ist. Erklären Sie, warum Qualitätsstandards wichtig sind. Erklären Sie, dass bestimmte Designentscheidungen kurzfristig schneller sein können, aber erhebliche technische Schulden mit sich bringen. Erklären Sie, dass es nicht akzeptabel ist, absichtlich Workarounds an Ihren Coding Quality Enforcer zu schreiben. Der Schlüssel hier ist, ihnen beizubringen, warum es wichtig ist, und ihnen nicht nur zu sagen, was sie tun sollen. Akzeptieren Sie die Pull-Requests erst, wenn alle erforderlichen Änderungen vorgenommen wurden.
Wenn sie nach ein paar Runden immer noch schlechten Code schreiben und Workarounds verwenden, kann dies ein Zeichen von Inkompetenz oder Insubordination sein, die Sie angemessen ansprechen sollten. Aller Wahrscheinlichkeit nach sind sie es nicht gewohnt, Code in einem neuen Stil zu schreiben, und brauchen einige Zeit, um sich anzupassen. Es ist Ihre Aufgabe als Betreuer, ihnen beim Lernen und Anpassen zu helfen, aber wie heißt es so schön: Sie können ein Pferd zum Wasser führen, aber Sie können es nicht zum Trinken bringen.
Wenn sie sich weigern, die ihnen gegebenen Regeln zu befolgen, ist es einfach. Geben Sie ihnen eine Warnung, sagen Sie in dieser Warnung, dass es Konsequenzen geben wird, wenn sie 2 Warnungen erhalten. Die Tatsache, dass Sie für sie verantwortlich sind, bedeutet, dass die Konsequenzen für Sie gelten, wenn sie dies weiterhin tun.
Gehen Sie auf Nummer sicher, machen Sie schriftliche (per E-Mail) Regeln darüber, was sie tun MÜSSEN. Wenn sie diese Regeln nicht befolgen, melden Sie dies Ihrem Vorgesetzten.
Sprich auch mit ihm, es könnte etwas nicht stimmen. Das Schreiben von schlechtem Code könnte daran liegen, dass es ein Problem in seinem beruflichen/privaten Bereich gibt. Stellen Sie also sicher, dass das nicht die Sache ist, die ihn dazu bringt, schlechten Code zu begehen.
Florian Schätz
Idris Dopico Peña
Erik
Reza Salkordeh
Rat
gnasher729
Walfrat
switch(true)
? Oder Sie könnten Ihre eigene Regel schreiben, um sie hinzuzufügen. Wenn sie etwas getan haben, das sie nicht richtig schreiben können, sollten Sie ihnen das erklären, wenn sie sich überhaupt für Codequalität interessieren ...Seth R
Fett
gazz0x2z
GOATNeun
Thorbjørn Ravn Andersen
IllusivBrian
if(x){} if(y){}
da der statische Analysator dieif
Anweisungen für die Qualitätskontrolle markiert hat, aber nicht dieswitch
. Ob es ohne diesen Kontext in Ordnung ist oder nicht, ist nicht wirklich wichtig.Antimuster