Was ist eine hilfreiche Einstellung bei der Durchführung einer formalen Codeüberprüfung?


15

Unser Team hat kürzlich damit begonnen, Code-Überprüfungen für jeden Check-in durchzuführen.

Als Teamleiter versuche ich, ein Gleichgewicht zwischen zu vielen Vorschlägen, ärgerlichen Entwicklern und einer geringeren Teamleistung und dem Loslassen von Code zu finden, den ich anders geschrieben hätte.

Gibt es Hinweise, Studien oder Anleitungen aus bekannten Quellen, die auf einen hilfreichen Ansatz hindeuten?


2
Die erste Frage, die Sie sich stellen sollten: Warum führen Sie Codeüberprüfungen durch?
Philip Kendall

1
Ich wäre versucht, jedem Feedback eine Art "Wichtigkeit" zuzuweisen. Kritische Sicherheitslücke = sehr hohe Bedeutung. Bug = normale Wichtigkeit. Code-Formatierung = null Bedeutung (Schuld Tools, die nicht automatisch neu formatieren, wie Sie möchten und nicht der Programmierer).
Brendan

Es könnte interessieren Sie
Laiv

Die Art und Weise, wie sich eine Person einer Codeüberprüfung nähert oder darauf reagiert, sagt viel über ihre Fähigkeit aus, Objektivität zu bewahren und kritisch zu denken. Manchmal müssen Entwickler speziell für diesen Zweck geschult werden.
Frank Hileman

Antworten:


15

Beachten Sie die übergeordneten Ziele: Am Ende zählt nur funktionierende Software

Peer Review und Check-in Code Review haben das Ziel, die Qualität zu verbessern . Aber für die Qualität gibt es nichts Schlimmeres als einen demotivierten Entwickler. Als Teamleiter besteht Ihre Aufgabe nicht darin, den Code als etwas zu unterstützen, das Sie selbst hätten schreiben können, sondern die Teamarbeit zu fördern und das Gesamtergebnis sicherzustellen.

Legen Sie einen klaren Rahmen für Ihre Überprüfung fest

Denken Sie daran: Es ist nicht Ihr Code, sondern der Code des Teams. Konzentrieren Sie sich also auf Dinge, die zu falschen Ergebnissen führen können.

  • Fordern Sie die Art und Weise, wie Ihr Entwickler die Anforderungen erfüllt, nicht heraus, es sei denn, Sie sind sicher, dass dies nicht funktioniert (aber die Tests hätten bereits fehlschlagen müssen, oder?).

  • Fordern Sie keine schlechte Leistung heraus, es sei denn, es gibt eine Messgröße, die zeigt, wo das Problem liegt. Vorzeitige Optimierung ist die Wurzel allen Übels ;-)

  • Wenn Sie ein Design oder eine Softwarestruktur finden, die Sie herausfordern können, fragen Sie sich, warum dies nicht im Vorfeld erkannt wurde! Bereits geschriebener Code ist teuer umzuschreiben. In diesem Fall ist es an der Zeit, Ihre Softwareentwicklung und Teamarbeitspraktiken mindestens so genau wie den Code zu überprüfen.

  • die Einhaltung der festgelegten Kodierungsstandards ansprechen. Es ist das nervigste Thema, das sowohl für den Rezensenten als auch für den Rezensenten diskutiert werden muss. Wenn sich alle darauf geeinigt haben, großgeschriebene Klassennamen in Ihrem Team zu verwenden und einer eine Klasse ohne hat, ist das dann Geschmackssache? Oder von Teamwork, Effektivität und Risiko?

Übrigens, wenn Sie der Meinung sind, dass ein Kodierungsstandard es nicht wert ist, erörtert zu werden, entfernen Sie ihn aus Ihren Standards und verschwenden Sie keine Zeit und Energie damit.

Führung entwickeln: die menschliche Seite der Überprüfung

Als Teamleiter finden Sie hier möglicherweise die Möglichkeit, sich und Ihr Team über die Formalitäten einer Qualitätskontrolle hinaus weiterzuentwickeln:

  • Code Reviews sind für jeden viel angenehmer, wenn es einen echten Austausch gibt. Geben Sie Ihrem Entwickler auch die Möglichkeit, seine Fähigkeiten unter Beweis zu stellen (und ja, vielleicht könnten Sie etwas Neues lernen).
  • Haben Sie ein offenes Ohr für Kritik an Designentscheidungen oder bestehenden Standards. Manchmal können die Menschen mit solchen Frustrationen besser umgehen, nur weil sie darüber sprechen können.
  • Trainieren Sie Ihre Junioren: Zögern Sie nicht, Ratschläge zu geben oder Orientierungen für die nächste Iteration zu überarbeiten. Tun Sie dies nicht mit Senioren: In einer anderen Welt hätte Ihre jeweilige Rolle wechseln können.

Nutzen Sie andere Praktiken

Es gibt einige Dinge, die Sie bei der Codeüberprüfung vermeiden können:

  • Die Verwendung eines statischen Code-Analysators in Ihrer Build-Kette kann das Auffinden häufiger Fehler oder nicht portierbarer Konstrukte lange vor der Begutachtung durch Fachkollegen automatisieren . Einige Tools können sogar nach Ihren Codierungsstandards suchen .
  • Wenn Sie Standards zum Code-Layout haben, verwenden Sie ein Pre-Commit-Pretty-Print- Format oder ähnliche Formatierer, um den Code nach Bedarf automatisch zu formatieren . Verbringen Sie niemals Zeit mit etwas, das eine Software besser für Sie machen könnte, ohne darüber zu diskutieren :-)
  • Schließlich wird die Qualität nicht nur durch Überprüfung, sondern auch durch Tests sichergestellt. Wenn Sie TDD noch nicht verwenden , sollten Sie unabhängig von der Codeüberprüfung darüber nachdenken.

"Arbeitende Software"? Nicht sehr nützlich. "Richtige Software" - das ist mir lieber!
Frank Hileman

@FrankHileman In der Tat! Und genau, zuverlässig, brauchbar, performant und zweckmäßig. Es ist nur eine Frage der richtigen Definition des Begriffs "Arbeiten" ;-)
Christophe

3

Als Entwickler sollten wir immer offen und skeptisch zugleich sein.

Offen, weil wir nicht wissen, wann ein Entwickler uns überraschen kann, und skeptisch gegenüber unseren eigenen Ideen, weil wir oft vergessen, dass es in der Software-Engineery keinen einzigen richtigen Weg gibt, eine Lösung zu implementieren. Die Gründe für unsere Lösungen könnten für uns sinnvoll sein und für andere keine. Hinter einem Codegeruch könnte eine großartige Idee stecken. Vielleicht hat der Entwickler den Weg nicht gefunden, es richtig auszudrücken.

Da wir (Menschen) in der Kommunikation schrecklich sind, machen Sie keine falschen Annahmen und fragen Sie den Code-Besitzer nach dem Code, den Sie überprüfen. Wenn er / sie es versäumt hat, die Idee unter den Standards des Unternehmens zu kodieren, ist er / sie als leitender Entwickler bereit, ihn / sie ebenfalls anzuleiten.

Hier der subjektive Ansatz. Der objektive Ansatz, IMO, wird in dieser Frage sehr gut erklärt .

Zusätzlich zu dem obigen Link sind die zu erreichenden Ziele (Wartbarkeit, Lesbarkeit, Portabilität, hohe Kohäsion, lose Kopplung usw.) nicht unbedingt die Zehn Gebote. Sie (das Team) sollten in der Lage sein, diese Ziele an einen Punkt anzupassen, an dem das Gleichgewicht zwischen Qualität und Produktivität die Arbeit für Entwickler komfortabel und "bewohnbar" macht.

Ich würde die Verwendung statischer Code-Analysetools vorschlagen, um den Fortschritt der Qualität gemäß diesen Zielen zu messen. Mit Tools wie SonarQube erhalten wir Quality Gates und Quality Profiles, die gemäß unseren Prioritäten angepasst werden können. Es stellt uns auch einen Issue-Tracker zur Verfügung, mit dem Entwickler auf Probleme im Zusammenhang mit Codegerüchen, Fehlern, zweifelhaften Praktiken usw. angesprochen werden können.

Diese Art von Werkzeugen kann ein guter Ausgangspunkt sein, aber wie gesagt, bleiben Sie skeptisch. Einige Regeln in Sonar sind möglicherweise für Sie bedeutungslos. Sie können sie ignorieren oder aus Ihrem Qualitätsprofil entfernen.


2

Wenn Sie sich in den Entwicklercode für kosmetische Änderungen einmischen, wird der Entwickler demotiviert, aber unter absoluten Umständen muss dies getan werden. Der Lead muss das Gleichgewicht zwischen nützlicher Codeüberprüfung und dem Erlernen finden, kleinere Mängel loszulassen . https://blog.smartbear.com/sqc/for-the-new-team-lead-the-first-six-things-you-should-know/


Was sind die "absoluten Umstände", die kosmetische Veränderungen erfordern?
Ewan

1
Wenn die Codierungsrichtlinien nicht befolgt wurden, sind Code-Design-Fehler, die zu Speicherlecks führen können, Fälle, in denen sich der Lead das Loslassen nicht leisten kann.
Nishanth Menon

Ihr Link ist tot
Greenonline

1

Einige Dinge zu beachten:

  1. Es geht sowohl um Psychologie als auch um Technologie, daher gibt es hier keine goldene Regel.
  2. Bei Menschen geht es nicht nur um Wissen, sondern auch um Kultur und Position in der Hierarchie.
  3. Wenn es sich um ein "langes" Spiel handelt (stabiles und etabliertes Unternehmen), hat ein gut integriertes Team, in dem sich die Leute gegenseitig vertrauen, normalerweise einen höheren Wert als der zu überprüfende Code. Es sollte nicht verwendet werden, um Dinge zu erzwingen, die zum Fortfahren nicht unbedingt erforderlich sind. Der Teufel steckt im Detail ...
  4. Wenn dies ein "kurzes" Spiel ist (Nebenprojekt, F & E, viele Freiberufler in einer Gruppe), überwinden die CR-Kosten häufig die daraus resultierenden Nachteile. Und Haltung sollte sein "nur machen es Wok"

-4

Es gibt nur zwei Dinge, die wichtig sind.

  1. Gibt es automatisierte Tests für alle Anforderungen?
  2. Gehen sie alle vorbei?

Alles andere ist kosmetisch und sollte über Bier diskutiert werden, anstatt als Tor durchgesetzt zu werden.

Wenn Sie dieser Ansicht folgen, werden Sie auf einen engen Fokusbereich beschränkt.

Sind die Voraussetzungen gut? Was Sie idealerweise wissen sollten, bevor Sie mit der Aufgabe beginnen, dh Leistung, Sicherheit usw., sollten alle vorhanden sein

Sind die Tests gute Tests? Verpasste Randfälle, testen sie die Anforderung gut usw. Letztendlich: Können Sie einen Test schreiben, der für eine vorhandene Anforderung gilt, der jedoch fehlschlägt?


3
Würden Sie sagen, dass Code ohne Zeilenumbrüche, mit nur einem Buchstaben Variablennamen und ansonsten verschleiert akzeptabel ist? Alle Tests würden bestanden, aber es ist nicht wartbar .
Philip Kendall

In einer Codeüberprüfung? Ja. Sobald Sie in die Benennung kommen, ist alles subjektiv. Sie wählen ein extremes Beispiel, aber es gibt viele Fälle, in denen Menschen Einzelbuchstabeniteratoren verwenden oder Code in einzeilige Funktionen verdichten, was als bewährte Methode angesehen wird
Ewan,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.