Mia-Software propose des progiciels pour l'ingénierie des modèles (Model-Driven Engineering) permettant d'industrialiser le développement des applications logicielles.
Un générateur de code intervient essentiellement lors de la phase de conception d’une application. Il offre un certain nombre d’intérêts dont voici les principaux :
Temps de développement réduit
Il arrive fréquemment que l’on ait à écrire du code systématique sur un grand nombre d’entités (les accesseurs de toutes les classes par exemple). Le code est alors presque identique à chaque fois : seuls quelques caractères changent (le nom de l’entité par exemple). Lorsque ce type de code est à reproduire un très grand nombre de fois, le fait de le générer permet de gagner un temps non négligeable.
Qualité
Lorsque le code est généré, on réduit considérablement le nombre d’erreurs. En effet, on élimine toutes les fautes de frappes, toutes les fautes de copier-coller (technique très utilisée sans générateur), tous les oublis, etc.… Tous ces types d’erreurs ne sont pas forcément visibles au premier coup d’œil, d’où le risque d’en laisser dans le code final.
Par contre dans le cas de la génération, si l’on fait une faute lors de l’écriture du script, la faute est généralement répercutée sur toutes les entités : la détection est donc rapide. Une correction du script et une régénération complète permettent d’éliminer l’erreur. Enfin, si le code est généré, on assure un format unique de présentation, ce qui permet de rendre le code plus lisible, et donc plus facile à maintenir.
Adaptabilité
Lorsque l’on commence la conception, on n’a pas nécessairement toutes les bonnes idées dès le départ. Deux possibilités se présentent alors au développeur
- Commencer rapidement la conception, au risque de faire de mauvais choix, et d’avoir ensuite à réécrire une partie du code.
- Repousser le début de la conception tant que tous les concepts n’ont pas été complètement validés, au risque de retarder les autres phases du projet.
Lorsque l’on dispose d’un générateur de code, on est moins confronté à ce dilemme, puisqu’une idée de conception qui arrive tardivement peut être facilement intégrée, et ce quelque soit le nombre d’entités impactées. On peut ainsi commencer la conception même si tous les concepts ne sont pas complètement arrêtés, quitte à revenir ultérieurement sur certaines parties du code. De cette manière, il est possible de livrer rapidement une première version, avec laquelle il sera plus aisé de détecter les éventuels problèmes.
Continuité entre la modélisation et l'implémentation
Dans tout projet de taille significative, la modélisation constitue une part importante de la charge. Cette modélisation a pour but, entre autres, d’obtenir un modèle de conception qui va guider les développeurs dans leur tâche de réalisation. Tout serait parfait si, une fois la modélisation terminée, on était certain d’avoir pensé à tout et d’avoir tout modélisé comme il le fallait. Or, il est rare qu’une fois la phase d'implémentation commencée, on ne revienne plus sur la phase de modélisation. En effet, outre les oublis éventuels, on n’est jamais complètement à l’abri d’une évolution des spécifications et des attentes de futurs utilisateurs.
Lorsque l'implémentation est commencée, toute évolution implique une modification à la fois du modèle et du code déjà écrit. Cette double intervention a un coût très important car c'est une opération fastidieuse qui prend du temps et de l'énergie. Lorsque les délais sont courts, le risque existe que les modifications ne soient plus effectuées que sur le code et qu'elles ne soient pas répercutées sur le modèle. Dans ce genre de cas (très fréquents) le modèle est petit à petit délaissé, puis complètement abandonné lorsque les différences sont trop importantes.
Avec un outil de génération, c’est le modèle qui reste la référence tout au long du cycle de vie du projet. En effet, les modifications peuvent être reportées sur le modèle (et non plus directement dans le code) , à partir duquel on peut toujours régénérer le code nécessaire. De cette façon, le modèle n’est plus seulement une représentation de ce qui doit être conçu, mais devient aussi une représentation de ce qui est conçu (voire de ce qui a été conçu, ce qui est très utile lors de la phase de maintenance).
Réactivité
Globalement l’utilisation d’un générateur de code permet une meilleure réactivité lors de la phase d'implémentation.
Mia-Documentation s’appuie sur la puissance et le confort d’utilisation de MIA-Generation pour proposer une solution de génération documentaire souple et efficace.
L’utilisation de Mia-Generation permet de définir précisément le contenu et la présentation de la documentation à produire et permet d’exploiter entièrement le modèle UML à documenter. Au final, la documentation produite répond parfaitement au besoin de l’utilisateur.
L’utilisation de Mia-Generation comme moteur de génération permet d’une part de décorréler l’outil et l’AGL utilisé, d’autre part de générer la documentation au format RTF en évitant ainsi l’utilisation de Microsoft Word. Ceci permet d’éviter tous les problèmes et toute la lourdeur liés à l’utilisation intensive de l’AGL et de Microsoft Word lors de la génération.
Au cours du processus de développement, l'application peut être décrite au travers de plusieurs modèles en fonction des différentes étapes qui conduisent de l'analyse à la conception.
Certains de ces modèles peuvent parfois être déduits à partir d'un autre modèle produit à l'étape précédente. Lorsque le passage d'un modèle à un autre s'effectue selon des règles formalisées, il est alors possible d'automatiser cette transformation.
Mia-Software a conçu et développé Mia-Transformation pour répondre à ce type de besoin : appliquer automatiquement des règles de transformation sur un ou plusieurs modèles afin d'obtenir un ou plusieurs autres modèles.