Was ist die beste Vorgehensweise, um Quellcode in einem Quellcodeverwaltungs-Repository zu überprüfen?

12

Wie kann überprüfter Quellcode in einem Quellcodeverwaltungs-Repository am besten verwaltet werden? Sollte der Quellcode vor dem Einchecken einen Überprüfungsprozess durchlaufen oder sollte die Überprüfung des Codes erfolgen, nachdem der Code festgeschrieben wurde? Wenn die Überprüfung erfolgt, nachdem der Code in das Repository eingecheckt wurde, wie sollte dies verfolgt werden?

Vimal Raj
quelle

Antworten:

4

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.

btilly
quelle
4

Eine Technik, die ich in mehreren Teams angewendet habe, ist die folgende:

  • Entwickler können Source ohne Überprüfung in ihre eigene Filiale oder ihr lokales Repository integrieren
  • Entwickler können sich ohne Überprüfung in den Trunk / Master integrieren
  • Code muss überprüft und die Überprüfungskommentare adressiert werden, bevor er von Trunk / Master in einen Release Candidate Branch integriert werden kann

Es liegt in der Verantwortung des Codeautors, eine Überprüfung zu beantragen, und des Betreuers der Release-Branche, sicherzustellen, dass nur überprüfter Code zusammengeführt wird.

Es gibt Tools, die die Codeüberprüfung unterstützen, aber ich habe sie nie verwendet. Im Repo kann nachverfolgt werden, wer die Überprüfung für eine Zusammenführung durchgeführt hat. Ich habe svn-Eigenschaften und Perforce-Jobs verwendet, die mit Commits verknüpft sind, um zu zeigen, wer was überprüft hat.


quelle
2
+1: außer "es liegt in der Verantwortung des Codeautors, eine Überprüfung zu beantragen". Sofern das Management nicht verlangt, dass Überprüfungen abgeschlossen werden, werden sie irrelevant. Es muss eine Art Belohnungssystem geben (auch beiläufig oder informell), sonst wird es nicht erledigt. Der Filialbetreuer antwortet jemandem und erhält eine Belohnung dafür, dass er diszipliniert nach Codeprüfungen gesucht hat. Auch dieses Puzzleteil ist wichtig. Könnten Sie beschreiben, warum die Leute dazu diszipliniert sind?
S.Lott
@ S.Lott an den Teams, an denen ich gearbeitet habe, professioneller Stolz. Wenn Sie keine Überprüfung erhalten, wird Ihr Code nicht integriert (wie oben beschrieben). Daher gelangt Ihr Code nicht in das Produkt, und Sie haben an diesem Tag / dieser Woche / dieser Iteration keine Arbeit geleistet. Wenn Ihre Entwickler nicht motiviert sind, ihre Arbeit zu erledigen, haben Sie schlimmere Probleme als beim Organisieren Ihres Quellcodeverwaltungs-Repositorys.
@ Abraham Lee: "Professioneller Stolz"? Ich höhne mich (aber ich habe nicht viel zu tun). "Entwickler sind nicht motiviert, ihre Arbeit zu tun" ist das Problem. Viele Manager untergraben einen guten Prozess, indem sie eine Freigabe vor dem Zeitplan fordern, oder fordern, dass zusätzliche Funktionen eingeklemmt werden. Welche motivierenden Faktoren verhindern, dass der Prozess untergraben wird? Was hindert einen Manager daran, zu sagen: "Wir brauchen das morgen, wir haben keine Zeit für Codeüberprüfungen."
S.Lott
@S.Lott Ich weiß nichts über dich, aber ich gebe keinen Haufen Scheiße frei, egal wie sehr ein Manager glaubt, besser zu wissen, wie meine Arbeit gemacht wird.
@ Abraham Lee: Ich versuche zu vermeiden, Buggy-Code zu veröffentlichen. Meine Frage lautet: "Was motiviert Ihr Team, um zu vermeiden, dass das Management Ihren Prozess untergräbt." Es ist ein guter Prozess, ich möchte mehr wissen.
S.Lott
1

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:

  • Product Owner -> Analyst -> Entwickler -> Qualitätssicherung -> Release Engineer

Möglicherweise möchten Sie eine weitere Stufe einführen (Überprüfung):

  • Produktverantwortlicher -> Analyst -> Entwickler -> Prüfer -> Qualitätssicherung -> Freigabeingenieur

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.

Andrey Taptunov
quelle
1

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.

apoorv020
quelle
Nur einmal am Tag zu begehen, scheint mir eine rote Fahne zu sein. Es tut uns leid.
Mittwoch,
Könnte sein. Auch ich war anfangs etwas überrascht. Es war jedoch keine feste Regel, und Sie konnten lokale Änderungen so oft "zurückstellen", wie Sie wollten.
apoorv020
0

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.

Ian
quelle
0

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.

Amy Patterson
quelle
0

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.

Tyrel
quelle