• Aucun résultat trouvé

1.3 Approches pour l’exécution de programmes

1.3.2 Approches basées sur une sémantique translationnelle

Une approche basée sur une sémantique translationnelle permet de capturer la séman-tique d’un langage de modélisation, souvent définie autre part (p. ex. sous forme textuelle), par traduction vers du code exécutable. Des générateurs de code ou des compilateurs sont généra-lement utilisés pour transformer les éléments du modèle de conception en termes des concepts d’un langage cible. Le langage cible est en général un langage de programmation exécutable pour lequel il existe une sémantique précise et des outils de développement associés.

1.3.2.1 Description

Le principe de cette approche est présenté sur la Figure 1.4. Un Modèle décrit le système à concevoir dans un Langage de modélisation noté LM. Une transformation appelée génération de code permet de traduire ce modèle de conception en Code exécutable. L’outil qui capture la sémantique de LM et qui réalise la transformation est un traducteur appelé Générateur de code. Le Code généré est conforme au Langage d’exécution noté LE et peut être exécuté sur une Plateforme d’exécution implémentant la sémantique de LE. Cette technique permet

FIGURE1.4 – Approche d’exécution basée sur une sémantique translationnelle.

ainsi d’exécuter un Modèle conforme à LM dans l’Espace technique de LE. Informellement, on appelle espace technique [Jou06] l’ensemble des outils de développement permettant de manipuler des programmes ou des modèles conformes à un langage. Le langage LE pouvant être de diverses natures (p. ex. bytecode, assembleur, General Purpose Language (GPL)), les plateformes d’exécution sont également très variées (p. ex. machines virtuelles (ou en anglais Virtual Machines (VMs)), systèmes d’exploitation (ou en anglais Operating Systems (OS)), microcontrôleurs).

Cette approche permet donc via une transformation de changer d’espace technique afin de bénéficier des plateformes d’exécution définies pour le langage cible. La sémantique du langage de modélisation est ainsi capturée dans un outil de transformation (modèle vers texte) appelé générateur de code (ou compilateur).

1.3.2.2 Outils

Dans la communauté du génie logiciel, de nombreux outils ont été développés pour capturer la sémantique d’un langage de façon translationnelle. En pratique, ces outils ne traduisent pas les modèles directement vers du code machine mais vers un langage intermédiaire ayant un niveau d’abstraction plus ou moins élevé. Plusieurs étapes de traduction sont donc nécessaires avant d’obtenir du code machine qui soit exécutable par une plateforme d’exécution matérielle.

Différents niveaux d’abstraction. Pour classifier les générateurs de code, cette thèse pro-pose de les regrouper en trois grands groupes dépendants essentiellement du niveau d’abs-traction du langage cible.

Vers un GPL. Une première méthode est de définir un générateur de code vers un langage de programmation générique (GPL) (p. ex. C, C++, Java, Objective-C, Ada). De nombreux outils

1.3. Approches pour l’exécution de programmes

ont notamment été définis pour UML dont Papyrus Software Designer (Papyrus SD) [Pha+17], Rhapsody [HK04], Rational Software Architect (RSA) [LNH06], UML4CPP [Jäg+16] ou le simu-lateur UML [KDH07]. Concernant les systèmes temps réel, les outils Fujaba [Bur+05], Rational Software Architect Real Time Edition (RSARTE) [Moh15] et Papyrus-RT [HDB17] permettent de générer du code prenant en compte des contraintes temps réel.

Vers une représentation intermédiaire dédiée. Une autre approche propose de transformer le modèle de conception vers un langage intermédiaire plus proche des concepts d’implémen-tation. Les travaux [PM03a ; PM03b ; SM05b] reposent sur cette approche pour exécuter des modèles UML en passant par les formalismes intermédiaires Extended Hierarchical Automata (EHA) [PM03a ; PM03b] ou Executable State Machine (ESM) [SM05b]. L’intérêt de ces forma-lismes est notamment de mettre à plat les machines à états UML pour simplifier la génération de code [PM03a ; PM03b] ou rendre l’exécution plus efficace [SM05b].

Vers un langage assembleur. D’autres générateurs de code, souvent qualifiés de compi-lateurs, ont été définis vers des langages bas niveau (c.-à-d. très proche du langage ma-chine). Des compilateurs existent notamment pour les langages de programmation comme C (p. ex. GCC) ou Rust (p. ex. rustc). Pour UML, les compilateurs de modèles GUML [CMB12] et Unicomp [Cic18] permettent de transformer des modèles UML vers du code binaire en passant par une représentation intermédiaire de GCC3ou LLVM4.

Tous ces outils permettent d’exécuter des modèles et sont généralement adaptés pour l’exécution embarquée. En ce qui concerne plus spécifiquement UML, la section A.3.3 donne un aperçu des outils implémentant une sémantique translationnelle pour UML. Parmi tous ces outils, très peu utilisent une approche formelle. En particulier, aucun des outils cités précé-demment ne permet de garantir que le code exécutable obtenu est conforme au modèle de conception initial. Pour le langage UML, il n’existe pas, à notre connaissance, d’outils permet-tant de remplir cet objectif. Dans la littérature, plusieurs travaux [LP99 ; Fra+98 ; Liu+13a] ont proposé une définition formelle de la sémantique d’UML en se basant sur une notation ma-thématique. Néanmoins, ces définitions formelles servent uniquement à appliquer des activités d’analyse sur des modèles UML mais pas à exécuter ces modèles sur des plateformes d’exé-cution réelles.

Garantir la sémantique d’exécution. Plusieurs outils permettent de garantir que la séman-tique d’exécution est conforme à la sémanséman-tique du langage de modélisation. Il est par exemple intéressant de noter l’initiative du projet CompCert5 [Ler09] qui a permis de construire le pre-mier compilateur de code C certifié en utilisant Coq6[BC10]. Pour les systèmes embarqués,

3. GCC : https://gcc.gnu.org/. 4. LLVM : https://llvm.org/.

5. CompCert : http://compcert.inria.fr/. 6. Coq : https://coq.inria.fr/.

l’environnement de développement SCADE [Ber07] possède quant à lui un générateur de code certifié, appelé KCG compiler, pour rendre exécutable les modèles SCADE. En couplant Comp-Cert avec le générateur de code KCG, il serait possible de garantir que la sémantique d’exé-cution des modèles SCADE est conforme à sa spécification. Dans le cadre de l’ingénierie des modèles, il est également intéressant de mentionner l’approche en [Com+09]. Elle permet de définir une sémantique translationnelle pour un langage de modélisation donné et de valider celle-ci par rapport à une sémantique opérationnelle de référence grâce aux techniques de bisimulation.