Prüft der Code bewährte Verfahren?


32

Als das Unternehmen, in dem ich arbeite, neue Manager anheuerte, boten sie uns an, bei jedem Meeting einen Überblick über den Code einer Person zu erhalten. Wir haben alle zwei Wochen Besprechungen, also sollte jedes Mal einer der Entwickler seinen / ihren Code auf dem Projektor zeigen, und andere wollten darüber diskutieren.

Ich fand das großartig: Jeder Entwickler würde beim Schreiben von Code vorsichtiger sein und wir könnten unsere Erfahrungen besser teilen. Aber irgendwie haben wir das vergessen und das Angebot blieb nur ein Angebot.

Was sind die Vorteile davon und gibt es irgendwelche Nachteile?


9
Dies klingt nach informellen / gelegentlichen Code-Überprüfungen, und die Code-Überprüfung ist eine gute Sache (tm). Wir haben sogar eine Schwestersite für Code-Reviews.
Yannis

@ElYusubov, der Kommentar muss unter Odeds Antwort stehen, denke ich)))
superM

2
Unterstützt eine Lernumgebung. Es ist für die Zuschauer genauso wichtig wie für die Autoren.
MathAttack

3
Solange es kooperativ bleibt, ist es eine gute Praxis. Es gibt einige Unternehmenskulturen (auf und ab), in denen Kollegen interne Konkurrenten sind. Unter diesen Umständen erfordern Code-Überprüfungen neben technischen auch soziale / politische Fähigkeiten. In diesem Fall würde ich sagen, dass es zu stressig ist. Die besten Code-Reviews sind die informellen unter Kollegen: "Hey, ich habe gerade ein Update heruntergeladen und den Code gesehen, den Sie gestern eingecheckt haben. Vielleicht wäre es eine bessere Idee, wenn Sie ... anstatt ...". Kollaborativ und vorteilhaft, nicht wettbewerbsfähig. Die Projektoridee fühlt sich irgendwie an wie ein Ausflug "Lasst uns Tomaten werfen".
Louis Somers

2
Einer der Hauptvorteile von Code Reviews ist, dass Sie automatisch besseren Code schreiben, wenn Sie wissen, dass er öffentlich ausgestrahlt wird.
James Anderson

Antworten:


52

Code-Überprüfungen sind eine gute Praxis.

Dies ist wahrscheinlich der beste Weg, um aus Fehlern zu lernen und zu sehen, wie bestimmte Probleme von anderen gelöst werden. Dies ist auch eine der besten Möglichkeiten, um die Qualität einer Codebasis aufrechtzuerhalten.

Codeüberprüfungen finden in vielen Unternehmen statt, obwohl es schwierig zu sagen ist, dass es einen bestimmten Prozess gibt, dem sie alle folgen.

Bei einer formelleren Codeüberprüfung sitzt ein Senior (oder mehrere Senioren) zusammen mit einem Entwickler, um seinen Code zu überprüfen, Vorschläge zu unterbreiten und gleichzeitig zu unterrichten.

Zusätzliche Vorteile für Code-Überprüfungen (wie für diese Frage kommentiert) sind:

  • Eine großartige Möglichkeit zu lehren und zu lernen
  • Sie sind eine der besten Möglichkeiten, um die Konsistenz einer Codebasis (Stil und Redewendungen) zu verbessern und beizubehalten.
  • Sie tragen dazu bei, dass alle Teammitglieder den Stil und die Redewendungen verstehen, die im Projekt verwendet werden, und wie sie verwendet werden
  • Code-Überprüfungen beschleunigen die Entwicklung, da sie Fehler und Designfehler frühzeitig erkennen (obwohl sie die anfängliche Entwicklung verlangsamen können, zahlen sie sich in späteren Entwicklungszyklen aus).
  • Es gibt eine Tool-Unterstützung, mit deren Hilfe der Codeüberprüfungsprozess rationalisiert werden kann

1
Ja, Code-Reviews sind gut. Aber wird es die Entwickler nicht verlangsamen?
Radu Murzea

4
@SoboLAN - Wenn Code-Überprüfungen dazu führen, dass Fehler früher erkannt und schlechte Designs behoben werden, bevor sie in Produktion gehen können, was denkst du dann?
Oded

9
@SoboLAN: Qualität, Geschwindigkeit, Preis - wählen Sie zwei.
Den

6
Dies ist auch der beste Weg, um die Codebasis zu verbessern und die Konsistenz aufrechtzuerhalten , dh um sicherzustellen, dass die Teammitglieder die im Projekt bevorzugten Codierungsidiome verstehen, teilen und richtig verwenden.
Péter Török,

4
@SoboLAN: Meiner Erfahrung nach beschleunigen Code-Reviews Entwickler. Sie finden schneller mehr Fehler und können Ihre Lösungen mit denen anderer Entwickler in Einklang bringen.
Tynam

15

Code Reviews sind ein nützliches Tool zum Lernen , insbesondere wenn Sie ein neues Teammitglied an Bord haben. Nun, es ist auch als Peer-Review-Prozess bekannt :)

Es gibt verschiedene Arten von Codeüberprüfungen:

  • Over-the-Shoulder - Ein Entwickler schaut dem Autor des Codes über die Schulter, während dieser den Code durchläuft.
  • E-Mail-Weitergabe - Das Quellcode-Verwaltungssystem sendet den Code nach dem Einchecken automatisch per E-Mail an die Prüfer. Auszug aus dem Kommentar: Da ich das Management nicht überzeugen konnte, Zeit für eine formale Codeüberprüfung zu verwenden, habe ich versucht, die Änderungen meiner Mitarbeiter zu überprüfen, wenn ich mit den in Tortise integrierten Verlaufs- / Diff-Tools neue Revisionen aus der Quellcodeverwaltung abrufe
  • Pair Programming - Zwei Autoren entwickeln gemeinsam Code auf derselben Workstation, wie es bei Extreme Programming üblich ist.
  • Toolgestützte Codeüberprüfung - Autoren und Prüfer verwenden spezielle Tools für die Überprüfung von Peer-Codes.

Es gibt nur einen Bereich, associated disadvantagein dem formelle Code-Überprüfungen erhebliche Investitionen in die Vorbereitung des Überprüfungsereignisses und in die Ausführungszeit erfordern .

Weitere Referenzen sind unten aufgeführt (für tiefere Tauchergebnisse)


1
Ihre 2. Kugel könnte erweitert werden. Nachdem ich das Management nicht überzeugen konnte, Zeit für eine formale Codeüberprüfung zu verwenden, habe ich versucht, die Änderungen meiner Mitarbeiter zu überprüfen, wenn ich mit den in Tortise integrierten Verlaufs- / Diff-Tools neue Revisionen aus der Quellcodeverwaltung abrufe.
Dan Neely

@DanNeely guter Kommentar, ich werde es sicher einschließen.
EL Yusubov

11

Diese bestimmte Praxis scheint ineffizient und wahrscheinlich peinlich zu sein - wer möchte, dass ihre Fehler auf eine ganze Gruppe von Menschen aufmerksam gemacht werden. Wenn sie also nicht auswählen können, was überprüft werden soll, und der Code noch nicht in der Produktion ist, wird dies wahrscheinlich dazu führen, dass sich die Leute unwohl fühlen.

Je nachdem, wann der Code überprüft wird, kann es einen großen Unterschied machen, ob die Kommentare zur Codeüberprüfung in den Code eingefügt werden oder nicht. Wenn der Entwickler nur Produktionscode auswählen und auswählen kann, ist es unwahrscheinlich, dass Überprüfungskommentare implementiert werden. Es ist schön, Meetings zu haben, in denen Entwickler eine raffinierte Technik zeigen können, an der andere interessiert sind, aber das ist keine Codeüberprüfung. Das ist Training.

Wir überprüfen jeden Code, bevor er in die Qualitätssicherung verschoben wird. Jedes Stück. In der Regel sind nur der Code-Reviewer und der Entwickler beteiligt. Es geht nicht an die Qualitätssicherung, bis der Code-Prüfer es offiziell bestanden hat. Der Entwickler muss also die Änderungen vornehmen. Wir haben viele Probleme gefunden und schnell behoben, die die Qualitätssicherung möglicherweise nicht gefunden hat (sie finden Dinge, die wir auch in der Codeüberprüfung nicht sehen). Darüber hinaus wird die Cowboy-Codierung reduziert und es werden schnell diejenigen Personen identifiziert, die keine guten Leistungen erbringen, sodass wir ihre Probleme beheben und sie trainieren oder beseitigen können, bevor sie unsere Anwendung beschädigen. Die Codeüberprüfungszeit ist Teil unserer Zeitschätzung bei der Planung der Arbeit, damit sie sich überhaupt nicht auf die Frist auswirkt. Tatsächlich spart es auf lange Sicht Zeit, denn je früher ein Problem gefunden wird, desto einfacher ist es zu beheben.

Ich persönlich habe weniger erfahrenen Entwicklern durch Codeüberprüfung viele bessere Techniken beigebracht, und ich habe selbst einige bessere Techniken erlernt, indem ich den Code anderer Leute sowie deren Kommentare zu meinem Code überprüft habe. Weitere Codeüberprüfungen stellen sicher, dass jemand anderes den Code versteht, was wesentlich zur Verbesserung der Wartbarkeit beiträgt. Manchmal funktioniert der Code, aber die Fragen der Überprüfung machen deutlich, dass es zu Wartungsproblemen kommt, da der Code schwer zu verstehen ist. Besser in solchen Fällen umgestalten, solange Sie noch nicht alles vergessen haben, als ein Jahr später, wenn selbst der Autor des Codes sich am Kopf kratzt und sich fragt, warum der Code das und das tut.


Ich stimme Ihnen voll und ganz zu, aber ich hoffe, dass unser Team professionell genug ist, um sich nicht zu schämen, sondern stattdessen zu lernen.
SuperM

2
Endlich eine vernünftige Antwort. Ich fand es weitaus effektiver, Überprüfungen nur mit dem Entwickler und einem einzelnen Rezensenten durchzuführen, als dies in einer Gruppe zu tun. Auf diese Weise ist es für beide Seiten viel einfacher, mit Fehlern umzugehen, und Sie können gelegentlich in die Paarprogrammierung einsteigen, ohne die Zeit der anderen Gruppenmitglieder zu verschwenden.
X4U

5
@superM, die Regel ist "öffentlich loben, privat kritisieren" aus einem Grund.
HLGEM

+1 für das Timing. Am besten ist es, paarweise zu codieren, zuerst testen. In jedem Fall möchten Sie den Code überprüfen, während Sie noch bereit sind, ihn umzuschreiben. Es hat wenig Sinn, Code zu überprüfen, wenn Sie nicht bereit sind, größere Bereinigungen vorzunehmen. Ich war in Code-Reviews, in denen der ursprüngliche Entwickler mehr als 50 Codezeilen verwendet hatte, um eine Bibliotheksfunktion neu zu implementieren. Da dieser Code jedoch getestet wurde, war das Ersetzen der 50 unnötigen Zeilen durch einen einzelnen Funktionsaufruf nicht zulässig! Dies macht aus einem 10.000-Zeilen-Programm, das von einem halben Entwickler gepflegt werden kann, ein 100.000-Zeilen-Programm, das vier benötigt.
Kevin Cline

8

Das Problem mit dieser Art von Code-Überprüfung, ein Entwickler alle zwei Wochen, wird der Fortschritt langsam sein. Es kann Monate dauern, bis alle im Rampenlicht stehen.

Während Codeüberprüfungen gut sein können, muss es einen Grund dafür geben, und es muss einen Grund dafür geben, warum sie durchgeführt werden.

Mehrere Fragen müssten entschieden werden:

  • Wer würde den Entwickler auswählen und wie viel Aufmerksamkeit würden sie erhalten? Keine Ankündigung Bewertungen sind Fallen.
  • Wer würde den zu überprüfenden Teil des Codes auswählen: das Management, der leitende Entwickler des Projekts oder der zu überprüfende Entwickler.
  • Ist der Zweck, der Person, deren Code sich auf dem Projektor befindet, etwas Besseres beizubringen, oder ist der Zweck der Person, deren Code sich auf dem Projektor befindet, allen anderen im Raum beizubringen, wie sie ihren Code verbessern können.
  • Wie viel Prozent des Codes werden auf diese Weise überprüft. Wird dies Teil des QS-Prozesses sein?

Wenn die Leute, die diesen Plan vorgeschlagen haben, noch keine Antworten auf diese Fragen haben, lesen sie möglicherweise einen Artikel darüber, wie alle großen Unternehmen Codeprüfungen durchführen. Deshalb sollten wir sie auch durchführen, ohne den Zweck dahinter zu verstehen.


3

Die Codeüberprüfung ist nur dann eine gute Übung, wenn die Idee zur Codeüberprüfung vom Entwicklungsteam stammt. Entwickler benötigen keine Projektoren und Präsentationen, um sich gegenseitig Code zu überprüfen. Wenn sie wollen, werden sie es vorziehen, zur Konferenz zu gehen.

Wenn die Idee der Codeüberprüfung vom Management kommt, kann dies wie eine Untersuchung einer geringen Softwarequalität klingen und das Entwicklungsteam demoralisieren. Ich denke nicht, dass das Management-Team in den Code-Überprüfungsprozess einbezogen werden sollte. Code-Überprüfung Seite an Seite mit dem Management-Team - sehr schlechte, tödliche und destruktive Praxis.


2

Die Codeüberprüfung ist eine hervorragende Praxis, insbesondere wenn Entwickler Wissen austauschen und die Grundregeln im Voraus festgelegt sind, dass Vorschläge und Kritik konstruktiv sein sollen und nicht, um einen einzelnen Entwickler für die Zielübung zu verwenden.

Manager, die keine Entwickler sind, werden von den Entwicklern mit Misstrauen aufgenommen, wenn sie sich für eine Codeüberprüfung entscheiden. Die meisten Manager-Typen möchten nicht auf die Details eingehen, auf die Entwickler bei der Betrachtung von Code von Natur aus eingehen. Die meisten Manager werden auch nicht verstehen, warum die Entwickler einen Ansatz über einen anderen kritisieren.

Wenn Sie die gute Arbeit der Entwickler gegenüber dem Management demonstrieren möchten, hat die "Codeüberprüfung" eine andere Bedeutung und sollte nicht so detailliert sein wie die Codeüberprüfungen, die durchgeführt werden, um die Codequalität unter den Entwicklern anzuweisen / zu verbessern. Diese Art der Präsentation kann hilfreich sein, um zu demonstrieren, was Entwickler tun, wenn die Präsentation auf höherer Ebene und weniger code-spezifisch sein kann, und sich auf das konzentrieren, was die Manager verstehen (Wert, ROI usw.). Es könnte Managern verständlich machen, dass Joe durch den Aufbau von X einen erheblichen Mehrwert für das Unternehmen geschaffen hat, der Y-Zeit spart, oder Z-Dollar pro Bestellung usw. Ich denke, es ist die Mühe wert, den Wert eines Einzelnen zu zeigen Mitglieder Ihres Teams. Denken Sie jedoch daran, dass Sie vorsichtig sein müssen, um Ihr Publikum nicht mit Fachjargon oder zu vielen Detailstufen zu überfordern.


1

Ich stimme voll und ganz zu, dass Code-Reviews für den Unterricht sehr konstruktiv sind. Ich möchte jedoch auf jeden Fall sicherstellen, dass die Designmuster des Teams korrekt befolgt werden.

Wir schreiben ein wenig Prototypenarbeit und überarbeiten Code-Teile, und obwohl wir uns mit dem Produkt am Ende wohl fühlen, ist die Lesbarkeit beeinträchtigt - die Leute können es nicht ansehen und sehen, wie klar es ist.

Unabhängige Augen sind immer von Vorteil, wenn man sich auf bestimmte Denkweisen einlässt und dies auf allen Erfahrungsebenen geschieht. Sie haben Stunden in das Design und den Code investiert. Daher ist es schwierig, mit Codeüberprüfungen umzugehen, wenn Sie befürchten, dass Ihre Bemühungen zunichte gemacht werden. Am Ende erhalten Sie jedoch hoffentlich eine sauberere, schlankere und besser verwaltbare Anwendung, und die Erfahrung ist in Ihnen verankert.

Für unser Team machen wir wie @ElYusubov erwähnt und verwenden ein Tool speziell für Code Review - Crucible. Die Nutzer überprüfen, kommentieren und melden den Code ab. Jede Woche setzen wir uns hin und prüfen von Angesicht zu Angesicht interessante und / oder komplexe Codeteile.


+1 Wir alle können "dafür sorgen, dass es funktioniert", aber es geht mehr darum, sicherzustellen, dass der Code lesbar und wartbar ist, insbesondere durch Befolgen von Konventionen. Nicht die aufregendste Arbeit, aber sehr wertvoll.
Kirk Broadhurst

1

Als Praktikant im Bereich Softwareentwicklung habe ich Code-Reviews als überaus hilfreich empfunden.

In meinem Team ist für jedes Commit eine Codeüberprüfung erforderlich (große Änderungen werden formal, kleinere Änderungen werden schnell angezeigt). Ich habe definitiv das Gefühl, dass meine Konstruktions- und Designkünste dadurch gestärkt wurden, zumal ich mit größerer Wahrscheinlichkeit das Whiteboard als das Terminal sofort herausziehe, da ich weiß, dass ich beobachtet werde. :)

In der Tat denke ich, dass es viel besseren Code produziert, mit dem einzigen kleinen Nachteil, dass die Entwicklungszeit etwas langsamer ist (was sich meiner Meinung nach auf lange Sicht lohnt, wenn Sie nicht fürchterlich gestalteten Code reparieren / erweitern müssen). Ich denke auch, dass Junioren / Praktikanten im Team die Chance auf wertvolles Feedback zu schätzen wissen. Ich weiß ich tue!


Ich arbeite erst seit 1,5 Jahren und möchte diese Code-Reviews aus ähnlichen Gründen. ))
SuperM

1

Aus meiner Erfahrung heraus ist Code Review eine großartige Sache, wenn Sie sie gut ausführen. Wenn Sie professionelle / reife Teammitglieder und Manager haben. Wir als Programmierer sind "Löser". Unsere Aufgabe ist es nicht, Textzeilen zu erstellen. Deshalb müssen wir Ideen, Fehler, Probleme und Erfahrungen teilen. Code-Überprüfung ist wirklich eine gute Praxis, um dies zu erreichen.

Leider hört es sich gut an, ist aber in den meisten Unternehmen sehr schwer umzusetzen. Ihr Team braucht viel "Autonomie". Es scheint schwierig zu sein, Ihre Manager oder die Finanzabteilung davon zu überzeugen, dass es rentabel ist, keine neuen Funktionen zu erstellen.

In meiner Firma versuchen wir, eine Codeüberprüfung durchzuführen. Aber es wird zu viel Zeit damit verbracht, das Kaninchen zu jagen (Features zu machen).


Die Jagd nach dem Kaninchen kommt mir sehr bekannt vor. Trotzdem hoffe ich, dass wir die Codeüberprüfung einführen können, besonders wenn es unseren Managern nichts ausmacht.
SuperM

1

Viele Stil- und grundlegende Syntaxtypprüfungen werden heutzutage mithilfe von Tools (FXCop usw.) durchgeführt.

Codereviews sind jedoch gut, insbesondere bei neuen Teammitgliedern, komplexen oder wirkungsvollen Dingen (z. B. etwas, das wichtigen Personen auffällt, wenn es ausfällt oder geschäftliche Auswirkungen hat) und insbesondere beim Outsourcing oder bei der Verwendung von kurzfristigen Auftragnehmern (insbesondere wieder) Wenn sie keine Muttersprachler sind, können Übersetzungsfehler / Sprachprobleme dazu führen, dass die Software alle Tests besteht, aber nicht das tut, was sie eigentlich tun soll.

Ich bin kein Fan davon, Code für ein Team auf einen Projektor zu setzen - viel besser für ein Code-Review-Meeting, bei dem ein anderes Teammitglied (Teamleiter usw.) eine Liste mit dem Entwickler durchläuft. Dies wirkt sich auf weniger Leute aus - es verhindert, dass viel Zeit mit Stilargumenten verschwendet wird - und ist für den Entwickler weniger peinlich. Es ist konstruktiver und einfacher für den Entwickler, echte Probleme in den Griff zu bekommen und sich nicht von "Ich hätte das getan ..." - Kommentaren blenden zu lassen.

Ich denke auch, dass nicht erzwungene Codeüberprüfungen - wie das Versenden von Code auf eine Freigabe oder das Versenden per E-Mail in der Hoffnung, dass jemand seine Mittagspause aufgibt, um sie durchzuarbeiten - Zeitverschwendung sind.

Ein Platz mit einem Haufen Listing, einem Filzstift und einer Tasse Kaffee im Kaffeebereich ist dafür ideal.


0

Diese Art von Gruppenausstellung und Tell wäre gut für neue Technologien oder um mehrere jr zu bekommen. Entwickler sind auf dem neuesten Stand, aber ich denke nicht, dass dies so gut ist wie eine konsequente Überprüfung des neuen Codes. Es ist effizienter, es eins zu eins machen zu müssen.


-2

Code-Überprüfung hilft, "das Ganze" zu sehen. Separate Entwickler tendieren dazu, nur ihre Anforderungen / Probleme zu sehen. CR entdeckt Ideen und Lösungen aus der ganzen Perspektive. CR hilft hauptsächlich dabei, unnötige Arbeitsabfälle zu vermeiden. Das ganze Produkt ist billiger und in besserer Qualität.


1
Ohne eine Erklärung kann diese Antwort für den Fall unbrauchbar werden, dass jemand anders eine gegenteilige Meinung äußert. Wenn zum Beispiel jemand eine Behauptung wie "Code Review verschleiert die Dinge und macht es schwieriger," das Ganze "zu sehen" , wie würde diese Antwort dem Leser helfen, zwei gegensätzliche Meinungen zu ermitteln? Betrachten wir bearbeiten es in eine bessere Form ing, zu treffen wie man Antwort Richtlinien
gnat
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.