Code Reviews: Sind sie nützlich oder Zeitverschwendung?

Eine der wichtigsten Fähigkeiten eines Programmierers ist die Fähigkeit, sauberen Code zu schreiben, der wartbar und fehlerfrei ist. Ganz gleich, wie geschickt Sie sind, es ist immer möglich, dass Sie bestimmte Fehler oder potenzielle Probleme in Ihrem Code übersehen. An dieser Stelle kommt der Code-Review-Prozess ins Spiel. Code-Reviews sind in vielen Entwicklungsunternehmen zu einem Teil des Softwareentwicklungsprozesses geworden. Ihr Ziel ist es, den Code von Teamkollegen überprüfen zu lassen, bevor er in ein Quellcode-Repository übertragen wird, um potenzielle Fehler zu finden, sicherzustellen, dass die Codierungsstandards eingehalten werden, und nicht zuletzt, um Wissen unter den Teammitgliedern zu teilen. Manche Menschen lieben sie, andere hassen sie. Während die einen argumentieren, dass Code-Reviews ein notwendiger Bestandteil des Entwicklungsprozesses sind, stellen andere ihre Effektivität in Frage und bezeichnen sie als zeitaufwändig und potenziell überflüssig. Der wahre Nutzen von Code-Reviews ist sehr umstritten. Sind Code-Reviews also wirklich nützlich oder sind sie nur Zeitverschwendung? In unserem Artikel befassen wir uns mit den Argumenten aus beiden Lagern. Lesen Sie auch den Artikel Wie man Code-Reviews effektiv durchführt: Tipps und Tricks.

Code Reviews: nützlich oder nicht?

Was ist eine Codeüberprüfung?

Bei der Codeüberprüfung wird der von einem oder mehreren Entwicklern geschriebene Code überprüft, bevor er in ein gemeinsames Quellcode-Repository eingefügt wird. Dabei handelt es sich um eine systematische zeilenweise Überprüfung des Quellcodes durch eine oder mehrere Personen, um Fehler zu finden und zu beheben, die Qualität zu verbessern und die Einhaltung von Codierungsstandards sicherzustellen. In der Regel überprüfen die Entwickler die von ihren Kollegen vorgenommenen Codeänderungen, geben Feedback, schlagen Verbesserungen vor und identifizieren mögliche Probleme. Code-Reviews können mit einer Vielzahl von Methoden durchgeführt werden, z. B. mit Pair Programming, E-Mail, persönlichen oder Online-Meetings oder mit speziellen Tools, die asynchrone Reviews ermöglichen.

Prozess der Codeüberprüfung

Bei einer Codeüberprüfung werden normalerweise verschiedene Aspekte des Codes untersucht, um seine Qualität und Korrektheit sicherzustellen. Wir stellen Ihnen eine Liste mit einigen der wichtigsten Metriken zur Verfügung, die während des Code-Review-Prozesses überprüft werden können: Funktionalität: Überprüft, ob der Code die erforderlichen Funktionen und Operationen korrekt ausführt. Es wird geprüft, ob der Code die Anforderungen erfüllt und ob Daten und Eingaben korrekt verarbeitet werden. Effizienz und Optimierung: Die Effizienz des Codes wird überprüft und es wird nach Möglichkeiten zur Optimierung gesucht. Dies kann die Änderung von Algorithmen, die Eliminierung unnötiger Wiederholungen oder die Verbesserung der Leistung kritischer Teile des Codes umfassen. Sicherheit: Der Code wird auf die Einhaltung von Sicherheitsstandards und -richtlinien geprüft. Dazu gehört die Vermeidung potenzieller Sicherheitslücken wie SQL-Injection, Cross-Site-Scripting (XSS) oder unbefugter Zugriff. Architektur und Entwurfsmuster: Analysiert, ob der Code die im Projekt verwendeten Entwurfsmuster und Architekturprinzipien einhält. Dieser Aspekt umfasst die Überprüfung, ob der Code den Standard-Designregeln für Klassen, Module und Schichten folgt.

Bei einer Codeüberprüfung werden normalerweise verschiedene Aspekte des Codes untersucht, um seine Qualität und Korrektheit sicherzustellen.

Lesbarkeit: Misst, wie leicht der Code für andere Entwickler zu lesen und zu verstehen ist. Dieser Aspekt umfasst wichtige Faktoren wie die Verwendung verständlicher Variablen, korrekte und beschreibende Funktionsnamen und das Auskommentieren der weniger verständlichen Teile des Codes. Codierungsstil und Konventionen: Überprüft, ob der Code den etablierten Kodierungskonventionen und -stilen entspricht, die für das Projekt oder die Programmiersprache definiert sind. Dieser Aspekt umfasst die Formatierung des Codes, die Verwendung von Leerzeichen, Einrückungen und Ähnliches. Testen: Untersucht, ob der Code ordnungsgemäß getestet wurde und ob Tests geschrieben wurden, die alle kritischen Aspekte seiner Funktionalität abdecken. Zu diesem Punkt gehört auch die Überprüfung, ob der neue Code bestehende Tests nicht zerstört und ob er neue Testfälle hinzufügt. Dokumentation: Bewertet, ob der Code angemessen dokumentiert ist, so dass er für andere Entwickler leicht zu verstehen und zu verwenden ist. Dazu gehören Codekommentare, die Dokumentation der neuen API und Benutzerhandbücher.

Arten der Codeüberprüfung

Sehen wir uns nun an, welche verschiedenen Arten von Codeprüfungen in Unternehmen verwendet werden.

Persönlich (oder durch das Teilen des Bildschirms über MS Teams)

Diese Methode ist für die meisten Entwickler recht einfach und bequem, und der Entwickler erhält recht schnell Feedback. Wenn Ihr Code fertig ist, suchen Sie sich einen erfahrenen Teamkollegen, vereinbaren einen Termin und gehen den Code, den Sie geschrieben haben und den Sie in das Repository einbringen möchten, gemeinsam durch – entweder persönlich oder online. Diese Art der Codeüberprüfung eignet sich für kleinere Änderungen, da der Prüfer weniger Zeit hat, sich den Code in Ruhe anzusehen.

E-Mail-Thread

Es löst das Problem, einen Termin für die Überprüfung des Codes zu finden. Sobald ein bestimmtes Stück Code zur Überprüfung bereit ist, wird die Datei (oder ein Hyperlink dazu) per E-Mail an den/die entsprechenden Kollegen geschickt, so dass jeder sie überprüfen kann, sobald es sein Arbeitsplan erlaubt. Dieser Ansatz ist sicherlich flexibler und anpassungsfähiger als traditionellere Techniken, wie z.B. ein Treffen von Personen, die sich auf die Codeüberprüfung konzentrieren. Allerdings kann ein E-Mail-Thread mit Vorschlägen und unterschiedlichen Meinungen zu Codekorrekturen schnell aufgebläht werden, und es ist möglicherweise nicht offensichtlich, was bereits korrigiert wurde und was nicht.

Paarprogrammierung

Die Paarprogrammierung ist ein Ansatz zum Schreiben von Software, bei dem sich zwei Entwickler (meistens) einer einzigen Aufgabe widmen, gemeinsam an demselben Code arbeiten und so die Arbeit des anderen überprüfen. Es ist eine gute Möglichkeit für ältere Entwickler, jüngere Kollegen zu betreuen und die Codeüberprüfung direkt in den Programmierprozess einzubinden. Allerdings geht bei diesem Code-Review-Ansatz die Objektivität und Unvoreingenommenheit verloren, die Sie beim Betrachten und Überprüfen Ihres eigenen Codes haben. Der größte Nachteil ist jedoch der höhere Ressourcenverbrauch (insbesondere Personal und Zeit) im Vergleich zu anderen Methoden.

Paarprogrammierung ist ein Ansatz zum Schreiben von Software, bei dem zwei Entwickler (meistens) an der gleichen Aufgabe arbeiten.

Software-Tools

Sie vereinen die Vorteile der bisherigen Ansätze und beheben viele der oben erwähnten Einschränkungen der bisherigen Ansätze, indem sie eine einfachere und effizientere Methode zur Überprüfung von Code bieten. Die Codeprüfung kann direkt im Browser erfolgen oder diese Tools lassen sich über Plugins nahtlos in verschiedene Entwicklungsumgebungen oder Codeverwaltungs-Tools integrieren. Sie ermöglichen es Ihnen, Kommentare von Kollegen und Lösungsvorschläge für Fehler in einer klaren und kohärenten Reihenfolge zu verfolgen (ähnlich wie bei der Änderungsverfolgung in MS Word), die Überprüfungen sind asynchron (d.h. sie richten sich danach, wer wann verfügbar ist), der Autor des überprüften Codes erhält Benachrichtigungen für neue Überprüfungen. Es ist nicht nötig, einen erfahrenen Kollegen zu finden und einen Termin für die Überprüfung des Codes zu vereinbaren. Die Mitarbeiter arbeiten an ihren Rechnern und haben so viel Zeit, wie sie für die Überprüfung des Codes auf Korrektheit benötigen. Außerdem haben Software-Tools verschiedene Metriken für die statische Code-Analyse eingebaut, die den Prüfer auf bestimmte Teile des Codes aufmerksam machen können, auf die er sich bei seiner Prüfung konzentrieren sollte.

Vorteile von Codeprüfungen

Lassen Sie uns nun die Argumente sowohl der Befürworter als auch der Gegner von Code-Inspektionen betrachten. Beginnen wir mit den Argumenten, denen wir wahrscheinlich alle zustimmen werden.

Zwei Augenpaare sehen mehr als eines.

Wir Entwickler überschätzen manchmal, wie gut unser Code ist. Eine zweite, unabhängige Sichtweise kann uns eine andere Perspektive auf unseren Code geben und uns erlauben, den Code objektiver zu betrachten. Ein Prüfer kann uns wertvolles Feedback dazu geben, wie lesbar und verständlich unser Code ist. Wir versuchen in der Regel, unseren Code so zu schreiben, dass wir, wenn wir nach einiger Zeit darauf zurückkommen, kein Problem haben, relativ schnell zu verstehen, wie der Code funktioniert und was er löst.

Wissensaustausch.

Code-Reviews bieten eine hervorragende Gelegenheit, Wissen unter den Teammitgliedern auszutauschen und etwas Neues zu lernen. Ganz gleich, ob es sich um unterschiedliche Codierungsstile, Techniken und bewährte Verfahren oder um die Verwendung neuer Frameworks und Bibliotheken handelt, ich persönlich sehe diese gegenseitige Befruchtung als den größten Vorteil des Code-Review-Prozesses.

Fehlererkennung

Als Vorteil der Codeüberprüfung wird oft angeführt, dass es sich um eine Form der Fehlererkennung handelt und dass das Aufspüren von Fehlern, bevor der Code in einer Produktionsumgebung verwendet wird, langfristig Zeit und Ressourcen spart. Als Gegenargument wird jedoch angeführt, dass der Code vor der Codeüberprüfung funktionsfähig und getestet sein sollte.

Verbesserte Codequalität

Ein weiterer häufig genannter Vorteil ist die verbesserte Codequalität. Durch konstruktives Feedback und Verbesserungsvorschläge tragen Code-Reviews dazu bei, die Gesamtqualität des Quellcodes zu verbessern. Die Prüfer können aber auch Bereiche für die Optimierung, das Refactoring des Codes oder die Verbesserung der Dokumentation identifizieren. Diese Vorteile schwinden jedoch allmählich mit der Erfahrung des Programmierers. Ein Entwickler mit langjähriger Erfahrung ist in der Lage, diese Bereiche selbst zu erkennen und bei der Konzeption und Implementierung einer Lösung zu berücksichtigen.

Konsistenz der Standards und Verfahren

Code-Reviews gewährleisten die Konsistenz von Standards und vereinbarten Codierungspraktiken im gesamten Team. Dies ist zwar richtig, aber es gibt verschiedene Anwendungen wie Sonar, mit denen dies automatisch überprüft werden kann, so dass eine Überprüfung während der Codeüberprüfung nicht mehr erforderlich ist.

Nachteile von Code-Überprüfungen.

Kommen wir zu den Argumenten der Gegner der Durchführung von Code-Reviews.
Langwierig, zeitaufwendig und daher teuer. Außerdem machen Code-Reviews selten Spaß. Deshalb werden sie, vor allem unter Zeitdruck (unter dem wir alle von Zeit zu Zeit stehen) oder einer schnell näher rückenden Frist, entweder gar nicht durchgeführt oder zumindest gelegentlich übersprungen. Dies gilt insbesondere für Code, der bereits einmal eingecheckt wurde und bei jeder Änderung wiederholt eingecheckt werden sollte. Außerdem kann die Überprüfung von Code zeitaufwändig sein, insbesondere in großen Entwicklungsteams oder Projekten mit einer großen Codebasis. Die gründliche Überprüfung jeder einzelnen Codezeile erfordert viel Zeit und Mühe, was den Entwicklungsprozess verlangsamen kann.

Fehleranfällig

Sie sind anfällig für Fehler, da auch der Prüfer nur ein Mensch mit mehr oder weniger Erfahrung und in den meisten Fällen kein Sicherheitsexperte ist. Trotz aller Bemühungen der Prüfer können bei der Codeüberprüfung immer noch einige Probleme auftreten. Menschliches Versagen, Ermüdung oder mangelndes Fachwissen in bestimmten Bereichen können dazu führen, dass kritische Punkte übersehen werden, was die Effektivität des Code-Review-Prozesses verringert.

Sie erfordern mindestens zwei Programmierer.

Sie benötigen mindestens zwei Programmierer im Team, die mit der Technologie vertraut sind. Der Prüfer, der den Code prüft, sollte über die gleiche oder eine höhere Erfahrung verfügen, denn wenn ein weniger erfahrener Programmierer einen Code-Review für einen erfahreneren Kollegen durchführt, wird der gesamte Code-Review in der Regel bedeutungslos.

Subjektiv und demotivierend

Code-Reviews können manchmal subjektiv sein, da verschiedene Reviewer unterschiedliche Meinungen über die Qualität und den Stil des Codes haben. Diese Subjektivität führt dann oft zu Konflikten oder langwierigen Diskussionen innerhalb des Teams, was den Abschluss der Überprüfung verzögern und die Produktivität beeinträchtigen kann. Wenn das Feedback zu kritisch oder falsch ausfällt, kann sich der Autor des zu prüfenden Codes demotiviert fühlen. Ähnlich verhält es sich, wenn sein Code nach wiederholter Prüfung und Einarbeitung des Feedbacks nicht in das Repository aufgenommen wird. Softwareentwickler neigen dazu, ihren eigenen Code über alles zu lieben und den Code anderer Entwickler zu hassen, wenn er auf eine Weise geschrieben ist, die ihnen nicht gefällt. Sie sind sehr empfindlich, wenn es um ihren Code geht, und wenn jemand sie darauf hinweist, dass ihr Code schlecht ist, assoziieren sie das damit, dass sie schlechte Programmierer sind.

Endlose Debatten

Im Großen und Ganzen sorgen Code-Reviews für endlose Debatten unter Entwicklern. Ein Entwickler kann dem Drang nicht widerstehen, einem anderen Entwickler zu beweisen, dass die Art und Weise, wie er den Code schreibt, falsch ist. Entwickler führen Code-Reviews in der Regel aus ihrer eigenen Perspektive durch und betrachten andere Ansätze nicht gerne als richtig. Wir ziehen es vor zu glauben, dass unsere Ansätze genau die richtigen sind. Das liegt daran, dass wir Menschen zu faul sind und dass es für uns zu schmerzhaft ist, Zeit und Energie in die Lösung eines Problems zu investieren, das bereits gelöst wurde. Jeder Entwickler möchte anerkannt werden, also präsentieren sie ihre Argumente und Anwendungsfälle, um den Prüfer davon zu überzeugen, dass ihr Ansatz zur Lösung des Problems besser und optimaler ist. Das führt bei den Entwicklern zu endlosen Debatten, die letztlich dem Unternehmen und dem Geschäft schaden.

Übermäßiges Nachdenken

Ein weiteres Problem, das bei der Codeüberprüfung auftritt, ist übermäßiges Nachdenken. Selbst wenn der Code auf den ersten Blick gut aussieht, wollen wir unbewusst einen Fehler darin finden. Wir fühlen uns natürlich gut, wenn wir bei etwas nützlich sind, und wenn wir einen Fehler im Code finden, fühlen wir uns nützlich. Paradoxerweise wird derselbe Prüfer, wenn wir ihm den verbesserten (korrigierten) Code zur erneuten Prüfung vorlegen, noch mehr Dinge finden, die er verbessern kann. Und wenn wir denselben Code einem anderen Entwickler zur Überprüfung geben, wird dieser noch mehr Fehler finden.

Fazit

Wir haben Ihnen verschiedene Perspektiven auf Code-Reviews vorgestellt, und es ist klar, dass sie viele Vor- und Nachteile haben. Welche davon überwiegen, überlassen wir dem Urteil des Lesers. Wenn jedoch der Code-Review-Prozess nicht richtig eingerichtet ist, nicht genügend Zeit zur Verfügung steht oder die Reviews unter Zeitdruck durchgeführt werden und obendrein kein konstruktives Feedback vom Reviewer an den Code-Autor gegeben wird, können Code-Reviews das Arbeitsklima im Team erheblich stören und zu unkonstruktiven Auseinandersetzungen darüber führen, wessen Lösung für das Problem besser ist. Deshalb ist es wichtig, dass wir anfangen, einander mehr zu vertrauen und anderen die Entscheidungsfreiheit zu lassen. Wir bei msg life Slovakia verwenden auch Code-Reviews, allerdings nur für Programmieranfänger. Auf diese Weise können sie durch erfahrenere Kollegen eine Menge lernen und schneller in einen produktiven Arbeitsprozess einsteigen.

Wenn du ein Java Programmierer bist und nach Arbeit suchst, schau dir unsere Mitareiterbenefits an und reagiere auf die neuesten Stellenangebote.

Über den Autor

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Informieren Sie uns über sich