Domain Storytelling est une approche orientée sur un flux fonctionnelle qui permet d’être très explicite sur les intentions métier. Il existe un outil graphique qui permet de s’initier de manière ludique.
Le Behavior-Driven Development est un moyen de transférer la connaissance des comportements métier vers l’équipe de développement.
Le TDD outside/in est une pratique avancée qui permet d’engendrer du code sur la base d’un test acceptation, où le code sous-jacent fera l’objet d’un développement avec le TDD inside/out.
Les patterns permettant de casser des dépendances fortes est un ensemble de t__echniques pour briser des dépendances sans risque__ vis-à-vis du comportement initial, au sein d’un code fortement couplé.
Le Refactoring de design est une collection de mouvements au niveau du code afin de corriger l’essentiel des codes smells. Les codes smells sont une collection d’anti-patterns qui permettent de poser un vocable commun sur des problèmes de design. L’objectif est d’améliorer la communication entre les développeurs et favoriser la correction de code smells.
Le TDD inside/out est la pratique la plus simple, pour développer en mode design émergent au niveau d’une structure de code.
Le Clean Code est une série de principes permettant de bonifier le code, comme les principes SOLID qui permettent d’apporter de la souplesse au code afin d’épouser de potentiels changements.
Les Design Patterns est une collection de solutions techniques éprouvées permettant de structurer le code de manière durable.
C’est un lourd investissement, auquel tout développeur devrait s'engager pour être en mesure de prendre soin du code du produit. Si toute l’équipe de développement maîtrise toutes ces approches, alors on parlera d’une équipe émancipée et autonome. Celui qui cultive son jardin dans la sphère logiciel, n’a pas à rougir des activités d’un jardinier professionnel.
Les situations catastrophiques du code legacy ne sont pas sans espoir. Il arrive que la situation soit à désespérer, le code est une forme de grosse boule de boue avec une équipe de développement entièrement renouvelée, sans aucune connaissance sur l’existant. Comment imaginer reprendre le contrôle dans pareil cas ?
Reprendre un jardin en friche réclame une approche et beaucoup de discipline. Un produit au sein d’un SI brownfield demande de respecter quelques étapes importantes. L’objectif est d’adopter une démarche progressive où tous les risques sont calculés :
Avec l’aide du management, rechercher toutes les personnes, équipes de développement, Support ou utilisateurs, qui pourraient participer à un atelier d’EventStoming de type Big Picture. L’objectif est de retrouver des narrations fonctionnelles. La qualité de l’information peut être imprécise, elle permet d’obtenir un début de connaissance, que nous allons améliorer au fil de l’eau.
Il faut donc confronter le code aux propos énoncés par les quelques sachants (experts du domaine). Cela peut prendre une semaine ou même un mois sur un morceau du SI.
L’organisation d’un remaniement de code à grande échelle est essentielle. Répartir les experts par équipes (dans le cas d’un SI). Organiser chaque équipe en mob programming, afin de raconter les narrations fonctionnelles de ce qu’ils observent dans le code. L’objectif de l’équipe de développement est de traduire, à l’expert du domaine, ce que le code fait réellement au regard d’un comportement métier.
Le Domain Storytelling est une technique permettant de transformer la connaissance du domaine en un produit aligné avec les attentes des utilisateurs. Il rassemble des experts du domaine et des équipes de développement. Les experts du domaine peuvent immédiatement voir si l’équipe de développement est sur la même longueur d’ondes qu’eux.
Les techniques présentées reposent sur l’ajout d’une ouverture (injection dépendance) du code, tout en conservant l’API existante. Bien évidemment, on posera les tests respectifs afin de s’assurer que nous n’avons rien cassé. Ce point est important, car c’est justement parce que le code n’est pas testable que nous utilisons ces techniques. Vous l’aurez compris, cette approche connaît une courte période sans filet de sécurité, mais il n’y a pas d’autres approches lorsque le code n’est pas testable par défaut.
On déplace des portions de code, on crée de nouvelles entités, afin d’obtenir une répartition des comportements où rien n’est anémique ou obèse. L’expert du domaine est très sollicité afin d’expliquer tous les comportements. De nouveaux tests locaux sont mis en place pour valider nos assomptions. Il arrive parfois qu’une grosse partie du code ne soit plus utilisée. Après confirmation de tous les sachants, experts du domaine métier, nous prenons la décision de retirer tout le code inutile.
La présentation d’une approche énumérée peut sembler contradictoire. Vous pourriez penser à une méthode pour affronter le refactoring d’un système d’information. Pour clarifier la motivation de chaque étape, j’ai introduit un ordre exploratoire. Du plus flou au plus précis. Mais, notre cerveau ne fonctionne pas de manière linéaire. Il est parfaitement légitime de revenir à la phase de découverte du métier, avec l’Event Storming Big Picture par exemple, car à la lumière d’une nouvelle compréhension, on éprouve le besoin de creuser à nouveau un point précis.
À la fin de ce travail collectif intense, nous sommes en mesure de poser un premier test d’intégration avec succès. C’est le moment où nous vous conseillons de célébrer afin de retrouver un nouvel élan pour la suite. L’expérience nous a montré que la confiance des équipes et des experts métier après le succès du premier test d’intégration était totalement différente. Les premières étapes sont longues et épuisantes, et certains doutent du résultat. Mais, après ce premier succès, ceux qui doutaient sont souvent les plus engagés pour aller plus loin. Par exemple, en adoptant l’approche Behavior-Driven-Development lors des prochains tests d’intégration. La confiance est très importante dans ce type d’approche. Après un ou deux mois où toutes les équipes techniques ont été mobilisées, le code a retrouvé une bonne santé, tout le monde a retrouvé le sourire, utilisateurs compris.
Être fier de son code brownfield propre et écoresponsable. Si nous réactualisons le propos de Voltaire, r__endre meilleur notre « brownfield »__ permet de faire prospérer notre base de code, d’y travailler pour de meilleurs produits attendus par nos utilisateurs. En d'autres mots, les mauvais brownfield n’existent pas, il n'y a que des brownfield mal entretenus. Il ne tient qu'à vous de changer vos codes pollués de code smells en code propre. Cultiver son jardin, c’est en prendre soin, afin d’en tirer des bénéfices sur le long terme. Organiser un atelier de type Event Storming Big Picture, au sein de votre domaine métier, puis découper votre domaine en sous-domaine, enfin prioriser les sous-domaines qui vous semblent importants de traiter pour cette année. Cet article n’a pas la prétention de traiter de toutes les techniques de refactoring, mais sachez qu’il en existe suffisamment pour mettre fin à tous types de code legacy.
Vous disposez d’une approche qui nécessite de nombreuses compétences qu’il vous faudra travailler au préalable. Mais une fois ces techniques maîtrisées, vous aurez le loisir d’appliquer des approches qui vous permettront de gérer votre catalogue de produits avec sérénité.
Les produits brownfield reposant sur du code legacy sont souvent envisagés comme des rebuts juste bons à être réécrits. Le fait que les produits brownfield aient déjà une audience est une chance. Investir dans la remédiation du code legacy afin de faire de votre brownfield un avantage concurrentiel est une démarche vertueuse. Cette manière de réincarner le brownfield est une démarche écoresponsable. Vous conservez la même technologie, les mêmes matériels, les mêmes langages de programmation, et vous n’aggravez pas votre empreinte carbone. Tout votre écosystème est conservé. La balle d’argent n'existe pas, investir pour transformer votre code legacy en code propre, découplé, et livrable continuellement est certes du travail, mais en retour le produit est évolutif et les utilisateurs sont confiants dans leur produit.
Design Patterns
Clean Code
Test-Driven Development
Refactoring
Behavior-Driven Development
Domain-Driven Design
EventStorming
Domain Storytelling
Mob-Programming