Wie gehe ich mit Code-Überprüfungen an meinem neuen Standort um, wenn ich aus dieser Praxis komme?

33

Das Team in meiner neuen Firma hat keinen Codeüberprüfungsprozess.

Ich komme aus Unternehmen mit einer Codeüberprüfung als Muss-Kultur und daher fühle ich mich nicht wohl, meinen Code zu schreiben, ohne ihn von jemandem überprüfen zu lassen.

Ich bin der festen Überzeugung, dass die Codeüberprüfung eine Möglichkeit ist, die Qualität zu verbessern und Zeit zu sparen, da potenzielle Probleme früher erkannt werden (ich spreche jedoch nicht über die Paarprogrammierung).

  • Wie kann ich zeigen, dass die Codeüberprüfung keine Zeitverschwendung, sondern eine Zeitersparnis darstellt?
  • Kann die Codeüberprüfung bei Unit-Tests übersprungen werden?
jparkcool
quelle
Externe Ressourcenempfehlungen sind pro Hilfezentrum explizit themenunabhängig . Siehe meta.programmers.stackexchange.com/questions/6483/…
gnat
1
Stellen Sie es hier: meta.codereview.stackexchange.com Und meiner Meinung nach kann diese Frage hier gestellt werden, weil er / sie nur etwas über das Programmieren wissen möchte.
xqMogvKW
1
Obwohl ich auch fest an die Codeüberprüfung glaube, habe ich auch einige schlechte Erfahrungen gemacht, in denen die Codeüberprüfung zu einem ewigen Krieg wurde, und das Codeüberprüfungstool (gerrit) zu einem schlechten Avatar eines Diskussionsforums mit übermäßig leidenschaftlichen Debatten von übergroßen Egos. Ich bin mir nicht sicher, ob dies in irgendeinem Unternehmen passieren wird oder ob dies nur eine Frage der Reife der Menschen ist.
Joel
Umbenannt auf das, was Sie fragen, weil "Ist Code Review ein Muss?" ist eine zu weit gefasste, unbeantwortete Frage, da sie von einer Vielzahl von Faktoren abhängt - Unternehmensgröße, Anzahl der Entwickler, Umsatz usw. usw. Ich würde darüber nachdenken, wie Sie Ihren Wunsch und Ihre Begeisterung für gute Programmierpraktiken und -methoden einbeziehen und vermarkten können Softwareherstellung auf Ihren öffentlichen Websites (Lebenslauf, LinkIn, Github, Twitter usw.). Veröffentlichen Sie, was Ihnen wichtig ist und wonach Sie suchen, damit die Leute, mit denen Sie zusammen sein möchten, es sehen. Dies ist natürlich ein "zukünftiger" Rat, daher ein Kommentar :)
Michael Durrant
3
Ich kann nicht erkennen, dass dies eine "Empfehlung für externe Ressourcen" ist. Das klingt für mich nicht nach dem richtigen Grund.
Nyuszika7h

Antworten:

30

Kann die Codeüberprüfung bei Unit-Tests übersprungen werden?

Aber wieso?

Die Hauptaufgabe von Peer Review besteht nicht darin, Fehler zu erkennen.

Ja, Sie können möglicherweise einige potenzielle Fehler und zweifelhaften, fehleranfälligen Code identifizieren. Dies passiert häufig, aber das gelegentliche Erkennen von Fehlern bedeutet nicht, dass Peer Review eine zuverlässige Methode ist , um das Vorhandensein von Fehlern auszuschließen . Weit davon entfernt. Es ist nicht das richtige Werkzeug, um die Funktionsrichtigkeit der Implementierung zu überprüfen .

Die Codeüberprüfung erzwingt jedoch die Wartung des Codes . Ich werde verlangen, dass der Code sauber und verständlich ist (nicht nur für den Autor), bevor er in Produktion geht.

Das Vorhandensein von Komponententests ist völlig orthogonal dazu. Sie können eine 100% ige Codeabdeckung erzielen und alle Tests für völlig unverständlichen Code bestehen.

Die Codeüberprüfung dient auch dazu, andere Entwickler mit Ihrer Arbeit vertraut zu machen, damit sie wissen, was was ist, und in der Lage sind, von dort aus Fehlerberichte zu bearbeiten, während Sie in den Ferien sind usw. Zu wissen, was Sie sofort getan haben, kann ihnen helfen Machen Sie ihre Arbeit gut - halten Sie die Codebasis konsistent (halten Sie sich an ähnliche Muster und Konventionen in der gesamten App) oder vermeiden Sie Code-Duplikationen.

Im weiteren Sinne lernt und wächst man als Entwickler auch, indem man den Code anderer Leute liest.

Unit Tests können kaum einen Ersatz dafür sein. Ja, wenn sie gut geschrieben sind, lesen sie sich wie Dokumentation, und wir sollten uns darum bemühen. Dies schließt sich bei der Durchführung von Peer-Reviews jedoch nicht gegenseitig aus, ganz im Gegenteil - alle Vorteile von Peer-Reviews bleiben erhalten, und die Tatsache, dass Ihre Peers einige schöne Komponententests haben, macht den Überprüfungsprozess einfacher und noch vorteilhafter eher als überflüssig.

Konrad Morawski
quelle
4
Ich glaube nicht, dass Unit-Tests auch einen Ersatz für Code-Reviews darstellen. Die Hauptaufgabe von Unit-Tests ist es jedoch auch nicht, Fehler zu erkennen. Ja, Sie können beim Schreiben eines Komponententests einige potenzielle Fehler identifizieren, aber durch Komponententests wird sichergestellt, dass Sie später keine Fehler einführen, wenn Sie etwas ändern müssen. Das Ziel von Unit-Tests ist es also, Ihren Code auch wartbar zu halten.
Doc Brown
2
@ DocBrown stimmt das. Das Fangen von Regressionsfehlern fällt jedoch auch unter die Kategorie des Fangens von Fehlern. Offensichtlich ist dies einer der Vorteile, die Unit Tests gegenüber Peer Review (in diesem Aspekt) haben, da es sich nicht um eine einmalige Operation handelt. Peer Review versucht nicht einmal, diesen wichtigen Aspekt in Angriff zu nehmen, da es nicht möglich ist, die gesamte Codebasis nach jeder einzelnen Änderung erneut zu überprüfen.
Konrad Morawski
1
@ DocBrown Peer review doesn't even attempt to tackle this important aspect- nun ja , irgendwie. Bis zu einem gewissen Grad. Ich stelle oft fest, dass ich z. "Partner, Sie wiederholen hier praktisch die gleiche Logik, und das ist eine tickende Bombe. Eines Tages wird sie sich an diesem anderen Ort ändern und wir werden vergessen, sie hier zu aktualisieren ..."
Konrad Morawski
24

Gibt es Studien und Statistiken, die belegen, dass die Codeüberprüfung keine Zeitverschwendung, sondern eine Zeitersparnis darstellt?

Ich kenne keine. Es ist auch schwierig, solche Studien durchzuführen, da Sie zwei Teams mit gleicher und realistischer Komplexität benötigen , von denen eines Code-Reviews verwendet und das andere keine. Sie müssten wahrscheinlich dasselbe Problem lösen , was bedeutet, viel Geld aus dem Fenster zu werfen. Und Sie müssten das Experiment oft genug wiederholen, um statistische Relevanz zu erhalten, was das Geld, das Sie werfen, um Größenordnungen erhöhen würde.

Wenn Sie nur die Effizienz von Unternehmen mit Hilfe von Code-Überprüfungen gegenüber Unternehmen messen, die dies nicht tun, ist nicht nur unklar, wie die Effizienz gemessen werden soll, sondern auch, woran dies tatsächlich liegt. Code Reviews sind Teil einer größeren Kultur. Welcher Teil davon das Team tatsächlich effizienter macht, ist schwer zu sagen (und hängt sehr wohl von der Art des Teams oder des Projekts ab). Oder das Vorhandensein dieser Kultur kann einfach bedeuten, dass das Unternehmen entweder kleiner oder jünger ist, was jeweils viele Auswirkungen hat. Oder es kann auch nur sein, dass die Bereitschaft, sich Code Reviews zu unterziehen, eine gesunde Distanz zu Ihrem Ego ausschließt oder fördert;)

Aber vergessen Sie nicht: Sie haben Ihre eigene Erfahrung, aus der Sie schöpfen können. Es ist ein Teil dessen, warum sie dich eingestellt haben. Wenn Sie also wirklich der Meinung sind, dass Sie die Effizienz steigern können (und Ihr Team leidet tatsächlich darunter), dann kommunizieren Sie dies klar.

Kann die Codeüberprüfung bei Unit-Tests übersprungen werden?

Nee. Wenn Sie an die Wichtigkeit von Tests glauben, sollten Ihre Tests als erstes überprüft werden. Was ist, wenn sie Unsinn sind? Oder wenn die Berichterstattung mies ist? Oder testen sie eher die Implementierung als das Verhalten?

back2dos
quelle
2
Ich denke, Sie haben bei der Codeüberprüfung für Testfälle einen wirklich guten Punkt gemacht. Danke dir!
Jparkcool
4
+1 für "Sie haben Ihre eigene Erfahrung, aus der Sie schöpfen können" - tatsächlich muss jemand, der einige Zeit wirklich mit Codeüberprüfungen gearbeitet hat, gesehen haben, wie viele Qualitätsprobleme in der Regel während einer typischen Codeüberprüfung behoben wurden und wie viel Wissen übertragen wurde wurde erreicht. Aus dieser Erfahrung heraus dürfte es schwierig sein, nicht eine Handvoll Argumente für oder gegen Codeüberprüfungen zu haben.
Doc Brown
2
In Bezug auf Ihren ersten Absatz: Es wären nicht nur zwei Teams erforderlich, die die gleiche Aufgabe ausführen, sondern zwei Teams mit den gleichen Fähigkeiten. Die individuelle Erfahrung wird jeden Versuch, dies zu untersuchen, zunichte machen.
David Wilkins
"Was ist, wenn sie Unsinn sind? Oder wenn die Berichterstattung schlecht ist?" Oder sag einfach return true;.
Burhan Ali
1
Lesen Sie Kapitel 20 von Code Complete, um eine gründliche Beschreibung der Codeüberprüfungen sowie der Studien und Statistiken zu erhalten, die deren Verwendung unterstützen. Hier sind ein paar gute Zusammenfassungen: Jeff Atwoods Blog und ein anderer Typ
Mike Partridge
5

Entnommen aus zufälligen Folien, die ich gefunden habe , aber die harten Daten stammen aus Steve McConnells Code Complete-Buch:

Sind Code Reviews nützlich?

"Ich glaube, dass Peer-Code-Überprüfungen die größte Sache sind, die Sie tun können, um Ihren Code zu verbessern."

Jeff Atwood von Coding Horror unter http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html


"Einzelprüfungen erfassen in der Regel etwa 60 Prozent der Mängel. Dies ist höher als bei anderen Techniken, mit Ausnahme von Prototyping und Beta-Tests in großen Stückzahlen."

Steve McConnell, Code Complete 2nd Edition, Seite 485

Diese 60% -Zahl stammt aus dem IEEE-Papier von Shull et al. (2002). Was wir über das Bekämpfen von Defekten gelernt haben , enthält den Abschnitt mit dem Titel:

"Peer Reviews machen 60% der Mängel aus"

icc97
quelle
1
Ich denke, das Problem dabei ist, dass wir uns im Jahr 2006 noch nicht vollständig mit der Paarprogrammierung befasst haben, was meiner Meinung nach zu einer Art Ersatz für die Durchführung von Peer-Code-Reviews in gewisser Weise geworden ist. Mir ist klar, dass sie in gewisser Hinsicht nicht vergleichbar sind.
JP Silvashy
3

Haftungsausschluss: Diese Antwort ist meine persönliche Erfahrung :)

Ich habe sehr schlechte Erfahrungen mit Codeüberprüfungen in Code gemacht, die wir beibehalten. Weil wir normalerweise nur einen Liner oder so haben und es nicht viel zu überprüfen gibt.

Aber in konkreten Projekten habe ich gute Erfahrungen gemacht. In meiner Prüfungszeit hat mein Trainer meinen Code regelmäßig überprüft und es hat mir sehr geholfen, einige Fehler zu finden, die ich sehr oft gemacht habe und die ich nicht mehr mache.

Also würde ich sagen, es hängt stark davon ab, was du tust, wie viele Leute du bist usw.

Auch das Risiko, dass Ihre Codereviews in einem Krieg enden, ist nicht zu unterschätzen.

Knerd
quelle
3

Sie können Ihren Teamleiter und / oder Kollegen bitten, Ihren Code einer Peer-Review zu unterziehen, auch wenn Code-Reviews normalerweise nicht durchgeführt werden, möglicherweise im Rahmen Ihrer Schulung.

Stellen Sie sicher, dass Ihr Code gut geschrieben und getestet ist, bevor Sie ihn überprüfen.

Als Teamleiter habe ich selbst Codeüberprüfungen von neuen Mitarbeitern durchgeführt, bis ich (nach einer Weile) keine Bugs oder sonstigen kritischen Punkte im Code mehr fand und an welchem ​​Punkt ich keine Codeüberprüfungen mehr mit ihnen durchführte. das würde passieren, wenn:

  • Sie lernten die Systeme, mit denen sie verbunden waren, und brauchten meine Erklärungen nicht
  • Sie lernten, ihren Code zu entwerfen und / oder zu testen, bis er fehlerfrei war, bevor ich ihn sah
  • Sie haben genug über meine Richtlinien für den Codestil gelernt, so dass ich ihren Code für wartbar halte

Code Reviews haben mehrere Zwecke:

  • Finden von Fehlern im Code
  • Wissenstransfer zwischen Teammitgliedern

Ich denke, es ist in Ordnung, Codeprüfungen für neue Mitarbeiter durchzuführen, auch wenn das Team die Codeprüfungen unter den erfahrenen Teammitgliedern überspringt.

ChrisW
quelle
2

Es gibt keine Faustregel für Codeüberprüfungen, die für jede entwickelte Software durchgeführt werden müssen. Dies hängt vom Umfang der Anwendung, der Kundengröße und der Unternehmensgröße ab. Wenn Sie beispielsweise eine Anwendung erstellen, bei der es sich um eine einfache Anwendung handelt, bei der möglicherweise in Zukunft keine weiteren Versionen implementiert werden, ist dort ein Komponententest ausreichend. Die Codeüberprüfung kommt jedoch wieder zum Tragen, wenn Sie über die Leistung der Anwendung sprechen und den Code auf etwaige Mängel des Codes überprüfen müssen, die besser hätten durchgeführt werden können, um eine schnellere Leistung zu ermöglichen.

Codeüberprüfungen werden normalerweise durchgeführt, wenn sich ein Team aus mehr als 2 Entwicklern und ein technischer Leiter zusammensetzt, der die Qualität der Anwendung sicherstellen und sicherstellen möchte, dass die Codestandards eingehalten werden, um die Anwendung für zukünftige Verbesserungen zu skalieren und für andere zu aktualisieren kommende Versionen.

Zum Beispiel gibt es mittlerweile viele CMS-Open-Source-Plattformen, und diese Plattformen führen von Zeit zu Zeit Upgrades durch, um die Plattformfunktionen zu verbessern. Stellen Sie sich vor, ein Entwickler verwendet eine dieser Plattformen und befolgt nicht die Codestandards wie Hardcodierung in Kerndateien und Schreiben von Anwendungen Code in Vorlagendateien. Wenn dieser Code in die Produktion geht und der Client die Plattform später auf eine neue Version aktualisieren möchte, wird er niemals aktualisiert, es sei denn, die Codierung wird gemäß den Codestandards für diese Plattform überarbeitet. Hier wird es zu einem ernsten Problem, den Code für die Produktion freizugeben, ohne dass eine Codeüberprüfung durchgeführt wird.

Daher würde ich sagen, dass es für professionelle Softwareunternehmen ein Muss ist, Code-Reviews vor der Veröffentlichung durchführen zu lassen, und die Ausnahmen können nur für persönliche / sehr kleine Anwendungen gelten, bei denen der Entwickler ein sehr erfahrener Programmierer ist und Erfahrung mit ihm hat.

Venkat
quelle
1

Code-Überprüfungen haben Vorteile, die sich nicht aus dem eigentlichen Überprüfungsprozess ergeben: Es gibt immer ein Dilemma, Code zu erhalten, der von hoher Qualität ist, aber in kurzer Zeit erstellt wird. Ohne Codeüberprüfungen sind Sie auf sich allein gestellt, sodass Sie möglicherweise die Qualität für die Ausführung des Codes in kurzer Zeit opfern. Bei Code-Überprüfungen gibt es einen Prüfer, der Sie nicht mit geringer Codequalität davonkommen lässt - genau das, was Sie wollen, und der gezwungen ist, die Zeit zu verbringen, um Qualitätscode zu erhalten, der genau das ist, was Sie zuerst wollten und welcher Sie wissen, dass Sie Zeit sparen werden, da jede Stunde, die Sie für das Schreiben von besserem Code aufwenden, zwei Stunden für das Debuggen (oder mehr) einspart.

Ohne Codeüberprüfungen sind Sie auf sich allein gestellt. Es liegt also an Ihnen, eine hohe Codequalität beizubehalten. Eine einfache Lösung besteht darin, jede Änderung, die Sie selbst vornehmen, zu überprüfen und Dinge zu beheben, die nicht Ihren Qualitätsstandards entsprechen.

Dies vermeidet auch schreckliche Situationen, in denen Codeüberprüfungen zu Zusammenstößen von Ego führen - die Situation, in der Programmierer A Methode X verwenden würde, während B Methode Y verwenden würde. Wenn also A den Code schreibt, den er Methode X verwendet, besteht der Überprüfer B auf Methode Y, Also schreibt A den Code mit der Methode Y um, während B den Code geschrieben und A ihn überprüft hätte, wäre genau das Gegenteil eingetreten.

gnasher729
quelle
0

Wenn Sie Verfechter von Code-Reviews sind, gibt es leider keinen wirklichen Ersatz. Der unglückliche und stereotype Fall ist ein Arbeitsplatz, an dem keine Codeüberprüfungen durchgeführt werden, weil (A) sie mit der Praxis nicht vertraut sind und / oder (B) sie nicht die Zeit und Mühe aufwenden möchten, um eine Codeüberprüfung durchzuführen System vorhanden.

Grundsätzlich ist ein Kulturwandel am Arbeitsplatz erforderlich, um das zu erreichen, was Sie möchten - und das ist niemals einfach oder unkompliziert. Vergessen Sie nicht, dass selbst wenn Ihr Arbeitsplatz zu 100% davon überzeugt ist, dass die Codeüberprüfungen hervorragend sind und sie übernommen werden sollen, die Umstellung auf die neue Arbeitsweise immer noch einen erheblichen Aufwand an Zeit, Energie und Produktivität erfordert. Diese Investition sollte sich amortisieren - aber Sie müssen sich für die Investition und nicht nur für die Auszahlung einkaufen. Sehen Sie Roy Osheroves Video "Unit Testing und TDD - Wie es passieren kann" Die Herausforderungen bei der Einführung von Code Reviews sind denen bei der Einführung von Unit Testing sehr ähnlich.

In der Zwischenzeit tun Sie, was Sie können, um so viel wie möglich zu bekommen:

  • Wenn es andere Entwickler gibt, die den Wert von Codeüberprüfungen erkennen, sollten Sie versuchen, sich gegenseitig zu überprüfen, auch in informeller Form.
  • Wenn Sie einen Mentor oder Entwickler haben, der für Ihr Training verantwortlich ist, erklären Sie ihm den Wert, den Sie in den Code-Überprüfungen sehen, und fragen Sie ihn, ob er bereit wäre, Ihren Code zumindest gelegentlich zu überprüfen.
  • Teilen Sie Ihrem Manager mit, dass Sie den Code anderer Personen überprüfen möchten, da dies Ihnen hilft, das System besser zu verstehen.
  • Wenn Sie irgendwann ein Teamleiter werden, können Sie lokal Codeüberprüfungen nur für Ihr Team durchführen.

Ein Hauptvorteil von all diesen ist, dass Entwickler in Ihrer Umgebung die Codeüberprüfungen bemerken, wenn Sie sie im Laufe der Zeit warten können. Sie werden effektiv demonstrieren, wie Codeüberprüfungen in die vorhandene Kultur integriert werden können - und dies eröffnet den Weg für eine beginnende Veränderung der Kultur. Code-Überprüfungen helfen dabei . Wenn Sie dies also im Kleinen demonstrieren können, können andere - und die Kultur insgesamt - Ihrem Beispiel folgen.

Treten Sie zurück
quelle
-2

Machen Sie sich keine Sorgen mehr - Ihr neuer Arbeitgeber kümmert sich einfach nicht um Codeüberprüfungen. Lernen Sie, Vertrauen in Ihre eigenen Fähigkeiten zu haben, ohne dass Ihnen jemand sagt, dass es in Ordnung ist, den von Ihnen geschriebenen Code einzuchecken. Sie werden bald lernen, ohne den nervenaufreibenden, mühsamen Prozess zu leben, bei dem der Code anderer überprüft wird.

Befolgen Sie die Stilrichtlinien (oder nur den Stil), den alle anderen verwenden. Verwenden Sie Ihre Erfahrung, um zu entscheiden, was kommentiert werden muss, welche Benennungskonventionen verwendet werden sollen und so weiter.

Testen Sie dann alles, bevor Sie es einchecken. Das Wichtigste ist, dass es richtig funktioniert.

Simon B
quelle
2
-1: Die Tatsache, dass das neue OP-Team keine Codeüberprüfungen durchführt, macht es nicht zu einer schlechten Idee. Es ist ein Zeichen für einen guten Ingenieur, die Qualität des Entwicklungsprozesses zu verbessern.
Jørgen Fogh,
1
@ JørgenFogh Ich unterstütze auch Codeüberprüfungen, aber Sie gehen anscheinend davon aus, dass Codeüberprüfungen diesen speziellen Entwicklungsprozess unterstützen würden. Zusätzlich zu dieser Antwort würde ich fragen, warum sie keine Codeüberprüfungen durchführen - sie haben möglicherweise einen guten Grund. Vielleicht, wie diese Antwort nahelegt - dieses Unternehmen stellt Leute ein, die nicht unbedingt einen Blick auf ihren Code werfen müssen, oder zumindest die Vorteile, die sich daraus ergeben, sind die zusätzlichen Kosten einfach nicht wert. Wenn das OP versucht, aber kein Glück hat, etwas zu ändern, ist dies die Antwort, auf die man zurückgreifen kann.
DoubleDouble
1
Es ist möglich, dass die Vorteile die Kosten nicht wert sind. Die Tatsache, dass das Team keine Codeüberprüfungen durchführt, sagt jedoch nichts darüber aus, ob sie dies tun sollten oder nicht.
Jørgen Fogh
4
-1: "Das Wichtigste ist, dass es richtig funktioniert." Dies ist eine ziemlich kurzsichtige Ansicht dessen, was wichtig ist, wenn es um Produktionscode geht. Code wird öfter gelesen als geschrieben. Der Wert einer (gut durchgeführten) Codeüberprüfung geht weit über die Überprüfung der Korrektheit hinaus. Neben vielen Vorteilen stellen Code-Reviews sicher, dass Code für jemanden Sinn macht, der ihn nicht geschrieben hat.
Dancrumb
-2

Wenn Ihr neuer Arbeitgeber die Idee der Codeüberprüfung nicht mag, liegt dies möglicherweise daran, dass sie in negativer Weise mit den altmodischen Methoden für die Steuerung und Kontrolle in Verbindung stehen und auf eine modernere, agilere Vorgehensweise abzielen. In diesem Fall sind sie möglicherweise offener für die Idee der Paarbildung, die viele der gleichen Vorteile bietet und allgemein als eine dynamischere, modernere Praxis angesehen wird.

Jules
quelle