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 .
Présentation
Modèles et transformations
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].
L'architecture dirigée par les modèles tire parti des spécifications de l'OMG[25].
Langages de transformations de modèles
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] :
QVT Relations (QVT-R) est un langage déclaratif et relationnel ;
QVT Operational (QVT-O) est un langage hybride qui propose une structure déclarative à base de règles et permet l'utilisation d'expressions impératives ;
QVT Core (QVT-C) est un langage déclaratif minimal qui forme le noyau du standard (peu usité, QVT-R étant plus expressif[34]).
Description
Concepts
Requêtes
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.
Vues
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.
Transformations
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].
Architecture
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èleEMOF 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].
Construction
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.
Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?
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.
Appel à propositions
« Cet AAP répond au besoin de normaliser la façon dont les correspondances sont réalisées entre les modèles dont les langages sont définis à l'aide du MOF. En outre, l'AAP préconise une méthode standard pour exécuter des requêtes sur les modèles issus du MOF et créer des vues à partir de ces modèles. Ceci est comparable à l'apport de XSLT pour XML, où un script XSLT définit la correspondance entre deux DTD et dicte la façon dont les documents XML (conformes aux DTD) sont ensuite transformés. »
— Appel à propositions pour le standard QVT[61],[Note 5]
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] :
La proposition doit définir un langage de requête pour les modèles ;
La proposition doit définir un langage de définition de transformations entre un métamodèle source et un métamodèle cible. La définition de la transformation doit permettre de générer un modèle conforme au métamodèle cible à partir d'un modèle conforme au métamodèle source. Les deux métamodèles sont conformes au MOF et peuvent être identiques ;
Les langages de la proposition doivent eux-mêmes être définis comme des métamodèles conformes au MOF ;
Le langage de définition de transformations doit contenir toute l'information nécessaire à une exécution automatique de la transformation ;
Le langage de définition de transformations doit permettre la création d'une vue d'un métamodèle ;
Le langage de définition de transformations doit être déclaratif afin de permettre l'exécution incrémentale de la transformation ;
Tous les mécanismes définis dans la proposition doivent fonctionner sur des instances de métamodèles conformes à la version 2.0 du MOF.
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].
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].
Standardisation
À 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.
Correction des incohérences dans les métamodèles de QVT, mise à jour des diagrammes
Dernière version stable: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
Dernière version avancée
Version future
Implémentations
Langages propres à QVT
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.
Langages compatibles avec QVT
Tefkat(en) : autre langage et moteur de transformation de modèles. Propose une compatibilité avec QVT.
ATL : implémentation du langage du même nom, très librement inspiré du langage QVT.
VIATRA(en) : environnement de transformation de modèle. Propose une compatibilité avec QVT.
GReAT(en) : autre langage de transformation de modèles. Propose une compatibilité avec QVT.
Critiques du standard
Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?
Approches complémentaires
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.
Notes et références
Notes
↑L'ingénierie dirigée par les modèles peut être considérée comme une sous-discipline de l'ingénierie basée sur les modèles. En IDM, les modèles sont utilisés dans le développement en plus d'être utilisés dans l'analyse et dans la conception du système[19]. De tels modèles sont appelés artéfacts primaires.
↑Par opposition aux transformations modèle-à-texte dont le résultat est du texte brut comme du code source[21] et aux transformations texte-à-modèle, souvent utilisées en rétro-ingénierie, qui génèrent des modèles à partir de texte[22].
↑La spécification du standard QVT recommande la notation QVT-X pour le nom entier du langage (p. ex. QVT-Relations) et QVTx pour son abréviation (p.ex. QVTr). Dans l'usage courant toutefois, les langages sont le plus souvent abrégés sous les formes QVT-R, QVT-C et QVT-O.
↑Cette approche est connue sous le nom d'ingénierie basée sur les modèles (en anglais : model-based systems engineering, MBSE).
« 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. »
↑Le résultat d'une transformation est alors le modèle (cible) lui-même plutôt qu'une vue de ce modèle. L'intérêt des vues était de permettre la présentation d'aspects spécifiques des modèles, en plus des transformations modèle-à-modèle[71]. Une raison avancée pour cette omission est que les vues éditables requièrent aussi de modifier les modèles dont elles sont issues, c.-à-d. que les transformations entre les modèles et leurs vues doivent être bidirectionnelles[71]. Toutefois, QVT n'explique pas comment mettre en œuvre la bidirectionnalité[71].
↑Dans chaque nouvelle version de QVT, les portions de texte modifiées sont mises en avant et accompagnées de commentaires éditoriaux (en anglais : specification changebars).
↑« Tout est modèle » est un principe exposé pour la première fois par J. Bézivin. Il est depuis devenu un énoncé important de l'ingénierie dirigée par les modèles[20].
« In MDE, the basic principle that “Everything is a model” has many interesting properties, among others the capacity to generate a realistic research agenda. »
— Jean Bézivin, On the unification power of models[73]
« 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. »
↑ a et b(en) Luiz F. Capretz, « A brief history of the object-oriented approach », Software Engineering Notes, , p. 7 (DOI10.1145/638750.638778, lire en ligne)
↑(en) W. W. Royce, « Managing the Development of Large Software Systems: Concepts and Techniques », Proceedings of the 9th International Conference on Software Engineering, IEEE Computer Society Press, iCSE '87, , p. 328–338 (ISBN9780897912167, lire en ligne, consulté le )
↑(en) Bobbi J. Young, Kelli A. Houston, Jim Conallen, Michael W. Engle, Robert A. Maksimchuk et Grady Booch, Object-Oriented Analysis and Design with Applications, O'Reilly, , 3e éd., 717 p. (ISBN978-0-201-89551-3, lire en ligne), p. 24-28
↑ a et b(en) Königs, Alexander, Model Integration and Transformation – A Triple Graph Grammar-based QVT Implementation, (OCLC1111373557, lire en ligne)
[Bézivin 2005] (en) Jean Bézivin, « On the unification power of models », Software and Systems Modeling, , p. 18 (DOI10.1007/s10270-005-0079-0, lire en ligne [PDF], consulté le ).
[Brambilla et al. 2017] (en) Marco Brambilla, Jordi Cabot et Manuel Wimmer, Model-Driven Software Engineering in Practice : Second Edition, Morgan & Claypool, coll. « Synthesis Lectures on Software Engineering », , 207 p. (ISBN978-1-62705-708-0, OCLC982699762).
[Czarnecki et Helsen 2003] (en) Krzysztof Czarnecki et Simon Helsen, « Classification of Model Transformation Approaches », OOPSLA, (lire en ligne, consulté le ).
[Gardner 2003] (en) Tracy Gardner et al., A review of OMG MOF 2.0 Query/Views/Transformations Submissions and Recommendations towards the final Standard, (lire en ligne).
[Larman 2001] (en) Craig Larman, Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development, , 3e éd., 627 p. (ISBN978-0-13-092569-5, lire en ligne).
[Larman et Basili 2003] (en) Craig Larman et Victor Basili, « Iterative and incremental developments: a brief history », IEEE Computer, IEEE, (lire en ligne, consulté le ).
[Milicev 2009] (en) Dragan Milicev, Model-Driven Development with Executable UML, Wrox Press, , 818 p. (ISBN978-0-470-48163-9, lire en ligne)
[Schmidt 2006] (en) Douglas C. Schmidt, « Guest Editor's Introduction: Model-Driven Engineering », Computer, vol. 39, no 2, , p. 25–31 (ISSN0018-9162, DOI10.1109/MC.2006.58).
[Selic 2003] (en) Bran Selic, « The pragmatics of model-driven development », IEEE Software, vol. 20, no 5, , p. 19–25 (ISSN0740-7459, DOI10.1109/MS.2003.1231146).
[Sendall et Kozaczynski 2003] (en) Shane Sendall et Wojtek Kozaczynski, « Model transformation: the heart and soul of model-driven software development », IEEE Software, IEEE, (lire en ligne, consulté le ).
[Stevens 201] (en) Perdita Stevens, « A simple game-theoretic approach to checkonly QVT Relation », Software and Systems Modeling, (lire en ligne, consulté le ).
[Vojtisek 2006] Didier Vojtisek, QVT : un standard de transformation pour l'Ingénierie Dirigée par les Modèles, (lire en ligne [PDF]).
[Völter et al. 2006] (en) Markus Völter, Thomas Stahl, Jorn Bettin, Arno Haase et Simon Helsen, Model-Driven Software Development : Technology, Engineering, Management, Wiley, , 436 p. (ISBN978-0-470-02570-3, lire en ligne [PDF]).