Sind Sie als Entwickler auf eine Codeüberprüfung vorbereitet?


10

Ich suche hier einige Ideen.

Ich habe den Artikel gelesen. Wie sollten Codeüberprüfungen durchgeführt und Codeüberprüfungen durchgeführt werden? Was sind die Vorteile? Das war sehr informativ, aber ich brauche noch mehr Klarheit in der Frage unten.

Meine Frage ist,

  1. Können Sie als Zielentwickler einige Best Practices vorschlagen, die ein Entwickler einbauen kann, bevor sein Code überprüft wird?

    • Derzeit übe ich die folgenden Methoden

      • PPT für einen logischen Ablauf
      • Detaillierte Kommentare.

Problem: Obwohl ich die oben genannten Praktiken implementiert habe, helfen sie bei der Überprüfung nicht. Das Problem, mit dem ich konfrontiert war, ist, dass ich, wenn auf bestimmte Logik verwiesen wird, ständig nach der Implementierung und dem Ablauf suche und dabei zu viel Zeit verschwendet werde und die Leute auf die Nerven gehen.

Ich denke, viele Entwickler würden das durchmachen, was ich auch durchmache.


2
Nur eines: Mach keine dummen Dinge in deinem Code.
BЈовић

1
KISS: Wenn der Code einfach ist, kann Ihr Gehirn alles verwalten.
Mouviciel

Wer leitet das Meeting normalerweise, wenn Sie in Ihrem Unternehmen eine Codeüberprüfung durchführen? Sie oder eine Person, die Ihre Arbeit überprüft? Ich frage, weil das Code-Review-Meeting in IMO nicht der richtige Ort ist, um nach Code-Teilen zu suchen, selbst wenn Sie wirklich schnell nachgeschlagen haben.
DXM

@ DXM Danke für die Antwort. Es ist meine TL, die das Treffen leitet.
Karthik Sreenivasan

@Karthik: k, dieser Teil ist gut. Basierend auf Ihrer Frage fragen Sie also nicht, wie Sie qualitativ hochwertigen Code schreiben und produzieren sollen, der für die Codeüberprüfung bereit ist. Stattdessen ist Ihr Hauptanliegen folgendes: "Ich suche ständig nach der Implementierung und dem Ablauf und es wird zu viel Zeit verschwendet." Können Sie das näher erläutern? Warum suchen Sie, wenn TL den Code vor sich hat und das Meeting leitet?
DXM

Antworten:


8

Basierend auf den von OP bereitgestellten Details klingt die Frage wie folgt: "Wie lerne ich meinen eigenen Code, damit ich schnell antworten kann, wenn ich gefragt werde, ob ich X finden oder Y erklären möchte."

Einige Vorschläge, die mir einfallen:

  • Beim Codieren müssen Sie sich die Zeit nehmen, um Ihren eigenen Code zu lernen und zu verstehen. Dies könnte das sein, was Ihre TL versucht, Ihnen in weniger Worten zu vermitteln. Als TL für das aktuelle Projekt habe ich in den letzten 11 Monaten viele Codeüberprüfungen durchgeführt, und ich stelle fest, dass einige Entwickler entweder in unserer eigenen Codebasis oder woanders (Google) nach "Beispielcode" suchen , etc ...) und kopiere / füge es ein. Persönlich kann ich es nicht ertragen, weil ihr Code zwar die einfachen Komponententests besteht, sie aber nicht verstehen, was er tatsächlich tut, so dass wir nie garantiert werden, dass es keinen gibt. ' t ein Grenzfall oder eine erwartete Fehlerbedingung, die auftreten könnte.

  • Wenn Sie kopieren / einfügen müssen, versuchen Sie als Folge der vorherigen Aussage, nur den Code zu kopieren / einzufügen, den Sie zuvor geschrieben haben und den Sie verstehen. Es ist sicherlich in Ordnung, die Idee anderer Leute "auszuleihen", aber in diesem Fall schreiben Sie ihren Code Zeile für Zeile neu, da Sie beim Schreiben ein besseres Verständnis dafür erlangen, was er tut. Wenn Sie externe APIs verwenden, nehmen Sie sich trotzdem ein paar Minuten Zeit, um eine Referenz zu finden und zu erfahren, wie diese API funktioniert, auch wenn Sie ein Beispiel haben, das diese API verwendet. Gehen Sie nicht einfach davon aus, dass es auch in Ihrer Situation funktioniert, wenn es vorher funktioniert hat.

  • Lesen Sie und lernen Sie, das DRY-Prinzip zu lieben . Oft kann das, was Sie kopieren / einfügen möchten, an einem gemeinsamen Ort abgelegt werden (separate Funktion, separate Klasse, separate Bibliothek ...).

  • Lesen Sie und lernen Sie, SOLID-Prinzipien zu lieben, und lesen Sie währenddessen KISS, das bereits von mouviciel erwähnt wurde. Diese Prinzipien sind alle darauf ausgerichtet, sehr präzisen, sauberen und modularen Code zu erstellen. Wenn Sie große Klassen und große Funktionen in diesen haben, wird es eindeutig viel schwieriger sein, Dinge zu finden, und versuchen Sie außerdem zu erklären, was der Code tut. Wenn Sie dagegen SRP folgen (oder zumindest versuchen, SRP zu folgen) und jede Klasse / Funktion nur für eine Sache verantwortlich machen, ist Ihr Code klein und gut lesbar.

  • Holen Sie sich eine Kopie von Clean Code . Sehr gutes Buch. Es geht um das Schreiben von Code, der selbsterklärend und einfach zu lesen, zu warten und zu erweitern ist. Wenn Sie üben, einfach zu lesenden Code zu schreiben, sollten Sie keine Probleme haben, Ihren eigenen Code in den Codeüberprüfungen zu lesen. Und das ist der lustige Teil, ich habe die Leute gebeten, ihren eigenen Code zu lesen oder mir einfach zu sagen, was die Variablen darstellen, und sie konnten nicht antworten, obwohl sie diesen Code (brandneue Klassen, kein Vermächtnis) erst vor einer Woche geschrieben haben . Eine gute Benennung reicht weit.

  • Wenn Sie nach all der Vereinfachung und Umgestaltung immer noch eine Funktion haben, die einen Algorithmus ausführen muss, der nicht sehr offensichtlich ist, nehmen Sie sich Zeit und schreiben Sie einen Kommentarblock in diese Funktion, der den Algorithmus erklärt. Dies ist nicht nur hilfreich, wenn Sie diese Funktion in zwei Monaten ändern müssen, sondern wenn Sie bei einer Codeüberprüfung überfallen werden, können Sie einfach zurücklesen, was Sie geschrieben haben.

  • Wenn Sie nach all den oben genannten Punkten immer noch in Schwierigkeiten sind? Sind Sie neu im Team und wurden gebeten, mit viel Legacy-Code zu arbeiten? In diesem Fall könnte es sein, dass Ihre TL ein A $$ ist und Sie proaktiv sein könnten, indem Sie ihn vor dem Meeting bitten, einfach zu sein und nicht die Zeit aller Beteiligten zu verschwenden. Wenn neue Mitarbeiter einem Team beitreten, muss TL genügend Geduld haben, da die Arbeit auf einer neuen Plattform, einem neuen Produkt, neuen Mitarbeitern und einer neuen Umgebung einer neuen Person viel Konzentration abverlangt und dieser Person am Anfang einige Details fehlen. Funktioniert wie geplant und Ihre TL sollte dies einfach akzeptieren.

  • Wenn Sie nach all den oben genannten Punkten immer noch das Gefühl haben, schreckliche Codeüberprüfungen zu haben. Sprechen Sie mit Ihrer TL. Manchmal fühlen sich Menschen aufgrund der Art der Codeüberprüfungsbesprechungen schlecht, obwohl TL mit Ihnen vollkommen zufrieden ist. Wenn ich Codeüberprüfungen durchführe, ist es mein Ziel, hervorzuheben, was geändert werden muss, sicherzustellen, dass Sie die Änderungen verstehen und fortfahren. Oft habe ich keine Zeit, höflich zu sein, und manche Leute werden defensiv und versuchen, jeden einzelnen meiner Kommentare zu beantworten. In solchen Situationen kommt die Besprechung zur Codeüberprüfung zum Stillstand, sodass ich sie eher unterbreche und weitermache. Im Allgemeinen würde ich nach dem Treffen mit den neuen Leuten sprechen, um sicherzustellen, dass sie den Prozess verstehen und dass es nichts Persönliches ist. Nach wenigen Codeüberprüfungen fühlen sich die Menschen im Allgemeinen viel wohler.


+1 für "Kopieren Sie keinen Code, den Sie nicht verstehen, und fügen Sie ihn nicht ein". Das ist unerträglich! Auch +1 für "rede mit deiner TL"
MarkJ

@DXM Ihre Fähigkeit, die Feinheiten der Frage zu verstehen, war sehr professionell, ganz zu schweigen von Ihrer Antwort. Sie ist sehr informativ und beschreibend. Geist = geblasen!
Karthik Sreenivasan

@DXM Aus Ihrer Referenz "Wenn Sie andererseits SRP folgen (oder zumindest versuchen, SRP zu folgen) und jede Klasse / Funktion nur für eine Sache verantwortlich machen, ist Ihr Code klein und sehr lesbar." Können Sie es mich wissen lassen , was tut * SRP bedeuten? * Ich einen anderen interessanten Beitrag auf Code Klarheit sah hier .
Karthik Sreenivasan

1
@KarthikSreenivasan - In dem verwendeten Kontext ist es eine Übung, bei der eine Methode oder Klasse für eine Sache verantwortlich ist. Beispielsweise sollte eine Methode, die Zahlen addiert, nicht auch den Durchschnitt zurückgeben. Einfache Suche fand dies: en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound

10

Praktiken variieren, aber nach meiner Erfahrung:

  • Machen Sie nichts Besonderes mit dem Code. Es ist natürlich, Ihren Code ein wenig aufzupeppen, wenn Sie erfahren, dass er überprüft wird, und es schadet nicht, offensichtliche Dinge wie Rechtschreibfehler und dergleichen zu beheben. Aber gehen Sie nicht hinein und fügen Sie nicht viele detaillierte Kommentare hinzu oder ändern Sie den Code auf andere Weise, nur weil die Überprüfung geplant ist.

  • Der Code wird rechtzeitig vor der Überprüfung erstellt und an die Prüfer verteilt. Dies wird normalerweise von einem neutralen Dritten durchgeführt, wahrscheinlich dem Code Review Facilitator. Wenn der Code ausgedruckt wird, sollte er klein genug sein, damit die Zeilen nicht zu oft umbrochen werden, aber groß genug, damit jeder ihn leicht lesen kann. Drucken Sie es im Querformat, wenn dies erforderlich ist.

  • Der Code sollte gedruckt oder mit Zeilennummern angezeigt werden . Vorzugsweise sollte die Nummer von einer Datei zur nächsten fortgesetzt werden. Es ist so viel einfacher, auf "Zeile 3502" zu verweisen als auf "Zeile 238 von foo.c", und mit den Zahlen kann jeder über bestimmte Zeilen sprechen, ohne Zeit damit zu verschwenden, diese Zeilen zu finden.

  • Es sollte auf jeden Fall einen Moderator geben , übrigens. Seine oder ihre Aufgabe ist es, zu verhindern, dass die Überprüfung in Kleinigkeiten hängen bleibt, zu verhindern, dass sie persönlich oder erhitzt wird, und die Länge der Überprüfung streng zu begrenzen.

  • Als Autor sollten Sie den Code vor dem Überprüfungsmeeting selbst überprüfen. Notieren Sie die Änderungen, die Sie vorschlagen würden, wenn dies der Code eines anderen wäre. Dies führt zu einer Erinnerung an Code, den Sie in einigen Tagen möglicherweise nicht mehr gesehen haben, und hilft Ihnen auch dabei, das Betrachten Ihres eigenen Codes mit kritischem Auge zu üben. Nachdem Sie einige Rezensionen sowohl als Rezensent als auch als Autor durchlaufen haben, werden Sie feststellen, dass Ihre eigenen Notizen besser mit denen des Restes der Gruppe übereinstimmen.

  • Machen Sie sich während der Überprüfung Notizen . Dies sollte nicht Ihr Hauptanliegen sein - jemand anderes sollte die Aktionselemente aufzeichnen, auf die sich die Gruppe einigt, damit Sie sich darauf konzentrieren können, den Code zu erklären und das Feedback anzuhören. Aber es wird Zeiten geben, in denen Sie wertvolles Feedback erhalten, das kein Aktionselement ist, und Sie sollten solche Dinge korrigieren, sobald sie auftreten.

  • Denken Sie daran, dass es nicht persönlich ist. Es ist schwer zu vermeiden, sich während einer Überprüfung defensiv zu fühlen (und zu handeln). Es ist in Ordnung, Ihren Code zu erklären, wenn Sie glauben, dass er missverstanden wurde, aber vor allem versuchen Sie, nur zuzuhören.


Ich würde eins hinzufügen: "Linie 3502" wäre eine große rote Markierung. Sehr lange Dateien zu haben ist definitiv eine schlechte Sache.
BЈовић

2
@VJo: Caleb schlug vor, die Zeilennummern über Dateien hinweg fortzusetzen, also ist Zeile 3502 tatsächlich Zeile 238 von foo.c.
Heinzi

Ich bin nicht einverstanden mit der Zeilennummer, die über Dateien hinweg fortgeführt wird. Für mich ist das nur verwirrend und umständlich. Wenn Probleme gefunden werden, müssen diese ohnehin nach Modulen (Klasse, Datei, möglicherweise sogar Methode) verfolgt werden. Darüber hinaus sollten Sie während einer Codeüberprüfung nicht ein gesamtes System überprüfen, sondern ein Subsystem oder sogar einige Klassen oder Dateien, sodass es nicht zu schwierig sein sollte, zu verfolgen, wo sich die Änderungen befinden.
Thomas Owens

1
@ThomasOwens Die Zeilennummern dienen ausschließlich der einfachen Beschreibung eines Ortes im überprüften Code während der Überprüfung. Es ist schneller und weniger fehleranfällig als die Verwendung von "Datei foo.c, Zeile 123", und das OP fragt speziell nach weniger Zeit für die Suche nach Code. Stimmen Sie zu, dass Probleme per Datei verfolgt werden sollten. IME, Bewertungen decken in der Regel eine Gruppe von Klassen ab, vielleicht zwei große oder ein Dutzend kleine. Über 3500 Zeilen sind zu viele, um sie gleichzeitig zu überprüfen. Ich habe nur versucht, darauf hinzuweisen, dass die Zahlen von einer Datei zur nächsten fortgesetzt werden.
Caleb

Wenn Sie organisiert sind, sollte es keine Rolle spielen. Für mich habe ich das Gefühl, dass es mich verlangsamen würde. Ich war an Codeüberprüfungen beteiligt und drucke die Dateien immer aus, geheftet nach Klasse / Datei und lese und kommentiere sie dann. Wenn mir jemand sagen möchte, wo ich suchen soll, möchte ich ein Paar aus Dateiname und Zeilennummer - dies würde es mir viel einfacher machen, zumal meine IDE den Dateinamen in der Kopf- / Fußzeile auf jeder Seite ausdruckt und ich das drucke Zeilennummern pro Datei.
Thomas Owens

3

Eine weitere Sache, die Sie zu den anderen Antworten hinzufügen sollten: Um formelle Codeüberprüfungen zu vereinfachen, führen Sie VIELE informelle Codeüberprüfungen durch ! Zum Beispiel:

"Hey Bob, kann ich dir zeigen, wie ich die Funktion foo () implementiert habe?" "Hey Steve, kannst du dir dieses Klassendiagramm ansehen und mich wissen lassen, was du denkst?" "Hey Karen, kannst du mir helfen, dieses Problem zu durchdenken? Ich glaube, ich habe eine gute Lösung, aber ich könnte deine Hilfe gebrauchen ..."

Machen Sie dies zu einer regelmäßigen Gewohnheit. Wenn Sie Ihre Mitarbeiter frühzeitig in den Entwurfsprozess einbeziehen, haben Sie:

  • Beziehungen aufbauen
  • Gewinnen Sie neue Einblicke in das Problem
  • Verbessern Sie Ihre Fähigkeit, das vorliegende Problem / die vorliegende Lösung zu erklären
  • Sparen Sie später Zeit bei formellen Codeüberprüfungen

+1 für Teambildung und Verbessern Sie Ihre Fähigkeit, das Problem zu erklären. Das ist in der Tat eine großartige Idee!
Karthik Sreenivasan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.