Wie kann ich bessere Codeüberprüfungen durchführen, wenn Pull-Anforderungen groß sind?

12

Haftungsausschluss: Es gibt einige ähnliche Fragen, aber ich habe keine gefunden, die speziell die Probleme betreffen, mit denen Sie beim Überprüfen einer großen Pull-Anfrage konfrontiert sind.

Problem

Ich bin der Meinung, dass meine Codeüberprüfungen besser durchgeführt werden könnten. Ich spreche insbesondere von großen Code-Reviews mit vielen Änderungen in über 20 Dateien.

Es ist ziemlich einfach, offensichtliche Probleme mit lokalem Code zu erkennen. Zu verstehen, ob der Code die Geschäftskriterien erfüllt, ist jedoch eine andere Geschichte.

Ich habe Probleme, dem Gedankenprozess des Codeautors zu folgen. Es ist ziemlich schwierig, wenn die Änderungen zahlreich und über mehrere Dateien verteilt sind. Ich versuche, mich auf die Dateigruppen zu konzentrieren, die sich auf eine bestimmte Änderung beziehen. Überprüfen Sie dann die Gruppen nacheinander. Leider ist das von mir verwendete Tool (Atlassian Bitbucket) nicht sehr hilfreich. Wann immer ich eine Datei besuche, wird sie als gesehen markiert, obwohl sich oft herausstellt, dass sie nicht mit der aktuell untersuchten Änderung zusammenhängt. Ganz zu schweigen davon, dass einige Dateien mehrmals besucht und ihre Änderungen Stück für Stück überprüft werden sollten. Auch das Zurückkehren zu relevanten Dateien, wenn Sie einem schlechten Pfad folgen, ist nicht einfach.

Mögliche Lösungen und warum sie bei mir nicht funktionieren

Das Überprüfen einer Pull-Anfrage durch Commits löst häufig die Größenprobleme, aber es gefällt mir nicht, da ich häufig veraltete Änderungen ansehe.

Natürlich scheint das Erstellen kleinerer Pull-Anforderungen eine Abhilfe zu sein, aber es ist das, was es ist. Manchmal erhalten Sie eine große Pull-Anforderung, die überprüft werden muss.

Sie können auch den logischen Aspekt des Codes als Ganzes ignorieren, aber es scheint ziemlich riskant zu sein, insbesondere wenn der Code von einem unerfahrenen Programmierer stammt.

Es könnte hilfreich sein, ein besseres Tool zu verwenden, aber ich habe keines gefunden.

Fragen

  • Haben Sie ähnliche Probleme mit Ihren Code-Überprüfungen? Wie begegnen Sie ihnen?
  • Vielleicht haben Sie bessere Werkzeuge?
Andrzej Gis
quelle
3
Warum sind diese Code-Reviews so groß? Wenn sie beispielsweise das Ergebnis eines automatisierten Refactorings sind, überprüfen Sie anstelle des Commits, ob durch Wiederholen des Refactorings für das ältere Commit eine identische Kopie des neuen Commits erstellt wird, und entscheiden dann, ob Sie dem Tool vertrauen oder nicht. Wenn Sie also plötzlich einen 1000-Zeilen-Diff überprüfen, wird ein 1-Zeilen-Befehl in einer IDE überprüft, und Sie entscheiden, ob Sie dem IDE-Anbieter vertrauen möchten.
Jörg W Mittag
Wenn Sie in der Lage sind, dies zu tun, müssen Sie es dem Autor des Codes überlassen, die Überprüfung des Codes zu vereinfachen. Dies bedeutet, dass die Autoren darauf achten sollten, irrelevante Commits zu quetschen, Commits neu zu schreiben, sodass sie nur eine Änderung enthalten, wichtige Refactoring-Commits zu trennen und die Commits in einer Weise anzuordnen, die für Reviewer sinnvoll ist.
Lie Ryan

Antworten:

8

Wir hatten diese Probleme und die folgende Frage hat bei uns gut funktioniert:

Tut der PR eine Sache , die zusammengeführt und unabhängig getestet werden kann?

Wir versuchen PRs durch Single Responsibility (SR) zu brechen. Nach anfänglichem Zurückschieben waren die Leute überrascht, dass selbst etwas Kleines, wenn auch Einziges , groß sein kann.

Der SR macht es wirklich einfach, das Wissen über die erwartete Implementierung zu überprüfen und zu verbreiten.

Dies ermöglicht auch inkrementelle Refaktoren, da mehr hinzugefügt und die PR-Durchlaufzeit drastisch reduziert wird!

Ich würde vorschlagen, sie nach Möglichkeit von SR aufzubrechen und zu prüfen, ob es bei Ihnen funktioniert. Benötigt etwas Übung, um es so zu machen.

PhD
quelle
11

Manchmal können Sie großen Pull-Anfragen nicht entgehen - aber Sie können herausfinden, wer welche Verantwortung trägt.

Ich betrachte Pull Requests als überzeugende Argumente. Der Autor versucht mich davon zu überzeugen, dass der Code so aussehen und funktionieren sollte.

Wie bei jedem Argument sollte es eine einzige klare Idee haben. Es ist entweder:

  • ein refactor,
  • eine Optimierung,
  • oder neue Funktionalität.

Wenn sie nicht klar sind, besteht die gute Chance, dass sie es selbst nicht verstehen. Öffne den Dialog und hilf ihnen, ihr Argument in seine Unterargumente zu zerlegen. Wenn nötig, ist es vollkommen in Ordnung - auch für sie von Vorteil, diese Commits neu zu erstellen und verständlichere und direktere Pull-Anfragen anzubieten.

Es wird immer noch große Pull-Anfragen geben, aber mit einem klaren Argument ist es viel einfacher zu sehen, was nicht passt.

Das Werkzeug hängt von Ihrer Organisation und Ihrem Prozess ab. BitBucket ist ein anständiges Tool. Ob es besser ist oder nicht, hängt von Ihrem Budget, Ihrer Hardware, Ihren Anforderungen bis hin zu Ihren bereits vorhandenen Prozessen, Geschäftsregeln und verschiedenen Softwareanpassungen ab, die Sie bereits für BitBucket vorgenommen haben. Ich beginne damit, in der Dokumentation nachzuschlagen, ob das Verhalten konfiguriert werden kann, und es möglicherweise der Plug-in-Community zur Verfügung zu stellen (oder dem Plug-in beizutreten, um dies zu tun).

Kain0_0
quelle
8

Überprüfen Sie nicht die vollständige Pull-Anforderung, sondern jedes Commit. Auf diese Weise erhalten Sie ohnehin ein besseres Verständnis für die Pull-Anforderung

Bei kleinen Commits sollte eine solche Überprüfung kein Problem darstellen. Sie verfolgen die Änderungen nacheinander durch die Festschreibungen und erhalten am Ende das vollständige Bild. Es gibt Nachteile, wie zum Beispiel, dass Sie manchmal Änderungen überprüfen, die einige Zeit später rückgängig gemacht werden, aber dies sollte nicht viel sein.

Wenn die Commits groß sind, sollten Sie dies mit der Person besprechen, die diese Commits ausgeführt hat. Erklären Sie ihm, warum große Commits problematisch sind. Hören Sie sich die Argumente des anderen an, warum er Änderungen nur selten festschreibt: Sie können beispielsweise feststellen, dass er das Festschreiben vermeidet, weil das Festschreiben vor dem Festschreiben zu lange dauert. In diesem Fall sollte das Problem zuerst gelöst werden.

Das Überprüfen einer Pull-Anfrage durch Commits löst häufig die Größenprobleme, aber es gefällt mir nicht, da ich häufig veraltete Änderungen ansehe.

Dies ist ein geringfügiges Problem, und Sie sollten viel weniger Zeit für die Überprüfung des Codes aufwenden, da dies einige Zeit später rückgängig gemacht wird, als wenn Sie beim Überprüfen einer einzelnen Datei herausfinden, warum der Code geändert wurde.

"Häufig" ist vage, aber wenn Sie zu viel Zeit damit verbringen, Code zu überprüfen, der nicht den Weg zur endgültigen Überarbeitung der Pull-Anforderung gefunden hat, können Sie zwei Techniken anwenden:

  • Gehen Sie alle Festschreibungen einmal schnell durch und lesen Sie nur die Festschreibungsmeldungen. Auf diese Weise können Sie sich beim Studium eines bestimmten Commits daran erinnern, dass in einer Commit-Nachricht später angegeben wurde, dass die betrachtete Änderung zurückgesetzt wurde.

  • Zeigen Sie die neueste Version der Datei nebeneinander an (obwohl in vielen Fällen bei umfangreichen Festschreibungen (1) die Dateien radikal unterschiedlich sein können und (2) die Dateien möglicherweise umbenannt werden oder die großen Codeblöcke an einen anderen Ort verschoben werden, wodurch es schwierig wird, die passende Datei zu finden).

  • Bitten Sie die Committer, Commits zu quetschen, wenn dies sinnvoll ist, oder verwenden Sie bestimmte Konventionen für Commits, bei denen ein Commit einen Teil eines anderen rückgängig macht, und führen Sie Ihre Überprüfung unter Berücksichtigung mehrerer nachfolgender Commits durch.


¹ Stellen Sie sich zum Beispiel vor, Sie betrachten eine Datei, in der eine Variable umbenannt wurde. Was sagt es dir? Wie sollten Sie diese Änderung überprüfen? Wenn Sie jedoch Commit für Commit überprüfen, werden Sie feststellen, dass bei einem einzelnen Commit dieselbe Variable in zwanzig Dateien umbenannt wurde. Der Kommentar gibt an, dass der Name geändert wurde, um den richtigen Geschäftsbegriff zu verwenden. Diese Änderung ist absolut sinnvoll und kann überprüft werden.

Arseni Mourzenko
quelle
1
@ JörgWMittag: danke für deinen kommentar. Das OP behauptete, er wolle keine Überprüfungen per Commit durchführen, da er veraltete Änderungen sehen würde, was zwar zutrifft, aber nicht so problematisch sein sollte, als wenn alle Probleme im Zusammenhang mit der Überprüfung per Datei stünden. Da diesbezüglich meine Antwort unklar war, habe ich einen Abschnitt hinzugefügt, um diesen Punkt speziell zu behandeln.
Arseni Mourzenko
2

Ermitteln Sie, was Sie mit Überprüfungen von Pull-Anforderungen erreichen möchten, und prüfen Sie, ob es eine Alternative gibt.

Zum Beispiel möchten Sie vielleicht

  • Stellen Sie sicher, dass die Standards eingehalten werden
  • Überprüfen Sie, ob die Funktionalität korrekt ist
  • Stellen Sie sicher, dass mehr als eine Person den Code versteht
  • Junioren trainieren

usw. usw.

Einige davon könnten durch andere Dinge besser bedient werden, und selbst wenn Sie die Gründe verstehen, können Sie den Umfang Ihrer Prüfungen einschränken.

Wenn ich zum Beispiel jede Zeile überprüfe, um Änderungen für das Training vorzuschlagen und zu diskutieren, kann ich dies bei umfangreichen PRs überspringen, die von Senioren durchgeführt werden

Wenn ich den Code verstehen muss, kann es sein, dass ich große Funktionen paarweise programmiere und die Codeüberprüfung auf eine Standardprüfung beschränke.

Sie müssen nicht bei jeder PR alles überprüfen, solange Sie einen mehrschichtigen Ansatz zur Qualitätssicherung verfolgen

Ewan
quelle