&
FÉLIX-ANTOINE
BOURBONNAIS
B.ING., M.SC, PSM
Agile tour Québec 2016
Tests de caractérisation :
à l’assaut de votre
code «...
Nous voulons vous introduire aux tests de
caractérisation, un concept et un outil essentiel
pour les développeurs qui trav...
4 4
Qui sommes-nous ?
Pascal Roy
Ing., PSM, CSM, PMP
Félix-Antoine Bourbonnais
B.ing., PSM, M.Sc.
5
Conférenciers
Formateurs
Mentors
Tech.
ÉQUIPE
GestionTDD
Architecture
évolutive
Essais
automatisés
DDD
…
Scrum
QA Agile
...
LE CODE PATRIMONIAL
Selon vous…
Qu’est ce que du code
patrimonial (« Legacy Code »)?
• 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’...
Du code sans tests
Michael Feathers,
Working Effectively with Legacy Code
C’est du code difficile à
faire évoluer.
Peu importe
son âge ou la raison.
En gros…
11
La peur : le pire ennemi du
développement logiciel
Deux grandes approches…
13
Tanné de stresser pour une
livraison, de débogger,
d’avoir peur de briser?
14 14
S.v.p. donnez-moi un
nouveau projet
!@/$%!/%
Les tests sont essentiels pour
maintenir une vélocité!
Oups…
COMMENT S’ATTAQUER AU CODE PATRIMONIAL?
Le paradoxe des tests et du ré-usinage…
Bien outillé, vous pouvez rénover !
Vos options
Vos options
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
Risqu...
Pourquoi les gestionnaires ne
veulent pas vous laisser faire
votre “refactoring” ?!?
C’est un trou noir...!
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...
Graduellement,
tout en produisant
de la valeur
Comment ?
Sélectionnez votre prochaine « Story » et
commencez vos paiements de dette!
Comment?
LE TEST DE CARACTÉRISATION
Un outil important pour vous
permettre de rénover votre
code patrimonial
Le test de caractérisation…
30
Un test de caractérisation est une
description du comportement
actuel d’un bout de code.
- Michael Feathers
Définition : T...
Il permet de protéger le comportement existant
contre toute modification non désirée.
C’est notre briseur de peur!
Et par ...
LA STRATÉGIE DE RÉ-USINAGE UTILISANT LES TESTS DE
CARACTÉRISATION
1. Identifier un point de changement
2. Trouver les points de tests (« seam »)
3. Briser les dépendances pour pouvoir test...
On peut toujours améliorer le code patrimonial…
Attention de focaliser sur notre but:
entourer de tests et faire le minimum
Une prise en charge dans une urgence:
on veut limiter les dommages
et on focalise sur l’objectif le plus pressant
(ex.: br...
Le changement à faire !
Quel est l’objectif ?
Qu’est-ce qui nous guide?
Attention de ne pas
arrêter la chaîne de
production de valeur!
Attention au Big Bang !
38
ÉCRITURE D’UN TEST DE CARACTÉRISATION
1. Identifier et isoler un bout de code et le rendre accessible
dans un harnais de tests
2. Écrire une assertion qui ne pa...
public class SalesUtil {
double BQ = 1000.0;
double BCR = 0.20;
double OQM1 = 1.5;
double OQM2 = OQM1 * 2;
public double c...
Étape 1: identifier un bout de code et le rendre accessible
dans un harnais de tests
public class SalesUtil {
double BQ = ...
Étape 2: écrire une assertion qui ne passe pas
public class SalesUtil {
double BQ = 1000.0;
double BCR = 0.20;
double OQM1...
Étape 3: exécuter le test
+ trouver le comportement actuel
public class SalesUtil {
double BQ = 1000.0;
double BCR = 0.20;...
Étape 4: Remplacer par le comportement découvert
public class SalesUtil {
double BQ = 1000.0;
double BCR = 0.20;
double OQ...
Étape 5: Répéter
public class SalesUtil {
double BQ = 1000.0;
double BCR = 0.20;
double OQM1 = 1.5;
double OQM2 = OQM1 * 2...
Attention aux « tant qu’à y être » !
Ciblez uniquement ce que vous voulez modifier.
On n’a pas le temps
de faire ça ?!?
Combien de temps ça
prend pour comprendre
un bout de code Legacy
avant de le modifier?
Réponse…
PARTICULARITÉS
D’UN TEST DE CARACTÉRISATION
En quoi un TC est-il différent?
Objectif
Spécification du
comportement requis
Spécification du
comportement actuel
Régulie...
En quoi un TC est-il différent?
Contexte d’utilisation
Comportement connu
et nouveau code
Code patrimonial,
comportement f...
En quoi un TC est-il différent?
Durée de vie
Permanent Temporaire
Régulier Caractérisation
Quel niveau ?
Est-ce que d’entourer mon
application avec des tests bout-
en-bout peut m’aider à
caractériser ?
Le nouveau code doit être testé et écrit avec les
meilleures pratiques… n’ajoutez pas encore plus de
patrimoine douteux !
...
58
Le défi moderne…
La maintenabilité !
59
60
La pourriture du code n’est pas
une « loi naturelle »…
Although our first joy of programming
may have been intense, the misery of
dealing with legacy code is often
sufficient to...
Image de http://beinweb.fr/wp-content/uploads/2014/04/boite-a-outils-entrepreneurs.jpg
Le test de caractérisation…
À ajout...
La « patrimonialite »
ça se soigne !
Merci .
65
Merci
Notre site
elapsetech.com
Notre blogue
developpementagile.com
Nos Twitter
@fbourbonnais | @elapsetech
Nos courrie...
À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy
À l’assaut de votre code patrimonial “Legacy” grâce aux tests - Félix-Antoine Bourbonnais, Pascal Roy
Prochain SlideShare
Chargement dans…5
×

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

327 vues

Publié le

À l’assaut de votre code patrimonial “Legacy” grâce aux tests
Beaucoup d’entreprises sont aux prises avec une importante base de code patrimoniale (legacy). Elles le savent, mais ont peur de s’y attaquer, car elles se sont brûlées avec du “refactoring” qui n’en finissait plus. Des tests unitaires pourraient aider, mais comment faire dans un patrimoine? Voyez comment les tests de “caractérisation” peuvent s’attaquer au cercle vicieux de la dette technique!

À propos de Félix-Antoine Bourbonnais
Félix-Antoine est un formateur et un accompagnateur passionné qui aide les organisations en agissant comme mentor et expert. C’est avec générosité qu’il transmet sa passion et ses connaissances autant à titre de coach pour Elapse Technologies que comme chargé de cours à l’Université Laval.

C'est avec dynamisme et enthousiasme qu'il accompagne et anime des formations en génie logiciel sur le TDD, l’ATDD / BDD, les essais automatisés, l’architecture Agile et émergente ainsi que la qualité en Agilité.

Développeur expérimenté, spécialisé en architecture et en tests automatisés, il a accompagné plusieurs entreprises, dont LaPresse+ et SSQ dans leur implantation du TDD, tests automatisés et dans la gestion de la dette technique.

À propos de Pascal Roy
Pascal est formateur et coach Agile pour Elapse Technologies. Il œuvre dans le domaine du génie logiciel depuis 1989. Il a travaillé au sein de différentes organisations, dont la prestigieuse Object Mentor aux USA.

Pascal a eu le privilège d’être aux premières loges lors des premiers balbutiements du mouvement Agile en travaillant avec Bob Martin (Robert C. Martin), Kent Beck, Michael Feathers, Ron Jeffries, Ward Cunningham, Alistair Cockburn, Dave Thomas et autres grands noms du mouvement dont la majorité sont des signataires du manifeste Agile.

Dans sa carrière, il a accompagné diverses entreprises dont HP, Symantec, Motorola, avec leurs pratiques Agiles. Chez nous, il accompagne actuellement LaPresse+ dans leurs implantations du BDD et des tests automatisés.

Il possède une solide base technique et Agile incluant l’architecture logicielle, le BDD, le TDD, Scrum et XP. Pascal détient une grande expérience en gestion de projets en combinant les titres de PSM, CSM et PMP.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
327
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
11
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. & 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
  2. 2. 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 ?
  3. 3. 4 4 Qui sommes-nous ? Pascal Roy Ing., PSM, CSM, PMP Félix-Antoine Bourbonnais B.ing., PSM, M.Sc.
  4. 4. 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
  5. 5. LE CODE PATRIMONIAL
  6. 6. Selon vous… Qu’est ce que du code patrimonial (« Legacy Code »)?
  7. 7. • 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…
  8. 8. Du code sans tests Michael Feathers, Working Effectively with Legacy Code
  9. 9. C’est du code difficile à faire évoluer. Peu importe son âge ou la raison. En gros…
  10. 10. 11 La peur : le pire ennemi du développement logiciel
  11. 11. Deux grandes approches…
  12. 12. 13 Tanné de stresser pour une livraison, de débogger, d’avoir peur de briser?
  13. 13. 14 14 S.v.p. donnez-moi un nouveau projet !@/$%!/%
  14. 14. Les tests sont essentiels pour maintenir une vélocité!
  15. 15. Oups…
  16. 16. COMMENT S’ATTAQUER AU CODE PATRIMONIAL?
  17. 17. Le paradoxe des tests et du ré-usinage…
  18. 18. Bien outillé, vous pouvez rénover !
  19. 19. Vos options
  20. 20. Vos options
  21. 21. 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
  22. 22. Pourquoi les gestionnaires ne veulent pas vous laisser faire votre “refactoring” ?!?
  23. 23. C’est un trou noir...!
  24. 24. 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?
  25. 25. Graduellement, tout en produisant de la valeur Comment ?
  26. 26. Sélectionnez votre prochaine « Story » et commencez vos paiements de dette! Comment?
  27. 27. LE TEST DE CARACTÉRISATION
  28. 28. Un outil important pour vous permettre de rénover votre code patrimonial Le test de caractérisation…
  29. 29. 30
  30. 30. Un test de caractérisation est une description du comportement actuel d’un bout de code. - Michael Feathers Définition : Test de caractérisation
  31. 31. 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…
  32. 32. LA STRATÉGIE DE RÉ-USINAGE UTILISANT LES TESTS DE CARACTÉRISATION
  33. 33. 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
  34. 34. On peut toujours améliorer le code patrimonial… Attention de focaliser sur notre but: entourer de tests et faire le minimum
  35. 35. 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…
  36. 36. Le changement à faire ! Quel est l’objectif ? Qu’est-ce qui nous guide?
  37. 37. Attention de ne pas arrêter la chaîne de production de valeur! Attention au Big Bang ! 38
  38. 38. ÉCRITURE D’UN TEST DE CARACTÉRISATION
  39. 39. 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
  40. 40. 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?
  41. 41. É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
  42. 42. É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
  43. 43. É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
  44. 44. É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
  45. 45. É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
  46. 46. Attention aux « tant qu’à y être » ! Ciblez uniquement ce que vous voulez modifier.
  47. 47. On n’a pas le temps de faire ça ?!?
  48. 48. Combien de temps ça prend pour comprendre un bout de code Legacy avant de le modifier? Réponse…
  49. 49. PARTICULARITÉS D’UN TEST DE CARACTÉRISATION
  50. 50. En quoi un TC est-il différent? Objectif Spécification du comportement requis Spécification du comportement actuel Régulier Caractérisation
  51. 51. En quoi un TC est-il différent? Contexte d’utilisation Comportement connu et nouveau code Code patrimonial, comportement flou ou perdu Régulier Caractérisation
  52. 52. En quoi un TC est-il différent? Durée de vie Permanent Temporaire Régulier Caractérisation
  53. 53. Quel niveau ? Est-ce que d’entourer mon application avec des tests bout- en-bout peut m’aider à caractériser ?
  54. 54. Le nouveau code doit être testé et écrit avec les meilleures pratiques… n’ajoutez pas encore plus de patrimoine douteux ! Avertissement !
  55. 55. 58
  56. 56. Le défi moderne… La maintenabilité ! 59
  57. 57. 60 La pourriture du code n’est pas une « loi naturelle »…
  58. 58. 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!
  59. 59. 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!
  60. 60. La « patrimonialite » ça se soigne !
  61. 61. Merci .
  62. 62. 65 Merci Notre site elapsetech.com Notre blogue developpementagile.com Nos Twitter @fbourbonnais | @elapsetech Nos courriels fbourbonnais@elapsetech.com pascalroy@elapsetech.com Nos LinkedIn linkedin.com/in/fbourbonnais/fr ca.linkedin.com/in/roypa conferences.elapsetech.com Diapositives Nos présentations, chez vous!

×