Wozu ein Code-Review da ist
Bei einem Code-Review liest eine Kollegin Ihre Änderung, bevor sie in den Hauptcode kommt. Sie fängt Fehler, die Sie in der eigenen Arbeit nicht sehen, und verteilt das Wissen über den Code im Team.
Ein nützliches Review ist eine Fähigkeit. Es schaut darauf, was die Änderung tut, nicht nur darauf, wie sie aussieht.
Am Ende dieser Lektion
Notiz
Ich kann eine kleine Änderung lesen, durch Ausführen herausfinden, was falsch ist, und einen hilfreichen Kommentar schreiben.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Diff | eine Liste der Zeilen, die eine Änderung entfernt und hinzufügt |
| Code-Review | eine Kollegin liest eine Änderung, bevor sie übernommen wird |
| Randfall | eine ungewöhnliche Eingabe, etwa eine leere Liste, mit der der Code umgehen muss |
| Review-Kommentar | eine Notiz zu einer Stelle der Änderung, die sagt, was man nochmals ansehen soll |
| Überbleibsel | etwas, das jemand zu entfernen vergaß, etwa eine Debug-Ausgabe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Änderung zum Prüfen
Ein Kollege will eine kleine Funktion aufräumen. Sie mittelt die Bewertungen, die Kundinnen einem Produkt gaben. Legen Sie zwei Ordner an: vorher enthält den heutigen Code, nachher den Code mit seiner Änderung.
Ihre Aufgabe ist das Review, wie bei einem Pull-Request.
Die beiden Ordner anlegen
mkdir -p ~/reviewuebung/vorher ~/reviewuebung/nachherHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
In das Projekt wechseln
cd ~/reviewuebungHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Code von heute schreiben
printf 'def durchschnitt_bewertung(bewertungen):\n if len(bewertungen) == 0:\n return 0.0\n gesamt = 0\n for bewertung in bewertungen:\n gesamt = gesamt + bewertung\n return gesamt / len(bewertungen)\n' > vorher/bewertungen.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Version des Kollegen schreiben
printf 'def durchschnitt_bewertung(bewertungen):\n print("bewertungen", bewertungen)\n return round(sum(bewertungen) / len(bewertungen), 1)\n' > nachher/bewertungen.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zuerst das Diff lesen
Ein Diff zeigt nur, was sich geändert hat. Eine Zeile mit - wurde entfernt. Eine Zeile mit + wurde hinzugefügt. Eine Zeile mit einem Leerzeichen ist Kontext und blieb, wie sie war.
Die @@-Zeile sagt, wo die Änderung liegt. Hier läuft die alte Datei ab Zeile 1 über 7 Zeilen, die neue ab Zeile 1 über 3.
Die Änderung als Diff anzeigen
diff -u vorher/bewertungen.py nachher/bewertungen.py | tail -n +3Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Vier Fragen an jede Änderung
Tut sie, was sie sagt? Die Änderung sagt, sie räume die Funktion auf.
Was geschieht an den Rändern: bei einer leeren Liste, bei einem Element, bei einer sehr großen? Gibt es einen Test, der es bemerken würde? Ist etwas übrig geblieben oder unklar, etwa eine Debug-Zeile oder ein vager Name?
Die Änderung ausführen, nicht nur lesen
Lesen zeigt, was falsch aussieht. Ausführen zeigt, was falsch ist. Probieren Sie dieselben Aufrufe an beiden Versionen, auch mit der leeren Liste. PYTHONPATH sagt Python, aus welchem Ordner es importieren soll.
Den alten Code ausprobieren
PYTHONPATH=vorher python3 -B -c "from bewertungen import durchschnitt_bewertung; print(durchschnitt_bewertung([4, 5]), durchschnitt_bewertung([]))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den neuen Code mit zwei Bewertungen ausprobieren
PYTHONPATH=nachher python3 -B -c "from bewertungen import durchschnitt_bewertung; print(durchschnitt_bewertung([4, 5]))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den neuen Code mit einer leeren Liste ausprobieren
PYTHONPATH=nachher python3 -B -c "from bewertungen import durchschnitt_bewertung; print(durchschnitt_bewertung([]))" 2>&1 | grep ErrorHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den neuen Code nach Überbleibseln durchsuchen
grep -n "print(" nachher/bewertungen.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen Kommentar schreiben, der hilft
Ein nützlicher Kommentar nennt die Stelle, sagt, was Sie sahen, sagt, warum es zählt, und bietet einen Weg an. Er spricht über den Code, nicht über die Person.
Ein Kommentar, der nur "schlecht" oder "ändern" sagt, gibt der Autorin nichts, womit sie arbeiten kann.
Beispiel: schwache und nützliche Kommentare
| Schwacher Kommentar | Nützlicher Kommentar |
|---|---|
| Das ist falsch | Zeile 1: durchschnitt_bewertung([]) löst jetzt ZeroDivisionError aus. Der alte Code gab 0.0 zurück. Können wir diesen Fall behalten und einen Test ergänzen? |
| Das raus | Zeile 2: Dieses print schreibt bei jedem Aufruf in die Logs. Blieb es vom Debuggen übrig? |
| Warum runden? | Zeile 3: Das Runden auf eine Stelle macht aus 4,33 bei jedem Aufrufer 4,3. Ist das gewollt? Dann sagen Sie es im Namen oder im Titel. |
| Braucht Tests | Kein Test hat sich geändert. Ein Test für eine leere Liste und einer für eine einzelne Bewertung würden die nächste Änderung schützen. |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele prüfen nur Namen und Abstände und stimmen dann zu. Stil zählt am wenigsten. Führen Sie die Änderung aus, probieren Sie den leeren Fall und fragen Sie, ob ein Test es bemerken würde, wenn sie kaputtginge.
Weiterdenken: die eigene Änderung prüfen
Machen Sie eine kleine Änderung an einer eigenen Funktion, etwa eine neue Eigenschaft. Kopieren Sie vorher die alte Datei.
Lassen Sie diff -u über beide laufen und beantworten Sie die vier Fragen wie eine Prüferin. Schreiben Sie einen Kommentar, den Sie gern erhalten würden.