So bringen Sie Entwickler dazu, Codeüberprüfungen rechtzeitig durchzuführen

12

Für das Unternehmen, für das ich arbeite, muss der gesamte Code von anderen Entwicklern überprüft werden, bevor er festgeschrieben wird. Die Mitglieder meines Teams sind oft frustriert, weil die anderen Entwickler zu beschäftigt sind, um eine Überprüfung durchzuführen, insbesondere wenn diese sehr lang ist. Wie können Sie andere Entwickler dazu anregen, zeitnahe Codeüberprüfungen durchzuführen?

(Wir verwenden git-svn, damit wir weiter programmieren können, während wir auf eine Überprüfung warten. Ich finde es jedoch immer noch frustrierend, wenn ich lange warten muss, bis ich meinen Code festschreiben kann.)

Titandecoy
quelle

Antworten:

12

Schauen Sie sich an, wie Facebook es mit seiner eigenen App namens phabricator macht: http://phabricator.org/

Sie verpflichten sich grundsätzlich pro Ausgabe, und für jede Ausgabe wird der Code angezeigt, der von jemandem überprüft werden muss. Der Code wird erst in das Haupt-Repository aufgenommen, wenn der Prüfer erklärt hat, dass dies in Ordnung ist.

Ich denke, es macht mehr Spaß.

Vielleicht sollte ein Code auch zwei Personen zugewiesen werden: einer, der ihn ausführt, und einer, der ihn überprüft.

Obwohl Ihre Teamkollegen vielleicht nicht an dieses Review-Ding glauben.

In Ermangelung von Gutachtern habe ich Unit-Tests für untergeordnete Funktionen und "den Hausmeistertest" für den Rest verwendet: Der Hausmeistertest wird so genannt, weil selbst der Hausmeister Ihren Code verstehen sollte.

Normalerweise entfernte ich einige kleinere Teile, wie z. B. Klammern für Block- / Funktionsbereiche, Sichtbarkeitsnotationen, manchmal sogar Typen, und zeigte sie Managern, Domain-Experten und Kollegen, die den Code angefordert hatten: "Ist dies das, was Sie wollen?"

Es hilft auch, persönlich dorthin zu gehen und erst zu gehen, wenn die Überprüfung abgeschlossen ist.

Oder falls Sie mit dem Team nicht gut zurechtkommen oder es Ihnen nicht gut geht, wissen Sie: "Wenn Sie die Firma ändern können, ändern Sie die Firma" ...

Aadaam
quelle
9

Ich werde dies auf ein paar Annahmen stützen:

  1. Jeder scheint Code schreiben zu wollen (wenn nicht, haben Sie Leute, die gehen müssen.).
  2. Jeder möchte, dass sein eigener Code eingecheckt wird.

Lassen Sie nur diejenigen, die ihre Bewertungen abschließen, ihren Code einchecken.

Möglicherweise kann ein bestimmter Zeitblock für Codeüberprüfungen verwendet werden, um das Problem der Unterbrechung zu vermeiden.

Das Ziel sollte sein, den Qualitätscode einzuchecken. Sie möchten die Bewertungen nicht bis zu dem Punkt bestrafen / erzwingen, an dem jeder nur eine "Stempel" -Zulassung erteilt.

Wenn Sie unterschiedliche Ebenen haben (jr., Sr. usw.), sollte die Beförderung und Pflege eines Titels von Ihrer Arbeit abhängen.

JeffO
quelle
1

Bei einigen früheren Arbeitgebern haben wir gewechselt, wer täglich an der Codeüberprüfung teilnahm. Normalerweise teilten sich 3 Personen einen CR-Tag und jeder CR musste von zwei der Gutachter abgemeldet werden. Dies stellte sicher, dass Sie an Ihrem Tag wussten, dass CR von Ihnen erwartet wurde, unabhängig von Ihren anderen Projekten. Etwa alle fünf Tage waren Sie an der Reihe und konnten Ihre Entwicklungsaufgaben entsprechend anpassen.

Derzeit hat ein Teamleiter eine flüchtige CR für den Code seines Teams. Abhängig davon, welcher Bereich der Anwendung aktualisiert wurde, kann er nach Abschluss der CR an das Global Review Team weitergeleitet werden, wo wir nach Dingen suchen, die globale Auswirkungen auf die Anwendung (en) haben, anstatt nach Dingen, die dies sind in Bezug auf eine einzelne Funktion. Wenn eine große Überprüfung durchgeführt werden muss, wird diese normalerweise zwischen einigen wenigen Personen aufgeteilt, sodass sich niemand mit Änderungen in einer lächerlichen Anzahl von Dateien befassen muss.

Wir überprüfen jedoch immer nur Code, der für den aktuellen Dev-Zweig / die aktuelle Dev-Variante festgeschrieben wurde. Der Code muss Code Review, Global Review, DB Review und UI Review (jeweils nach Bedarf) bestehen, bevor er in die nächste (z. B. Alpha) Umgebung befördert werden kann.

Schließlich stimmen wir einer SLA zu, wie schnell Bewertungen umgedreht werden. Kaum etwas steht länger als 48 Stunden in der Warteschlange und die meisten Überprüfungen werden in weniger als 24 Stunden durchgeführt.

Adrian J. Moreno
quelle
1

Für das Unternehmen, für das ich arbeite, muss der gesamte Code von anderen Entwicklern überprüft werden, bevor er festgeschrieben wird. Die Mitglieder meines Teams sind oft frustriert ...

Es gibt keine zwingenden Gründe, sich strikt an bestimmte Arten von Codeüberprüfungen zu halten, es sei denn, Sie führen unternehmenskritische Software oder kritische Patches für Code für Produktionsversionskandidaten durch.

  • Die Idee hinter Ihrer Unternehmensanforderung klingt auf einer Oberfläche vernünftig (100% überprüfter Code), aber die Mittel, für die sie sich entschieden haben, sind kontraproduktiv - denn wie Sie betonen, führen diese dazu, dass Entwickler frustriert sind.

Wenn Sie in Ihre Fußstapfen treten, möchte ich das Management zunächst darauf hinweisen, dass Überprüfungen von Post-Commit- Codes genauso respektabel sind wie Pre-Commit- Überprüfungen . Diese Begriffe können im Web durchsucht werden. Falls erforderlich, finden Sie dort Verweise, um diese zu sichern. Es sind nicht unbedingt Pre-Commit- Überprüfungen erforderlich , um 100% überprüften Code zu erhalten.

Basierend auf dem oben Gesagten würde ich ihnen als nächstes vorschlagen, die Einstellung zum Mikromanagement aufzugeben und die Entwickler die Art und Weise ausprobieren zu lassen, die sich für sie bequemer anfühlt. Überprüfungen vor oder nach dem Festschreiben stehen den Programmierern am besten zur Auswahl. Wenn das Unternehmen es besser weiß als Programmierer, warum schreiben sie den Code nicht selbst?

Mücke
quelle
1
"Wenn das Unternehmen es besser weiß als Programmierer, warum schreiben sie den Code nicht selbst?": Sehr guter Kommentar! Ich würde aber hoffen, dass Entwicklungsmanager selbst ehemalige Entwickler sind.
Giorgio
3
Nach dem Festschreiben wird Ihre Codequalität meiner Erfahrung nach schrecklich beeinträchtigt. Programmierer sind faul und werden sich fertig fühlen, wenn es begangen werden kann: "Ja, es ist nicht perfekt, aber wen interessiert das, was ist perfekt im Leben? Es macht den Job, nicht wahr? "" Die einzig gute Antwort ist NEIN, und vielleicht haben die Manager ein realistischeres Bild von Programmierern als sie selbst. Deshalb benötigen sie Codeüberprüfungen vor dem Festschreiben (oder zumindest vor dem Zusammenführen).
Aadaam
@Aadaam Ihre Erfahrung unterscheidet sich definitiv von meiner - nicht nur in Bezug auf Post-Commits, sondern auch (und insbesondere) in Bezug auf einen Teil von "Programmierer sind faul ...". Was Manager mit einem realistischeren Image betrifft, stimme ich zu, dass dies normalerweise der Fall war meine Teams; Es führte nur nicht zu Managern, mit denen ich früher zusammengearbeitet hatte, zu sinnlosen Ideen darüber, welche Art von Überprüfung
erzwungen werden sollte
Nun, ich habe im Outsourcing gearbeitet. Beim Outsourcing sind die meisten Programmierer nicht dabei, weil das Programmieren Spaß macht, sondern weil das Programmieren das beste Verhältnis von Arbeit zu Entgelt hat, mit viel höheren Raten als alles andere ... sie hassen es wie jeden anderen Job ... und sie versuchen Sie alles, um dieses Verhältnis weiter zu "optimieren", wenn Sie wissen, was ich meine ...
Aadaam
1

Sie müssen eine Reihe von Problemen angehen - Sie müssen Herz und Verstand gewinnen und sicherstellen, dass Zeit für Codeüberprüfungen zur Verfügung steht.

Der zweite Teil ist wahrscheinlich am einfachsten - Sie stimmen zu (zusammen und das muss das Management einschließen), dass das erste, was ein Entwickler jeden Morgen tut, seine Codeüberprüfungen sind - dies ist einfach, verständlich, effektiv und gibt Ihnen einen schönen, klaren Stock, mit dem Sie Leute schlagen können wenn sie nicht entsprechen. Besser, Sie unterbrechen nichts, Sie fordern sie nicht auf, nicht mehr an ihrem Code zu arbeiten. Sie fordern die Leute nicht auf, etwas in ihre To-Do-Liste aufzunehmen ...

Der erste Teil ist das eigentliche Problem - die Teilnehmer des Überprüfungsprozesses müssen davon ausgehen, dass es einen Wert hat, sonst führen sie niemals eine Codeüberprüfung durch (die als nicht wertvoll angesehen wird), wenn sie Code schreiben oder Fehler beheben könnten (welche ist sicherlich wichtiger ...?).

Wenn Sie die beiden zusammenfügen können - erstens sicherstellen, dass jeder glaubt (oder versteht), dass die Codeüberprüfungen einen Wert haben -, sollte dies im Grunde genommen weniger Fehler bedeuten, was mehr neuen Code bedeutet, was normalerweise mehr Spaß macht - und zweitens arrangieren Dinge, so dass im Zeitplan ein freier Raum für die Codeüberprüfungen vorhanden ist, dann werden hoffentlich gute Dinge passieren ... es wird Teil der Kultur.

Sobald es Teil der Kultur ist, muss man vielleicht nicht mehr "jeden Tag als erstes" sagen - aber nachdem ich gesagt habe, dass es gut in das Muster passt, möchte man wahrscheinlich, dass ein Entwickler arbeitet.

Murph
quelle
Sie können dieser Regel "jeden Tag als erstes" nicht wirklich zustimmen. Wenn jemand einen Fehler findet, der das Unternehmen X Dollar pro Stunde kostet (oder das Risiko, eine wichtige Frist zu verpassen, um X Prozentpunkte pro Stunde erhöht), und dies fünf Minuten vor dem Einstieg tut, ist die Codeüberprüfung nicht Ihre Aufgabe höchste Priorität. Grundsätzlich ist das Problem der Konflikt zwischen dem Wunsch, einfache Regeln festzulegen, und der Tatsache, dass Prioritäten nicht immer einfach sind. Das Risiko besteht darin, dass jeder der Regel von ganzem Herzen zustimmt und innerhalb von 24 Stunden einen Grund findet, warum heute eine Ausnahme von der Regel ist.
Steve Jessop
Die Lösung ist schwierig, aber IME muss genügend "Platz" gefunden werden, um eine neue Arbeitspraxis einzuführen, die zeitaufwändig, aber lohnenswert ist. Dies erfordert Voraussicht, um die Wartezeit zu identifizieren, die Bereitschaft, Fristen als Preis für die Einführung einer lohnenden Änderung zu verschieben, oder beides. TANSTAAFL. Wie Sie sagen, sobald sich alle in das Muster eingelebt haben, können sie Ausnahmen machen. Hoffentlich tun sie dies auf der Grundlage einer angemessenen Einschätzung des Werts des allgemeinen Musters.
Steve Jessop
Ich sage "Fristen verrutschen lassen", ich hätte "Fristen verschieben" sagen sollen. "Ausrutschen" bedeutet, sie zu bewegen, nachdem sie begangen wurden, dh zu scheitern, aber es muss nicht so sein. Sie könnten stattdessen einen Zeitraum mit leicht reduzierter Produktivität aufgrund der unflexiblen neuen Regel (und der unvermeidlichen Ineffizienzen, die durch Leute verursacht werden, die versuchen, einem neuen Prozess zu folgen - einplanen. Wenn Sie als erstes eine Codeüberprüfung durchführen, verpassen Sie das morgendliche Gedränge Treffen an Tagen, an denen die Codeüberprüfung zu lange dauert oder was auch immer Ihre Organisation in die Mischung einfließen lässt). Wenn es eine gute Regel ist, werden Sie bald über den Punkt kommen, an dem Sie begonnen haben.
Steve Jessop
@SteveJessop natürlich können Sie dem wirklich zustimmen. Und natürlich wird es Ausnahmen geben (ich denke, die Scrum-Beobachtung ist allerdings albern - zumal die Antwort offensichtlich ist (- :). Ich denke, der Schlüssel ist, dass es keine "Einheitslösung" gibt, die ich gerade habe schlug etwas vor, das einfach und leicht zu verstehen ist und relativ schwer vom Zeitplan abweicht (wiederum abhängig von der Umgebung)
Murph
1

Bei den meisten Unternehmen, für die ich gearbeitet habe, haben Sie 3 Tage Zeit, um eine Überprüfung abzuschließen. Es ist nicht akzeptabel, die Bewertungen nicht durchzuführen. Es ist Teil Ihres Jobs. Wenn Sie nicht rechtzeitig anständige Überprüfungen durchführen, wirkt sich dies auf Ihre Leistungsbeurteilung aus. Und ja, Bewertungen scheinen immer zu den ungünstigsten Zeiten zu erfolgen. Schade, lernen Sie, die Überprüfungszeit in Ihre Schätzungen einzubeziehen. Wenn das Management wirklich der Meinung ist, dass Überprüfungen wichtig sind (dh, dass der gesamte Code überprüft wird), würde es auf jeden Fall eine ähnliche Richtlinie verfolgen. Wenn Personen die Überprüfung nicht innerhalb der vorgegebenen Zeit abschließen, gilt dies auch als Akzeptanz des Materials.

Dunk
quelle
0

Erwägen Sie die Verwendung eines Tools wie Review Board . Es ist sehr hilfreich, insbesondere für lange Bewertungen.

Sie können Ihre Diffs hochladen und warten, bis ein Prüfer seine Prüfung abgeschlossen hat. Wenn Sie offene Bewertungen haben, die Sie daran hindern, Ihre Arbeit fortzusetzen, können Sie dies während Ihrer täglichen Besprechungen melden (Ihr Team möchte, dass neue Funktionen eingecheckt werden, damit sie so schnell wie möglich getestet werden können, nicht wahr?).

Giorgio
quelle
0

Ein paar Punkte zum Hinzufügen, die nicht in den anderen Antworten enthalten sind.

Der zu überprüfende Code muss eingecheckt sein

  • so dass Sie eine stabile Version überprüfen.
  • Es kann sich im Hauptentwicklungszweig befinden, wenn ein Release weit genug entfernt ist
  • Es kann auf Zweig sein, wenn es einen guten Grund gibt, Haupt nicht zu verschmutzen

Das Blockieren von Aufgaben hat Vorrang, daher sollten Codeüberprüfungen Vorrang vor anderen Arbeiten haben (aber versuchen, Ihren Fluss nicht zu unterbrechen). Als Entwickler sollten Sie möchten, dass andere Ihren Code überprüfen (um ihn zu verbessern). In diesem Wissen sollten Sie umgehend Überprüfungen für andere durchführen.

Die schwierigeren Fragen sind, wann und wie Codeüberprüfungen gut durchgeführt werden können.

Eine Regel, die für uns beim Zeitpunkt funktioniert hat, ist, dass gemeinsam genutzter Code überprüft werden muss, da er größere Auswirkungen hat, während er für Code für eine einzelne Anwendung (insbesondere angesichts der Verwendung einer testgetriebenen Entwicklung) weniger wichtig ist.

Bruce Adams
quelle