agile testing day | techniques avancées de refactoring

Post on 16-Apr-2017

194 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related