Google bietet die besten Methoden zur Codeüberprüfung an jedem Ort, den ich je gesehen habe. Alle, die ich dort getroffen habe, sind sich einig, wie Code-Reviews durchgeführt werden sollen. Das Mantra lautet "Rückblick früh und oft".
Angenommen, Sie verwenden einen Prozess, der dem entspricht, was Graham Lee vorgeschlagen hat. (Dies ist ein Prozess, den ich zuvor selbst verwendet habe.) Das Problem ist, dass die Prüfer gebeten werden, große Codestücke zu betrachten. Das ist viel mehr Aufwand, und es ist schwieriger, die Prüfer dazu zu bringen, dies zu tun. Und wenn sie es tun, ist es schwieriger, sie dazu zu bringen, gründliche Arbeit zu leisten. Wenn sie Designprobleme bemerken, ist es außerdem schwieriger, Entwickler dazu zu bringen, ihren gesamten Arbeitscode zu wiederholen, um ihn zu verbessern. Sie fangen immer noch Sachen und es ist immer noch wertvoll, aber Sie werden nicht bemerken, dass Sie über 90% des Nutzens verpassen.
Im Gegensatz dazu führt Google bei jedem Commit eine Codeüberprüfung durch, bevor die Quellcodeverwaltung gestartet werden kann. Naiv viele Leute denken, dass dies ein schwerer Prozess wäre. In der Praxis funktioniert das aber nicht so. Es erweist sich als wesentlich einfacher, kleine Codestücke isoliert zu betrachten. Wenn Probleme festgestellt werden, ist das Ändern des Designs sehr viel einfacher, da Sie noch keinen Code für dieses Design geschrieben haben. Das Ergebnis ist, dass es viel einfacher ist, eine gründliche Codeüberprüfung durchzuführen und geänderte Probleme viel einfacher zu beheben.
Wenn Sie eine Codeüberprüfung durchführen möchten, wie dies bei Google der Fall ist (was ich wirklich sehr empfehle), gibt es eine Software, die Ihnen dabei hilft. Google hat sein in Subversion integriertes Tool als Rietveld veröffentlicht . Go (die Sprache) wurde mit einer Version von Rietveld entwickelt, die für die Verwendung mit Mercurial modifiziert wurde. Es gibt eine Umschreibung für Leute, die Git namens Gerrit verwenden . Ich habe auch zwei kommerzielle Tools gesehen, die hierfür empfohlen wurden, Crucible und Review Board .
Die einzige Version, die ich verwendet habe, ist Googles interne Version von Rietveld, und ich war sehr zufrieden damit.
Ich habe den Code für die Überprüfung nie nach festgelegten / nicht festgelegten Kriterien getrennt. Die einzigen Kriterien, auf die ich gestoßen bin, sind grüne Komponententests und Integrationstests.
Für das Tracking würde ich empfehlen, den Flow in Ihrem bevorzugten Issue-Tracker zu aktualisieren. Zum Beispiel statt:
Möglicherweise möchten Sie eine weitere Stufe einführen (Überprüfung):
Daher können Sie für jedes Ticket im Status " Implementiert" einen Prüfer zuweisen, und nur geprüfte Tickets werden an die Qualitätssicherung weitergeleitet.
quelle
Ich habe nur die eine Erfahrung mit Code-Reviews, daher kann ich nicht sagen, wie gut es ist.
Ich habe mit einer kleinen Gruppe von Programmierern (~ 10-15) gearbeitet und wir haben VS Team Foundation Studio verwendet. Wir wurden gebeten, den Code ungefähr einmal am Tag festzuschreiben und vor jedem Festschreibungscode von einer anderen Person in der Gruppe zu überprüfen (hoffentlich von jemandem, der ebenfalls an dem Projekt beteiligt war). Während des Commits wurde auch der Name der Person in ein Feld eingefügt.
quelle
Ich habe in einem Team gearbeitet, das in ein paar Bewertungen pro Woche alles, was eingecheckt wurde, von Änderung zu Änderung überprüft hat. Dies bedeutete, dass wir mit Codeüberprüfungen nicht immer auf dem neuesten Stand waren, aber das erreichte, was wir uns vorgenommen hatten.
Fragen Sie also zuerst, was Sie erreichen möchten, indem Sie den Code überprüfen. In unserem Fall ging es nicht darum, Schwachkopfentwickler zu fangen, sondern es gab eher eine Vermutung von Kompetenz als eine Vermutung von Inkompetenz. Dies ermöglichte es dem Team, sich einen Überblick über andere Bereiche des Systems zu verschaffen und einige fragwürdige Entwurfsentscheidungen zu korrigieren, bevor sie in Stein gemeißelt wurden. Mit fragwürdig meine ich, dass es immer mehr als eine Möglichkeit gibt, eine Katze zu häuten, und nicht jeder weiß, dass sich sozusagen bereits ein Katzenhautmesser in der Werkzeugkiste befindet.
quelle
Die Art und Weise, wie wir Codeüberprüfungen in Angriff nahmen, bestand darin, dass jede Aufgabe unserer Projektverfolgungssoftware überprüft wurde. Zu der Zeit verwendeten wir Mantis und SVN. Unsere Projektverpflichtungen waren in beide Systeme eingebunden. Jedes Commit musste an eine Aufgabe in der Gottesanbeterin gebunden sein. Nach Abschluss der Aufgabe wurde ihr der Status "Bereit zur Überprüfung" zugewiesen.
RFR-Artikel wurden dann entweder von jemandem abgeholt, der Zeit für Überprüfungen hatte, oder sie wurden einer bestimmten Person zur Überprüfung zugewiesen. Freitags mussten alle RFR-Artikel vor Tagesende überprüft werden, damit es zu keinen Übertragungen in die folgende Woche kam.
Die einzigen Probleme, auf die wir bei diesem Prozess stießen, waren große Objekte mit einer Unmenge von Dateien. Um dies zu handhaben, würden der Codierer und der Prüfer zusammenkommen und der Codierer würde die Änderungen durchlaufen, bis der Prüfer sie verstanden hat. Sie würden die Codeüberprüfung zusammen durchführen.
Dieser Prozess brach zusammen, als das Management vorschrieb, dass bei Peer-Programmierung keine separate Codeüberprüfung erforderlich war. Entwickler wurden nachlässig über den Prozess und kleine dumme Fehler wurden eingeführt. Schließlich kehrten wir zum ursprünglichen Prozess zurück und die Dinge kamen wieder zusammen.
quelle
In meinem Team haben wir seit etwa einem Jahr ein Training durchgeführt, das sehr gut zu funktionieren scheint.
Unsere Organisation verwendet Perforce zur Versionskontrolle. Perforce (seit einem Jahr) enthält eine Funktion namens Shelving. Mit Shelving kann ich meine Änderungen für ein bestimmtes Problem "zurückstellen". Sie sind im Versionskontrollsystem gespeichert, werden aber nicht eingecheckt. Dann bitte ich einen anderen Entwickler in meinem Team, den Code zu überprüfen.
Der andere Entwickler kann meine ausstehenden Änderungen in Perforce von seinem eigenen Computer aus anzeigen und die Änderungen mit den letzten Überarbeitungen vergleichen. Er kann sich auch von seinem lokalen Computer trennen, wenn er meine Änderungen ausprobieren möchte. Wenn er die Überprüfung abgeschlossen hat, lässt er mich wissen. Ich checke dann meinen Code mit "Reviewed by Bob" am Ende des Kommentars ein.
Das hat bei uns sehr gut geklappt. Erstens haben sich Code-Reviews im Allgemeinen als äußerst hilfreich erwiesen. Darüber hinaus können wir mithilfe der Regale von Perforce die Überprüfungen durchführen, ohne einchecken zu müssen oder größere Schwierigkeiten zu haben, obwohl unser Team geografisch weit verbreitet ist - das ist sehr wichtig. Und es funktioniert großartig.
quelle