agile testing day | techniques avancées de refactoring

33
Techniques avancées de refactoring Parce qu’on a tous un jour rêvé de devenir un Ninja

Upload: nicholas-suter

Post on 16-Apr-2017

194 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Agile Testing Day | Techniques avancées de refactoring

Techniques avancées de refactoringParce qu’on a tous un jour rêvé de devenir un Ninja

Page 2: Agile Testing Day | Techniques avancées de refactoring

Pourquoi parler de refactoring aujourd’hui ?

Tester une nouvelle application conçue pour être testable, c’est facile. Oui, mais… et l’existant ?

Page 3: Agile Testing Day | Techniques avancées de refactoring

1. Description du champ de bataille

2. Détecter et identifier l’ennemi

3. Techniques de combat et armement

Page 4: Agile Testing Day | Techniques avancées de refactoring

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)

Page 5: Agile Testing Day | Techniques avancées de refactoring

Legacy

1990 2000 2010

Page 6: Agile Testing Day | Techniques avancées de refactoring

Legacy

Et parfois…

Page 7: Agile Testing Day | Techniques avancées de refactoring

Refactoring

Page 8: Agile Testing Day | Techniques avancées de refactoring

Refactoring

Le refactoring consiste à améliorer du code existant sans modifier son comportement.

Page 9: Agile Testing Day | Techniques avancées de refactoring

SOLID

Single responsibility

Open for extension, closed for modification

Liskov substitution

Interface segregation

Dependency inversion

Page 10: Agile Testing Day | Techniques avancées de refactoring

Clean Code

Le code propre est :

Simple Expressif Lisible Organisé Testé

Page 11: Agile Testing Day | Techniques avancées de refactoring

Clean Code

Page 12: Agile Testing Day | Techniques avancées de refactoring

Bonnes pratiques

KISS YAGNI DRYKeep it simple and stupid You aren’t going to need it Don’t repeat yourself

Page 13: Agile Testing Day | Techniques avancées de refactoring

1. Description du champ de bataille

2. Détecter et identifier l’ennemi

3. Techniques de combat et armement

Page 14: Agile Testing Day | Techniques avancées de refactoring

Cartographier

Page 15: Agile Testing Day | Techniques avancées de refactoring

Cartographier

Page 16: Agile Testing Day | Techniques avancées de refactoring

Mesurer la qualité du code

Parfois, l’estimation au doigt mouillé n’est pas suffisante.

Page 17: Agile Testing Day | Techniques avancées de refactoring

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

Page 18: Agile Testing Day | Techniques avancées de refactoring

Mesurer la qualité du code

Page 19: Agile Testing Day | Techniques avancées de refactoring

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

Page 20: Agile Testing Day | Techniques avancées de refactoring

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

Page 21: Agile Testing Day | Techniques avancées de refactoring

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

Page 22: Agile Testing Day | Techniques avancées de refactoring

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

Page 23: Agile Testing Day | Techniques avancées de refactoring

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é

Page 24: Agile Testing Day | Techniques avancées de refactoring

Code smells

Les Problèmes de Couplage

Feature Envy Intimité inappropriée

Enchaînements excessifs

Man in the middle

Page 25: Agile Testing Day | Techniques avancées de refactoring

1. Description du champ de bataille

2. Détecter et identifier l’ennemi

3. Techniques de combat et armement

Page 26: Agile Testing Day | Techniques avancées de refactoring

L’Arme Fatale

Page 27: Agile Testing Day | Techniques avancées de refactoring

Cleaning the deck

• Renommage

• Déplacements de blocs de code

Page 28: Agile Testing Day | Techniques avancées de refactoring

Code smells

Amélioration de la lisibilité et de la localisation du code

RenameMove to…• Move up• Move down

Extract variable Inline variable

Page 29: Agile Testing Day | Techniques avancées de refactoring

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

Page 30: Agile Testing Day | Techniques avancées de refactoring

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

Page 31: Agile Testing Day | Techniques avancées de refactoring

Fakes, mocks et stubs

Page 32: Agile Testing Day | Techniques avancées de refactoring

Golden Master

Page 33: Agile Testing Day | Techniques avancées de refactoring

Bien armer ses soldats