1. Prinzipien
1.1 Single Level of Abstraction (SLA)
Warum? Die Einhaltung eines Abstraktionsniveaus fördert die Lesbarkeit.
- Variablenzuweisung = niedrigstes Abstraktionsniveau, Methodenaufrufe = höhere Abstraktionsniveaus, API-Aufrufe = sehr hohes Level
- Innerhalb einer Methode sollte nur ein Abstraktionsniveau verwendet werden, damit der Code gut lesbar und leicht zu verstehen ist.
Warum? Fokus erleichtert das Verständnis. Eine Klasse mit genau einer Aufgabe ist verständlicher als ein Gemischtwarenladen.
- Eine Klasse sollte nur einen Grund für Änderungen haben. Folglich übernimmt eine Klasse genau eine Aufgabe.
- Verletzung des Single Responsibility Principles führt zu Kopplung und erhöhter Komplexität
Warum? Wenn eine Codeeinheit keine klare Aufgabe hat ist es schwer sie zu verstehen, sie anzuwenden und sie ggf. zu korrigieren oder zu erweitern.
- Concerns (Belange) stehen orthogonal zueinander und zur Hauptfunktionalität, z.B. Tracing, Logging, Transaktionalität, Caching
- Concerns in verschiedene Code-Einheiten trennen, im Einklang mit dem Single Responsibility Principle, z.B. DB-Zugriffe von Geschäftslogik trennen
- SoC führt zu loser Kopplung, hoher Kohäsion und gut testbaren Komponenten
Warum? Code wird häufiger gelesen als geschrieben. Daher sind Konventionen wichtig die ein schnelles Lesen und Erfassen des Codes unterstützen.
- Namensregeln: Warum? Ohne Namensregeln muss man sich wieder und wieder auf den Stil einzelner Entwickler einstimmen.
- Richtig kommentieren: Warum? Unnötige oder gar falsche Kommentare halten beim Lesen auf. Der Code sollte so klar und deutlich sein dass er möglichst ohne Kommentare auskommt.
2.1 Issue Tracking
Warum? Nur, was man aufschreibt, vergisst man nicht und kann man effektiv delegieren und verfolgen.
- Nichts geht verloren, alle Punkte können priorisiert und sortiert werden.
- Tools:
- Mantis, http://www.mantisbt.org/
- Trac, http://trac.edgewall.org/
- Bugzilla, http://www.bugzilla.org/
- JIRA, http://www.atlassian.com/software/jira/
- weitere...
Warum? Integrationstests stellen sicher dass der Code tut was er soll. Diese wiederkehrende Tätigkeit nicht zu automatisieren wäre Zeitverschwendung.
- Regressionstests, um Korrektheit von Änderungen sicherzustellen und Angst vor Änderungen zu nehmen
- Automatisierung notwendig, da händisch nicht praktikabel
- Integrationstests oder noch besser Unit Tests durchführen (fernes Ziel: Test Driven Development)
Warum? Lesen bildet!
- Ziel: immer den neuesten Stand der Entwicklung und der Techniken beobachten
- Vorschlag: mindestens 6 Fachbücher pro Jahr plus Fachzeitschriften und Blogs regelmäßig lesen
Warum? Vier Augen sehen mehr als zwei. Wenn der eine Entwickler dem anderen seinen Code erklärt, tauchen meist Details auf, die bislang nicht bedacht wurden.
- als kontinuierlicher Prozess beim Pair Programming und/oder
- als eigenständiger Prozessschritt beim Code Review