Automates
Intelligents utilise le logiciel
Alexandria.
Double-cliquez sur chaque mot de cette page et s'afficheront
alors définitions, synonymes et expressions constituées
de ce mot. Une fenêtre déroulante permet aussi
d'accéder à la définition du mot dans une
autre langue.
Les maîtres d'ouvrage
et maîtres d'oeuvre s'interrogent sur les difficultés
que présentent la fabrication et la maintenance des grands
systèmes d'information qui sont devenus des instruments incontournables
des politiques publiques et privées..
L'extrait suivant
du rapport du Conseil de lUniversité des Nations Unies
de Janvier Décembre 2001 se fait l'écho de ces difficultés
: 41.
Sil est vrai que les logiciels sont largement utilisés
et que les populations ont de plus en plus recours à linformatique,
nous continuons malgré tout à connaître une
"crise du logiciel". Les projets importants dans ce domaine prennent
généralement du retard, dépassent les crédits
accordés ou sont tout simplement abandonnés. Ceux
qui sont menés à bien contiennent souvent de nombreux
bogues et sont difficiles à mettre à jour. Les spécialistes
qui mènent des travaux de recherche sur les techniques formelles
espèrent pouvoir introduire une méthode plus rigoureuse
délaboration des logiciels pour aider les ingénieurs
de logiciels à venir à bout de cette crise.
L'immaturité des maîtrises d'ouvrage
contribue certainement à la "crise du logiciel". Mais je
pense que cette explication n'épuise pas le problème.
Nous manquons aussi de théorie et de savoir-faire pour maîtriser
la complexité qui résulte de la taille des grandes
applications et des multiples interactions qui naissent au sein
des programmes. Afin de contribuer
à la résolution de ce deuxième point, j'ai
écrit un programme qui produit automatiquement le code source
(en C ANSI pour le code serveur, en JAVA pour le code écrans)
à partir d'une spécification mathématique (ensembliste
pour les données, fonctionnelle pour leurs relations et pour
les calculs courants) inspirée du modèle des classes
d'UML. La génération de code source à partir
d'un modèle formel a déjà été
utilisée avec succès dans le domaine des automatismes
industriels (souvent à partir de réseaux de Pétri),
je l'étends aux applications dites de gestion. Les premiers
essais montrent qu'un modèle d'une dizaine de classes produit
un code serveur de l'ordre de 5000 lignes et un code écrans
de l'ordre de 4000 lignes. Ce volume important de code pour un petit
modèle explique en partie le coût et la durée
de fabrication des grands systèmes.
Après avoir effectué ce travail je pense que la fin
de la crise du logiciel passe nécessairement par la génération
de code à partir de modèles formels car ainsi le code
est produit immédiatement après la modélisation
(d'ou un gain de plusieurs années sur des grands projets),
la modélisation est obligatoire ce qui est un avantage induit
intéressant, et le code est beaucoup plus fiable (par capitalisation
du débogage dans le générateur).
Bien
qu'il me reste quelques programmes à écrire, le prototype
que j'ai déjà réalisé me permet de voir
l'utilité de la génération de programmes. C'est
une méta-programmation appuyée sur un modèle
formel. J'expérimente le prototype du générateur
sur un projet dans un grand ministère.
Patrick
Guedj
1 - Objectif : industrialiser la fabrication
des logiciels de gestion
Alors que le logiciel est maintenant utilisé dans la plupart
des domaines d'activité (loisirs, gestion, téléphonie,
automobile, systèmes d'arme...) - "Il y a plus d'informatique
dans la Volvo S80 que dans le chasseur F15" déclarait
en janvier 2000 le Président d'Audi - cette crise du logiciel,
dont se fait l'écho le rapport du Conseil de l'Université
des Nations Unies, conduit à de graves dysfonctionnements
(explosion de la fusée Ariane V, dérive du projet
Socrate de la SNCF ...) et à de fréquents dépassements
des délais et des coûts de réalisation. Selon
le rapport de 1995 du Standish Group, pour 52,7% des projets le
dépassement des coûts représentent 189% des
estimations établies à l'origine (www.csd.uwo.ca/faculty/beau/PM/Rapport-Standish.html).
Diverses voies, regroupées sous le terme de génie
logiciel, ont été explorées pour tenter de
fabriquer des logiciels avec une qualité comparable à
celle des produits industriels: organisation du processus de fabrication,
méthodes de conception (Merise par exemple), spécifications,
structuration des programmes (programmation structurée, modulaire
puis objet), preuve mathématique, réutilisation (bases
de données en premier lieu), techniques de test. Malgré
les améliorations partielles qu'elles ont apportées,
aucune de ces voies n'a permis de résoudre le problème
de la fabrication des logiciels qui reste pour l'essentiel artisanale.
Le système GAP utilise une autre approche qui permet d'industrialiser
la fabrication des logiciels de gestion en générant
les programmes à partir d'une description abstraite des données.
2 - Principe : produire automatiquement
les programmes à partir d'une description abstraite des données
A partir d'un modèle mathématique (ensembliste)
décrivant les données, leurs relations et les principales
fonctions de calcul, le système GAP produit automatiquement
le logiciel (programmes serveurs et écrans). Les fonctions
de validation des dossiers (workflow), d'identification des utilisateurs
et de restriction de leurs droits d'accès aux données
sont intégrées dans le système.
Les calculs complexes et les écrans qui leurs correspondent
doivent être programmés manuellement.
Cette approche qui consiste à générer les
programmes à partir d'une spécification formelle du
résultat attendu a déjà été utilisée
avec succès dans le domaine des automates industriels. Elle
n'avait que peu été explorée pour les applications
de gestion. Le système GAP comble cette lacune.
3 - Intérêts : des logiciels
moins coûteux et plus fiables
Le premier intérêt est la réduction des délais
et des coûts de fabrication. La charge d'analyse reste la
même, mais le générateur permet d'obtenir immédiatement
les programmes à partir de la spécification issue
de l'analyse. Il n'est pas rare que la phase de programmation soit
longue (elle peut s'étendre sur plusieurs années pour
des grands projets) et mobilise des ressources importantes. Le système
GAP, en réduisant la phase de programmation au codage des
fonctions complexes, permet de réduire dans une large mesure
les délais et les coûts de fabrication. Une première
estimation fait apparaître une réduction de l'ordre
de 2/3 de la durée de la phase de programmation. La confrontation
de ce système à de nombreux projets permettra de calculer
les gains moyens effectifs par type de projet.
Le second intérêt est l'augmentation de la fiabilité
des logiciels. Contrairement aux méthodes habituelles de
fabrication des logiciels, qui imposent une phase de mise au point
des programmes généralement longue, le système
GAP permet de capitaliser la correction des erreurs de programmation.
La détection d'une erreur conduit à corriger le générateur
et non le programme erroné ce qui assure que cette erreur
ne se produira plus pour tous les futurs programmes générés.
Ainsi, le système GAP produit des logiciels de plus en plus
fiables.
4 - Limites : un système uniquement
destiné à produire rapidement des logiciels de gestion
fiables
Le système GAP repose sur une modélisation mathématique
des données adaptée au traitement des applications
de gestion (comptabilité, gestion du personnel, stocks, gestion
de dossiers...). Les logiciels scientifiques, caractérisés
par la prédominance des calculs algorithmiques sur les données,
sont exclus du périmètre du système.
Les fonctions complexes (clôture d'un exercice comptable
par exemple) doivent être programmées manuellement.
Le système laisse aux programmeurs la liberté d'intervenir
dans les programmes pour répondre aux inévitables
situations imprévues qu'impose la réalité de
la gestion. Après une période de maintenance des programmes
ou quand le périmètre de l'application évolue,
le modèle est ajusté pour produire une nouvelle version
de l'application. Les fonctions complexes doivent alors être
portées manuellement de l'ancienne version vers la nouvelle.
Le système ne traite pas les activités périphériques
à la programmation : planification, gestion des équipes
de développement, historique des versions des programmes,
budget, déploiement des applications, etc. Il ne s'attache
qu'à résoudre le problème central de la fabrication
des logiciels : produire rapidement des logiciels fiables.
5 - Utilisations : du prototypage à
l'urbanisation du système d'information
Le système peut être utilisé pour aider l'analyse
en produisant itérativement des prototypes destinés
à affiner l'expression des besoins.
Les équipes de développement peuvent augmenter leur
productivité en produisant automatiquement l'essentiel des
programmes d'un projet. Elles peuvent aussi réutiliser les
modèles de données de différents projets. La
réutilisation des composants logiciels, souvent souhaitée
mais peu pratiquée, trouve avec le système GAP une
application très concrète.
Ce système facilite la reprise des applications existantes.
Des programmes spécifiques peuvent être écrits
pour produire le modèle des données à partir
des structures de données d'une application (COBOL par exemple).
Les traitements complexes doivent, par contre, être repris
manuellement.
Les directions informatiques qui souhaitent (ré)homogénéiser
leur système d'information peuvent utiliser ce système
pour leurs nouveaux développements. Les programmes générés
sont auto-documentés par le modèle des données
et leurs structures sont identiques, ce qui facilite leur maintenance
et la polyvalence des équipes techniques. Par ailleurs, ils
sont conçus pour permettre l'urbanisation du système
d'information en l'organisant en composants applicatifs homogènes
dialoguant par une interface standardisée.