64
& FÉLIX-ANTOINE BOURBONNAIS B.ING., M.SC, PSM Agile tour Québec 2016 Tests de caractérisation : à l’assaut de votre code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP

À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Embed Size (px)

Citation preview

Page 1: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

&FÉLIX-ANTOINE BOURBONNAIS

B.ING., M.SC, PSM

Agile tour Québec 2016

Tests de caractérisation : à l’assaut de votre

code « Legacy » patrimonial

PASCAL ROYING., CSM, PSM, PMP

Page 2: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Nous voulons vous introduire aux tests de caractérisation, un concept et un outil essentiel

pour les développeurs qui travaillent dans du code patrimonial

Pourquoi cette présentation ?

Page 3: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy
Page 4: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

4 4

Qui sommes-nous ?

Pascal RoyIng., PSM, CSM, PMP

Félix-Antoine BourbonnaisB.ing., PSM, M.Sc.

Page 5: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

5

Conférenciers

Formateurs

Mentors

Tech.

ÉQUIPE

GestionTDD

Architecture évolutive

Essais automatisés

DDD

Scrum

QA Agile

Gestion de projets

Agilité

BDD

> Nous sommes

Conseils stratégiques

> Spécialités

Page 6: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

LE CODE PATRIMONIAL

Page 7: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Selon vous…

Qu’est ce que du code patrimonial (« Legacy Code »)?

Page 8: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

• Du code écrit par d’autres

• Du code que plus personne ne veut toucher

• Du code qui n’est plus supporté par ceux qui l’ont écrit

• Du code qui pourrait être réécrit en utilisant de meilleures pratiques de code, d’outils ou de langages

• ...

Quelques définitions possibles…

Page 9: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Du code sans tests

Michael Feathers, Working Effectively with Legacy Code

Page 10: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

C’est du code difficile à faire évoluer.

Peu importe son âge ou la raison.

En gros…

Page 11: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

11

La peur : le pire ennemi du développement logiciel

Page 12: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Deux grandes approches…

Page 13: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

13

Tanné de stresser pour une

livraison, de débogger, d’avoir peur de briser?

Page 14: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

14 14

S.v.p. donnez-moi un nouveau projet

!@/$%!/%

Page 15: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Les tests sont essentiels pour maintenir une vélocité!

Page 16: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Oups…

Page 17: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

COMMENT S’ATTAQUER AU CODE PATRIMONIAL?

Page 18: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Le paradoxe des tests et du ré-usinage…

Page 19: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Bien outillé, vous pouvez rénover !

Page 20: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Vos options

Page 21: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Vos options

Page 22: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Vous avez 2 choix…

Une dépense

Big Bang

Risque très élevé

Pas de nouvelle valeur

Paiements accélérés

Étape par étape

Risque moindre

Produit de la valeur

Rebâtir de zéro Rénover / revitaliser

Page 23: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Pourquoi les gestionnaires ne veulent pas vous laisser faire

votre “refactoring” ?!?

Page 24: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

C’est un trou noir...!

Page 25: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

S’attaquer au coût du changement en

ramenant le système dans un état stable

et en le maintenant dans cet état par la suite !

Le but de la rénovation?

Page 26: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Graduellement,

tout en produisant de la valeur

Comment ?

Page 27: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Sélectionnez votre prochaine « Story » et commencez vos paiements de dette!

Comment?

Page 28: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

LE TEST DE CARACTÉRISATION

Page 29: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Un outil important pour vous permettre de rénover votre

code patrimonial

Le test de caractérisation…

Page 30: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

30

Page 31: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Un test de caractérisation est une description du comportement

actuel d’un bout de code.

- Michael Feathers

Définition : Test de caractérisation

Page 32: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Il permet de protéger le comportement existant contre toute modification non désirée.

C’est notre briseur de peur!

Et par la suite…

Page 33: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

LA STRATÉGIE DE RÉ-USINAGE UTILISANT LES TESTS DE CARACTÉRISATION

Page 34: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

1. Identifier un point de changement

2. Trouver les points de tests (« seam »)

3. Briser les dépendances pour pouvoir tester

4. Écrire les tests de caractérisation

5. Faire le changement + ré-usiner

Les 5 grandes étapes

Page 35: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

On peut toujours améliorer le code patrimonial…

Attention de focaliser sur notre but:

entourer de tests et faire le minimum

Page 36: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Une prise en charge dans une urgence: on veut limiter les dommages

et on focalise sur l’objectif le plus pressant

(ex.: briser les dépendances, caractériser …)

Le « Legacy code », c’est comme…

Page 37: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Le changement à faire !

Quel est l’objectif ? Qu’est-ce qui nous guide?

Page 38: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Attention de ne pas arrêter la chaîne de

production de valeur!

Attention au Big Bang !

38

Page 39: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

ÉCRITURE D’UN TEST DE CARACTÉRISATION

Page 40: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

1. Identifier et isoler un bout de code et le rendre accessible dans un harnais de tests

2. Écrire une assertion qui ne passe pas

3. Exécuter le test et le laisser vous dire quel est le comportement actuel

4. Changer votre assertion pour tenir compte du comportement actuel

5. Répéter…

La mécanique d’écriture d’un test de caractérisation

Page 41: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

public class SalesUtil { double BQ = 1000.0; double BCR = 0.20; double OQM1 = 1.5; double OQM2 = OQM1 * 2;

public double calculate(double tSales) { if (tSales <= BQ) {

return tSales * BCR; } else if (tSales <= BQ * 2) {

return (BQ) * BCR + (tSales - BQ) * BCR * OQM1; } else {

return (BQ) * BCR + (tSales - BQ) * BCR * OQM1 + (tSales - BQ * 2) * BCR * OQM2;

} }

}

http://s3.amazonaws.com/giles/demons_010609/wtfm.jpg

Un exemple simple de code patrimonial?

WTF?

WTF?

WTF?

Page 42: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Étape 1: identifier un bout de code et le rendre accessible dans un harnais de tests

public class SalesUtil {

double BQ = 1000.0;

double BCR = 0.20;

double OQM1 = 1.5;

double OQM2 = OQM1 * 2;

public double calculate(double tSales){

if (tSales <= BQ) {

return tSales * BCR;

} else if (tSales <= BQ * 2) {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1;

} else {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1 +

(tSales - BQ * 2) * BCR * OQM2;

}

}

}

@Test

public void test… {

assert(...)

}

1

?

2

? ?

1

2

Page 43: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Étape 2: écrire une assertion qui ne passe pas

public class SalesUtil {

double BQ = 1000.0;

double BCR = 0.20;

double OQM1 = 1.5;

double OQM2 = OQM1 * 2;

double calculate(double tSales) {

if (tSales <= BQ) {

return tSales * BCR;

} else if (tSales <= BQ * 2) {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1;

} else {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1+

(tSales - BQ*2)*BCR * OQM2;

}

}

}

@Test

public void testCalculate() {

assertEquals(

0.0,

SalesUtil.calculate(1000.0)

);

}

1

?

2

? ?

1

2

Page 44: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Étape 3: exécuter le test + trouver le comportement actuel

public class SalesUtil {

double BQ = 1000.0; double BCR = 0.20;

double OQM1 = 1.5;

double OQM2 = OQM1 * 2;

double calculate(double tSales) {

if (tSales <= BQ) { return tSales * BCR;

} else if (tSales <= BQ * 2) {

return (BQ) * BCR + (tSales - BQ) * BCR * OQM1;

} else {

return (BQ) * BCR + (tSales - BQ) * BCR * OQM1 +

(tSales - BQ * 2) * BCR * OQM2;

} }

}

@Test

public void testCalculate() {

assertEquals(

0.0,

SalesUtil.calculate(1000.0)

);

}

> junit.framework.AssertionFailedError: expected:<0.0> but was:<200.0>1

?

2

? ?

1

2

Page 45: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Étape 4: Remplacer par le comportement découvert

public class SalesUtil {

double BQ = 1000.0;

double BCR = 0.20;

double OQM1 = 1.5;

double OQM2 = OQM1 * 2;

double calculate(double tSales) {

if (tSales <= BQ) {

return tSales * BCR;

} else if (tSales <= BQ * 2) {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1;

} else {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1+

(tSales – BQ*2)*BCR * OQM2;

}

}

}

@Test

public void testCalculate2() {

assertEquals(

200.0,

SalesUtil.calculate(1000.0)

);

}

1

200.0

2

? ?

1

2

Page 46: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Étape 5: Répéter

public class SalesUtil {

double BQ = 1000.0;

double BCR = 0.20;

double OQM1 = 1.5;

double OQM2 = OQM1 * 2;

double calculate(double tSales) {

if (tSales <= BQ) {

return tSales * BCR;

} else if (tSales <= BQ * 2) {

return (BQ) * BCR +

(tSales - BQ) * BCR * OQM1;

} else {

return (BQ) * BCR +

(tSales - BQ) * BCR*OQM1+

(tSales – BQ*2) * BCR*OQM2;

}

}

}

@Test

public void testCalculate() {

assertEquals(

0.0,

SalesUtil.calculate(2000.0)

);

}

1

200.0

2

? ?

1

2

Page 47: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Attention aux « tant qu’à y être » !

Ciblez uniquement ce que vous voulez modifier.

Page 48: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy
Page 49: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

On n’a pas le temps de faire ça ?!?

Page 50: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Combien de temps çaprend pour comprendreun bout de code Legacy

avant de le modifier?

Réponse…

Page 51: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

PARTICULARITÉS D’UN TEST DE CARACTÉRISATION

Page 52: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

En quoi un TC est-il différent?

Objectif

Spécification du

comportement requisSpécification du

comportement actuel

Régulier Caractérisation

Page 53: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

En quoi un TC est-il différent?

Contexte d’utilisation

Comportement connuet nouveau code

Code patrimonial, comportement flou ou

perdu

Régulier Caractérisation

Page 54: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

En quoi un TC est-il différent?

Durée de vie

Permanent Temporaire

Régulier Caractérisation

Page 55: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Quel niveau ?

Est-ce que d’entourer mon application avec des tests bout-

en-bout peut m’aider à caractériser ?

Page 56: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Le nouveau code doit être testé et écrit avec les meilleures pratiques… n’ajoutez pas encore plus de

patrimoine douteux !

Avertissement !

Page 57: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

58

Page 58: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Le défi moderne…

La maintenabilité !

59

Page 59: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

60

La pourriture du code n’est pas une « loi naturelle »…

Page 60: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Although our first joy of programming may have been intense, the misery of

dealing with legacy code is often sufficient to extinguish that flame.

Michael Feathers, Working Effectively with Legacy Code

Le code patrimonial tue la flamme!

Page 61: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Image de http://beinweb.fr/wp-content/uploads/2014/04/boite-a-outils-entrepreneurs.jpg

Le test de caractérisation…

À ajouter dans votre boîte à outils!

Page 62: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

La « patrimonialite » ça se soigne !

Page 63: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

Merci .

Page 64: À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy

65

Mer

ciNotre siteelapsetech.com

Notre bloguedeveloppementagile.com

Nos Twitter@fbourbonnais | @elapsetech

Nos [email protected]

[email protected]

Nos LinkedInlinkedin.com/in/fbourbonnais/fr

ca.linkedin.com/in/roypa

conferences.elapsetech.com

Diapositives

Nos présentations, chez vous!