SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Verander legacy code in clean code!
Jeroen Mengerink
David Baak
2© 2016
Agenda
• Introductie
• Legacy code voorbeeld
• Unittests maken
• Wat is refactoren
• Legacy code refactoren
• Wat zijn SOLID principes
• SOLID principes toepassen
• Conclusie
3© 2016
Introductie
Ben je ooit wel eens kapotte geautomatiseerde tests tegengekomen, waarbij de code
achter deze tests zo complex of onleesbaar was dat repareren onmogelijk leek?
4© 2016
Clean code
Clean code is simple and direct. Clean code reads like well-written prose.
Grady Booch
Programming is the art of telling another human what one wants the
computer to do.
Donald Knuth
Clean code is a code that is written by someone who cares.
Michael Feathers
5© 2016
Leesbare code vereist goede naamgeving
• Namen moeten voor zich spreken
• Namen moeten geen overbodige informatie of implementatiedetails
bevatten
• Namen moeten uit te spreken zijn
• Namen moeten relevant zijn in het probleemdomein
waitForIt()
findCustomerOrThrowExceptionIfNotFound(
String s)
int qty_s_passed
waitForAlert()
findCustomer(
String customerName)
int passedScenarios
6© 2016
Legacy code voorbeeld
public class Encryptor {
public String cryptWord(String word) {
if (word.contains(" "))
throw new InvalidParameterException();
char[] wordArray = word.toCharArray();
String newWord = "";
for (int i = 0; i < word.length(); i++) {
int charValue = wordArray[i];
newWord += String.valueOf((char) (charValue + 2));
}
return newWord;
}
De class heet Encryptor dus moeten we iets kunnen encrypten
7© 2016
Download en importeer het project
• Download / clone het Maven project of het Java project
• Maven Project
– https://github.com/daafith/Encryptor-Maven-
• Java Project
– https://github.com/daafith/Encryptor-JavaProject-
• Importeer het project in je IDE
8© 2016
Laten we unittests maken
9© 2016
Refactoren
“Refactoren is het herstructureren van de broncode van een
computerprogramma met als doel de leesbaarheid en
onderhoudbaarheid te verbeteren of het stuk code te
vereenvoudigen. Het refactoren van broncode verandert de
werking van de software niet: elke refactorstap is een kleine,
ongedaan te maken stap.”
(bron: https://nl.wikipedia.org/wiki/Refactoren)
10© 2016
Gebruik je IDE
• IDE’s ondersteunen refactoren, bijvoorbeeld:
– Rename
– Extract method
– Change method signature
– Inline
– Extract constant
– Convert local variable to field
11© 2016
Laten we refactoren
12© 2016
SOLID principes
• Single Responsibility
– Elke software-entiteit (classes, modules, functies, etc.) moet de
verantwoordelijkheid van één deel van de functionaliteit bevatten, niet meer
of minder dan dat.
13© 2016
SOLID principes
• Single Responsibility
Er mag maar één reden voor verandering zijn
Twee redenen voor
verandering
14© 2016
SOLID principes
• Open Closed
– Software-entiteiten (classes, modules, functies, etc.) moeten open zijn voor
uitbreiding, maar gesloten voor verandering.
15© 2016
SOLID principes
• Single Responsibility
• Open Closed
Code moet open zijn voor uitbreiding, maar gesloten voor verandering
Verandering als we
Square introduceren
16© 2016
SOLID principes
• Liskov Substitution
– Als er gebruik wordt gemaakt van een base class, moet de refentie naar de
base class kunnen worden vervangen door een afgeleide class zonder de
werking te beïnvloeden.
17© 2016
SOLID principes
• Single Responsibility
• Open Closed
• Liskov Substitution
Alle subtypes van een supertype moeten het supertype kunnen vervangen
Rectangle r = new Square();
r.setHeight(5);
r.setWidth(10);
Invalid area!
18© 2016
SOLID principes
• Interface Segregation
– Deel grote interfaces op in kleinere, specifieke interfaces. Dan krijgen de
classes die de interfaces implementeren alleen de methodes te zien die voor
hen relevant zijn.
19© 2016
SOLID principes
• Single Responsibility
• Open Closed
• Liskov Substitution
• Interface Segregation
Geen class moet afhankelijk zijn van methodes die hij niet gebruikt
Niet elke printer kan
emailen of scannen
20© 2016
SOLID principes
• Dependency Inversion
– Methoden moeten afhankelijk zijn van abstracties, niet van concrete
implementaties.
21© 2016
SOLID principes
• Single Responsibility
• Open Closed
• Liskov Substitution
• Interface Segregation
• Dependency Inversion
Is nu afhankelijk van
concrete
implementatie
Alleen afhankelijkheid van abstractie
22© 2016
Laten we SOLID toepassen
23© 2016
Conclusie
Behandel test automation als software
development
• Verbeter de leesbaarheid en onderhoudbaarheid van legacy code in
stappen:
1. Maak unittests voor de legacy code
2. Refactor de code
• Gebruik juiste namen
• Verwijder duplicatie
• Pas SOLID principes toe
24© 2016
Vragen
David Baak – david.baak@polteq.com
Jeroen Mengerink – jeroen.mengerink@polteq.com

Weitere ähnliche Inhalte

Ähnlich wie Verander legacy code in clean code!

Waarom 42windmills
Waarom 42windmillsWaarom 42windmills
Waarom 42windmills
42windmills
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012
Tim Ameye
 

Ähnlich wie Verander legacy code in clean code! (20)

Presentatie design principles
Presentatie design principlesPresentatie design principles
Presentatie design principles
 
Waarom 42windmills
Waarom 42windmillsWaarom 42windmills
Waarom 42windmills
 
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB AlarmcentraleHoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
 
Robot framework en ci v2
Robot framework en ci v2Robot framework en ci v2
Robot framework en ci v2
 
Versiebeheer van database changes
Versiebeheer van database changesVersiebeheer van database changes
Versiebeheer van database changes
 
2019 diy migration webinar gs nl
2019 diy migration webinar gs nl2019 diy migration webinar gs nl
2019 diy migration webinar gs nl
 
Sdb Presentatie
Sdb PresentatieSdb Presentatie
Sdb Presentatie
 
Creating sustainable solutions with SharePoint 2013 - Yuri Burger
Creating sustainable solutions with SharePoint 2013 - Yuri BurgerCreating sustainable solutions with SharePoint 2013 - Yuri Burger
Creating sustainable solutions with SharePoint 2013 - Yuri Burger
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012
 
DSD-NL 2021 Overzicht ontwikkeling van iMOD - Hunink
DSD-NL 2021 Overzicht ontwikkeling van iMOD - HuninkDSD-NL 2021 Overzicht ontwikkeling van iMOD - Hunink
DSD-NL 2021 Overzicht ontwikkeling van iMOD - Hunink
 
Drupal 7 Architectuur
Drupal 7 ArchitectuurDrupal 7 Architectuur
Drupal 7 Architectuur
 
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HANHAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
 
Meetup ASP.NET 5 19/11/2015
Meetup ASP.NET 5 19/11/2015Meetup ASP.NET 5 19/11/2015
Meetup ASP.NET 5 19/11/2015
 
Digipinguins: containers en virtualisatie (Ghlen Nagels - youngsource.be)
Digipinguins: containers en virtualisatie (Ghlen Nagels - youngsource.be)Digipinguins: containers en virtualisatie (Ghlen Nagels - youngsource.be)
Digipinguins: containers en virtualisatie (Ghlen Nagels - youngsource.be)
 
Crowd Designing Microservices Architecture
Crowd Designing Microservices ArchitectureCrowd Designing Microservices Architecture
Crowd Designing Microservices Architecture
 
Booosting 24sept13 bim dutch revit standards mark wieringa cepezed
Booosting 24sept13 bim dutch revit standards   mark wieringa cepezedBooosting 24sept13 bim dutch revit standards   mark wieringa cepezed
Booosting 24sept13 bim dutch revit standards mark wieringa cepezed
 
New features cognos10.2
New features cognos10.2New features cognos10.2
New features cognos10.2
 
Presentatie over webrichtlijnen versie 2 voor Fronteers, 7 september 2010
Presentatie over webrichtlijnen versie 2 voor Fronteers, 7 september 2010Presentatie over webrichtlijnen versie 2 voor Fronteers, 7 september 2010
Presentatie over webrichtlijnen versie 2 voor Fronteers, 7 september 2010
 
Tiende Meetup: Microservices
Tiende Meetup: MicroservicesTiende Meetup: Microservices
Tiende Meetup: Microservices
 
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB AlarmcentraleHoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
 

Verander legacy code in clean code!

  • 1. Verander legacy code in clean code! Jeroen Mengerink David Baak
  • 2. 2© 2016 Agenda • Introductie • Legacy code voorbeeld • Unittests maken • Wat is refactoren • Legacy code refactoren • Wat zijn SOLID principes • SOLID principes toepassen • Conclusie
  • 3. 3© 2016 Introductie Ben je ooit wel eens kapotte geautomatiseerde tests tegengekomen, waarbij de code achter deze tests zo complex of onleesbaar was dat repareren onmogelijk leek?
  • 4. 4© 2016 Clean code Clean code is simple and direct. Clean code reads like well-written prose. Grady Booch Programming is the art of telling another human what one wants the computer to do. Donald Knuth Clean code is a code that is written by someone who cares. Michael Feathers
  • 5. 5© 2016 Leesbare code vereist goede naamgeving • Namen moeten voor zich spreken • Namen moeten geen overbodige informatie of implementatiedetails bevatten • Namen moeten uit te spreken zijn • Namen moeten relevant zijn in het probleemdomein waitForIt() findCustomerOrThrowExceptionIfNotFound( String s) int qty_s_passed waitForAlert() findCustomer( String customerName) int passedScenarios
  • 6. 6© 2016 Legacy code voorbeeld public class Encryptor { public String cryptWord(String word) { if (word.contains(" ")) throw new InvalidParameterException(); char[] wordArray = word.toCharArray(); String newWord = ""; for (int i = 0; i < word.length(); i++) { int charValue = wordArray[i]; newWord += String.valueOf((char) (charValue + 2)); } return newWord; } De class heet Encryptor dus moeten we iets kunnen encrypten
  • 7. 7© 2016 Download en importeer het project • Download / clone het Maven project of het Java project • Maven Project – https://github.com/daafith/Encryptor-Maven- • Java Project – https://github.com/daafith/Encryptor-JavaProject- • Importeer het project in je IDE
  • 8. 8© 2016 Laten we unittests maken
  • 9. 9© 2016 Refactoren “Refactoren is het herstructureren van de broncode van een computerprogramma met als doel de leesbaarheid en onderhoudbaarheid te verbeteren of het stuk code te vereenvoudigen. Het refactoren van broncode verandert de werking van de software niet: elke refactorstap is een kleine, ongedaan te maken stap.” (bron: https://nl.wikipedia.org/wiki/Refactoren)
  • 10. 10© 2016 Gebruik je IDE • IDE’s ondersteunen refactoren, bijvoorbeeld: – Rename – Extract method – Change method signature – Inline – Extract constant – Convert local variable to field
  • 11. 11© 2016 Laten we refactoren
  • 12. 12© 2016 SOLID principes • Single Responsibility – Elke software-entiteit (classes, modules, functies, etc.) moet de verantwoordelijkheid van één deel van de functionaliteit bevatten, niet meer of minder dan dat.
  • 13. 13© 2016 SOLID principes • Single Responsibility Er mag maar één reden voor verandering zijn Twee redenen voor verandering
  • 14. 14© 2016 SOLID principes • Open Closed – Software-entiteiten (classes, modules, functies, etc.) moeten open zijn voor uitbreiding, maar gesloten voor verandering.
  • 15. 15© 2016 SOLID principes • Single Responsibility • Open Closed Code moet open zijn voor uitbreiding, maar gesloten voor verandering Verandering als we Square introduceren
  • 16. 16© 2016 SOLID principes • Liskov Substitution – Als er gebruik wordt gemaakt van een base class, moet de refentie naar de base class kunnen worden vervangen door een afgeleide class zonder de werking te beïnvloeden.
  • 17. 17© 2016 SOLID principes • Single Responsibility • Open Closed • Liskov Substitution Alle subtypes van een supertype moeten het supertype kunnen vervangen Rectangle r = new Square(); r.setHeight(5); r.setWidth(10); Invalid area!
  • 18. 18© 2016 SOLID principes • Interface Segregation – Deel grote interfaces op in kleinere, specifieke interfaces. Dan krijgen de classes die de interfaces implementeren alleen de methodes te zien die voor hen relevant zijn.
  • 19. 19© 2016 SOLID principes • Single Responsibility • Open Closed • Liskov Substitution • Interface Segregation Geen class moet afhankelijk zijn van methodes die hij niet gebruikt Niet elke printer kan emailen of scannen
  • 20. 20© 2016 SOLID principes • Dependency Inversion – Methoden moeten afhankelijk zijn van abstracties, niet van concrete implementaties.
  • 21. 21© 2016 SOLID principes • Single Responsibility • Open Closed • Liskov Substitution • Interface Segregation • Dependency Inversion Is nu afhankelijk van concrete implementatie Alleen afhankelijkheid van abstractie
  • 22. 22© 2016 Laten we SOLID toepassen
  • 23. 23© 2016 Conclusie Behandel test automation als software development • Verbeter de leesbaarheid en onderhoudbaarheid van legacy code in stappen: 1. Maak unittests voor de legacy code 2. Refactor de code • Gebruik juiste namen • Verwijder duplicatie • Pas SOLID principes toe
  • 24. 24© 2016 Vragen David Baak – david.baak@polteq.com Jeroen Mengerink – jeroen.mengerink@polteq.com