QVT | ||
Principe d'une transformation avec QVT | ||
Éditeur | Object Management Group (OMG) | |
---|---|---|
Auteurs | Codagen Technologies Corporation, Compuware, DSTC (en), France Télécom, Inria, Interactive Objects Software, IBM, King's College de Londres, Laboratoire d'informatique de Paris 6, OMG, Softeam, Sun Microsystems, TNI-Valiosys, Tata Consultancy Services, Thales, Université d'York[1]. | |
Genre | Spécification formelle | |
État | Version 1.3 | |
Première publication | ||
Dernière publication | ||
Standard | omg.org/spec/QVT | |
modifier |
En ingénierie dirigée par les modèles, Query/View/Transformation (QVT), que l'on peut traduire par « Requête/Vue/Transformation », est un standard pour la spécification de transformations de modèles. Il fournit une architecture et des langages dédiés facilitant la génération de modèles à partir d'autres modèles. Défini pour la première fois en puis adopté en par l'Object Management Group (OMG), QVT fait partie du standard Meta-Object Facility (MOF). Il est à ce titre une composante importante de l'architecture dirigée par les modèles (MDA).
Le standard QVT est principalement représenté par deux langages de transformations de modèles : QVT Relations (QVT-R), un langage déclaratif, et QVT Operational (QVT-O), un langage impératif. D'autres langages de transformations de modèles comme ATL s'inspirent également des concepts du standard. Du fait de sa complexité, l'implémentation de QVT n'est pas achevée en .
La modélisation est une approche courante en ingénierie pour analyser, concevoir[2] et maîtriser la complexité d'un système[3]. Produit d'une modélisation, un modèle est une représentation abstraite d'une fonction ou d'un comportement du système[4],[5]. Puisqu'il n'en représente pas tous les aspects, le modèle est une simplification du système[2],[5] : il en fournit ainsi une meilleure compréhension[6]. Par exemple, les professionnels du génie civil réalisent des modèles statiques et dynamiques de ponts avant leur construction pour en vérifier la sécurité[2].
En informatique et plus précisément en génie logiciel, les modèles sont couramment utilisés[2],[7]. D'abord, les modèles permettent de simplifier les aspects techniques de la construction de logiciels, notamment pour les non-développeurs[8]. Ils aident à visualiser, spécifier, construire et documenter les systèmes logiciels[9]. Ensuite, l'abstraction apportée par les modèles permet de concevoir des programmes fondés sur des objectifs de conception plutôt que sur un environnement en particulier[10],[11]. Par exemple, un modèle de données décrit de manière abstraite et sans détails techniques la façon dont un ensemble de données est organisé dans une base de données[12],[13]. De nombreuses méthodes d'analyse et de conception de logiciels, qui utilisent par exemple le langage de modélisation UML, sont fondées sur le concept de modèle[2]. Dans ce cas, les modèles sont utilisés à des fins de communication ou de spécification[5],[14].
Une particularité des modèles en génie logiciel est qu'ils peuvent aussi jouer le rôle de programmes, c'est-à-dire qu'ils peuvent parfois remplacer du code source[5],[6]. Le modèle est alors dit exécutable[6]. Ce principe est à l'origine de l'ingénierie dirigée par les modèles, une branche de l'ingénierie des systèmes[15]. Son application au développement logiciel est appelée développement dirigé par les modèles[15]. La pratique du développement dirigé par les modèles nécessite ainsi de concevoir et de manipuler simultanément de nombreux modèles qui représentent différents aspects du système (sécurité, performance, métier, etc.)[16],[17]. Mis ensemble, ces modèles peuvent être transformés pour produire une implémentation logicielle[18],[Note 1].
Les opérations qui permettent de manipuler automatiquement ou semi-automatiquement des modèles, par exemple pour générer du code source, s'appellent des transformations de modèles[17],[20]. Parmi elles, les transformations modèle-à-modèle regroupent les transformations dont le résultat est un modèle[Note 2]. Elles sont notamment utilisées pour assurer la cohérence d'une famille de modèles[17] ou pour créer une représentation globale d'un système dont les modèles décrivent différents aspects[22].
Réaliser les promesses de l'ingénierie dirigée par les modèles nécessite de développer des outils adaptés à la définition de modèles et de transformations de modèles[23],[24]. L'architecture dirigée par les modèles (en anglais, model-driven architecture ou MDA) est une initiative majeure pour la concrétisation de l'ingénierie dirigée par les modèles[25]. Apparue en , MDA est une approche de l'Object Management Group (OMG), un organisme de normalisation spécialisé dans les technologies de l'information[26],[27]. L'OMG développe principalement des spécifications pour promouvoir le paradigme objet et en particulier la modélisation objet[28]. Ces spécifications, parmi lesquelles UML[28],[29], ont pour but de garantir l'interopérabilité ainsi que la portabilité des systèmes logiciels dans l'industrie[27],[30].
L'architecture dirigée par les modèles tire parti des spécifications de l'OMG[25].
Proposé en 2002[31] puis adopté en 2005[32], le standard QVT définit un ensemble de langages permettant d'exprimer des transformations de modèles à modèles[33],[Note 3] :
Une requête (query) est une expression évaluée sur un modèle donné[35]. Le résultat d'une requête est composé d'une ou plusieurs instances des types définis dans le modèle ou dans le langage de requête. Pour un modèle fondé sur MOF, le résultat d'une requête peut par exemple être un booléen ou un ensemble d'instances de métaclasses du métamodèle. Le langage OCL est un exemple de langage permettant d'évaluer des requêtes sur des modèles.
Une vue (view) est un modèle entièrement dérivé d'un autre modèle (appelé modèle de base)[36]. L'intérêt d'une vue est de réorganiser tout ou partie d'un modèle dans un but particulier. Le plus souvent, une vue n'est disponible qu'en lecture seule. Une requête peut être considérée comme un type particulier de vue.
Une transformation (transformation) est un programme qui génère un modèle cible à partir d'un modèle source[37]. Une vue peut être considérée comme le résultat d'un type particulier de transformation dans laquelle le modèle cible est totalement dépendant du modèle source. Une transformation n'utilisant que des éléments du langage QVT-R est dite relationnelle tandis qu'une transformation n'utilisant que des éléments du langage QVT-O est dite opérationnelle[38].
Le standard QVT possède ainsi une nature hybride, à la fois déclarative et impérative. La partie déclarative de QVT est le cœur du standard. Elle forme une architecture en deux couches[39]. Le langage QVT-C (Core) est la couche inférieure de l'architecture. Il définit les concepts bas niveau nécessaires à la spécification de transformations à partir du méta-métamodèle EMOF et du langage OCL. Il définit aussi explicitement la constitution des modèles de trace, c'est-à-dire la modélisation des étapes intermédiaires d'une transformation. Le langage QVT-R (Relations) est la couche supérieure de l'architecture. Il met l'accent sur l'utilisabilité, rend implicite l'écriture des modèles de trace et fournit des fonctionnalités comme le filtrage par motif[39]. Entre ces deux couches, la transformation Relations to Core est un moyen systématique de traduire une transformation écrite en QVT-R et un sens d'exécution donné en une transformation écrite en QVT-C[40].
Dans l'architecture de QVT, deux mécanismes supplémentaires se greffent aux couches déclaratives du standard pour y ajouter le paradigme impératif. D'abord, le mécanisme Operational Mappings fournit une définition de QVT-O[41]. Cette définition est en fait construite sur celle de QVT-R[41]. L'intérêt du paradigme impératif est de permettre une implémentation explicite des relations de QVT-R. Cette implémentation peut elle-même contenir des références à d'autres relations à la manière d'un appel de fonction. En cela, QVT-O est considéré comme un langage impératif (lorsque les transformations sont toutes opérationnelles) ou hybride (en support de transformations relationnelles)[42]. Un autre moyen, fourni par le mécanisme Black Box, est d'implémenter une relation avec un langage dédié en respectant la signature de la relation[41]. Dans ce cas, l'implémentation forme une boîte noire. L'interopérabilité est possible si le langage est lui-même conforme au méta-métamodèle MOF, par exemple Java[43].
Le métamodèle QVT, qui définit les éléments de QVT-R, QVT-O et QVT-C, est construit à partir du méta-métamodèle EMOF (Essential MOF) et d'Essential OCL.
Dans les années 1980, la programmation procédurale laisse place à la programmation orientée objet puis à la programmation orientée composant[44]. La crise du logiciel, notamment mise en lumière dans Le Mythe du mois-homme de Frederick Brooks, illustre la difficulté de mener à bien de grands projets logiciels[45],[46]. Les objets puis les composants logiciels apparaissent alors comme une solution pour mettre au point des architectures logicielles plus robustes[47]. À la suite de l'apparition de langages comme Smalltalk, C++ et Java, la programmation orientée objet prend de l'ampleur dans l'industrie et devient l'approche principale pour le développement logiciel à partir du début des années 1990[48],[49].
Les cycles de développement logiciel évoluent également[50]. Le modèle en cascade, jugé inefficace[51],[52], est supplanté par d'autres modèles de conception comme le modèle en spirale puis le modèle agile[50]. L'analyse des exigences, la gestion des risques, la rédaction de documentation logicielle ainsi que la phase de conception prennent de l'ampleur dans ces modèles[53],[54],[55]. En , les informaticiens Ivar Jacobson, Grady Booch et James Rumbaugh mettent au point le processus unifié (PU)[56], une méthode générale pour les systèmes orientés objet qui intègre à la fois un cycle de développement et un ensemble de bonnes pratiques pour l'analyse, la conception et la documentation des systèmes[57]. Largement adopté dans l'industrie[57], le processus unifié utilise de manière intensive UML, un langage de modélisation orienté objet[56]. Les modèles, à l'exemple des diagrammes UML[58], deviennent alors des artéfacts essentiels à la production de logiciels[59],[48],[Note 4].
Au début des années 2000, l'idée que les modèles puissent également remplacer le code source pendant le développement émerge[17],[60]. Cela marque les débuts de l'ingénierie dirigée par les modèles qui se définit comme la conjonction de deux concepts fondamentaux : les modèles et les transformations de modèles[20]. Les modèles, qui représentent les différents aspects d'un même système, sont construits à l'aide d'un langage de modélisation comme UML. Les transformations désignent les opérations qui manipulent des modèles, permettant ainsi par exemple de générer du code à partir des modèles.
En , forte de son expérience dans le domaine de la modélisation logicielle avec UML, l'OMG met en place l'architecture dirigée par les modèles (en anglais : Model-Driven Architecture ou MDA), une initiative pour réaliser les promesses de l'ingénierie dirigée par les modèles[21],. Un méta-métamodèle central à MDA, le Meta-Object Facility (MOF), est créé pour décrire les métamodèles existants et futurs de l'OMG parmi lesquels UML et CORBA. C'est dans ce contexte que la nécessité d'un standard pour la transformation de modèles dans l'approche MDA émerge.
Centrales à l'architecture dirigée par les modèles, les transformations de modèles à modèles font l'objet dès 2002 d'un appel à propositions (en anglais : Request For Proposal) de l'OMG[31]. L'objectif de cet appel à propositions est de mettre au point un standard de transformations de modèles compatible avec le méta-métamodèle MOF et les technologies existantes du MOF[62]. Il est le sixième des sept appels de l'OMG pour construire la version 2.0 du MOF[61]. Les concepts de requête, vue et transformation sont introduits dans l'appel à propositions afin d'en unifier les réponses[35],[61] et de tirer parti d'avancées déjà effectuées avant la standardisation comme le modèle de transformation du Common Warehouse Metamodel[63].
L'appel à propositions pour QVT compte treize exigences, dont sept obligatoires[63] :
Les exigences optionnelles proposent des fonctionnalités pouvant être intégrées au langage de définition de transformations, parmi lesquelles la bidirectionnalité et l'héritage de transformations[64].
L'appel à propositions obtient huit réponses[65]. Ces réponses sont formulées conjointement par une trentaine d'éditeurs de logiciel et d'instituts de recherche en génie logiciel, parmi lesquels IBM, Thales, le King's College de Londres et l'Université d'York[65],[13].
Toutes les réponses considèrent que les requêtes font partie des transformations et sont nécessaires à leur spécification[66]. Il n'y a pas de consensus pour le langage de requête : quatre contributions proposent un langage déclaratif (dont OCL ou F-logic), trois contributions proposent un langage hybride ou impératif et une contribution ne propose aucun langage[67]. Sept réponses sur huit considèrent que le résultat d'une transformation doit être une vue[68]. En fin de compte, toutes les réponses sauf une définissent un cadre unifié pour les requêtes, les vues et les transformations[69]. Quatre d'entre elles proposent l'utilisation d'un seul langage pour ces trois aspects tandis que trois autres proposent l'utilisation d'OCL pour les requêtes puis divers formalismes pour les vues et les transformations[69].
À la suite de son adoption, la spécification est publiée en phase de finalisation pour la première fois en [32],[70], soit plus de trois ans après l'appel à propositions. Il s'agit d'un délai important par rapport aux processus de standardisation habituels de l'OMG[32]. Le langage de requête retenu est OCL[71], tandis que le concept de vue n'apparait pas dans la spécification[71],[Note 6].
La phase de finalisation s'achève en avec la publication de la version 1.0 du standard QVT.
Version | Adoption | Changements majeurs[Note 7] |
---|---|---|
Bêta 1 | Première adoption du standard QVT | |
Bêta 2 | Conformité de QVT avec le méta-métamodèle MOF | |
1.0 | Première publication du standard QVT | |
1.1 | Génération de la syntaxe abstraite des langages de QVT | |
1.2 | Correction des incohérences dans les métamodèles de QVT, mise à jour des diagrammes | |
1.3 | Description de QVT Operational (signatures de transformations, traces), utilisation d'OCL dans QVT | |
Légende : Ancienne version Ancienne version, toujours prise en charge Dernière version stable |
Plusieurs implémentations du standard QVT existent[72]. La plupart d'entre elles sont abandonnées ou inachevées, souvent en raison de l'absence d'une formalisation suffisante des langages du standard[72]. Après une refonte du standard en 2016[33], l'implémentation est principalement poursuivie par le projet Eclipse MMT (en) (Model-to-Model Transformations) qui utilise lui-même les outils du projet Eclipse Modeling Framework.
Il est d'usage en ingénierie dirigée par les modèles de spécifier séparément les transformations qui utilisent ou qui produisent du texte (par exemple, du code source ou de la documentation)[21], bien que le texte soit lui-même un modèle[Note 8]. Cela permet de réutiliser certaines fonctionnalités des compilateurs comme la génération de code ou l'analyse syntaxique[21].
Le standard QVT a été conçu pour les transformations modèle-à-modèle (M2M). Pour les transformations modèle-à-texte (M2T), l'OMG propose le standard MOF2Text.
« This RFP addresses the need for standardizing the way mappings are achieved between models whose languages are defined using MOF. In addition the RFP calls for a standard way of querying MOF models, and creating views onto these models. This is similar to the need for XSLT for XML, where an XSLT script defines the mapping between a pair of DTDs and dictates how XMLs (compliant with the DTDs) are transformed. »
— Object Management Group, Request for Proposal: MOF 2.0 Query / Views / Transformations RFP
« In MDE, the basic principle that “Everything is a model” has many interesting properties, among others the capacity to generate a realistic research agenda. »
« En IDM, le principe de base que “Tout est modèle” possède beaucoup de propriétés intéressantes, parmi lesquelles la possibilité de générer un programme de recherche réaliste. »
: document utilisé comme source pour la rédaction de cet article.
: document utilisé comme source pour la rédaction de cet article.