Liebe Mit-EntwicklerInnen,

meine Anmerkungen stehen unten bei den jeweiligen Punkten.
Danke an das Team, das die Änderungen ausgearbeitet hat.

Freundliche Grüße
Stefan Weil

Am 22.11.2016 um 14:54 schrieb Huber, Kathrin:

Liebe Entwickler Kollegen,

zum Start in unser Refactoring möchten wir den bestehenden Code gern mittels eines Formatters an die Coding Guidlines anpassen.

Wir haben dafür die Coding Guidlines noch einmal genauer unter die Lupe genommen und möchten euch ein paar kleine Änderungen vorschlagen.

Wir hätten dazu gern ein Feedback von euch und würden bei einer mehrheitlichen Zustimmung bereits mit aktualisierten Coding Guidlines arbeiten, in dem Vertrauen darauf, dass diese daraufhin auch von der Mitgliederversammlung angenommen werden.

 

Hier unsere Änderungsvorschläge:

 

Die Zeile:

"Der Quellcode muss kompatibel zum Java6-Standard sein."

 

ändern in:

"Der Quellcode muss kompatibel zum Java7-Standard sein."

 

Erklärung:

Java 7 ist mittlerweile etabliert genug, dass es von den meisten Systemen unterstützt wird. Wir möchten auch die Vorteile dieser Version nutzen.



Volle Zustimmung. De fakto nutzen wir ja bereits Java7-Features.
Java 7 gibt es bereits seit mehr als 5 Jahren.

Theoretisch wäre sogar denkbar, auf Java 8 zu gehen, wenn das
für das Projekt sinnvoll erscheint. Aus meiner Sicht es das aber
nicht notwendig.


Hinzufügen des Absatzes:

"Der Quellcode muss mit dem mitgelieferten Codeformatter formatiert sein"

Erklärung:

Das Nutzen verschiedener Codeformatter führt in manchen Fällen zu einer Vielzahl von Änderungen in der commit history. Im schlimmsten Fall werden Dateien commited, die keine funktionalen Änderungen haben, aber vom Entwickler formatiert wurden und wegen abweichender Zeilenumbrüche als Änderung eingehen.

Insbesondere das Reviewen von Code wird dadurch deutlich erschwert.


Gut.

Zur Klarstellung: Soll bei einer Änderung eines Codeabschnittes nur dieser Abschnitt
oder die ganze Datei formatiert werden? Letzteres ist längerfristig sinnvoll,
erschwert aber zunächst den Review (oder man muss für jede Änderung zuerst
einen Commit für die Formatierung, dann einen für die eigentliche Änderung
machen). Wie sollen wir fremden Code innerhalb von Kitodo behandeln?
Da wäre ich für eine Ausnahmeregelung, damit zukünftige Updates und
Codevergleiche nicht unnötig erschwert werden (also keine Umformatierung
für Code aus anderen Projekten).

Die Zeile:

"Exceptions (error) müssen immer aufgefangen und geeignet behandelt, mindestens aber im Log registriert werden. Letzteres gilt auch für unkritische Programmfehler (warning) und Hinweise (notice)."

ändern in:

"Exeptions (error) müssen immer geeignet behandelt werden und gegebenenfalls bis zu der Stelle durchgereicht werden, an der dies möglich ist. Sie müssen immer im Log registriert werden. Letzteres gilt auch für unkritische Programmfehler (warning) und Hinweise (notice)."

Erklärung:

Errors sollten nur gefangen werden, wenn sie entsprechend behandelt werden können. An jeder Stelle jeden beliebigen Fehler zu fangen führt im schlimmsten Fall dazu, dass Methoden fehlerfrei durchlaufen, ohne aber das zu tun, was sie versprechen. Stattdessen sollten Fehler an aufrufende Methoden kommuniziert werden, damit diese entsprechende Schritte einleiten können (z.B. erneutes aufrufen, eventuell mit abweichenden Parametern, oder Ausgabe im Frontend "fehlerhafte Eingabe")


Nach meinem Verständnis ist Durchreichen und später Abfangen kein Widerspruch
zur bestehenden Regel, also müsste das nicht geändert werden. Die Änderung
macht es vielleicht noch etwas eindeutiger, deshalb ist sie soweit in Ordnung.

Die Protokollierungspflicht sollte präzisiert werden: es gibt heute schon Code,
bei dem Exceptions Teil des normalen Programmablaufs sind. Da wäre eine
Protokollierung kontraproduktiv, da sie unnötig Ressourcen kostet. Textvorschlag:

"Unerwartete Exceptions müssen immer im Log registriert werden"

Die Zeile:

"Jede Klasse, jede Methode und jede Klassenvariable ist im phpDoc- bzw. JavaDoc -Standard zu dokumentieren. Zusätzlich sollte im Quellcode ausführlich von Zeilenkommentaren zur Dokumentation Gebrauch gemacht werden."

 ändern in:

"Jede Klasse, jede öffentliche Methode und jede Klassenvariable ist im phpDoc- bzw. JavaDoc-Standard zu dokumentieren. Der Quellcode sollte durch sprechende Bezeichnungen und kleine Methoden weitestgehend selbsterklärend sein. Zur Erläuterung von Funktionalität sollte im Quellcode von Zeilenkommentaren Gebrauch gemacht werden."

Erklärung:

Die übermäßige Verwendung von Kommentaren führt erfahrungsgemäß leider dazu, dass Quellcode geändert wird, die Kommentare aber nicht, so dass Kommentar und tatsächliche Funktion voneinander abweichen. Im schlimmsten Fall ist dies nicht offensichtlich und ein Fehlverhalten des Codes wird angenommen oder nicht bemerkt.

Es ist anzustreben, dass Javacode durch geeignete Variablen- und Methodennamen weitestgehend selbsterklärend ist und auf Zeilenkommentare verzichtet werden kann.


Zustimmung. Vielleicht ergänzen:

"Nicht-öffentliche Methoden - insbesondere wenn sie nicht trivial sind -
sollten ebenfalls so dokumentiert werden."


Die Zeile:

"Die Zeichenkodierung ist generell UTF8, Zeilenumbrüche werden im Unix-Format kodiert, Einrückungen erfolgen mit Tabs. Jede Datei ist mit einem Zeilenumbruch abzuschließen."

ändern in:

"Die Zeichenkodierung ist generell UTF8, Zeilenumbrüche werden im Unix-Format kodiert, Einrückungen erfolgen mit Leerzeichen (4 Leerzeichen pro Einrückung). Jede Datei ist mit einem Zeilenumbruch abzuschließen."

Erklärung:

Der überwiegende Teil des Codes wird mit Spaces eingerückt. Nur neuere Codeteile sind mit Tabs eingerückt, da die letzten Coding Guidelines dies vorschrieben.

Verschiedene Text Editoren oder IDE's können eine verschiedene Anzahl von Leerzeichen pro Tab konfigurieren. Damit kann der Source Code unleserlich werden und ist vor allem nicht einheitlich.


Ich bin begeistert!!! Ja!!!

Die Zeile:

"Für Schleifen sollten Java5-Konstrukte für typsichere Listen benutzt werden."

ändern in:

"Für Schleifen sollten Konstrukte für typsichere Listen benutzt werden."

Erklärung:

Das diese Konstrukte für typsichere Listen mit Java-5 eingeführt wurden kann man als Randnotiz stehen lassen, können aber in den Guidelines selber zur Verwirrung führen. Da der Code Java-7 kompatibel werden soll, sollte es selbstverständlich sein, auch die bis dato verfügbaren effizientesten Mittel und Wege, die Java-7 bietet zu nutzen.


Ja.

Im Anhang findet ihr die angepassten Coding Guidelines, wie sie zur Abstimmung an die Mitgliederversammlung gehen würden.

Liebe Grüße

Kathrin Huber