Code Review: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
{{TOCRight}}Im | {{TOCRight}}Im Softwarepraktikum werden ab Woche 3 ''Code Reviews'' des Projekts durch die Studenten gemacht. Die Dozenten machen ungefähr in der Mitte des Softwarepraktikums ein zusätzliches Code Review des Projekts. | ||
Ein Code Review soll jede Woche ein Task von ca. 2h sein und reihum von einem Gruppenmitglied erledigt werden. Ein Code Review sollte in seinem entsprechenden Gitea-Ticket einen Kommentar mit Erkenntnissen und -- falls sinnvoll -- einen Commit mit Verbesserungen bekommen. Die Erkenntnisse und Verbesserungen sollen im Sprint Review vom Reviewer vorgestellt werden. | |||
==Ein Code Review Durchführen== | ==Ein Code Review Durchführen== | ||
Grundsätzlich soll ein Code Review '''die Codequalität verbessern'''. Im Allgemeinen ist das Vorgehen bei einem Code Review: | |||
<blockquote>Versuche zu verstehen welche Aufgabe der Code löst, dann versuche zu beurteilen ob der Code dafür angemessen, ausreichend dokumentiert und lesbar ist. | <blockquote>Versuche zu verstehen welche Aufgabe der Code löst, dann versuche zu beurteilen ob der Code dafür angemessen, ausreichend dokumentiert und lesbar ist. | ||
</blockquote> | </blockquote> | ||
Die Reihenfolge die im Folgenden vorgeschlagen | Die Reihenfolge die im Folgenden vorgeschlagen wird, zielt darauf ab, dass jeder Student ein Code Review machen kann, unabhängig von seiner Programmiererfahrung. Deswegen beginnt das Review mit simplen syntaktischen Eigenschaften, und schreitet dann zu immer komplexeren Themen fort. | ||
===Etwas zum Reviewen finden=== | ===Etwas zum Reviewen finden=== | ||
Der erste Schritt in einem Code Review ist, etwas zum Reviewen zu finden. | Der erste Schritt in einem Code Review ist, etwas zum Reviewen zu finden. Suchen Sie sich anhand der folgenden Prioritäten ein Stück Code (typischerweise eine Klasse) aus: | ||
#Der Autor hat um ein Review gebeten, weil er ein interessantes Stück Code verfasst hat, z.B. das Routing, oder den Renderer | #Der Autor hat um ein Review gebeten, weil er ein interessantes Stück Code verfasst hat, z.B. das Routing, oder den Renderer. | ||
#Der Code wurde im Sprinttreffen als zu reviewen beurteilt (weil er unaufgeräumt oder verdächtig aussieht, weil er nicht richtig arbeitet, oder weil er zu kompliziert ist) | #Der Code wurde im Sprinttreffen als zu reviewen beurteilt (weil er z.B. unaufgeräumt oder verdächtig aussieht, weil er nicht richtig arbeitet, oder weil er zu kompliziert ist). | ||
#Das Sonar markiert den Code als zu komplex oder schwer wartbar, bzw. das ist die Klasse mit dem höchsten/schlechtesten Score in einer dieser Kategorien. | #Das Sonar markiert den Code als zu komplex oder schwer wartbar, bzw. das ist die Klasse mit dem höchsten/schlechtesten Score in einer dieser Kategorien. | ||
#Es ist Code der | #Es ist Code der Sie interessiert, und den Sie daher verstehen und untersuchen möchten. | ||
Beachten Sie dabei, dass Sie nicht Ihren eigenen Code reviewen können. Die Idee hinter einem Review ist die Codequalität durch ein zweites Paar Augen zu erhöhen. Durch das Austauschen über die Funktionsweise können dabei sowohl Reviewer als auch Autor etwas lernen. Der Code, der für das Review ausgesucht wird, sollte nicht zu groß sein, sodass man ihn auch in ca. 1h durchsprechen kann. | |||
Bitte | Bitte bleiben Sie in Ihrem Review absolut sachlich. Üben Sie Kritik am Code, nicht an der Person die den Code geschrieben hat. Versuchen Sie in Ihrem Review darauf einzugehen, ''was'' das Problem ist, ''wieso'' das ein Problem ist, und ''wie'' man das Problem lösen kann. Da im Softwarepraktikum die Zeit knapp und Projektfortschritt wichtig ist, können manche Probleme und Anmerkungen vielleicht auch nicht sofort repariert bzw. umgesetzt werden. Das mindert den Nutzen des Reviews aber nicht. | ||
Beginnen Sie damit, den ausgesuchten Code zu lesen, und zu verstehen. Die folgenden Punkte führen Sie nachdem Sie den Code gelesen und verstanden haben, durch das Code Review. Sie sind sind nach ihrer Komplexität und dem für sie benötigtem Wissen geordnet. Bei jedem Punkt finden sich außerdem Links zu zusätzlichen Informationen. | |||
===Kommentare und Namen=== | ===Kommentare und Namen=== | ||
| Zeile 30: | Zeile 30: | ||
====Kommentare==== | ====Kommentare==== | ||
Grundsätzlich sollte der Programmcode selbst die | Grundsätzlich sollte der Programmcode selbst die beste Dokumentation der genauen Details der Implementierung sein. Kommentare die einfach nur beschreiben was der Programmcode tut müssen bei jeder Änderung mit berücksichtigt werden und weichen dadurch schnell vom eigentlichen Verhalten des Programms ab. Deswegen sollten Kommentare vor allem Informationen geben, die nicht (oder nur schwer) aus dem Programmcode ersichtlich sind. Dazu gehören | ||
*Erklärungen über ein Stück Code dessen Funktion nicht offensichtlich ist (auch wenn der Code so | *Erklärungen über ein Stück Code dessen Funktion nicht offensichtlich ist (auch wenn der Code so offensichtlich wie möglich geschrieben werden sollte, lässt sich das manchmal doch nicht vermeiden). | ||
//recognises all labels of the form &quot;est:&quot; or &quot;estimate:&quot; followed by a number (not the infinite symbol) | |||
re.compile(<nowiki>&</nowiki>quot;est(imate)*\s*:\s*(?P<nowiki>&</nowiki>lt;estimate<nowiki>&</nowiki>gt;[0-9]+((.|,)[0-9]+){0,1}).*<nowiki>&</nowiki>quot;) | |||
re.compile("est(imate)*\s*:\s*(?P<estimate>[0-9]+((.|,)[0-9]+){0,1}).*") | |||
*Zusätzliche information z.B.: über Seiteneffekte und Annahmen die zu einem Stück Code gemacht wurden | *Zusätzliche information z.B.: über Seiteneffekte und Annahmen die zu einem Stück Code gemacht wurden | ||
*TODO Kommentare | *<code>//TODO</code> Kommentare | ||
*Hervorheben von wichtigen, aber nicht offensichtlichen Details | *Hervorheben von wichtigen, aber nicht offensichtlichen Details | ||
Vermieden werden sollten auf jeden Fall Kommentare, die keine weitere Funktion haben z.B. | Vermieden werden sollten auf jeden Fall Kommentare, die keine weitere Funktion haben, wie z.B. automatisch generierte Kommentartemplates ohne Inhalt oder Beschreibungen von offensichtlichen Dingen. Kommentare sollten so weit möglich zu Gunsten guter Namen (s.u.) gespart werden. | ||
Zudem gibt es auch Dokumentation die in Form von Kommentaren in das Programm eingefügt werden kann. Diese sollten in erster Linie transportieren welchen Zweck ein Element erfüllt, und wie man es benutzen soll (z.B. | Zudem gibt es auch Dokumentation die in Form von Kommentaren in das Programm eingefügt werden kann. Diese sollten in erster Linie transportieren welchen Zweck ein Element erfüllt, und wie man es benutzen soll (z.B. [https://docs.monogame.net/api/Microsoft.Xna.Framework.Quaternion.html Monogame Quaternion]). | ||
====Commitmessages==== | ====Commitmessages==== | ||
