Méthode Mikado

Preview:

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

Recommended