Wie kann man Code besser überprüfen?

11

Zuerst glaube ich fest an den Codeüberprüfungsprozess und möchte immer, dass jemand anderes meinen Code überprüft. Meine Frage dreht sich wirklich darum, wie ich eine Codeüberprüfung für eine andere Person besser durchführen kann.

Ich weiß, dass Sie zur Durchführung einer Codeüberprüfung Kenntnisse über die Funktionsweise des vorhandenen Codes und über den lokalen Standard benötigen, die ich meiner Meinung nach sehr gut kenne. Trotzdem habe ich das Gefühl, dass ich niemals eine ausreichend gute Codeüberprüfung für andere Leute durchführe. Ich weiß auch, dass bestimmte Leute einen besseren Code für die Jobüberprüfung zu haben scheinen als andere, also frage ich mich für diejenigen, die großartige Codeüberprüfer sind, welche Techniken verwenden Sie?

barrem23
quelle
3
Könnten Sie erläutern, warum Sie das Gefühl haben, nicht gut genug zu arbeiten? Nach welcher Metrik?
Mark Canlas
Versuchen Sie
Ross
Stimmen Sie mit @Mark überein: Codeüberprüfung auf Richtigkeit, Stil, Einfachheit, Effizienz, ...? Können Sie Fehler erkennen, indem Sie den Code lesen? Können Sie Inkonsistenzen im Stil erkennen, indem Sie sie lesen? und so weiter.
Rwong

Antworten:

5

Es gibt keine Möglichkeit, eine bessere Codeüberprüfung durchzuführen. Das Einzige, was Sie tun können, ist, sich durch Lernen und Erfahrung zu verbessern.

Normalerweise folge ich Dingen

- Use variables judiciously
- Keep things in scope loose boundaries will generate more errors
- Orient your language of coding in domain specific terms, they make more sense
- Keep loops to minimum 2 for each method if needed
- use ternary operators
- Arrange methods alphabetically
- Keep errors at handling ease
- write less but efficient code

Ich denke, da kann man noch viel hinzufügen.

T. Raghavendra
quelle
2
Ich bin mir nicht sicher, ob es eine gute Idee ist, Methoden alphabetisch anzuordnen. Ich würde sagen, es wäre besser, sie nach ihrer Funktion geordnet zu halten. Zwei verwandte Methoden wirklich weit weg zu haben, nur weil sie getSomething und setSomething heißen, scheint keine so gute Idee zu sein.
verschlang Elysium
2
TBH, ternäre Operatoren verwandeln Ihren Code häufig in etwas, das schwerer zu verstehen ist als ohne sie (obwohl ausführlicher).
verschlang Elysium
2
Ich bin mir auch nicht sicher, was Sie mit "weniger aber effizienten Code schreiben" meinen. Ich würde sagen, im Allgemeinen sollte es keine Rolle spielen, wie viel Sie codieren, solange es klar ist - ich kümmere mich die meiste Zeit nicht besonders um effizienten Code.
verschlang Elysium
3

Fragen Sie sich, was andere zu einem guten Rezensenten für Sie macht.

auch, wenn Sie den Code durchgehen;

  • Halten Sie bei allem an, was Sie nicht verstehen. Schreiben Sie jetzt, dass ein Kommentar benötigt wird
  • Identifizieren Sie, ob es den Codierungsstandards entspricht: Leerzeichen, Klammern, camelCase..etc
  • Überprüfen Sie, ob alle Funktionen enthalten sind
  • Führen Sie einen einfachen Test der Logik durch, um festzustellen, ob die Randbedingungen usw. erfüllt sind.
Ross
quelle
1
Grund für eine Ablehnung? konstruktive Kritik bitte
Ross
2
Richtig kapitalisieren.
Mark Canlas
1
lol was? np bro
Ross
1

Ich ziele nur auf

  • Erklären, warum eine vorgeschlagene Änderung erforderlich ist. Stellen Sie sicher, dass ich den Grund nicht nur für die Lösung verstehe
  • Einigung über die Code-Formatierung - damit jeder Code gleich / vertraut aussieht
  • Teilen einer Liste von Code-Merkmalen, die Sie beibehalten möchten. Stellen Sie es in ein Wiki, damit nicht jeder jeden Fehler einmal machen muss. Aktualisieren Sie es regelmäßig.

Abgesehen davon ist "wissen, wonach zu suchen ist" nur mit Erfahrung, Übung und Lesen verbunden.

Gishu
quelle
1
Ich bin ein großer Fan der mechanischen Code-Formatierung. Idealerweise über einen Präprozessor beim Einchecken, damit die Leute den offiziellen Standard umgehen können, wenn er sie wirklich nervt (die Erfahrung zeigt, dass sie schnell aufgeben)
1

Nach meiner Erfahrung ist es am besten, das gesamte Team den Code überprüfen zu lassen. Wir verwenden in jedem Projekt eine Commit-Mailingliste, in der Sie alle Codeänderungen am Versionskontrollsystem verfolgen können. Die meisten unserer Entwickler haben ihre projektspezifische Mailingliste abonniert, weil sie an Codeänderungen interessiert sind.

Wenn jemand im neuen Quellcode einen schlechten Weg bemerkt, erklärt er dem Committer entweder, wie er es besser machen kann, wenn der Committer ein Auszubildender ist, oder er beginnt eine Diskussion darüber, wenn es sich um einen erfahreneren Committer handelt.

Natürlich garantiert diese Methode nicht, dass der gesamte neue Code überprüft wird, insbesondere in stressigen Zeiten, in denen niemand im Team die Möglichkeit hat, jede Codeänderung zu verfolgen. Auch ist nicht jeder Entwickler dafür verantwortlich, dass jeder Entwickler seine Arbeit gut macht, allein davon können Sie nicht garantieren, dass sie überprüft wird. Aber zumindest in unseren Teams gibt es immer einen technischen Manager, der für die technische Qualität verantwortlich ist.

Ich bin ein echter Fan von Code-Bewertungen, wenn sie den folgenden Bewertungen entsprechen:

  • Jeder Entwickler hat die Möglichkeit, den gesamten Code und die Argumente seiner Meinung nach zu überprüfen
  • Niemand hat das Recht, anderen Code zu missbrauchen
  • Nicht nur schlechter Code aktiviert eine Diskussion, sondern auch guter Code
  • Die Diskussionen enden mit Glück für alle Beteiligten
  • Die Überprüfung erfolgt nahezu in Echtzeit, zumindest bevor die Funktion abgeschlossen ist

Was ich gelernt habe ist, dass wenn Sie jemand sind, der jede Codezeile überprüft und der Meinung ist, dass Sie solche Dinge wie die Codequalität in Bezug auf Codeformatierung oder Codeeffizienz kontrollieren müssen, Sie selbst sehr ineffizient sind, weil Sie Dinge tun, für die Maschinen etwas tun können Sie. Ihr Ziel sollte es sein, ein kontinuierliches Integrationssystem zu verwenden, das die Build- und Codequalität jedes Codebeitrags steuert. Wenn dieses System Berichte generiert und an die Mitwirkenden sendet, ist alles perfekt.

Ich muss zugeben, dass meine Vorschläge keinen Sinn ergeben, wenn Sie den Code überprüfen müssen, weil Sie die Qualität eines Programmierers kontrollieren oder bewerten müssen. In diesem Fall würde ich den Quellcode auch nicht zeilenweise überprüfen. Ich würde Dinge wie überprüfen:

  • Gibt es sicherheitsrelevante Probleme?
  • sind beabsichtigte APIs verwendet
  • Hat der Code die angegebene Architektur angewendet?
  • hat er nützliche Tests geschrieben (aber nur wenn er implizit angewiesen wurde, musste ich lernen)
  • Dokumentation
  • Build-Prozess
  • ... und wahrscheinlich noch mehr

Wenn Sie ein erfahrener Entwickler sind, werden Sie auf jeden Fall immer Dinge wie Schleifen finden, die Sie mit besserer Leistung machen könnten. Natürlich ist es nützlich, anderen dieses Wissen zu erklären, aber dies sollte nicht Teil der Überprüfungssitzung sein. Wenn es signifikante Leistungsprobleme gibt, dann nicht, weil er (oder sie) eine weniger effiziente Variante eines Listentyps verwendet hat.

Da die anfängliche Frage lautete, warum einige Personen eine bessere Bewertung abgeben als andere, würde ich antworten, dass diese Personen möglicherweise eine Vorschau erstellen, bevor die eigentliche Überprüfung beginnt. Dies bedeutet, dass sie wahrscheinlich selbst darauf vorbereitet sind, genau zu wissen, was sie überprüfen möchten .

Thomas
quelle
1

[H] Wie kann ich eine Codeüberprüfung für eine andere Person besser durchführen?

Stellen Sie ihnen viele Fragen

Ich weiß, dass Sie zur Durchführung einer Codeüberprüfung Kenntnisse über die Funktionsweise des vorhandenen Codes haben müssen ...

Nein, Sie müssen den Code nicht vorher kennen, um ein guter Rezensent zu sein.

Vor ein paar Jobs forderte mein Arbeitgeber, dass alle Code-Check-Ins von einem Prüfer abgemeldet werden müssen. Ich habe hauptsächlich GUI-Arbeiten in C ausgeführt, und einer der besten Rezensenten für mich war mein Kumpel Bill. Er beherrschte C, hatte aber nie viel GUI-Arbeit geleistet, und als er in die Reviews ging, hatte er keine Ahnung, wie mein Code funktionieren sollte.

Aber er stellte viele Fragen dazu und musste erklären, damit er verstehen konnte, was mein Code tat und warum ich viel zum Nachdenken anregte. Es hat mich dazu gebracht, viele seltsame kleine Fehler mit Randfällen zu finden und auch andere Ansätze in Betracht zu ziehen, die ich möglicherweise gewählt habe. Obwohl ich zu diesem Zeitpunkt 22 Jahre lang C geschrieben hatte und dachte, ich sei ziemlich kompetent, verbesserte sich meine Codequalität schnell.

Obwohl ich dort nicht mehr arbeite, überprüfe ich vor dem Einchecken immer noch die Unterschiede und frage mich: "Welche Fragen hätte Bill dazu?" Und ziemlich oft ändere ich dadurch etwas.

Bob Murphy
quelle