it-swarm.dev

Was ist der effektivste Weg, um Codeüberprüfungen durchzuführen?

Ich habe nie den idealen Weg gefunden, um Codeüberprüfungen durchzuführen, und dennoch benötigen meine Kunden diese häufig. Jeder Kunde scheint sie anders zu machen und ich habe mich in keinem von ihnen zufrieden gefühlt.

Was war für Sie der effektivste Weg, um Codeüberprüfungen durchzuführen?

Zum Beispiel:

  • Wird eine Person als Gatekeeper für Qualität angesehen und überprüft den Code oder besitzt das Team den Standard?
  • Überprüfen Sie Code als Teamübung mit einem Projektor?
  • Wird es persönlich, per E-Mail oder mit einem Tool durchgeführt?
  • Vermeiden Sie Überprüfungen und verwenden Sie Dinge wie Paarprogrammierung und kollektiven Codebesitz, um die Codequalität sicherzustellen?
71
Paddyslacker

Bei meiner Arbeit haben wir eine sehr einfache Regel: Änderungen müssen von mindestens einem anderen Entwickler vor einer Zusammenführung oder einem Commit für den Trunk überprüft werden. In unserem Fall bedeutet dies, dass die andere Person physisch mit Ihnen an Ihrem Computer sitzt und die Änderungsliste durchläuft. Dies ist kein perfektes System, aber es hat die Codequalität dennoch merklich verbessert.

Wenn Sie wissen, dass Ihr Code überprüft wird, müssen Sie ihn zuerst überprüfen. Dann werden viele Probleme offensichtlich. In unserem System müssen Sie dem Prüfer erklären, was Sie getan haben, was wiederum dazu führt, dass Sie Probleme bemerken, die Sie möglicherweise zuvor übersehen haben. Wenn dem Prüfer etwas in Ihrem Code nicht sofort klar ist, ist dies ein guter Hinweis darauf, dass ein besserer Name, ein Kommentar oder ein Refactoring erforderlich sind. Und natürlich kann der Rezensent auch Probleme finden. Zusätzlich zum Betrachten der Änderung kann der Prüfer auch Probleme im Code in der Nähe feststellen.

Dieses System weist zwei Hauptnachteile auf. Wenn die Änderung trivial ist, ist es wenig sinnvoll, sie überprüfen zu lassen. Wir müssen uns jedoch unbedingt an die Regeln halten, um zu vermeiden, dass Änderungen als "trivial" deklariert werden, wenn dies nicht der Fall ist. Auf der anderen Seite ist dies keine sehr gute Möglichkeit, wesentliche Änderungen am System oder das Hinzufügen großer neuer Komponenten zu überprüfen.

Wir haben zuvor formellere Überprüfungen versucht, bei denen ein Entwickler den Code per E-Mail an den Rest des Teams weiterleitete und dann das gesamte Team zusammenkam und darüber diskutierte. Dies nahm viel Zeit in Anspruch, und infolgedessen gab es nur wenige Überprüfungen, und nur ein kleiner Prozentsatz der Codebasis wurde überprüft. Die "eine andere Person überprüft Änderungen vor dem Festschreiben" hat für uns viel besser funktioniert.

32
Dima

Ich mag Code-Reviews, obwohl sie schmerzhaft sein können. Der Grund, warum ich sie mag, ist, dass sie mehr Blick auf den Code und eine andere Perspektive bekommen. Ich glaube, dass auch bei der Paarprogrammierung der Code überprüft werden sollte. Es ist einfach genug für zwei Personen, die an demselben Code arbeiten, gemeinsam denselben Fehler zu machen, den ein anderer Satz von Augen möglicherweise nicht übersieht.

Wenn es als Gruppe mit einem Projektor durchgeführt wird, sollte es wirklich einzeln überprüft werden vor dem Meeting. Ansonsten ist es nur eine nervige Zeitverschwendung.

Ich habe nur Codeüberprüfungen per E-Mail und in einer Gruppe durchgeführt. Generell denke ich nicht, dass sie persönlich gemacht werden sollten. Sie spüren etwas mehr Druck, mit jemandem, der Ihnen über die Schulter schaut, durch den Code zu eilen. Ich glaube, dass ein Tool, das für die Codeüberprüfung entwickelt wurde, ein guter Vorteil ist, da es bei einigen alltäglichen Aspekten hilfreich sein kann und es einfacher machen sollte, problematische Codebits zu kennzeichnen, als per E-Mail.

Das Problem, wenn eine Person alle Codeüberprüfungen durchführt, besteht darin, dass dies ein Engpass sein kann. Bei gut dokumentierten und entworfenen Codierungsstandards sollte dies nicht erforderlich sein. Abhängig von der Umgebung/dem Release-Zeitplan kann es eine gute Idee sein, immer jemanden als Standby-Code-Prüfer zu haben.

Ich glaube, dass Codebesitz eine gute Idee ist, da diese Person es zu ihrer Priorität machen kann, diesen Code zu verstehen und möglicherweise eine Gatekeeper-Rolle zu spielen.

13
George Marian

Bei SmartBear erstellen wir nicht nur ein Code Review Tool , sondern verwenden es auch täglich. Es ist ein wesentlicher Bestandteil unseres Entwicklungsprozesses. Wir überprüfen jede Änderung, die eingecheckt wird.

Ich denke, es ist aus vielen Gründen eine schlechte Idee, einen einzigen Gatekeeper-Code-Reviewer zu haben. Diese Person wird zu einem Engpass und muss zu viel Code überprüfen (nur um das Projekt in Bewegung zu halten), um wirklich effektiv zu sein (jeweils 60-90 Minuten sind die Grenze der Effektivität). Codeüberprüfungen sind eine großartige Möglichkeit, Ideen und Wissen auszutauschen. Egal wie sehr Ihr Gatekeeper ein Superstar ist, er kann von anderen im Team lernen. Wenn alle Codeüberprüfungen durchführen, entsteht auch eine Umgebung mit "kollektivem Codebesitz", in der die Benutzer das Gefühl haben, die Qualität des Codes zu besitzen (nicht nur die Qualitätssicherung oder der Gatekeeper).

Wir haben ein kostenloses Whitepaper zu " Best Practices für Peer Code Review " mit 11 Tipps, wie Sie Code Reviews effektiv gestalten können. Vieles davon ist der gleiche Inhalt aus dem Buch, das John in destillierterer Form erwähnt hat.

6
Brandon DuRette

Keine Entschuldigung. Übe die Paarprogrammierung. Es ist die bestmögliche Codeüberprüfung. Jeder andere Mechanismus führt zu Schuldzuweisungen. Paarprogrammierung führt zu Teamgeist und kollektiver Eigenverantwortung. Darüber hinaus diskutieren Sie Ihre Ideen mit Ihrem Paar, scheitern schnell, ergreifen Korrekturmaßnahmen, und nur der paarweise codierte und überprüfte Code wird in das Configuration Management System (CMS) übernommen. Viel Spaß beim Programmieren!

3
karthiks

In den Codeüberprüfungen, an denen ich teilnehme, versuche ich unter anderem, den Code selbst zu überprüfen, den Code mithilfe von Tools wie Findbugs, PMD, JavaNCCP usw. statisch zu analysieren und alle Probleme zu untersuchen, die in diesen Tools auftreten den zu überprüfenden Code. Ich möchte insbesondere alles betrachten, was eine ungewöhnlich hohe Komplexität aufweist, und sie bitten, zu erklären, warum diese Komplexität erforderlich ist oder warum die vorgeschlagene Sicherheitsanfälligkeit nicht wichtig ist.

YMMV

2
mezmo

Wo ich derzeit arbeite, produzieren wir Hardwaregeräte und die Software, die mit ihnen verbunden ist und in eine kritische Infrastruktur gelangt. Folglich legen wir großen Wert auf die Release-Qualität. Wir verwenden eine Variante von Fagan Inspection und haben einen formellen Überprüfungsprozess. Wir sind unter anderem nach ISO 9001 zertifiziert.

Die kritische Infrastrukturbranche ist sehr an Zuverlässigkeit und Wiederholbarkeit interessiert. :-)

2
Paul Nathan

Ich empfehle die Verwendung von Codeüberprüfungen, wenn Sie keine Paarprogrammierung durchführen.

Nicht die Vor- und Nachteile des Pairings zu diskutieren, aber es ist schwer zu bestreiten, welche positiven Auswirkungen es hat, wenn Ihr Code ständig von (zumindest) einer anderen Person überprüft wird. Der Code wird sogar von (mindestens) zwei Programmierern geschrieben und entworfen - besser geht es kaum. Ich sage "zumindest", weil imo, Sie sollten versuchen, Paare zu wechseln viel damit jeder eine Chance bekommt, mit dem Code zu arbeiten.

2
Martin Wickman

In meiner Firma gibt es obligatorische Codeüberprüfungen für Junior-Programmierer und freiwillige Überprüfungen für Senioren. Es gibt keinen festgelegten Code-Prüfer. Überprüfungsanforderungen werden an alle Entwickler gesendet.

Dieses System funktioniert gut - Überprüfungen werden durchgeführt, wenn es die Zeit erlaubt, und Änderungen können von mehreren Augäpfeln überprüft werden.

Das ausgezeichnete und kostenlose Tool Review Board funktioniert sehr gut für uns und hat sich als hervorragende Möglichkeit zur Kommunikation von Bewertungen erwiesen.

2
GavinH

Wenn Sie an einem Projekt arbeiten, bei dem mehrere Personen zur Codebasis beitragen, muss ein Standard festgelegt werden.

Nach meiner Erfahrung ist es an dieser Stelle am besten, eine Person als "König" der Codeüberprüfung zu bestimmen, wenn Sie so wollen und was sie sagt. In dieser Hinsicht wird sich der König darum kümmern, wenn ein Benutzer die Standards nicht einhält.

Als Entwickler überprüfe ich meinen eigenen Code viele Male, um lesbar, vernünftig und alles andere zu sein. Normalerweise verwenden wir Javadoc oder ähnliches in bestimmten Sprachen, mit denen wir codieren, und verwenden das @ author-Tag, um Funktionen, Klassen usw. den Besitz zuzuweisen.

Wenn eine Funktion nicht korrekt ist, sprechen wir mit dem Eigentümer, genauso wie mit der Klasse usw.

2
Chris

In meinem Unternehmen wird jeder Aufgabe ein Tester zum Testen der Aufgabe sowie ein Code-Prüfer zum Überprüfen des Codes zugewiesen.

Wenn Ihr Produkt bereits veröffentlicht ist und Sie sicherstellen möchten, dass Sie nichts falsch machen (z. B. ein Handle Leak oder ein Speicherleck), sind Codeüberprüfungen eine großartige Sache. Ich denke, während der ersten Entwicklung vor der Veröffentlichung Ihres Produkts können Codeüberprüfungen zu viel Arbeit sein.

Wenn Ihr Team alle leitenden Entwickler hat, ist Peer Review immer noch hilfreich. Jeder macht manchmal Fehler. Wenn Ihr Team einige Senioren und einige Junioren hat, lassen Sie die Senior-Entwickler die Codeüberprüfungen durchführen, haben aber auch noch Codeüberprüfungen für den Seniorencode.

Eine wichtige Sache bei der Codeüberprüfung ist, dass sie Fehler auffangen kann, die wir machen, aber kein Ersatz für Tests ist.

2
Brian R. Bondy

Wir finden, dass der effektivste Weg, Codeüberprüfungen durchzuführen, 1-zu-1 mit Github ist, um die Unterschiede in der Branche aufzuzeigen.


  • Wird eine Person als Gatekeeper für Qualität angesehen und überprüft den Code oder besitzt das Team den Standard?

    • Abhängig von der Größe des Teams - Das 3-köpfige Team besteht aus 1 Senior, der über die besten Kenntnisse über bewährte Verfahren verfügt, während ein 12-köpfiges Team aus 3 oder 4 Personen besteht, die diese Rolle erfüllen.
  • Überprüfen Sie Code als Teamübung mit einem Projektor?

    • Persönlich. 1 zu 1 weniger bedrohlich zu sein. Manchmal im Gemeinschaftsbereich, um Wissen zu verbreiten. Hängt von der genauen Situation, den Personen, dem Zeitplan usw. ab.
  • Wird es persönlich, per E-Mail oder mit einem Tool durchgeführt?

    • Persönlich. Wir verwenden Git und Github und es verfügt über hervorragende Tools zur Codeüberprüfung und zum Vergleich von Unterschieden, um die Codeüberprüfung zu vereinfachen.
  • Vermeiden Sie Überprüfungen und verwenden Sie Dinge wie Paarprogrammierung und kollektiven Codebesitz, um die Codequalität sicherzustellen?

    • Wir versuchen, beides nach Bedarf zu tun. Dies bedeutet, dass bei einem besonders heiklen Problem, bei der Arbeit an der Kerninfrastruktur oder bei der Vorbereitung auf den Urlaub oder beim Verlassen des Unternehmens eine Kopplung durchgeführt werden kann, um Wissen auszutauschen und zu übertragen. Der meiste Code oder Code, der mehr als nur kosmetische Änderungen enthält, sollte ebenfalls am Ende überprüft werden.

Wie bei allen Codierungselementen sollte die richtige Antwort Folgendes berücksichtigen:

  • Art des Unternehmens (z. B. Startup vs. Großunternehmen)
  • Firmengröße
  • Anzahl der Entwickler
  • Budget
  • Zeitfenster
  • Arbeitsbelastung
  • Komplexität des Codes
  • Fähigkeit des/der Prüfer (s)
  • Verfügbarkeit von Gutachtern
1
Michael Durrant

In meinem Unternehmen führen wir vor dem Einchecken niemals formelle Codeüberprüfungen durch, es sei denn, wir ändern eine äußerst kritische Produktion und haben nicht die Zeit, unseren Standard-QS-Prozess durchzuführen.

Was wir tun, ist, dass jedes Mal, wenn wir das Gefühl haben, dass eine Codeüberprüfung nützlich ist, wir fügen dem geänderten Code einen Kommentar "// todo: Codeüberprüfung durch Joe" hinzu. Normalerweise wählen wir Joe aus, weil er es ist Wir besitzen den geänderten Code, aber wenn dieses Auswahlkriterium nicht zutrifft (normalerweise), haben wir nur zufällig eine andere Person ausgewählt. Und wenn Joe zu diesem Zeitpunkt verfügbar ist, verwenden wir natürlich die gute alte Methode der Überprüfung über die Schulter.

Als Prüfer müssen Sie nur regelmäßig den gesamten Code nach "// todo: Codeüberprüfung durch mich" durchsuchen., die Änderungen überprüfen und den Code ohne das " todo ... "Kommentar

Wenn es ein Problem gibt, wechseln wir zurück zu herkömmlichen Kommunikationsmethoden (Mail/Chat/usw.).

Diese Methode bietet uns die beiden Hauptqualitäten, die wir für ein Überprüfungssystem suchen:

  • sehr leicht über Kopf
  • rückverfolgbarkeit
1
Brann

Ich habe in vielen Unternehmen gearbeitet und viele Prozesse gesehen. Mein aktuelles Team kümmert sich um das Beste, was ich bisher gesehen habe.

Wir verwenden einen agilen Entwicklungsprozess und als Teil davon haben wir Tore, durch die jede Geschichte gehen muss. Eines dieser Tore ist die Codeüberprüfung. Die Story wird erst zum Testen verschoben, wenn die Codeüberprüfung abgeschlossen ist.

Zusätzlich speichern wir unseren Code auf github.com. Nachdem ein Entwickler seine Änderung abgeschlossen hat, veröffentlicht er den Link zu den Commits in der Story.

Dann markieren wir einen anderen Entwickler zur Überprüfung. Github verfügt über ein Kommentarsystem, mit dem jemand direkt in der betreffenden Codezeile Kommentare abgeben kann. Github sendet dann eine E-Mail an die Distribution, sodass wir manchmal tatsächlich zusätzliche Augen von einigen unserer anderen Teams bekommen.

Dieser Prozess hat bei uns sehr gut funktioniert. Wir verwenden ein agiles Prozess-Tool, das das Posten der Commits vereinfacht und die Kommunikation erleichtert.

Wenn ein Problem besonders schwierig ist, setzen wir uns und diskutieren es. Dies funktioniert, weil es ein wesentlicher Bestandteil unseres Prozesses ist und jeder die Funktionsweise des Prozesses mitbestimmt. Wir können Tickets wieder in den laufenden Zustand versetzen, wenn die Codeüberprüfung zu erforderlichen Nacharbeiten führt und sie dann nach Änderungen erneut überprüft werden kann, oder der Prüfer kann in der Geschichte feststellen, dass das Reparieren der Elemente ausreichend ist und nicht erneut überprüft werden muss.

Wenn das Testen etwas zurückwirft, geht es bis zum laufenden Stand zurück und alle weiteren Änderungen werden ebenfalls überprüft.

0
Bill Leeper