Upload
nicholas-suter
View
194
Download
0
Embed Size (px)
Citation preview
Techniques avancées de refactoringParce qu’on a tous un jour rêvé de devenir un Ninja
Pourquoi parler de refactoring aujourd’hui ?
Tester une nouvelle application conçue pour être testable, c’est facile. Oui, mais… et l’existant ?
1. Description du champ de bataille
2. Détecter et identifier l’ennemi
3. Techniques de combat et armement
Legacy
• “Le code des autres” (mon voisin de bureau)
• Du code non-supporté
• Tout code déjà écrit
• “Code without automated tests” (Michael Feathers in
Working Effectively with Legacy Code)
Legacy
1990 2000 2010
Legacy
Et parfois…
Refactoring
Refactoring
Le refactoring consiste à améliorer du code existant sans modifier son comportement.
SOLID
Single responsibility
Open for extension, closed for modification
Liskov substitution
Interface segregation
Dependency inversion
Clean Code
Le code propre est :
Simple Expressif Lisible Organisé Testé
Clean Code
Bonnes pratiques
KISS YAGNI DRYKeep it simple and stupid You aren’t going to need it Don’t repeat yourself
1. Description du champ de bataille
2. Détecter et identifier l’ennemi
3. Techniques de combat et armement
Cartographier
Cartographier
Mesurer la qualité du code
Parfois, l’estimation au doigt mouillé n’est pas suffisante.
Mesurer la qualité du code
Nombre de lignes de code
Complexité cyclomatique
Taux de couverture
Indice de spécialisation
Indice d’instabilité
Coefficient d’abstraction
Distance de bonne
conception
Taux de duplication
Volume de commentaires
Ration de méthodes
trop longues
Nombre de classes par
librairie
Nombre de méthodes par
classe
Mesurer la qualité du code
Code smells
Les code smells sont un indicateur de problèmes de design applicatif.
« Les code smells sont des symptômes de problèmes plus profonds. »Martin Fowler
Code smells
Les Gros
Les méthodes trop longues
Les classes trop grosses
La liste de paramètres
interminable
L’abus de primitives
La dissémination
de données
Code smells
Les Empêcheurs de Modifier en Rond
La chirurgie au fusil à pompe
Le feu de paille
Les structures d’héritage parallèles
Code smells
Les Dispensables
Les commentaires Le code mort Le code
dupliqué
Les lazy classes
Les DAO sans méthodes
métier
La généricité spéculative
Code smells
Les Abus de la Programmation Orientée Objet
Les switchs et if/else if/else
if/else
Les champs temporaires
L’héritage abusif
Le manque d’homogénéité
Code smells
Les Problèmes de Couplage
Feature Envy Intimité inappropriée
Enchaînements excessifs
Man in the middle
1. Description du champ de bataille
2. Détecter et identifier l’ennemi
3. Techniques de combat et armement
L’Arme Fatale
Cleaning the deck
• Renommage
• Déplacements de blocs de code
Code smells
Amélioration de la lisibilité et de la localisation du code
RenameMove to…• Move up• Move down
Extract variable Inline variable
Code smells
Découpage et organisation du code
Découpage de grosses interfaces
en petites interfaces ciblées
Extraction de classe
Extraction de méthode
Code smells
Abstraction
Encapsuler un champ
Remplacer les conditionnelles par du polymorphisme
Remplacer un code de type par un
pattern State ou Strategy
Extraction d’interface
Ajout de paramètre
Fakes, mocks et stubs
Golden Master
Bien armer ses soldats