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 .

Présentation Modèles et transformations

thumb|Diagramme de classes représentant le modèle de données simplifié de Wikidata La modélisation est une approche courante en ingénierie pour analyser, concevoir et maîtriser la complexité d'un système. Produit d'une modélisation, un modèle est une représentation abstraite d'une fonction ou d'un comportement du système. Puisqu'il n'en représente pas tous les aspects, le modèle est une simplification du système : il en fournit ainsi une meilleure compréhension. 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é.

En informatique et plus précisément en génie logiciel, les modèles sont couramment utilisés. D'abord, les modèles permettent de simplifier les aspects techniques de la construction de logiciels, notamment pour les non-développeurs. Ils aident à visualiser, spécifier, construire et documenter les systèmes logiciels. 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. 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. 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. Dans ce cas, les modèles sont utilisés à des fins de communication ou de spécification.

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. Le modèle est alors dit exécutable. Ce principe est à l'origine de lingénierie dirigée par les modèles, une branche de l'ingénierie des systèmes. Son application au développement logiciel est appelée développement dirigé par les modèles. 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). Mis ensemble, ces modèles peuvent être transformés pour produire une implémentation logicielle.

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. Parmi elles, les transformations modèle-à-modèle regroupent les transformations dont le résultat est un modèle. Elles sont notamment utilisées pour assurer la cohérence d'une famille de modèles ou pour créer une représentation globale d'un système dont les modèles décrivent différents aspects.

Architecture dirigée par les modèles

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. L'''architecture dirigée par les modèles (en anglais, ou MDA) est une initiative majeure pour la concrétisation de l'ingénierie dirigée par les modèles. Apparue en , MDA est une approche de l'Object Management Group (OMG), un organisme de normalisation spécialisé dans les technologies de l'information. L'OMG développe principalement des spécifications pour promouvoir le paradigme objet et en particulier la modélisation objet. Ces spécifications, parmi lesquelles UML, ont pour but de garantir l'interopérabilité ainsi que la portabilité des systèmes logiciels dans l'industrie.

L'architecture dirigée par les modèles tire parti des spécifications de l'OMG.

Langages de transformations de modèles Proposé en 2002 puis adopté en 2005, le standard QVT définit un ensemble de langages permettant d'exprimer des transformations de modèles à modèlesLa 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. :

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).

Description Concepts Requêtes Une requête (query) est une expression évaluée sur un modèle donné. 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). 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. 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.

Architecture alt=Architecture des langages du standard QVT|vignette|320px|Architecture des langages du standard QVT 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. 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. 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.

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. Cette définition est en fait construite sur celle de QVT-R. 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). 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. 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.

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 dEssential OCL.

Historique Environnement technologique Dans les années 1980, la programmation procédurale laisse place à la programmation orientée objet puis à la programmation orientée composant. 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. Les objets puis les composants logiciels apparaissent alors comme une solution pour mettre au point des architectures logicielles plus robustes. À 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.

Les cycles de développement logiciel évoluent également. Le modèle en cascade, jugé inefficace, est supplanté par d'autres modèles de conception comme le modèle en spirale puis le modèle agile. 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. En , les informaticiens Ivar Jacobson, Grady Booch et James Rumbaugh mettent au point le processus unifié (PU), 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. Largement adopté dans l'industrie, le processus unifié utilise de manière intensive UML, un langage de modélisation orienté objet. Les modèles, à l'exemple des diagrammes UML, deviennent alors des artéfacts essentiels à la production de logicielsCette approche est connue sous le nom d'ingénierie basée sur les modèles (, MBSE)..

Origines

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. 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. 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 ( ou MDA), une initiative pour réaliser les promesses de l'ingénierie dirigée par les modèles. 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