Code Review: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Langenfeld (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Dietsch (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{TOCRight}}Im Sopra werden jeden Woche ''Code Reviews'' von Studenten am Code der Studenten innerhalb einer Gruppe gemacht. Die Dozenten machen ungefähr auf der Mitte des Softwarepraktikums ein zustäztzliches Code Review am Projekt der Studenten.
{{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.


Das Code Review soll jede Woche ein Task von ca. 2h sein und reihum von einem Gruppenmitglied erledigt werden. Das Code Review sollte in seinem entsprechenden Gitea-Ticket einen Kommentar mit Erkenntnissen und einen Commit mit Ergebnissen bekommen. Die Ergebnisse sollen im Sprint Review vom Reviewer vorgestellt werden.
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==


Grudsätzlich soll ein Codreview '''die Codequalität verbessern'''. Im Allgemeinen ist das Vorgehen Code Reviews:
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 ist 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.
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. Suche dir anhand der folgenden Prioritäten ein Stück Code (typischerweise eine Klasse) aus:
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 dich interessiert, und den du daher verstehen und untersuchen möchtest.
#Es ist Code der Sie interessiert, und den Sie daher verstehen und untersuchen möchten.


Beachte dabei, dass du nicht deinen eigenen Code reviewen kannst. 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.
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 bleibe in deinem Review absolut sachlich. Übe Kritik am Code, nicht an der Person die den Code geschrieben hat. Versuche in deinem 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.
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.


Beginne damit, den ausgesuchten Code zu lesen, und zu verstehen. Die folgenden Punkte führen dich nachdem du den Code gelesen und verstanden hast, 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.
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 Beste Dukumentation 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 eigenlich Programmcode ab. Deswegen sollten Kommentare vor allem informationen geben, die nicht sofort aus dem Programmcode ersichtlich sind. Dazu gehören
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 offeisichtlich wie möglich geschrieben werden sollte, lässt sich das machmal doch nicht vermeiden).
*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 &amp;quot;est:&amp;quot; or &amp;quot;estimate:&amp;quot; followed by a number (not the infinite symbol)
<pre>//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(&quot;est(imate)*\s*:\s*(?P&lt;estimate&gt;[0-9]+((.|,)[0-9]+){0,1}).*&quot;)</pre>
*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.: automatisch generierte Kommentartemplates ohne Inhalt, und Beschreibungen von offensichtlichen Dingen. Kommentare sollten so weit möglich zu Gunsten guter Namen (s.u.) gespart werden.
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.: [https://docs.monogame.net/api/Microsoft.Xna.Framework.Quaternion.html Monogame Quaternion].
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====