Industrialisation du developpement logiciel
De notre point de vue, l'industrialisation du développement
logiciel consiste à créer des outils permettant d'automatiser le
maximum de processus intervenant dans le cycle de création et de
maintenance d'un logiciel. Potentiellement la majorité des
processus sont automatisables si un effort de spécification
exhaustive a été réalisé en amont. La granularité de cette
spécification sera fonction du type de projet, de son envergure et
des choix de ses concepteurs.
Pourquoi automatiser la production de
code dès la création d'un nouveau système ?
- Toute tâche répétitive d'écriture de code doit être
automatisée, elle est consommatrice de ressources là où l'effort
pourrait être reporté sur des parties du système à plus forte
valeur ajoutée.
- Même en respectant les normes de codage du projet, la
structure du code produit par un développeur varie selon l'humeur
du jour. Cela rend la maintenance plus complexe.
- Une application manipulant un grand nombre d'objets ou
concepts comporte initialement plus de 90% de code automatisable,
l'implantation de plus en plus de services et de nouveaux objets
métier ne fera jamais tendre cette mesure en dessous de 60%. Il
est important de concentrer l'effort sur la réalisation cohérente
des fonctionnalités cruciales du système.
- Certains codes ne sont que de la prose technique fortement
couplée à l'architecture et ne réalisent rien d'autre que
l'implantation d'une fonctionnalité technique. Leur écriture
manuelle est source d'erreurs alors que leur production est
généralement totalement automatisable.
- Le plus important est l'interface d'une fonctionnalité,
elle fournit sa description en termes d'entrées (paramètres), de
sorties (valeur de retour) et d'interactions avec les autres
fonctionnalités du système. Il faut s'affranchir de tout code lié
à l'architecture technique, un service métier doit être vu comme
un ensemble de fonctionnalités accessibles. L'architecture et les
technologies utilisées ne sont que le moyen de mettre à
disposition ses fonctionnalités. L'interface « décorée » de
quelques métadonnées ou directives est suffisante à la production
du code implantant la fonctionnalité sur une architecture cible.
Seul le code nécessaire à la réalisation de la fonctionnalité
proprement dite restera à écrire. On consacre ainsi l'effort sur
ce qui est important : la logique métier.
- Lorsqu'une fonctionnalité vise à fournir des données,
l'ensemble des données à obtenir peut être spécifié formellement.
Cette spécification formelle permet de produire le code réalisant
l'obtention de ces données dans le contexte de l'architecture
technique cible. Un changement de plateforme ou d'architecture
n'invalidera pas la spécification, seul le processus de
transformation de la spécification en code technique changera.
- Lorsque l'on commence à utiliser une technologie, le
manque de maitrise et de connaissance de celle-ci peut conduire à
des mauvais choix techniques qu'il faut corriger. On ne se rend
malheureusement compte des erreurs commises que lorsque le projet
a bien avancé. La correction de ces erreurs est coûteuse en temps
et en énergie humaine, de plus rien ne garantit qu'il s'agit de la
dernière itération de correction. Quand la production des codes
techniques a été automatisée la rectification se fera très
simplement en corrigeant uniquement le processus de production du
code erroné.
- Les gains occasionnés par une démarche d'automatisation de
la production de code sont considérables :
- Productivité : beaucoup de code fonctionnel généré
rapidement
- Qualité, homogénéité et maintenabilité du code produit
- Qualité et complétude du code écrit manuellement : plus
de disponibilité pour penser.
- Anticipation d'une migration éventuelle vers une autre
plateforme ou architecture technique.
- Réactivité : les demandes d'évolution du logiciel
peuvent être traitées dans des temps records. (réalisation
d'itérations rapides à l'ère des méthodes « Agiles »)
- Traçabilité : les modèles utilisés pour la production du code sont conservés
et permettent de mieux comprendre son origine.'
Sous le capot
Le principe de la production ou génération automatique est
assez simple. Il comporte deux éléments essentiels :
- Le modèle : il décrit avec un niveau de
précision variable les objets, interfaces et comportements du
système à produire. Il peut être de différent type:
- Spécifique au générateur : ensemble d'informations
structurées créé spécifiquement pour le générateur.
- Concret et / ou technique : issu de l'analyse de code
préexistant, ou la structure d'une BDD préexistante.
- Normalisé : UML, modèle spécifique basé sur un
métamodèle normalisé comme MOF (Méta Object Facility)
- Le générateur : c'est un programme qui
explore le modèle et produit des documents. Ces documents peuvent
être du code, des fichiers de configuration, de la documentation,
des scripts et des schémas pour une base de données etc. Le
générateur doit être assez évolué et configurable pour être en
mesure de produire des sorties destinées à des plateformes
différentes tout en réutilisant ses stratégies de navigation dans
le modèle.
Notre expérience et notre
implication dans ce type de
projet vous garantissent un fort retour sur investissement.
La génération et la rétro-ingénierie en
action
Par l'enchainement de processus élémentaires de transformation, il
devient possible d'automatiser en partie le portage ou la migration d'une
application ou d'une base de données d'un système vers un autre.