News - Projects

Extraire la Business Logic du code.

22.03.2016



La modernisation d’une application passe par une phase essentielle d’analyse et compréhension du code existant. Comment extraire la business logic, comment la représenter pour qu’elle soit exploitable par des outils de génération de code ? Panorama des approches et des outils de reverse engineering.

Dans notre précédent article Modernisation : que faire des milliards de lignes de code legacy ? nous avons abordé les différentes approches de modernisation. La traduction d’un code legacy vers un langage moderne dans une architecture moderne nécessite une étape d’extraction de la business logic. Car l’objectif de la modernisation est bien de ré-implémenter les fonctions métier de manière conforme dans un nouvel environnement technique. Si au passage le code peut être optimisé, simplifié, débarrassé de sa dette technique, c’est encore mieux.

Du code au modèle

L’extraction de la logique pose en premier lieu le problème du format de représentation de cette logique. Avec l’avènement des langages orientés objets, le marché a adopté le standard UML, le langage de modélisation promu par l’OMG. Autour de l’UML s’est formé un écosystème d’extraction de la logique en modèles, encore appelée reverse modeling, model discovery ou encore model-driven reverse engineering,


[Source]

Le processus de modernisation comprend en général trois phases :

1. Ingénierie inverse (Reverse engineering) : cette phase cherche à comprendre l’application legacy, à découvrir sa logique et son architecture et à représenter le système à un niveau d’abstraction plus élevé, en utilisant une technique basé sur les modèles (diagrammes de classe, machines à états finis, workflows…) .

2. Réingénierie (Forward engineering ou Refactoring) : les modèles sont analysés et transformés pour devenir la spécification du système modernisé.

3. Génération : les modèles transformés sont utilisés pour générer le code pour l’environnement cible en se basant sur les patterns d’architecture définis pour la cible.

De nombreux éditeurs proposent des outils de reverse engineering en UML tels que Altova, Blu Age, dScribe, green, Imagix, Modelio, phpModeler…

MoDisco (Model Discovery) est un sous-projet Eclipse du projet EMF (Eclipse Modeling Framework). C’est un framework de Model-Driven Reverse Engineering, conduit par Hugo Bruneliere de l’Inria. Il est utilisé pour extraire les modèles à partir du code legacy, mais également pour extraire les processus métier (BPMN). De nombreux éditeurs et d’entreprises travaillent sur et avec ce moteur d’extraction. Il est notamment au cœur du projet open source ARTIST.

Le projet ARTIST est une ambitieuse collaboration européenne impliquant à la fois des industriels (ATC, Atos, Engineering, SparxSystems, Spikes) et des centres de recherche (Fraunhofer, ICCS, Inria, Tecnalia, TU Wien). Son objectif est de faciliter la modernisation des applications non-cloud vers des architectures cloud et orientées services. Démarré en octobre 2012, ARTIST a déjà livré un cadre méthodologique et des outils génériques.


La méthodologie ARTIST [source]

Du code aux diagrammes

Hors du standard UML, on trouvera des outils qui génèrent aussi des diagrammes.

Aivosto propose Visustin, un outil qui génère à partir du code source des organigrammes et des diagrammes UML d’activité. L’outil supporte la plupart des langages en entrée.

IBM X-Analysis prend en charge RPG et Cobol sur plateforme IBM i (AS/400). Il extrait les règles métier et le modèle de données relationnel. Il génère en sortie du Java.

Round Trip Engineering Objects (RTEO) est un projet de représentation du code orienté objet (Java, C#, PHP5) en langage XML : XOL (XML Object Langage). Cette représentation devrait faciliter le refactoring, le re-engineering et la documentation d’architecture, ainsi que l’extraction de PIM (modèle indépendant de la plateforme).

Du code à l’architecture

Un des principaux enjeux du reverse engineering est la découverte d’architecture. On représente en général le processus de modernisation selon le modèle du fer à cheval :


Dans la phase de reverse engineering, le processus suit un chemin vertical du code source vers les fonctions puis l’architecture. La phase de transformation suit un chemin horizontal de la plateforme source vers la plateforme cible. Enfin la phase de forward engineering redescend du modèle d’architecture jusqu’au code source cible fonctionnel et technique.

Un modèle sur lequel s’appuie la méthodologie ADM (Architecture-Driven Modernization) de l’OMG qui montre l’impact des transformations selon le niveau. Au niveau architecture technique, la transformation est plus rapide mais l’impact est plus faible, alors qu’au niveau le plus haut architecture métier, la transformation est plus longue mais l’impact est supérieur.


Modèle du fer à cheval dans la modernisation orientée architecture [Source]

Du code à l’algorithme

Dans les approches classiques de reverse engineering, les outils analysent le code source des applications, des requêtes aux bases de données, des commandes par lot. Ces analyses permettent de manière plus ou moins automatiques de découvrir la logique et l’architecture de l’application et d’en faire une représentation en modèles UML.

L’avantage d’UML est qu’il est indépendant des outils. Il est possible d’extraire les modèles avec un outil et de générer le code avec un outil d’un autre éditeur. Mais son principal inconvénient est qu’il se limite au paradigme orienté objet.

CodeCase Software propose une approche de modernisation basée sur l’extraction de la logique en algorithme. Avec une granularité plus fine mais un concept plus universel, l’algorithme est la recette qui permet de résoudre un problème, indépendamment du langage et de la plateforme technique.  

L’outil va analyser tout ce qui s’apparente à du code source : code source des applications, requêtes base de données, mais aussi fichiers de configuration, dépendances vers des frameworks, vers des API, etc. Il va découvrir et comprendre la logique globale de l’application et extraire les algorithmes sous forme d’un métalangage universel, l’Unified Meta-Model (UMM). Ce format pivot multi-paradigmes permet de moderniser aussi bien des langages procéduraux (C, COBOL, Fortran…) qu’orientés objet (C , C#, Delphi, Java, VB, VBA…).

Il est donc possible de moderniser de et vers tous ces langages. Il est possible également de moderniser de manière itérative. A partir du code source généré, on peut refactorer le code : optimiser l’algorithme, factoriser du code, remplacer des pans entiers de code par des frameworks ou des API… On repasse ensuite ce code dans l’outil pour régénérer un nouveau code plus simple, plus efficace, débarrassé de sa dette technique.

Modernisation en continu

Dans le rapport Reverse Engineering: A Roadmap, les auteurs dressent l’état des lieux des outils de reverse engineering, et relèvent notamment leur manque d’efficacité dû à deux facteurs : leur faible adoption et le manque de compétences dans l’art d’analyser et de comprendre les programmes. En conclusion, la direction la plus prometteuse pour la discipline du reverse engineering est l’approche de compréhension continue des programmes (Continuous Program Understanding), dans laquelle le reverse engineering devrait s’appliquer de manière continue pendant tout le cycle de vie de l’application, dans un processus d’amélioration continue.


Article rédigé par Pierre Tran

© 2014 Codecase, all right reserved
Credits - Legal notices

X

Let's meet !