Mir wurde die Aufgabe übertragen, die Entwicklung in unserem Unternehmen zu verbessern. Das erste, was ich starten wollte, waren Codeüberprüfungen, da dies hier noch nie zuvor durchgeführt wurde.
Es gibt 3 Programmierer in unserer Firma. Ich bin ein Webprogrammierer, meine bekannten Sprachen sind hauptsächlich PHP, ActionScript und JavaScript. Die anderen 2 Entwickler schreiben interne Anwendungen in VB.net
Wir machen jetzt seit ein paar Wochen Code-Reviews. Ich finde es schwer, VB-Code zu verstehen. Wenn sie also sagen, was es tut, muss ich größtenteils nur ihr Wort dafür nehmen.
Wenn ich etwas sehe, das falsch aussieht, erkläre ich meine Meinung und erkläre, wie ich es in einer der Sprachen ansprechen würde, die ich kenne.
Manchmal sind meine Vorschläge begrüßt , aber oft mir Dinge gesagt wie : „Das ist der beste Weg , es in zu tun , diese Sprache“ oder „das gilt nicht für diesen Sprache" oder ähnliche Dinge dieser Art.
Das mag stimmen, aber ohne die Sprache zu kennen, bin ich mir nicht sicher, wie ich diese Behauptungen bestätigen oder widerlegen soll.
Ich weiß, dass eine mögliche Lösung darin besteht, vb zu lernen, damit ich bessere Codeüberprüfungen durchführen kann. Ich habe wirklich kein Interesse daran, vb zu lernen (zumal ich eine Liste anderer Technologien habe, die ich für meine eigenen Projekte zu lernen versuche) und möchte dies als letzten Ausweg behalten, aber es ist eine Option.
Eine andere Idee, die mir gekommen ist, ist, dass sie beide Interesse an C # haben und ich auch. Es ist relativ zu ihnen, weil es .net ist und relativ zu mir, weil es den Sprachen ähnlicher ist, die ich kenne. Dennoch ist es für uns alle neu. Ich dachte darüber nach, welche Vorteile es für uns alle hat, an einem C # .net-Projekt mitzuarbeiten und den Code des jeweils anderen zu überprüfen.
Ich denke, es gibt auch die Möglichkeit, einen Berater zu beauftragen, der uns einige Code-Reviews gibt.
Was würdest du mir in dieser Situation empfehlen?
quelle
Antworten:
Ihr persönlicher Wunsch, andere Dinge zu lernen, sollte dahinter zurückstehen, was Sie tatsächlich gerade für Ihren Job benötigen. Lerne VB.net. Sie können effektiv Code überprüfen, den Sie nicht verstehen, wenn Sie die Sprache kennen, in der er sich befindet, indem Sie viele Fragen stellen Warum). Wenn Sie den Code jedoch nicht verstehen, ist das Beste, was Sie tun können, dass sie ihn Ihnen erklären und hoffen, dass sie alle Fehler während des Erklärungsprozesses erkennen. Nicht, dass ich auf diese Weise in einer Überprüfung keine Fehler in meinem eigenen Code gefunden hätte, aber es ist nicht die effektivste Methode zur Codeüberprüfung. Die Codeüberprüfung ist jetzt Teil Ihrer Arbeit. Beschäftigen Sie sich damit und lernen Sie, was Sie brauchen, um es effektiv zu machen.
Während Sie lernen, lassen Sie sich von ihnen eine Quelle zeigen, die besagt, dass es sich um eine gute Technik handelt, wenn sie sagen, dass dies nicht so ist, wie wir es in dieser Sprache tun. Es liegt an ihnen, Sie in einer Codeüberprüfung zu rechtfertigen, nicht umgekehrt. Die Sprache wird auch besser, sobald Sie diese Links sehen.
quelle
Eigentlich bin ich mit all dem nicht einverstanden. Mit JS / PHP / ActiopnScript haben Sie ein grundlegendes Verständnis dafür, was eine Programmiersprache hat und wie sie funktioniert. Tatsächlich würde ich argumentieren, dass es viele Ähnlichkeiten zwischen VB und JS gibt. Das ist jedoch nicht mein Punkt. Selbst wenn Sie mit der Sprache sehr kompetent sind, ist es leicht, etwas zu übersehen, wenn Sie versuchen, den Denkprozessen eines anderen zu folgen. Daher sollte die Überprüfung dem Programmierer die Möglichkeit bieten, zu erklären, was (s) er getan hat und warum.
Ein Freund hat dies einmal als "The Janitor Theory" beschrieben: Indem er jemandem, selbst dem Hausmeister, die Details erklärt, deckt der Programmierer Schwachstellen im Code für sich selbst auf, was natürlich das ultimative Ziel der Überprüfung ist verarbeiten. Es erfordert jedoch, dass der Code gründlich und offen erklärt wird (Überprüfungen funktionieren nicht, wenn die Entwickler defensiv sind).
quelle
Sie haben den Fokus auf das Problem verloren und eine schlechte Lösung gefunden. Sie haben die Aufgabe, die Entwicklung zu verbessern, und Ihre Lösung besteht darin, eine Person mit der Codeüberprüfung zu beauftragen (Sie selbst), die die Sprache nicht versteht. Wer überprüft Ihren Code? Warum können sie sich nicht gegenseitig überprüfen, bis Sie die Sprache gelernt haben?
Es muss einen anderen Problembereich geben, der für eine sofortigere Verbesserung ausgewählt werden könnte. Auf diese Weise blasen sie nur Rauch auf dich und nichts verbessert sich.
Es wird lange dauern, bis Sie die Neuentwicklung auf eine Sprache umgestellt haben, die keiner von Ihnen versteht (C #). Dies zahlt sich vor allem dann aus, wenn Sie alle Ihre schlechten Gewohnheiten mitbringen.
Fokus auf Design (das wurde schon erwähnt.) Wenn sie Probleme haben, den aktuellen Code zu verwalten, schauen Sie sich einige Refactoring-Tools für VB an. Viele der grundlegenden Praktiken sind gleich.
quelle
Die kurze Version
Die längere Version
Denken Sie zuallererst daran, dass die Codeüberprüfung nicht nur eine Gelegenheit für den Überprüfer ist, dies zu lernen. Es ist auch eine Gelegenheit für den Rezensenten zu lernen. Tatsächlich habe ich von mehreren Organisationen gehört, die neue Programmierer dazu veranlassen, Codeüberprüfungen durchzuführen, damit sie ein Gefühl für den Code bekommen.
Vor diesem Hintergrund gibt es einen Ratschlag zur Codeüberprüfung, den ich im Allgemeinen immer für nützlich befunden habe, der jedoch für Ihre Position von besonderer Bedeutung ist. Formulieren Sie Ihr Feedback nicht als Aussage, sondern in Form einer Frage. Mit anderen Worten, anstatt "Dieser Code ist zum Kotzen!" Zu sagen, könnte man sagen "Warum haben Sie den Code auf diese Weise geschrieben, anstatt zu tun ..." Dies macht den Codeüberprüfungsprozess angenehmer und ermöglicht es Ihnen, auch zu lernen.
Ein weiterer Ratschlag, den ich Ihnen geben kann, ist, dass Sie sich von Ihrem mangelnden Wissen nicht wieder unterkriegen lassen. Wenn Sie etwas sehen, das Sie als falsch empfinden, und Sie eine handgewellte Antwort vom Rezensenten erhalten, machen Sie keinen Rückzieher (zumindest nicht aufgrund mangelnden Wissens). Denken Sie daran, was einen guten Code in einer Sprache ausmacht, unterscheidet sich selten von dem, was einen guten Code in einer anderen Sprache ausmacht. Ja, bestimmte Sprachen haben unterschiedliche Redewendungen, um Ihnen beim Schreiben von gutem Code zu helfen. Es ist jedoch wichtig zu wissen, dass diese Redewendungen eher Werkzeuge als Selbstzweck sind .
Versuchen Sie als nächstes, "Präferenzprüfungen" zu vermeiden. Daran muss ich (und viele andere) sehr bewusst arbeiten. Mit anderen Worten, vermeiden Sie Überprüfungen nach dem Motto "Sie haben x , aber ich bevorzuge y ". Nun, es ist nichts Falsches daran, Präferenzen anzugeben, aber Sie sollten sie eindeutig als solche kennzeichnen und notieren, dass die andere Partei anderer Meinung sein kann. Dies ist wichtig, da die meisten sprachlichen Unterschiede in diese Kategorie fallen.
Verwendet ihr schließlich ein verteiltes Versionskontrollsystem? Eine Sache, die helfen könnte, ist, anstatt nur zu bemerken, was mit dem Code nicht stimmt, den Code so umzuschreiben, wie Sie ihn geschrieben hätten, ihn zu testen und dann einen Patch dafür einzureichen. Dies hilft zu zeigen, dass Sie wirklich daran interessiert sind, ihren Code zu verbessern und nicht nur ein "Armchair Code Reviewer" zu sein, und gibt Ihnen die Möglichkeit, die Sprache besser zu lernen. Außerdem ist es in der Regel einfacher, mit "Ich denke, Sie sollten das tun" nicht einverstanden zu sein, als mit "So hätte ich das gemacht, und hier ist ein Patch, wenn Sie einverstanden sind". Ich nehme an, Sie müssen nicht unbedingt brauchen eine DVCS für diese, aber es hilft sicherlich.
quelle
Sie können Dinge, die Sie nicht wirklich kennen, "Korrekturlesen", aber nicht ausreichend überprüfen . Ich bin sehr kompetent in C, kenne C ++ ziemlich gut, aber ich würde nicht davon träumen, etwas in C # zu wiederholen.
Ich glaube nicht, dass Sie so weit gehen müssen, einen Berater hinzuzuziehen, da einige Unternehmen darauf spezialisiert sind, Ihren Code tonnenweise zu testen und Ihnen zu sagen, was möglicherweise daran falsch ist.
Es wäre jedoch Sache des einzelnen Entwicklers, der die Sprache kennt, um das Ergebnis zu interpretieren. Wenn mich zum Beispiel ein Code-Prüfer beschimpfte, den Rückgabewert von nicht zu verwenden
printf()
, schaute ich sie seltsam an und stellte ihre Nüchternheit in Frage. Dann fragte ich "Ok, großartig, was kann ich tun, wenn nichts auf der Konsole ausgegeben werden kann, was dies würde sei hilfreich?"Möglicherweise möchten Sie mit Ihren Vorgesetzten über die Einrichtung von Abteilungen und Teamleitern sprechen, damit Sie in Ihrer Domäne effektiv sind, während jemand anderes in seiner Domäne effektiv ist.
Trotzdem denke ich, dass Sie möglicherweise einen Dritten für die Prüfung heranziehen können. Die meisten Programmierer, die ihr Salz wert sind, werden berechtigte Bedenken berücksichtigen, auch wenn sie die Hälfte als Schwindel abtun (wie ich es in meinem
printf()
Beispiel getan hätte ).quelle
Eine Anleitung für etwas zu geben, das Sie nicht verstehen, ist, wie Sie wissen, mit dem Führen eines Blinden vergleichbar.
Ein Ansatz wäre die Verwendung von Flusenwerkzeugen wie FxCop und StyleCop, die sich mit der statischen Analyse der Codebasis befassen. Dies bietet Ihnen einen Ausgangspunkt für die Diskussion der Berichte, die aus den Tools generiert werden.
Ein anderer Ansatz wäre, die Codeüberprüfungen in Entwurfsüberprüfungen umzuwandeln. Design Reviews decken oft Probleme auf, lange bevor der Code überhaupt geschrieben wurde. Wenn ein Programmierer ein Design hat, mit dem er arbeiten kann, ist sein Ansatz im Allgemeinen viel effizienter, und die Anzahl der Fehler nimmt daher ab. Wenn ein Design nicht existiert, wird es im Ansatz ad-hoc und der Code leidet mit zunehmender Fehleranzahl. Ermitteln Sie die Probleme in der Entwurfsüberprüfung, bevor sie in der Codeüberprüfung auftauchen, indem Sie sicherstellen, dass jeder von Ihnen einen konkreten Entwurf zur Implementierung hat. UML ist hier Ihr Freund und Tools wie umlet sind schnell und einfach zu bedienen.
quelle
Die schlechte Nachricht ist, dass Sie VB lernen müssen, um effektiv an Code-Reviews teilnehmen zu können. Es wird auch hilfreich sein, VB in einer Art Projekt zu verwenden (nicht unbedingt für die Produktion).
Die gute Nachricht ist, dass, wenn Sie dies getan haben, einiges von dem, was Sie gelernt haben, immer noch nützlich ist, wenn Sie zu C # wechseln.
quelle
Der Gedanke, den Sie beim Peer Review immer behalten sollten, ist:
"ICH BIN DER NÄCHSTE, DER DIESEN CODE BEIBEHÄLT!"
Sie müssen es gut genug verstehen, um dies als Teil Ihrer Vorbereitung auf die Überprüfung zu können, und es ist Ihre Aufgabe, den ursprünglichen Programmierer auf Mängel aufmerksam zu machen, die es umständlicher als nötig gemacht haben, den Code gut genug zu verstehen, um ihn zu warten .
Wenn Sie nicht in VB programmieren können, können Sie den Code nicht verwalten und sind nicht als Peer-Reviewer qualifiziert.
quelle
Sie sollten keinen Code überprüfen, den Sie nicht verstehen. Das ärgert nur die Entwickler, die jedes seltsam aussehende Ding erklären müssen, das sie getan haben.
Was Sie tun können, wählen / definieren Sie Codierungsrichtlinien und überprüfen Sie den Code anhand dieser Richtlinien. Wenn etwas nicht den Richtlinien entspricht, können Sie den Entwickler um Erklärung bitten.
Ich würde mit der Auswahl bestehender Richtlinien beginnen (ich kenne keine VB.net-Codierungsstandards, aber Google gab mir:
Verwenden Sie stylecop-ähnliche Tools für VB .net
Analysieren Sie die Quellen mit NDepend (es gibt Regeln für die zyklomatische Komplexität, Länge, Tiefe usw.)
Wenn Sie das getan haben, können Sie sagen, dass der Code den gewählten Standards entspricht, es sagt nichts darüber aus, dass die Funktionalität korrekt ist oder der Code die richtigen OOP-Prinzipien verwendet. Aber zumindest ist es etwas.
quelle
Bei einer guten Codeüberprüfung geht es um Dinge, bei denen Sie die Sprache verstehen müssen - die richtige Verwendung der Sprache, der APIs und Bibliotheken, des Stils, der Variablennamen usw. - und darum, wie gut der Code das Problem löst - gute Kommentare, die richtige Architektur und das relevante Design Wenn Sie zum ersten Mal Code-Reviews durchführen, konzentrieren Sie sich in der Regel auf die ersteren. Sie sind leichter zu sehen und leichter anzuziehen. (Ich mag zB Ihre Variablennamen nicht. Sie sollten XXXX-Stilnamen verwenden.)
Die Codeüberprüfung wird wertvoller, wenn mehr darauf geachtet wird, wie gut der Code Probleme löst. Da Sie im ersten Bereich nicht so viel Wert schaffen können, konzentrieren Sie sich darauf, Fragen zu stellen und Ratschläge zur Lösung des Problems zu geben, nicht darauf, wie es hergestellt wurde.
Natürlich gibt es eine Überlappung zwischen den beiden. Wenn Sie VB.NET kennen, können Sie sich beraten lassen, warum ein bestimmtes Entwurfsmuster beispielsweise in einer bestimmten Situation keine gute Wahl ist.
Seien Sie in dieser Phase vor allem demütig. Der Änderungsprozess ist schwierig. Selbst wenn Sie ein VB.NET-Guru wären, wäre die Änderung wahrscheinlich nicht einfach. Leute, die die Codeüberprüfung nicht verwendet haben, mögen sie zunächst nicht. Andere dazu zu bringen, sich Ihren Code anzusehen, ist eine schwierige Erfahrung. Es braucht Zeit, um den Wert und die Geduld zu erkennen. Es ist ein großartiger Prozess, wenn Sie ein Buy-In erhalten, aber es wird einige Zeit dauern.
quelle
Könnten Sie den Fokus mehr auf Tests richten, anstatt den Code direkt zu betrachten? Ich sage nicht, dass die Codeüberprüfungen aufgegeben werden sollen, aber anfangs ist es möglicherweise sinnvoller, diese internen Apps mit genügend Tests auszustatten, die dabei helfen können, einige der Vorgänge zu dekodieren. Die Idee dabei ist, dass die Tests Ihnen auch dabei helfen könnten, sich mit einigen Funktionen vertraut zu machen. Ich sehe das nur als einen anderen Weg. Die Idee dabei ist, dass die Reviews später wiederkommen und in ein paar Teilen durchgeführt werden können, da es sich lohnen kann, einen Überblick / eine Vorab-Sitzung zu haben und dann eine kleine Pause einzulegen. Diese Pause dauert bis zum nächsten oder zweiten Tag, so dass genug Zeit für alle bleibt, die nachts über den Code oder etwas Ähnliches nachdenken möchten, bevor sie mit Fragen zurückkehren und eine Diskussion führen.
Natürlich, wenn Sie bereits Tests haben, ist dies leider nicht so aussagekräftig. Der andere Gedanke ist, ein Beispiel dafür zu geben, wo sie behaupten, dass dies in VB.Net auf eine bestimmte Weise geschieht, da dies dazu beitragen könnte, diese Frage in einer Weise klarer zu machen, wie ich es mir vorstellen kann, von kleinen Codestandards zu Teilen zu variieren das Herzstück dessen, wie VB.Net in gewissem Sinne aufgebaut wurde.
quelle
Selbst wenn Sie die Grundlagen von VB kennen, können Sie die Verwendung unsicherer Funktionen in der Sprache nicht erkennen, wenn Sie eine Codeüberprüfung durchführen, ohne alle Funktionen der Sprache zu kennen.
Angenommen, Sie wussten nicht, dass die input () - Funktion in Python 2 die Eingabe tatsächlich ausgewertet hat, bevor sie zurückgegeben wurde, um das Parsen von Eingabetypen zu vereinfachen, die keine Zeichenfolgen sind. In diesem Fall ist der Code für die Ausführung willkürlichen Codes anfällig, sodass der Benutzer so etwas wie
__import__('os').execl('/bin/sh', '/bin/sh')
auf einem Linux-System eingeben kann , um den Python-Prozess in eine Shell umzuwandeln. Stattdessen sollte raw_input () verwendet werden, um die unverarbeiteten Eingabedaten abzurufen.Der Versuch, eine Codeüberprüfung durchzuführen, ohne alle Funktionen der Sprache zu kennen, kann nicht nur verhindern, dass Sie einen besseren Weg finden, ein bestimmtes Verfahren in der Sprache durchzuführen. es könnte auch zu nachteiligen Sicherheitsmängeln führen.
quelle