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 von Software haben können. Anhand von Beispielen aus über 15 Jahren Projekterfahrung schauen wir uns die Abgründe der Software Entwicklung an. Wir lernen Techniken kennen, die Du noch heute in Deinem Code einsetzen kannst, um der Wartungshölle zu entgehen. Spoiler Alarm: Viele Beispiele sind erst zum Lachen und dann zum Weinen :)
11. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
MicroStream is a
completely new written Serialization for
Java
Download free:
www.microstream.one
Free support:
MicroStream Community Forum
www.microstream.one
Twitter: @microstreamOne
MicroStream - Java Native Data Store
Create ultra-fast In-Memory Database Applications.
12. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Agenda
▪Warum Clean Code?
▪3 Stufen von Clean Code
▪Code Smells
▪Beispiele aus über 15 Jahren Kampf um / mit Clean Code
14. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Kostenverteilung im Software Lebenszyklus
Quelle: Schach, S. R., 1999. Software Engineering. Fourth Edition Hrsg. Boston: McGraw-Hill
Glass, R. L., 2001. Frequently Forgotten Fundamental Facts about Software Engineering. IEEE Software, Issue May/June, pp. 110-112.
7%
6%
12%
8%
40%
16%
11%
67%
SOFTWARE LIFECYCLE
Requirements Engineering Design Programming
Integration Enhancements Migration
Bug Fixes
15. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Entwicklung und Wartung
0%
100%
200%
Entwicklung Wartung
Code schreiben Code lesen
Quelle: Parikh, G. & Zvegintzov, N., 1983. Tutorial on software maintenance. s.l.:IEEE Computer Society Press.
16. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Kostenverteilung im Software Lebenszyklus
Quelle: Schach, S. R., 1999. Software Engineering. Fourth Edition Hrsg. Boston: McGraw-Hill
Glass, R. L., 2001. Frequently Forgotten Fundamental Facts about Software Engineering. IEEE Software, Issue May/June, pp. 110-112.
0% 20% 40% 60% 80% 100%
Gesamt
Wartung
Code Verstehen
23. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
make or buy?
Make Buy / Use
Code Qualität
Tests
Dokumentation
Preis / Leistung
Spezialisierung
25. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
27. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
30. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Was ist sauberer Code?
▪Code ohne Compiler-Fehler?
▪Code ohne Warnings?
▪Code nach bestimmter Formatierung?
Definitionssache!?
31. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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.
32. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Code Smells
▪Überholte Kommentare
▪Auskommentierter Code
▪Tote Funktionen / Code
▪Funktionen mit vielen Parametern
▪Funktionen mit Flag-Parameter
▪Magic-Numbers
▪…
37. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
38. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Kosten von Änderungen / Bugs
0
20
40
60
80
100
120
Requirements Design Code Test Production
hoursofwork
Phase detected
45. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Sag doch gleich was du willst …
if( isGetter(method) || isBooleanGetter(method) ) {
// [MY_CODE]
}
47. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Was ist mit altem Code (auskommentiert)?
▪Reduziert Übersichtlichkeit
▪Trügerische Sicherheit
▪ Es fehlen die Infos dazu
▪ Das Sourcecode Versionssystem hilft
▪Raus damit!
48. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Code Konventionen: Struktur
▪Code Formatter verwenden
▪ Zeichenlimit pro Zeile
▪ Leerzeilen / Leerzeichen
▪ Position von Klammern / Geschweiften Klammern
49. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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();
}
50. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Code Konventionen: Struktur
▪Else Block immer schreiben oder nicht?
if(isValid()){
save();
close();
}
if(isValid()){
save();
close();
} else {
// Nix zu tun :)
}
52. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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;
53. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
54. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
55. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
56. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Kommentare
▪Vorgehen kommentieren (Warum? und nicht Wie!)
// gibt 1 zurück
return 1;
[…]
i++; // i um eins erhöhen
57. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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()){
[. . .]
59. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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
*/
60. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Fehlermeldungen
ArrayIndexOutOfBoundsException:
Array index out of range
ArrayIndexOutOfBoundsException:
Array index 15 out of range
ArrayIndexOutOfBoundsException:
Array index 15 out of range [0:9]
62. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Quelle: Capers Jones, Chief Scientist Emeritus: Software Quality in 2002: A Survey of the State of the Art. Software Productivity Research an Artemis company
63. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Quelle: Capers Jones, Chief Scientist Emeritus: Software Quality in 2002: A Survey of the State of the Art. Software Productivity Research an Artemis company
68. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Review Benefits
▪Zone of Chaos vermeiden
▪Personalentwicklung
▪Verbesserung der Codebasis
▪Weniger Stress, mehr Haare am Kopf, mehr von der Rente ☺
72. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
Links
▪https://dev.to/bosepchuk/the-one-chart-every-developer-must-
understand-2db9
73. RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
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/