Code-Review in Java: Was prüfen und wie Feedback geben

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Code-Review in Java: Worauf achten und wie Feedback geben



Code-Review ist eines der effektivsten Werkzeuge zur Verbesserung der Softwareproduktqualität und des professionellen Wachstums im Team. Wenn es jedoch um Java geht, haben viele Entwickler (insbesondere Junioren) entweder Angst, ihren Code zur Überprüfung einzureichen, oder wissen nicht, worauf sie beim Überprüfen des Codes anderer achten sollen. In diesem Artikel werden wir genau aufschlüsseln, was in Java-Code überprüft werden muss und wie man Kommentare formuliert, um einen Kollegen nicht zu kränken, sondern ihm zu helfen, besser zu werden.



1. Was in Java-Code überprüfen: Technische Checkliste



Das Erste, was einem in den Sinn kommt, sind Syntax und Logik. Aber eine professionelle Überprüfung geht weit über diese Grenzen hinaus. Hier sind die wichtigsten Aspekte, die in jedem Pull-Request überprüft werden sollten.



1.1. Architektur und Design

Schauen Sie, wie gut die neue Änderung in die bestehende Architektur passt. Verstößt sie gegen die SOLID-Prinzipien? Wenn Sie zum Beispiel eine Klasse sehen, die zu viel tut (God Object), ist das ein Grund, eine Aufteilung vorzuschlagen.

  • Single-Responsibility-Prinzip (SRP): Jede Klasse sollte einen einzigen Grund für eine Änderung haben.
  • Dependency-Inversion-Prinzip (DIP): Abhängigkeiten von Abstraktionen, nicht von konkreten Implementierungen.
  • Patterns: Die Verwendung von Singletons, Factories oder Strategien sollte begründet sein, nicht "für den Fall der Fälle" angewendet werden.


// Schlecht: Klasse kennt sowohl Logik als auch Persistenzpublic class UserService {    public void registerUser(String name) {        // Validierung        // in DB speichern        // E-Mail senden    }}

// Gut: Trennung der Verantwortlichkeitenpublic class UserService { private final UserRepository repository; private final EmailService emailService;

public void registerUser(String name) { User user = new User(name); repository.save(user); emailService.sendWelcome(user); }}


1.2. Leistung und Speicherverwaltung

Java ist eine Sprache mit automatischer Speicherverwaltung, aber das bedeutet nicht, dass Sie die Optimierung vergessen können. Prüfen Sie:

  • String-Verkettung in einer Schleife: Verwenden Sie StringBuilder oder StringBuffer.
  • Unnötige Objekte: Erstellen temporärer Objekte in heißen Schleifen.
  • Collections: Auswahl der korrekten Implementierung (z. B. ArrayList vs. LinkedList).
  • NullPointerException: Verwenden Sie Optional oder Null-Prüfungen.


// Schlecht: Millionen von Strings im SpeicherString result = "";for (String s : list) {    result += s;}

// Gut: StringBuilderStringBuilder sb = new StringBuilder();for (String s : list) { sb.append(s);}String result = sb.toString();


1.3. Fehler- und Ausnahmebehandlung

Ein Fehler in Java ist nicht immer ein Bug. Manchmal ist es eine falsche Verwendung von Ausnahmen. Achten Sie auf:

  • Leere Catch-Blöcke: catch (Exception e) {} ist böse. Der Fehler sollte zumindest protokolliert werden.
  • Zu allgemeine Ausnahmen: Das Abfangen von Exception oder Throwable ist schlechte Praxis.
  • Ressourcenströme: Verwenden Sie try-with-resources zum automatischen Schließen.


// Schlecht: Ausnahme verschluckentry {    // etwas Code} catch (Exception e) {    // nichts tun}

// Gut: Protokollieren und erneut werfentry { // etwas Code} catch (SQLException e) { log.error("Fehler bei der Arbeit mit der Datenbank", e); throw new ServiceException("Fehler beim Ausführen der Operation", e);}


1.4. Tests und Testabdeckung

Ein Code-Review ohne Überprüfung der Tests ist ein "halbes" Review. Stellen Sie sicher, dass:

Blogs

Buchempfehlungen