58
& FÉLIX-ANTOINE BOURBONNAIS B.ING., M.SC, PSM Version: Mai 2017 (DEV) Tests de caractérisation : à l’assaut de votre code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP

Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

&FÉLIX-ANTOINE BOURBONNAIS

B.ING., M.SC, PSM

Version: Mai 2017 (DEV)

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

code « Legacy » patrimonial

PASCAL ROYING., CSM, PSM, PMP

Page 2: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Imaginez du code patrimonial (Legacy)…

Imaginez un outil qui permettrait à la fois d’explorer ce que le code fait réellement et de réusiner ce

vieux code…

Page 3: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 4: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

4

Qui sommes-nous ?

Pascal RoyIng., PSM, CSM, PMP

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

Page 5: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Formations Mentorat Diagnostics Conférences

Page 6: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Conférenciers

Formateurs

Mentors

Tech.

Équipe &Affaires

GestionTDD

Architecture évolutive

Essais automatisés

DDD

Scrum

QA Agile

Gestion de projets

Agilité

BDD

> Nous sommes

Conseils stratégiques

> Spécialités

Page 7: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 8: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Suis-je seul à avoir du Legacy Code ?

Page 9: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

C’est du code difficile à faire évoluer.

Peu importe son âge ou la raison.

Qu’est-ce que du Legacy Code ?

Page 10: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

• 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 autres définitions possibles…

Page 11: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Du code sans tests

Michael Feathers, Working Effectively with Legacy Code

Page 12: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 13: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Deux grandes approches…

Que faire avec mon code Legacy ?

Page 14: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

La peur : le pire ennemi du développement logiciel

14

Page 15: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Tanné de stresser pour une livraison, de déboguer, d’avoir

peur de briser?

15

Page 16: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

S.v.p. donnez-moi un nouveau projet !@/$%!/%

Page 17: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

La descente aux enfers

Legacy Code Pas de test

Pas de réusinage

Patches

Page 18: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 19: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Pourquoi ne pas

revitaliservotre code?

Page 20: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Bien outillé, vous pouvez rénover !

Page 21: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Graduellement, tout en produisant

de la valeur

Page 22: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Sélectionnez votre prochaine « Story » et commencez vos

paiements de dette!

Page 23: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 24: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Test de caractérisation

Page 25: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 26: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Un test de caractérisation est une description du comportement actuel d’un bout de code.

- Michael Feathers

Page 27: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

C’est un briseur de PEUR !

Pour…

Comprendre et documenter ce que fait le code

Empêcher la régression lors du réusinage

+

Page 28: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 29: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

1. Identifier et isoler un bout de code à modifier ou à analyser

2. Écrire un test qui passe par le bout de code avec une assertion qui échouera

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

4. Changer votre assertion et le nom du test pour tenir compte du comportement actuel

5. Répéter…

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

Page 30: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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 31: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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(...)

}

Étape 1: identifier un bout de code

1

?

2

? ?

1

2

Page 32: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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)

);

}

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

1

?

2

? ?

1

2

Page 33: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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)

);

}

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

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

?

2

? ?

Page 34: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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 lessThanBaseQuota_useBaseCommissionRate() {

assertEquals(

200.0,

SalesUtil.calculate(1000.0)

);

}

Étape 4: Remplacer par le comportement découvert

1

2

1

200

2

? ?

Page 35: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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)

);

}

Étape 5: Répéter

1

2

1

200

2

? ?

Page 36: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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

Ciblez uniquement ce que vous voulez modifier.

Page 37: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 38: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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

Page 39: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Combien de temps ça prend pour comprendre un bout de code Legacy

avant de le modifier?

Page 40: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 41: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

• Spécification du comportement requis

• Comportement connuet nouveau code

• Permanent

• Spécification du comportement actuel

• Code patrimonial, comportement flou ou perdu

• Temporaire

Test unitaire Caractérisation

How is a CT different?

Page 42: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Est-ce qu’entourer mon application avec des tests bout-en-bout peut m’aider à

caractériser ?

Page 43: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 44: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Le réusinage (refactoring) n’est pas une petite refonte!

Page 45: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Pourquoi les gestionnaires/clients/chargés de

projet ont-ils si peur du réusinage ?

Page 46: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Attention au réusinage en Big Bang !

46

Page 47: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Une dépense

Big Bang

Risque très élevé

Pas de nouvelle valeur

Paiements réguliers (dette)

Étape par étape

Risque moindre

Produit de la valeur

Refaire Rénover / Revitaliser

Refonte ou réusinage ?!?

Page 48: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

La stratégie

> on veut limiter les dommages et focaliser sur l’objectif le plus pressant

Comme la prise en charge d’un patient dans une urgence…

Page 49: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

C’est le changement à faire qui guide notre

intervention

Page 50: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil
Page 51: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Cette présentation montre à comprendre et sécuriser votre patrimoine…

Maintenant, vous pouvez apprendre à rénover votre patrimoine:• Sprout Methods/Classes• Instance Delegator• Extract to Method• …

Maintenant… comment réusiner ?

Page 52: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Le défi moderne: la maintenabilité

Page 53: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

La pourriture du code n’est pas une

« loi naturelle »

Page 54: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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 55: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

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

Le test de caractérisation…Ajoutez-le à votre boîte à outils!

Page 56: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

La « patrimonialite », ça se soigne !

Page 57: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Merci .

Page 58: Tests de caractérisation : à l’assaut de votre code ... · code « Legacy » patrimonial PASCAL ROY ING., CSM, PSM, PMP. Imaginez du code patrimonial (Legacy)… Imaginez un outil

Siteelapsetech.com

Twitter@fbourbonnais

[email protected]

[email protected]

LinkedInlinkedin.com/in/fbourbonnais/fr

ca.linkedin.com/in/roypa

conferences.elapsetech.com

Toutes nos présentations

conferences.elapsetech.com

/legacy-tests-caracterisation

Diapositives et références

Félix-Antoine Bourbonnais

Pascal Roy