Méthode Mikado
Simon Girardin
Sommaire
Introduction
Contexte
Fonctionnement
Pratique
Résumé
2
Introduction
Pourquoi ne permettons nous d’accumuler de
la dette technique ?
3
Introduction
Pourquoi ne permettons nous d’accumuler de
la dette technique ?
– Temps
– Priorités
– Envies
… serait-ce par...
Introduction
Peur de réveiller un
monstre enfoui et de ne
pas s’en sortir?
– Taille de la tâche
inconnue, donc
inestimabl...
5
«If you find yourself in a hole, stop digging.»
- Will Rogers
Contexte
Dans ce cas là, comment faites-vous?
– Partez à l’aventure?
– «Big Bang»?
– …
6
Fonctionnement
Méthode de refactoring de code «Legacy»
Reverse engineering
– Cartographie des dépendances
7
Fonctionnement
4 nœuds
1. But
2. Prérequis
3. Prise de décision
4. Feuille
8
Fonctionnement
1. Etablir un but
9
«But»
«Avec prérequis»
«Décision»
«Feuille»
Fonctionnement
1. Etablir un but
2. Essayer d’atteindre le but
9
«But»
«Avec prérequis»
«Décision»
«Feuille»
Fonctionnement
1. Etablir un but
2. Essayer d’atteindre le but
3. Analyser les
dépendances
9
«But»
«Avec prérequis»
«Décis...
Fonctionnement
1. Etablir un but
2. Essayer d’atteindre le but
3. Analyser les
dépendances
4. Revert
9
«But»
«Avec prérequ...
Fonctionnement
 Mais pourquoi le «Revert»???
– Génération des informations sur les dépendances
– Classe modifiées moins l...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Fonctionnement (Exemple)
11
Rendre calcul
testable
Diviser
méthode
Fonctionnement (Exemple)
11
Rendre calcul
testable
Diviser
méthode
Corriger
Dépendance
Fonctionnement (Exemple)
11
Rendre calcul
testable
Diviser
méthode
Corriger
Dépendance
Faires
interfaces
Fonctionnement (Exemple)
11
Rendre calcul
testable
Diviser
méthode
Corriger
Dépendance
Faires
interfaces
Extraire
variables
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Corriger
Dépendance
Faires
in...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement (Exemple)
11
Rendre calcul
testable
Introduire DI
avec Spring
Diviser
méthode
Faire fichier
configuration
C...
Fonctionnement
12
Fonctionnement
12
Fonctionnement
12
Pratique
1. Ne jamais sous-estimé le code legacy
– Fonctionnalités pas toujours documentées
– Demandes spécifiques
13
Pratique
1. Ne jamais sous-estimé le code legacy
– Fonctionnalités pas toujours documentées
– Demandes spécifiques
2. Ne j...
Résumé
On ne subit plus le refactoring, on le gère.
– A une vision clair des impacts
– Etudier plusieurs possibilités
– E...
Résumé
Avantages
But clair et défini
Planification de ressources
possible
Limite drastiquement le
blocage de code
Tâch...
Exercices
Lister
– Des bouts de code qui font mal aux yeux
– Des objectifs business difficilement atteint pour
des raison...
Sources
 General
Refactoring Large SoftwareSystems [en ligne]Method and tools, Hiver 2009 [consulté le 22 septembre 2014]...
Prochain SlideShare
Chargement dans…5
×

Méthode Mikado

425 vues

Publié le

Présentation que j'ai faite à mes collègues afin de faciliter partiellement les refactoring en cours.

I'm working on the english translation, but if you need it ASAP please notify me.

Publié dans : Ingénierie
  • Soyez le premier à commenter

Méthode Mikado

  1. 1. Méthode Mikado Simon Girardin
  2. 2. Sommaire Introduction Contexte Fonctionnement Pratique Résumé 2
  3. 3. Introduction Pourquoi ne permettons nous d’accumuler de la dette technique ? 3
  4. 4. Introduction Pourquoi ne permettons nous d’accumuler de la dette technique ? – Temps – Priorités – Envies … serait-ce par peur? 3
  5. 5. Introduction Peur de réveiller un monstre enfoui et de ne pas s’en sortir? – Taille de la tâche inconnue, donc inestimable … – Une tête de coupée, 4 qui repoussent 4 «Code Hydra»
  6. 6. 5 «If you find yourself in a hole, stop digging.» - Will Rogers
  7. 7. Contexte Dans ce cas là, comment faites-vous? – Partez à l’aventure? – «Big Bang»? – … 6
  8. 8. Fonctionnement Méthode de refactoring de code «Legacy» Reverse engineering – Cartographie des dépendances 7
  9. 9. Fonctionnement 4 nœuds 1. But 2. Prérequis 3. Prise de décision 4. Feuille 8
  10. 10. Fonctionnement 1. Etablir un but 9 «But» «Avec prérequis» «Décision» «Feuille»
  11. 11. Fonctionnement 1. Etablir un but 2. Essayer d’atteindre le but 9 «But» «Avec prérequis» «Décision» «Feuille»
  12. 12. Fonctionnement 1. Etablir un but 2. Essayer d’atteindre le but 3. Analyser les dépendances 9 «But» «Avec prérequis» «Décision» «Feuille»
  13. 13. Fonctionnement 1. Etablir un but 2. Essayer d’atteindre le but 3. Analyser les dépendances 4. Revert 9 «But» «Avec prérequis» «Décision» «Feuille»
  14. 14. Fonctionnement  Mais pourquoi le «Revert»??? – Génération des informations sur les dépendances – Classe modifiées moins longtemps 10
  15. 15. Fonctionnement (Exemple) 11 Rendre calcul testable
  16. 16. Fonctionnement (Exemple) 11 Rendre calcul testable Diviser méthode
  17. 17. Fonctionnement (Exemple) 11 Rendre calcul testable Diviser méthode Corriger Dépendance
  18. 18. Fonctionnement (Exemple) 11 Rendre calcul testable Diviser méthode Corriger Dépendance Faires interfaces
  19. 19. Fonctionnement (Exemple) 11 Rendre calcul testable Diviser méthode Corriger Dépendance Faires interfaces Extraire variables
  20. 20. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Corriger Dépendance Faires interfaces Extraire variables
  21. 21. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  22. 22. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  23. 23. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  24. 24. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  25. 25. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  26. 26. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  27. 27. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  28. 28. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  29. 29. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  30. 30. Fonctionnement (Exemple) 11 Rendre calcul testable Introduire DI avec Spring Diviser méthode Faire fichier configuration Corriger Dépendance Faires interfaces Extraire variables
  31. 31. Fonctionnement 12
  32. 32. Fonctionnement 12
  33. 33. Fonctionnement 12
  34. 34. Pratique 1. Ne jamais sous-estimé le code legacy – Fonctionnalités pas toujours documentées – Demandes spécifiques 13
  35. 35. Pratique 1. Ne jamais sous-estimé le code legacy – Fonctionnalités pas toujours documentées – Demandes spécifiques 2. Ne jamais sous-estimé le code legacy 3. Mieux a deux… – 4 pairs d’yeux – Evite «Gold plating» – Soutien moral… 13
  36. 36. Résumé On ne subit plus le refactoring, on le gère. – A une vision clair des impacts – Etudier plusieurs possibilités – Etablir un planning • Temporel • Ressources 14
  37. 37. Résumé Avantages But clair et défini Planification de ressources possible Limite drastiquement le blocage de code Tâches peuvent être répartis Inconvénients / Difficultés Peut vite devenir complexe (Définir le bon niveau de zoom) Prends plus de temps initialement 15
  38. 38. Exercices Lister – Des bouts de code qui font mal aux yeux – Des objectifs business difficilement atteint pour des raisons techniques. – Quand vous vous dîtes que cela peut être facilité – Echecs sur lesquelles vous avez des regrets Agir – Refactorer les points-listés ci-dessus en fonction de priorités / des ressources. 16
  39. 39. Sources  General Refactoring Large SoftwareSystems [en ligne]Method and tools, Hiver 2009 [consulté le 22 septembre 2014]. Disponible sur : http://www.methodsandtools.com/archive/archive.php?id=98 The Big Rewrite [en ligne]. Martin Fowler, 27.12.2006 [consulté le 23 septembre 2014]. Disponible sur : http://chadfowler.com/blog/2006/12/27/the-big-rewrite  Mikado Your First MikadoGraph [en ligne]. Manning Publications, 15.05.2013 [consulté le 23 septembre 2014]. Disponible sur : https://weblogs.java.net/blog/manningpubs/archive/2013/05/15/your-first-mikado-graph The Mikado Method, Small- and Large-Scale Refactorings [en ligne].The pragmatic bookshelf, Ola Ellnestam et Daniel Brolund, 06.2010 [consulté le 23 septembre 2014]. Disponible sur : https://pragprog.com/magazines/2010-06/the-mikado-method The Mikado Method [en ligne]. DZone, Jens Schauder, 11.06.2011 [consulté le 23 septembre 2014]. Disponible sur : http://java.dzone.com/articles/mikado-method Refactoring the “Legacy” Hudson.java with the Mikado Method as a Code Dojo [en ligne]. DZone, Jakub Holý, 18.04.2011 [consulté le 23 septembre 2014]. Disponible sur : http://java.dzone.com/articles/refactoring- %E2%80%9Clegacy%E2%80%9D BeheadYour Legacy Beast [en ligne].Agical, Daniel Brolund et Ola Ellnestam, 25.02.2012 [consulté le 22 septembre 2014]. Disponible sur : http://www.agical.com/mikmeth/mikadomethod_old_hidden_76213ge.pdf What I’ve Learned from (Nearly) Failing to Refactor Hudson [en ligne]. DZone, Jakub Holý, 29.04.2011 [consulté le 23 septembre 2014]. Disponible sur : http://java.dzone.com/articles/what-i%E2%80%99ve-learned-nearly

×