Allez au contenu, Allez à la navigation

RSS

DCPS - Conception et évaluation des performances des systèmes

GAMME - Génération Automatique par Méta-Modèle Enrichi

La simulation est reconnue comme un moyen stratégique permettant d’évaluer de nouveaux concepts, particulièrement quand les différents systèmes mis en jeu ont des interactions fortes entre eux. La simulation distribuée est une technique clé pour maîtriser la complexité de tels systèmes [1]mais l’intégration des différents modèles de simulation peut s’avérer difficile, en particulier à cause du grand nombre de données à manipuler et de leur hétérogénéité (données statiques d’initialisation de la simulation stockées dans des bases de données ou des fichiers, données dynamiques échangées en cours de simulation via HLA, données résultats…). Depuis 2010, le DCPS développe un outil logiciel permettant de simplifier le développement de code permettant de manipuler différentes représentations de données : GAMME [2].

Un unique modèle pour plusieurs cibles       

La démarche de GAMME repose sur les principes de l’ingénierie des modèles (Model-Driven Engineering) qui préconise une séparation entre les modèles de données, concentrant la logique métier, et les modèles d’architecture, concentrant la logique technique. La logique métier répond aux exemples suivants de questions : dans le concept que je vais évaluer, qu'est-ce qu'un objet avion ? Quelles sont ses relations avec d'autres objets tels qu'un plan de vol ou un moteur ? La logique technique, quant à elle, définit le support de ces données telles qu'une table dans un base de données, un objet C++ ou un objet HLA. L’utilisateur de GAMME écrit donc un modèle de données métier, représentatif des données de son projet, et via différentes transformations techniques sur ce modèle, obtient différentes briques logicielles qu’il pourra alors utiliser voire personnaliser pour construire son application finale.


Chaîne de transformation GAMME
 

Un méta-modèle riche

Au delà de la définition classique d'une classe, GAMME fournit un ensemble riche de types de base.

class Airline {
    ref Aircraft[0..-1] aircrafts
}

abstract class Aircraft {}

class Balloon extends Aircraft {}

class Jet extends Aircraft {
     val Engine[1..-1] engines
}

abstract class Engine {}

 

En plus des classiques entiers, flottants, chaînes de caractères, dates, une attention particulière est apportée aux mesures physiques. Le méta-modèle de GAMME définit les notions de préfixes, d'unité, de constantes et de quantités physiques. Associées à une transformation adéquate, ces définitions sont injectées dans le code généré et s'avèrent très utiles pour éviter les classiques erreurs de conversion (les conversions sont automatisées).

unit metre 'm'
unit nautical_mile ’NM’ is metre * 1852
unit knot ’kt’ is nautical_mile . hour^-1
quantity speed { metres_per_second knot }
type DSpeed is speed in Double

Texte 1: Exemple de quantité physique avec GAMME

Les énumérés de GAMME sont caractérisés par la possibilité d'ajouter des sous-énumérés. Cela permet de créer une taxonomie. On peut par exemple classifier les types d'espace aérien.

enum AirSpaceType {
    enum CTA {
        TMA -- 'Terminal Control Area'
        AWY -- 'Airway'
        FIR -- 'Flight Information Region'
        UIR -- 'Upper Information Region'
        ADA -- 'Advisory Area'
    }
    ATZ -- 'Aerodrome Traffic Zone'
    CTR -- 'Control Zone'
}

GAMME fait aussi une distinction entre objets et structures de données : un objet a une identité propre et est en relation avec d'autres objets tandis qu'une structure de donnée est une simple collection d'attributs. Ainsi, la position d'un avion peut être simplement définie par sa latitude et sa longitude. Il est à noter qu'une telle distinction se retrouve dans HLA.

record GeoPosition {
    attr Double latitude
    attr Double longitude
}

Texte 3: Exemple de structure de données avec GAMME

Différentes briques logicielles pour différentes applications

GAMME repose aussi sur un pool de données qui assure une transparence entre l’application métier et le moyen de stockage (fichiers, bases de données, bus de données…). Quelque soit la source réelle de la donnée, celle-ci est reconstruite localement et mise à disposition de l’utilisateur via des objets dans différents langages de développement (C++, Java, Matlab -via Java- et Python à l’heure actuelle).


Applications GAMME

Les transformations SQL sont assez classiques et ne s'éloignent pas de ce qu'on peut trouver dans la littérature [3][4][5][6]. Suivant les relations, il est fait usage de colonnes supplémentaires avec clé étrangère ou de tables d'association pour les cas plus complexes. Les héritages sont représentés via une table pour chaque classe qu'elle soit abstraite ou non [7].

Un accent particulier a été mis sur la définition d'une transformation permettant de générer des interfaces graphiques PySide [Wrapping Python de Qt sous licence LGPL] de saisie de données. En complément de la définition de la structure des données, de tels interfaces s'avèrent très utiles pour définir le contenu de certaines données (données scénario par exemple). De plus, une méthodologie de surcharge des vues et des codes générés permet de s'adapter aux demandes des utilisateurs : les vues peuvent être retravaillées à la main et les contrôleurs [contrôleur au sens MVC] surchargés pour enrichir l'application générée de nouvelles fonctionnalités. Elle permet une approche itérative tout en protégeant les adaptations de code lors de régénérations ou de modifications du modèle de données.


Exemple d'IHM généré avec GAMME
 

Une démarche flexible

La démarche promue par GAMME permet de se concentrer sur le métier (éviter tout développement redondant tout en bénéficiant d’outils logiciels évolués), s’avère simple pour l’utilisateur (écriture du modèle de données puis utilisation des briques logicielles générées, API simples, choix du langage de développement…) et permet de capitaliser au fil des études des modèles d’architecture et de les réutiliser par la suite. Cette approche a déjà prouvé son succès au travers de trois projets : SimSky, P2ROTECT et Microscope/CMS.

Le projet SimSky consiste à développer un bus de simulation distribuée à caractère ATM (Air Traffic Management). Les données dites SIA (aéroports, points de navigation…), les données statiques (aéronefs, Initial Flight Plan – IFPL…) ainsi que les données dynamiques (vecteurs d’état de l’avion, ordres de guidage…) sont modélisées avec GAMME. Les différents codes générés par GAMME permettent à l’utilisateur de rapidement prototyper un nouveau concept ATM et d’échanger, via HLA ou un bus de simulation distribuée basé sur JSON, avec les autres simulateurs SimSky. Il est à noter que ce projet a permis de définir des modèles de transformation HLA. SimSky permet donc de transformer un modèle objet GAMME en un modèle HLA (SOM [Simulation Object Model] dans la terminologie HLA). L'outil Genesis [8] permet alors d'en dériver les simulateurs (fédérés en terme HLA) de la simulation.

P2ROTECT et Microscope/CMS sont des exemples de projet reposant sur l’échange et l’exploitation de fichiers XML entre différentes applications. Une description simple d’un modèle de données en GAMME permet aux ingénieurs développant les différentes applications d’avoir un éditeur et un format d’échange sûr et fiable sans avoir à réaliser des développements spécifiques. Le projet P²ROTECT a largement bénéficié de cette nouvelle approche : il a été possible, en quelques semaines, de mettre au point des interfaces d’édition de données, intégrées aux codes de calcul, et de les faire ensuite évoluer sans effort. Dans le cadre de Microscope/CMS, les ingénieurs ont développé un logiciel de paramétrage de missions spatiales. Ils ont en particulier beaucoup bénéficié de la possibilité de retravailler les vues générées et enrichi l’IHM de nombreuses fonctionnalités, pour atteindre un niveau de finition très satisfaisant.


IHM d'édition de fiches MICROSCOPE

Au final, GAMME permet de produire efficacement des applications matures tout en répondant à la flexibilité nécessaire aux travaux de recherche.

Contact

  • Judicaël Bedouet (Judicael.Bedouet \@/onera.fr)
     

Références bibliographiques

[1]    P. Carle, R. Kervarc, R. Cuisinier, N. Huynh, J. Bedouet, T. Riviere, & E. Noulard. Simulation of systems of systems. AerospaceLab, AL04-14, 2012.

[2]    J. Bedouet, N. Huynh, & R. Kervarc. GAMME, a meta-model to unify data needs in simulation modeling. In Proceedings of the Symposium on Theory of Modeling & Simulation-DEVS Integrative M&S Symposium. Society for Computer Simulation International, p.14, 2013.

[3]    L. Cabibbo. Objects meet relations: On the transparent management of persistent objects. In Advanced Information Systems Engineering, pp. 321–376. Springer, 2004.

[4]    M.Golobisky, & A.Vecchietti. Mapping UML class diagrams into object-relational schemas. ASSE proceedings. 1:65–79, 2005.

[5]    E. Marcos, B. Vela, J.M. Cavero, & P. Caceres. Aggregation and composition in object-relational database design. In Proceedings of the 5th east-european conference on Advances in Database and Information Systems, pp. 195–209, 2001.

[6]    W. Keller. Mapping objects to tables - a pattern language. In Proceedings Of European Conference on Pattern Languages of Programming Conference, 1997.

[7]    L. Cabibbo & A. Carosi. Managing inheritance hierarchies in object/relational mapping tools. In Proceedings of the 17th International Conference on Advances in Information System Engineering, pp. 135–150. Springer, 2005.

[8]   J. Bourrely, P. Carle, M. Barat, & F. Lévy. GENESIS: an integrated platform for designing and developing HLA applications. In Simulation Interoperability Workshop, 2005.

 

Autres Départements Scientifiques