Robert C. Martin hat den Begriff „Clean Code“ in seinem gleichnamigen Buch für die Software Entwicklung geprägt. Doch was ist sauberer Code und was hat dieser mit der Wartbarkeit von Software zu tun? Im Vortrag wird an vielen Beispielen praxisnah dargestellt, wie bereits kleine Verbesserungen der „Code Sauberkeit“ sehr positive Auswirkungen auf die Wartbarkeit Ihrer Software haben können. Anhand von Beispielen aus über 15 Jahren Projekterfahrung lernen Sie Techniken kennen, die Sie noch heute in Ihrem Code einsetzen können.
4. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Agenda
▪Warum Clean Code?
▪3 Stufen von Clean Code
▪Code Smells
▪Beispiele aus über 15 Jahren Kampf um / mit Clean Code
15. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
make or buy?
Make Buy / Use
Code Qualität
Tests
Dokumentation
Preis / Leistung
Spezialisierung
17. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Copy & Paste vs. Reuse
▪DRY (Don‘t Repeat Yourself)
▪“three strikes and you refactor”
Original Copy 1 Copy 2
Quelle: Martin Fowler , Kent Beck , John Brant: Refactoring: Improving the Design of Existing Code
19. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Design Pattern / Entwurfsmuster
bewährte Lösungsschablonen für wiederkehrende
Entwurfsprobleme
Ein gutes Muster sollte
▪ ein oder mehrere Probleme lösen,
▪ ein erprobtes Konzept bieten,
▪ auf realen Designs basieren
Quelle: http://de.wikipedia.org/wiki/Entwurfsmuster
22. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Was ist sauberer Code?
▪Code ohne Compiler-Fehler?
▪Code ohne Warnings?
▪Code nach bestimmter Formatierung?
Definitionssache!
23. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Was ist nicht sauberer Code?
„Unter Code-Smell versteht man in der
Programmierung ein Konstrukt, das eine
Überarbeitung des Programm-Quelltextes
nahelegt.“
Quelle: Martin, Robert C. (2009). "17: Smells and Heuristics". Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall. ISBN 978-0-13-235088-4.
24. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Code Smells
▪Überholte Kommentare
▪Auskommentierter Code
▪Tote Funktionen / Code
▪Funktionen mit vielen Parametern
▪Funktionen mit Flag-Parameter
▪Magic-Numbers
▪…
29. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Zero Warning Policy
▪Warnings weisen auf Probleme hin
▪Nicht alle Warnings sind immer ein Problem
▪Warnings lassen sich konfigurieren
▪Nur noch relevante Warnings anzeigen lassen
30. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Kosten von Änderungen / Bugs
0
20
40
60
80
100
120
Requirements Design Code Test Production
hoursofwork
Phase detected
37. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Sag doch gleich was du willst …
if( isGetter(method) || isBooleanGetter(method) ) {
// [MY_CODE]
}
39. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Was ist mit altem Code (auskommentiert)?
▪Reduziert Übersichtlichkeit
▪Trügerische Sicherheit
▪ Es fehlen die Infos dazu
▪ Das Sourcecode Versionssystem hilft
▪Raus damit!
40. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Code Konventionen: Struktur
▪Code Formatter verwenden
▪ Zeichenlimit pro Zeile
▪ Leerzeilen / Leerzeichen
▪ Position von Klammern / Geschweiften Klammern
41. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Code Konventionen: Struktur
▪Bei if, else, for, while, IMMER geschweifte Klammern
schreiben
if(isValid())
save();
if(isValid())
save();
close();
if(isValid())
save();
close();
if(isValid()){
save();
close();
}
42. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Code Konventionen: Struktur
▪Else Block immer schreiben oder nicht?
if(isValid()){
save();
close();
}
if(isValid()){
save();
close();
} else {
// Nix zu tun :)
}
44. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Speicher tauschen
/*
* swap left and right
* elements for whole array
*/
for( i = 0; i < MAX_ELEMENTS; i++)
leftElement = left [ i ];
left[ i ] = right [ i ];
right [ i ] = leftElement;
45. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Rechenstunde
x = 3+4 * 2+7 = 63
x = (3+4) * (2+7) = 63
x = 3+ 4*2 +7 = 18
x = 3+ (4*2) +7 = 18
46. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Code Konventionen: Style
vusing adjhungarian nnotation vmakes nreading
ncode adjdifficult
▪Ungarische Notation mit Vorsicht genießen
▪ Insbesondere bei Sprachen mit statischer Typisierung
▪ Interfaces nicht mit einem vorangestellten "I" markieren
47. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Kommentare
Quelle: http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered
// When I wrote this, only God and I understood
// what I was doing
// Now, God only knows
48. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Kommentare
▪Vorgehen kommentieren (Warum? und nicht Wie!)
// gibt 1 zurück
return 1;
[…]
i++; // i um eins erhöhen
49. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
if(person.age() >= 18){
[. . .]
// prüfen ob Person schon 18 ist
if(person.age() >= 18){
[. . .]
Kommentare
▪Vorgehen kommentieren (Warum? und nicht Wie!)
// Volljährigkeit prüfen
if(person.age() >= 18){
[. . .]
if(person.age() >= LEGAL_AGE){
[. . .]
if(person.age() >= country.getLegalAge()){
[. . .]
if(person.age() >=
country.getLegalAgeInYears()){
[. . .]
51. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Quelle: http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered
/**
* Dear maintainer:
*
* Once you are done trying to 'optimize' this routine,
* and have realized what a terrible mistake that was,
* please increment the following counter as a warning
* to the next guy:
*
* total_hours_wasted_here = 42
*/
52. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Fehlermeldungen
ArrayIndexOutOfBoundsException:
Array index out of range
ArrayIndexOutOfBoundsException:
Array index 15 out of range
ArrayIndexOutOfBoundsException:
Array index 15 out of range [0:9]
54. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Quelle: Capers Jones, Chief Scientist Emeritus: Software Quality in 2002: A Survey of the State of the Art. Software Productivity Research an Artemis company
55. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Quelle: Capers Jones, Chief Scientist Emeritus: Software Quality in 2002: A Survey of the State of the Art. Software Productivity Research an Artemis company
60. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Review Benefits
▪Zone of Chaos vermeiden
▪Personalentwicklung
▪Verbesserung der Codebasis
▪Weniger Stress, mehr Haare am Kopf, mehr von der Rente ☺
64. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
picture credits
All pictures in this presentation originate from pixabay.
This is a human-readable summary of the Pixabay License (read the full text).
You can use all images and videos published on Pixabay for free (except as set out below). You may
use them for commercial and non-commercial purposes, in altered and unaltered form. You don't
need to ask permission from or provide credit to the image author or Pixabay, although it is
appreciated when possible.
Cartoons:
▪ https://xkcd.com/1513/
▪ https://xkcd.com/844/