SlideShare ist ein Scribd-Unternehmen logo
1 von 64
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
about.me
▪15+ years full stack
▪my passion
▪ clean code
▪ agile stuff
@RichardFichtner
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Das sind die Quellen
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Keinen Code schreiben
Tools verwenden:
▪Code Generatoren
▪Modellgetrieben
▪UI Builder
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
CSV Import?!
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Design Pattern / Entwurfsmuster
Quelle: ModelViewControllerDiagram.svg: Traced by User:Stannered derivative work: Davjoh (talk) - ModelViewControllerDiagram.svg
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Quelle: 2008 Focus Shift / OSNews / Thom Holwerda http://www.osnews.com/comics
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!
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.
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
▪…
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Wer warnt mich?
▪(Java) Compiler
▪PMD
▪Checkstyle
▪Findbugs
▪SonarQube / SonarLint
▪u.v.m.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Aufgeben?
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
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Struktur und Namensgebung
▪API unmissverständlich gestalten
LocalDate now = LocalDate.now();
LocalDate future = now.add(7);------------------------------
LocalDate future = now.addDays(7);
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
?!
var mystery =
FloatFactoryFactory.getInstance(FloatFactoryFactory.
defaultInstanceDescriptionString).getFactory(
Locale.getLocale("en-US")).createBuilder().setString("1.5").
getResult();
var mystery = 1.5F;
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
?!
if ((method.getName().startsWith("get")
|| method.getName().startsWith("is")) &&
(method.getName().substring(3).
toUpperCase().equals(
fieldName.toUpperCase()) ||
method.getName().substring(2).
toUpperCase().equals(fieldName.
toUpperCase())) {
// [MY_CODE]
}
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
?
if(method.getName().startsWith("get")) {
if(method.getName().substring(3).toUpperCase().
equals(fieldName.toUpperCase())) {
// [MY_CODE]
}
} else if(method.getName().startsWith("is")) {
if(method.getName().substring(2).toUpperCase().
equals(fieldName.toUpperCase())) {
// [MY_CODE]
}
}
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Sag doch gleich was du willst …
if( isGetter(method) || isBooleanGetter(method) ) {
// [MY_CODE]
}
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Reading is more important
than writing
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!
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
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();
}
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 :)
}
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Style Guide?
Quelle: https://xkcd.com/1513/
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;
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
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
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
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
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()){
[. . .]
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Kommentare
▪Code Marker verwenden ( // TODO, FIXME)
// TODO: RF (2014-06-23) AWP-5486 Kommentar
// FIXME: RF (2014-06-23) AWP-8478 Kommentar
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
*/
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]
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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
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
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Review
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Review
▪Oft
▪Kurz
▪Informal
▪Frühes Feedback
▪Beidseitig
▪Selten
▪Lang
▪Formal
▪Spätes Feedback
▪Einseitig
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
Gegenseitiger Austausch
Jedi Meister Jedi
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 ☺
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
RICHARD FICHTNER
@RichardFichtner | r.fichtner@xdev-software.de
XDEV Software Corp.
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/

Weitere ähnliche Inhalte

Ähnlich wie Raus aus der Wartungshölle mit Clean Code

Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesRobin Sedlaczek
 
Hightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign TestenHightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign TestenPeter Rozek
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionRobin Sedlaczek
 
Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuCédric Hüsler
 
Kennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developersKennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developersFDeitelhoff
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?Robin Sedlaczek
 
Wildix Germany Convention - April 2016
Wildix Germany Convention -  April 2016Wildix Germany Convention -  April 2016
Wildix Germany Convention - April 2016Wildix
 
dox42 - What`s new?
dox42 - What`s new?dox42 - What`s new?
dox42 - What`s new?dox42
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardRobin Sedlaczek
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014Erlebe Software
 
Agile Softwareentwicklung Bei Geschäftsanwendungen
Agile Softwareentwicklung Bei GeschäftsanwendungenAgile Softwareentwicklung Bei Geschäftsanwendungen
Agile Softwareentwicklung Bei GeschäftsanwendungenLars Jankowfsky
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)Robin Sedlaczek
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingOPEN KNOWLEDGE GmbH
 
Vortrag 210710 fin
Vortrag 210710 finVortrag 210710 fin
Vortrag 210710 finQooo
 
Scriptcs NRW Conf 2013
Scriptcs NRW Conf 2013Scriptcs NRW Conf 2013
Scriptcs NRW Conf 2013FDeitelhoff
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler PlattformRobin Sedlaczek
 
2009 - Basta!: Agiles requirements engineering
2009 - Basta!: Agiles requirements engineering2009 - Basta!: Agiles requirements engineering
2009 - Basta!: Agiles requirements engineeringDaniel Fisher
 
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhenDietrichRordorf
 

Ähnlich wie Raus aus der Wartungshölle mit Clean Code (20)

Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
 
Hightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign TestenHightway to Hell - Responsive Webdesign Testen
Hightway to Hell - Responsive Webdesign Testen
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neu
 
Kennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developersKennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developers
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?
 
Wildix Germany Convention - April 2016
Wildix Germany Convention -  April 2016Wildix Germany Convention -  April 2016
Wildix Germany Convention - April 2016
 
dox42 - What`s new?
dox42 - What`s new?dox42 - What`s new?
dox42 - What`s new?
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net Standard
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014
 
Agile Softwareentwicklung Bei Geschäftsanwendungen
Agile Softwareentwicklung Bei GeschäftsanwendungenAgile Softwareentwicklung Bei Geschäftsanwendungen
Agile Softwareentwicklung Bei Geschäftsanwendungen
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Vortrag 210710 fin
Vortrag 210710 finVortrag 210710 fin
Vortrag 210710 fin
 
Scriptcs NRW Conf 2013
Scriptcs NRW Conf 2013Scriptcs NRW Conf 2013
Scriptcs NRW Conf 2013
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
 
2009 - Basta!: Agiles requirements engineering
2009 - Basta!: Agiles requirements engineering2009 - Basta!: Agiles requirements engineering
2009 - Basta!: Agiles requirements engineering
 
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
 

Raus aus der Wartungshölle mit Clean Code

  • 1. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 2. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. about.me ▪15+ years full stack ▪my passion ▪ clean code ▪ agile stuff @RichardFichtner
  • 3. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 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
  • 5. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 6. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. 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
  • 7. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. 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.
  • 8. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. 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
  • 9. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 10. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Das sind die Quellen
  • 11. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 12. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Keinen Code schreiben Tools verwenden: ▪Code Generatoren ▪Modellgetrieben ▪UI Builder
  • 13. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 14. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. CSV Import?!
  • 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
  • 16. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 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
  • 18. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Design Pattern / Entwurfsmuster Quelle: ModelViewControllerDiagram.svg: Traced by User:Stannered derivative work: Davjoh (talk) - ModelViewControllerDiagram.svg
  • 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
  • 20. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 21. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Quelle: 2008 Focus Shift / OSNews / Thom Holwerda http://www.osnews.com/comics
  • 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 ▪…
  • 25. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 26. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 27. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Wer warnt mich? ▪(Java) Compiler ▪PMD ▪Checkstyle ▪Findbugs ▪SonarQube / SonarLint ▪u.v.m.
  • 28. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Aufgeben?
  • 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
  • 31. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 32. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Struktur und Namensgebung ▪API unmissverständlich gestalten LocalDate now = LocalDate.now(); LocalDate future = now.add(7);------------------------------ LocalDate future = now.addDays(7);
  • 33. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. ?! var mystery = FloatFactoryFactory.getInstance(FloatFactoryFactory. defaultInstanceDescriptionString).getFactory( Locale.getLocale("en-US")).createBuilder().setString("1.5"). getResult(); var mystery = 1.5F;
  • 34. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. ?! if ((method.getName().startsWith("get") || method.getName().startsWith("is")) && (method.getName().substring(3). toUpperCase().equals( fieldName.toUpperCase()) || method.getName().substring(2). toUpperCase().equals(fieldName. toUpperCase())) { // [MY_CODE] }
  • 35. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 36. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. ? if(method.getName().startsWith("get")) { if(method.getName().substring(3).toUpperCase(). equals(fieldName.toUpperCase())) { // [MY_CODE] } } else if(method.getName().startsWith("is")) { if(method.getName().substring(2).toUpperCase(). equals(fieldName.toUpperCase())) { // [MY_CODE] } }
  • 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] }
  • 38. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Reading is more important than writing
  • 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 :) }
  • 43. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Style Guide? Quelle: https://xkcd.com/1513/
  • 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()){ [. . .]
  • 50. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Kommentare ▪Code Marker verwenden ( // TODO, FIXME) // TODO: RF (2014-06-23) AWP-5486 Kommentar // FIXME: RF (2014-06-23) AWP-8478 Kommentar
  • 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]
  • 53. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 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
  • 56. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Review
  • 57. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Review ▪Oft ▪Kurz ▪Informal ▪Frühes Feedback ▪Beidseitig ▪Selten ▪Lang ▪Formal ▪Spätes Feedback ▪Einseitig
  • 58. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 59. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp. Gegenseitiger Austausch Jedi Meister Jedi
  • 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 ☺
  • 61. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 62. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 63. RICHARD FICHTNER @RichardFichtner | r.fichtner@xdev-software.de XDEV Software Corp.
  • 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/