Upload
simon-girardin
View
90
Download
7
Embed Size (px)
Citation preview
Méthode Mikado
Simon Girardin
Sommaire
IntroductionContexteFonctionnementPratiqueRé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 peur?
3
IntroductionPeur 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»
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œuds1. But2. Prérequis3. Prise de décision4. 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 but3. Analyser les
dépendances
9
«But»«Avec prérequis»«Décision»«Feuille»
Fonctionnement
1. Etablir un but 2. Essayer d’atteindre le but3. Analyser les
dépendances4. Revert
9
«But»«Avec prérequis»«Décision»«Feuille»
Fonctionnement
Mais pourquoi le «Revert»???– Génération des informations sur les
dépendances– Classe modifiées moins longtemps
10
Fonctionnement (Exemple)
11
Rendre calcul testable
Analyse
Fonctionnement (Exemple)
11
Rendre calcul testable
Diviser méthode Analyse
Fonctionnement (Exemple)
11
Rendre calcul testable
Diviser méthode AnalyseCorriger
Dépendance
Fonctionnement (Exemple)
11
Rendre calcul testable
Diviser méthode AnalyseCorriger
Dépendance
Faires interfaces
Fonctionnement (Exemple)
11
Rendre calcul testable
Diviser méthode AnalyseCorriger
Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode AnalyseCorriger
Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
AnalyseCorriger
Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
AnalyseCorriger
Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
Fonctionnement (Exemple)
11
Rendre calcul testable
Introduire DI avec Spring
Diviser méthode
Faire fichier configuration
Analyse
Réalisation
Corriger Dépendance
Faires interfaces
Extraire variables
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 jamais sous-estimé le code legacy3. Mieux a deux…
– 4 pairs d’yeux– Evite «Gold plating»– Soutien moral…
13
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
RésuméAvantagesBut clair et définiPlanification de
ressources possible Limite drastiquement
le blocage de codeTâches peuvent être
répartis
Inconvénients / DifficultésPeut vite devenir
complexe (Définir le bon niveau de zoom)
Prends plus de temps initialement
15
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
Sources GeneralRefactoring Large Software Systems [en ligne]Method and tools, Hiver 2009 [consulté le 22 septembre 2014]. Disponible sur : http://www.methodsandtools.com/archive/archive.php?id=98The 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 MikadoYour First Mikado Graph [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-graphThe 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-methodThe Mikado Method [en ligne]. DZone, Jens Schauder, 11.06.2011 [consulté le 23 septembre 2014]. Disponible sur : http://java.dzone.com/articles/mikado-methodRefactoring 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%9DBehead Your 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.pdfWhat 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