Note : 4; Un sujet important, mais auquel le format « pattern language » ne rend pas justice.
Le reengineering d’application est un sujet souvent passé sous silence, les auteurs préférant parler des applications débutées depuis une page blanche, ce qui ne constitue pas finalement la plus grande part des projets. Dans cet ouvrage, les auteurs nous proposent une démarche en 9 étapes, qui va de la rencontre avec le legacy au système restructuré.
Le découpage du texte se calque sur les étapes de réengineering proposées, donc 10 chapitres en comptant l’introduction, pour un total d’environ 250 pages sans les annexes (par ailleurs assez courtes). L’ensemble est principalement structuré en deux parties, avec un premier chapitre servant d’ouverture à l’ensemble. Les auteurs viennent du monde des patterns, c’est d’ailleurs dans une de ces conférences que je les ai rencontrés. La quinzaine de pages de ce premier chapitre nous explique la « forme pattern » empruntée (en l’occurrence la forme Alexandrienne) et la démarche de reengineering que j’ai évoquée plus haut.
La première partie s’intitule « reverse engineering » et compte 4 chapitres sur une centaine de pages. Le second chapitre « setting directions » nous propose des patterns pour orienter notre travail, tel que le « most valuable first » ou le « if it ain’t broke, don’t fix it ». Rien de bien palpitant pour l’instant, c’est l’échauffement. Suit « first contact » où, comme le titre l’indique, on va récolter nos premières informations. C’est plus concret, avec « interview during demo » ou l’intéressant « read all the code in one hour ». En fait, tous les patterns de ce chapitre recèlent quelque chose d’intéressant !
Après ce premier contact, il faut commencer à comprendre, objectif de ce chapitre 4. 3 patterns ici et une petite perle avec le « study exceptional entities » qui nous propose une analyse quantitative… une idée qui me rappelle « your code as a crime scene » même si ce dernier livre lui est (nettement) postérieur. Cette première partie se referme avec « detailed model capture », qui rentre dans le dur pour analyser les tripes de notre legacy : par du refactoring, des tests ou (encore une fois comme dans « your code as a crime scene ») en utilisant la gestion de version !
La seconde partie « reengineering » compte environ 120 pages pour 5 chapitres. Il s’ouvre sur un chapitre 6 tout entier dédié aux tests qui n’est pas sans rappeler Michael Feathers et son « working with legacy code » qui est pratiquement contemporain de cet ouvrage. La suite est consacrée aux stratégies de migration. Un chapitre assez perfectible avec même un peu de naïveté dans le propos. On lui concèdera une clarification d’idées assez classiques à haut niveau. La détection de code dupliqué est un sujet étrangement étroit dans l’ouvrage. Il faut en conclure que ce chapitre 8 reflète des études particulières faites par cette équipe. On est vraiment dans le très concret et les idées du « dotplot » pour visualiser et la normalisation des variables sont autant de bonnes idées pour repérer et identifier ces duplications.
On est davantage dans la conception avec le chapitre 9 « redistribute responsibilities ». Le texte ne m’a pas fait briller les yeux, il reste dans les généralités, tente d’effleurer maladroitement le sujet du refactoring et tourne globalement autour de la loi de Demeter. Le dernier chapitre est dans la même lignée : il s’attaque à un sujet très spécifique, la transformation des conditions en polymorphisme. Cela ne méritait pas un chapitre, surtout aussi pauvre et le sujet pouvait être laissé au « Refactoring ».
Pourtant l’ouvrage est bien structuré, il a la grande qualité de proposer une démarche ou tout au moins une logique. La première partie et le début de la seconde sont plutôt prometteurs, mais le dernier tiers est tout à fait décevant.
Le livre me laisse sur une impression mitigée, essentiellement celle qu’il aurait été possible de faire bien mieux. Et la note reflète cette déception.
Référence complète : Object-Oriented Reengineering Patterns – Serge Demeyer, Stéphane Ducasse & Oscar Nierstrasz – Morgan Kaufman 2003 – ISBN: 1-55860-639-4