33 research outputs found

    ContrÎler la visibilité des aspects avec Aspectboxes, X-Editorial-Board = yes, X-International-Audience = no, X-Language = FR, X-Proceedings = yes

    Get PDF
    National audienceLa composition et l'intĂ©raction des aspects est un domaine de recherche trĂšs actif. Bien que plusieurs solutions existent, telles que l'agencement des aspects et des advices, les approches proposĂ©es par des langages Ă  aspects supposent qu'une connaissance gĂ©nĂ©rale des aspects soit nĂ©cessaire pour pouvoir les composer, et mĂȘme ceci ne permet pas d'Ă©viter les interactions implicites rĂ©sultant d'une composition. Cet article prĂ©sente les aspectboxes, un mĂ©canisme de visibilitĂ© pour aspects. L'unitĂ© Ă©lĂ©mentaire de visibilitĂ© est un aspectbox. Un aspectbox encapsule des dĂ©finitions d'aspects. Un aspectbox peut ĂȘtre utilisĂ© par d'autres aspectboxes pour aider la construction incrĂ©mentale de logiciel Ă  base d'aspects. Une classe peut utiliser un aspectbox dans le but de bĂ©nĂ©ficier des aspects dĂ©finis

    L'interface native de Nit, un langage de programmation Ă  objets

    Get PDF
    L'interface native permet Ă  un logiciel de profiter des avantages des langages natifs ainsi que de ceux du langage de haut niveau. Elle intervient entre les diffĂ©rents langages pour permettre les appels de mĂ©thodes et la conversion des donnĂ©es. Son utilisation amĂšne cependant gĂ©nĂ©ralement une perte de sĂ»retĂ© Ă  l'exĂ©cution du logiciel et son emploi est souvent complexe. Dans le cadre de cette recherche, nous dĂ©veloppons l'interface native du langage de programmation Ă  objets Nit. Notre recherche vise Ă  rĂ©soudre au mieux les problĂšmes soulevĂ©s par l'utilisation d'une interface native, et ce, par une analyse rigoureuse des diffĂ©rents dĂ©tails de conception d'une interface. Notre intention est donc de concevoir, selon des objectifs prĂ©cis, l'interface native idĂ©ale pour le langage Nit. Pour mettre Ă  l'Ă©preuve notre proposition, nous avons conçu et implĂ©mentĂ© l'interface native du compilateur Nit. La conception de cette interface native s'appuie donc sur des objectifs que nous considĂ©rons garants d'une interface native de qualitĂ©. Ces objectifs consistent Ă  prĂ©server la sĂ»retĂ© d'exĂ©cution du logiciel, maintenir une connaissance du flot d'appels, utiliser le langage Nit de façon expressive et selon ses forces, conserver une syntaxe naturelle en C ainsi qu'offrir une interface native versatile et d'utilisation rapide par tout autre moyen. Pour atteindre ces objectifs, nous proposons quatre grandes approches clĂ©s : la forme des modules hybrides pour gĂ©rer la coexistence de deux langages; une dĂ©claration explicite des appels de mĂ©thodes rĂ©alisĂ©es depuis le langage C pour conserver la connaissance du flot d'appels; une reprĂ©sentation symĂ©trique des types et mĂ©thodes Nit en C pour en permettre une utilisation naturelle et vĂ©rifiĂ©e statiquement; les classes natives qui reprĂ©sentent les types C en Nit et leur appliquent les forces du paradigme de programmation Ă  objets, dont le polymorphisme. Enfin, pour valider l'interface native proposĂ©e et implĂ©mentĂ©e, nous prĂ©sentons comment nous avons utilisĂ© cette interface pour rĂ©aliser des modules et des logiciels Nit. Nous dĂ©montrons Ă©galement que cette interface peut ĂȘtre utilisĂ©e dans le dĂ©veloppement d'autres interfaces spĂ©cialisĂ©es en fonction de besoins spĂ©cifiques.\ud ______________________________________________________________________________ \ud MOTS-CLÉS DE L’AUTEUR : interface native, interface de fonctions Ă©trangĂšres, compilation, langages de programmation Ă  objet

    Preuves par raffinement de programmes avec pointeurs

    Get PDF
    Le but de cette thÚse est de spécifier et prouver des programmes avec pointeurs, tels que des programmes C, en utilisant des techniques de raffinement. L approche proposée permet de faire un compromis entre les techniques complexes qui existent dans la littérature et ce qui est utilisable dans l industrie, en conciliant légÚreté des annotations et restrictions sur les alias. Nous définissons, dans un premier temps, un langage d étude, qui s inspire du langage C, et dans lequel le seul type de données mutable possible est le type des structures, auquel on accÚde uniquement à travers des pointeurs. Afin de structurer nos programmes, nous munissons notre langage d une notion de module et des concepts issus de la théorie du raffinement tels que les variables abstraites que nous formalisons par des champs modÚle, et les invariants de collage. Ceci nous permet d écrire des programmes structurés en composants. L introduction des invariants de données dans notre langage soulÚve des problématiques liées au partage de pointeurs. En effet, en cas d alias, on risque de ne plus pouvoir garantir la validité de l invariant de données d une structure. Nous interdisons, alors l aliasing (le partage de référence) dans notre langage. Pour contrÎler les accÚs à la mémoire, nous définissons un systÚme de type, basé sur la notion de régions. Cette contribution s inspire de la théorie du raffinement et a pour but, de rendre les programmes les plus modulaires possible et leurs preuves les plus automatiques possible. Nous définissons, sur ce langage, un mécanisme de génération d obligations de preuve en proposant un calcul de plus faible précondition incorporant du raffinement. Nous prouvons ensuite, la correction de ce mécanisme de génération d obligations de preuve par une méthode originale, fondée sur la notion de sémantique bloquante, qui s apparente à une preuve de type soundness et qui consiste donc, à prouver la préservation puis le progrÚs de ce calcul. Nous étendons, dans un deuxiÚme temps, notre langage en levant partiellement la restriction liée au partage de références. Nous permettons, notamment, le partage de références lorsqu aucun invariant de données n est associé au type structure référencé. De plus, nous introduisons le type des tableaux, ainsi que les variables globales et l affectation qui ne font pas partie du langage noyau. Pour chacune des extensions citées ci-dessus, nous étendons la définition et la preuve de correction du calcul de plus faible précondition en conséquence. Nous proposons enfin, une implantation de cette approche sous forme d un greffon de Frama-C (http://frama-c.com/). Nous expérimentons notre implantation sur des exemples de modules implantant des structures de données complexes, en particulier des défis issus du challenge VACID0 (http://vacid. codeplex.com/), à savoir les tableaux creux (Sparse Array) et les tas binaires.The purpose of this thesis is to specify and prove programs with pointers, such as C programs, using refinement techniques. The proposed approach allows a compromise between the complexe methods that exist in the literature and what is used in industry, reconciling lightness annotations and restrictions on the alias. We define, firstly, a language study, based on the C language, in which the only type of mutable data allowed is the type of structures, which can be accessed only through pointers. In order to structure our programs, we bring our language with a module notion and concepts issue from a refinement theory such as abstract variables that we formalize by model fields and gluing invariants. This allows us to write programs structured by components. Introducing invariants in our language raises issues related to aliasing. Indeed, in presence of alias, we might not be able to guarantee the validity of the invariant data structure. We forbid then the aliasing in our language. To control memory access, we define a type system based on the concept of regions. This contribution is based on the theory and refinement. It aims to make programs as modular as possible and proofs as automatic as possible. We define on this language, a mechanism for generation of proof obligations by proposing a weakest precondition calculus incorporating refinement. Next we prove the correction of this proof obligations generation mechnaism by an original method based on the concept of blocking semantic, which is similar to a proof of type soundness, and consists therefore, to proove the preservation and the progress of the defined calculus. Secondly, we extend our language by, partially, lifting the restrictions related to aliasing. We allow, in particular, sharing when no invariant is associated to the referenced data structure. In addition, we introduce the type of arrays, global variables, and assignment that are not part of the core language. For each of the extensions mentioned above, we extend the definition and correctness proof of the weakest precondition calculus accordingly. Finally, we propose an implementation of this approach as a Frama-C plugin(http ://frama-c.com/). We experimente our implantation on examples of modules implementing complex data structures, especially the challenges from the challenge VACID0 (http ://vacid. Codeplex.com /), namely sparse srrays and binary heaps.PARIS11-SCD-Bib. électronique (914719901) / SudocSudocFranceF

    Modélisation en UML/OCL des langages de programmation et de leurs propriétés et processus IDM

    Get PDF
    Cette étude est axée sur l'activité de génération de composants logiciels se situant en phase terminale des processus de développement de logiciels dirigés par les modÚles. Dans une premiÚre partie, nous présentons les travaux de recherche déjà existants sur les modÚles et les transformations de modÚles, ainsi que sur la modélisation en UML/OCL des langages de programmation limitée, la plupart du temps, aux aspects syntaxiques. Dans une deuxiÚme partie, nous montrons comment nous modélisons en UML/OCL, les propriétés comportementales et axiomatiques des langages de programmation de style impératif. La modélisation des propriétés comportementales et axiomatiques d'un langage, en UML/OCL enrichi d'un langage d'actions, nous amÚne à montrer comment on peut, à l'aide de triplets de Hoare, vérifier que des segments de modÚles de programmes sont corrects. Les assertions déduites des triplets de Hoare par application des propriétés axiomatiques du langage sont transmises à un Atelier B en vue d'étudier leurs éventuelles validités. Dans une troisiÚme partie, nous montrons comment on peut injecter au niveau du Méta-ModÚle UML des propriétés comportementales et axiomatiques spécifiques à un domaine d'applications particulier. Nous nous sommes limités au fragment du Méta-ModÚle UML définissant les diagrammes d'activité se situant donc en amont des modÚles de codes, avant la génération proprement dite des codes. La cohérence entre les modÚles et les codes peut se vérifier à l'aide de propriétés comportementales et axiomatiques en comparant les modÚles issues des exigences et les modÚles des codes. Ces travaux de recherche ont été financés dans le cadre de l'ANR.Our work focuses on the software component generation phase that takes place at the last phase of a model driven development process. Our work is related to either the modelware or the grammarware because the model driven process can be considered as a successive of model transformations whereas the code generation is a specific transformation from the model to a language grammar. In the first part, we resume some relative works in the domain of the models and of the models transformation; we also present the language modeling in UML which is generally restricted by the syntax modeling. In the second part, we show how we model in UML/OCL the behavioral and axiomatic properties of imperative programming languages. The modeling of the behavioral properties helps to execute the code models if we dispose a right execution environment. In the other hand, the modeling of the axiomatic properties helps to demonstrate the correctness of the code model. In fact, the assertions obtained from the modeling of the axiomatic properties of the language will be transferred to a B atelier in order to have further validation. In the third part, we show how we inject into the UML metamodel the considered domain behavioral and axiomatic properties. We focus on the activity diagram metamodel of the UML which defines the behavior part of a UML model. The coherence between the models and the codes can be then verified in comparing the behavioral and axiomatic properties of the models issued from the requirements and that of the codes. Our work is financed by the ANR research projects

    Typer a de la classe : le polymorphisme ad hoc dans un langage avec des types dépendants et de la métaprogrammation

    Full text link
    La modularitĂ© est un enjeu important en programmation, surtout quand on l’enrichit avec des preuves, comme dans les langages avec des types dĂ©pendants. Typer est un tel langage, et afin d’augmenter sa modularitĂ© et de lui ajouter un moyen de faire la surcharge d’opĂ©rateurs, on s’inspire d’Agda et Coq et on l’étend avec les arguments instances, qui gĂ©nĂ©ralisent les classes de types de Haskell. Un aspect qui distingue notre conception est que comme Typer gĂ©nĂ©ralise les dĂ©finitions, la gĂ©nĂ©ralisation des contraintes de classe est grandement facilitĂ©e. Pour pouvoir faire les preuves de lois de classes, on doit Ă©galement ajouter l’élimination dĂ©pendante des types inductifs au langage, dont certains aspects sont en retour facilitĂ©s par les arguments instances. Sur la base de ces deux fonctionnalitĂ©s, on offre Ă©galement une solution au problĂšme de la cĂ©citĂ© boolĂ©enne, tel que dĂ©crit par Harper.Modularity is an important concern for software development, especially when the latter is enriched with proofs in a language with dependent types. Typer is such a language, and in order to increase its modularity, and also provide a way to overload operators, we take inspiration from Agda and Coq and extend it with instance arguments, a generalization of Haskell’s type classes. An aspect that sets our design apart is that since Typer generalizes definitions, it greatly simplifies the generalization of class constraints. In order to allow writing proofs for class laws, we must also implement the dependent elimination of inductive types. In return, instance arguments facilitate some details of dependent elimination. Using both features, we suggest a solution to the problem of Boolean Blindness

    ModÚles, outils et plate-forme d'exécution pour les applications à service dynamiques

    Get PDF
    L'essor de l'Internet et l'Ă©volution des dispositifs communicants ont permis l'intĂ©gration du monde informatique et du monde rĂ©el, ouvrant ainsi la voie Ă  de nouveaux types d'applications, tels que les applications ubiquitaires et pervasives. Ces applications doivent s'exĂ©cuter dans des contextes hĂ©tĂ©rogĂšnes, distribuĂ©s et ouverts qui sont en constante Ă©volution. Dans de tels contextes, la disponibilitĂ© des services et des dispositifs, les prĂ©fĂ©rences et la localisation des utilisateurs peuvent varier Ă  tout moment pendant l'exĂ©cution des applications. La variabilitĂ© des contextes d'exĂ©cution fait que l'exĂ©cution d'une application dĂ©pend, par exemple, des services disponibles ou des dispositifs accessibles Ă  l'exĂ©cution. En consĂ©quence, l'architecture d'une telle application ne peut pas ĂȘtre connue statiquement Ă  la conception, au dĂ©veloppement ou au dĂ©ploiement, ce qui impose de redĂ©finir ce qu'est une application dynamique : comment la concevoir, la dĂ©velopper, l'exĂ©cuter et la gĂ©rer Ă  l'exĂ©cution. Dans cette thĂšse, nous proposons une approche dirigĂ©e par les modĂšles pour la conception, le dĂ©veloppement et l'exĂ©cution d'applications dynamiques. Pour cela, nous avons dĂ©fini un modĂšle de composants Ă  services permettant d'introduire des propriĂ©tĂ©s de dynamisme au sein d'un modĂšle de composants. Ce modĂšle permet de dĂ©finir une application en intention, via un ensemble de propriĂ©tĂ©s, de contraintes et de prĂ©fĂ©rences de composition. Une application est ainsi spĂ©cifiĂ©e de façon abstraite ce qui permet de contrĂŽler la composition graduelle de l'application lors de son dĂ©veloppement et de son exĂ©cution. Notre approche vise Ă  effacer la frontiĂšre entre les activitĂ©s effectuĂ©es avant et pendant l'exĂ©cution des applications. Pour ce faire, le mĂȘme modĂšle et les mĂȘmes mĂ©canismes de composition sont utilisĂ©s de la conception jusqu'Ă  l'exĂ©cution des applications. A l'exĂ©cution, le processus de composition considĂšre, en plus, les services disponibles dans la plate-forme d'exĂ©cution permettant la composition opportuniste des applications ; ainsi que la variabilitĂ© du contexte d'exĂ©cution permettant l'adaptation dynamique des compositions. Nous avons mis en Ɠuvre notre approche via un prototype nommĂ© COMPASS, qui s'appuie sur les plates-formes CADSE pour la rĂ©alisation d'environnements logiciels de conception et de dĂ©veloppement, et APAM pour la rĂ©alisation d'un environnement d'exĂ©cution d'applications Ă  services dynamiques.The growth of the Internet and the evolution of communicating devices have allow the integration of the computer world and the real world, paving the way for developing new types of applications such as pervasive and ubiquitous ones. These applications must run in heterogeneous, distributed and open environments that evolve constantly. In such environments, the availability of services and devices, the preferences and location of users may change at any time during the execution of applications. The variability of the execution context makes the execution of an application dependent on the available services and devices. Building applications capable of evolving dynamically to their execution context is a challenging task. In fact, the architecture of such an application cannot be fully known nor statically specified at design, development or deployment times. It is then needed to redefine the concept of dynamic application in order to cover the design, development, execution and management phases, and to enable thus the dynamic construction and evolution of applications. In this dissertation, we propose a model-driven approach for the design, development and execution of dynamic applications. We defined a component service model that considers dynamic properties within a component model. This model allows defining an application by its intention (its goal) through a set of composition properties, constraints and preferences. An application is thus specified in an abstract way, which allows controlling its gradual composition during development and execution times. Our approach aims to blur the boundary between development-time and runtime. Thus, the same model and the same composition mechanisms are used from design to runtime. At runtime, the composition process considers also the services available in the execution platform in order to compose applications opportunistically; and the variability of the execution context in order to adapt compositions dynamically. We implemented our approach through a prototype named COMPASS, which relies on the CADSE platform for building software design and development environments, and on the APAM platform for building an execution environment for dynamic service-based applications.SAVOIE-SCD - Bib.Ă©lectronique (730659901) / SudocGRENOBLE1/INP-Bib.Ă©lectronique (384210012) / SudocGRENOBLE2/3-Bib.Ă©lectronique (384219901) / SudocSudocFranceF

    Du génie logiciel pour déployer, gérer et reconfigurer les logiciels

    Get PDF
    As a discipline, software engineering embraces various schools of thought, yet remains consistent with respect to its objective. It aims at providing means for effective and inexpensive production of software by contributing mathematical frameworks, methods and tools. Consequently, we witness some automation in software production process that, as of today, allows producing astronomical amounts of lines of code daily. This rapidly and massively produced software is required for all computer equipment that has invaded our daily life in various forms of other devices (PC, tablet, phone, refrigerator, car, etc.). In this world of large software consumption, it is somewhat surprising that the management of software, after its production, remains dominated by manual practices like searching in lists, downloading units and manual installations. In this context, I organized my research activities such that they aim at providing mathematical frameworks, methods and tools to deploy, distribute or update massive amounts of software since 2001, the year of my PhD defense. These research activities were mainly conducted in Brest at the CS department of Telecom Bretagne as part of the PASS team of IRISA. This document puts into perspective my various scientific contributions, undertaken projects, endeavors in training research students and efforts invested as a teacher. My scientific contributions can be divided into five parts: mathematical models and algorithms for dependency management in software deployment; software component models; processes and tools for massive software deployment; dynamic update of programs at runtime; languages for the design and implementation of software development processes. All these works complement each other, thus making it possible to imagine the proposition of methods and tools for large-scale software deployment.Le gĂ©nie logiciel est une discipline constituĂ©e de nombreux courants mais cohĂ©rente par l'objectif affichĂ©. Il s'agit d'aider Ă  la production, de maniĂšre efficace et peu coĂ»teuse, de logiciels en offrant des cadres mathĂ©matiques, des mĂ©thodes et des outils. Ainsi, on a pu assister Ă  une certaine industrialisation du processus de production de logiciel qui permet aujourd'hui de produire, chaque jour, des quantitĂ©s astronomiques de logiciel. Ce logiciel produit rapidement et en grande quantitĂ© est nĂ©cessaire pour tous les Ă©quipements informatiques qui ont envahi notre quotidien (ordinateur, tablette, tĂ©lĂ©phone, rĂ©frigĂ©rateur, voiture, ...). Dans ce monde de grande consommation du logiciel, il est cependant surprenant de constater que la gestion des logiciels aprĂšs leur production est restĂ© dominĂ© par des pratiques manuelles de recherche dans des listes, de tĂ©lĂ©chargement unitaire et d'installation manuelle. C'est dans ce cadre que j'ai dĂ©veloppĂ© une activitĂ© de recherche visant Ă  fournir des cadres mathĂ©matiques, des mĂ©thodes et des outils pour dĂ©ployer, diffuser ou mettre Ă  jour massivement les logiciels depuis 2001 annĂ©e de ma soutenance de thĂšse. Ces activitĂ©s de recherche ont Ă©tĂ© conduites principalement Ă  Brest au sein du dĂ©partement informatique de TĂ©lĂ©com Bretagne dans le cadre de l'Ă©quipe PASS de l'IRISA. Mon Habilitation Ă  Diriger des Recherches est l'occasion de remettre en perspective mes diffĂ©rentes contributions scientifiques, les Ă©tudiants formĂ©s Ă  la recherche, les projets rĂ©alisĂ©s ainsi que mon investissement en tant qu'enseignant. Les contributions scientifiques peuvent ĂȘtre classĂ©es en cinq parties : - des modĂšles mathĂ©matiques et les algorithmes associĂ©s pour la gestion des dĂ©pendances de logiciels lors de leur dĂ©ploiement ; - les modĂšles de composants logiciels ; - les processus et outils pour le dĂ©ploiement de logiciel massif ; - la mise Ă  jour de programmes sans interrompre leur exĂ©cution ; - des langages pour la conception et la rĂ©alisation de processus de dĂ©veloppement logiciel. Tous ces travaux qui se nourrissent et se complĂštent permettent d'imaginer la proposition de mĂ©thodes et outils pour passer Ă  l'Ă©chelle dans la gestion du dĂ©ploiement des logiciels

    DĂ©veloppement logiciel par transformation de modĂšles

    Get PDF
    La recherche en gĂ©nie logiciel a depuis longtemps tentĂ© de mieux comprendre le processus de dĂ©veloppement logiciel, minimalement, pour en reproduire les bonnes pratiques, et idĂ©alement, pour pouvoir le mĂ©caniser. On peut identifier deux approches majeures pour caractĂ©riser le processus. La premiĂšre approche, dite transformationnelle, perçoit le processus comme une sĂ©quence de transformations prĂ©servant certaines propriĂ©tĂ©s des donnĂ©es Ă  l’entrĂ©e. Cette idĂ©e a Ă©tĂ© rĂ©cemment reprise par l’architecture dirigĂ©e par les modĂšles de l’OMG. La deuxiĂšme approche consiste Ă  rĂ©pertorier et Ă  codifier des solutions Ă©prouvĂ©es Ă  des problĂšmes rĂ©currents. Les recherches sur les styles architecturaux, les patrons de conception, ou les cadres d’applications s’inscrivent dans cette approche. Notre travail de recherche reconnaĂźt la complĂ©mentaritĂ© des deux approches, notamment pour l’étape de conception: dans le cadre du dĂ©veloppement dirigĂ© par les modĂšles, nous percevons l’étape de conception comme l’application de patrons de solutions aux modĂšles reçus en entrĂ©e. Il est coutume de dĂ©finir l’étape de conception en termes de conception architecturale, et conception dĂ©taillĂ©e. La conception architecturale se prĂ©occupe d’organiser un logiciel en composants rĂ©pondant Ă  un ensemble d’exigences non-fonctionnelles, alors que la conception dĂ©taillĂ©e se prĂ©occupe, en quelque sorte, du contenu de ces composants. La conception architecturale s’appuie sur des styles architecturaux qui sont des principes d’organisation permettant d’optimiser certaines qualitĂ©s, alors que la conception dĂ©taillĂ©e s’appuie sur des patrons de conception pour attribuer les responsabilitĂ©s aux classes. Les styles architecturaux et les patrons de conception sont des artefacts qui codifient des solutions Ă©prouvĂ©es Ă  des problĂšmes rĂ©currents de conception. Alors que ces artefacts sont bien documentĂ©s, la dĂ©cision de les appliquer reste essentiellement manuelle. De plus, les outils proposĂ©s n’offrent pas un support adĂ©quat pour les appliquer Ă  des modĂšles existants. Dans cette thĂšse, nous nous attaquons Ă  la conception dĂ©taillĂ©e, et plus particuliĂšrement, Ă  la transformation de modĂšles par application de patrons de conception, en partie parce que les patrons de conception sont moins complexes, et en partie parce que l’implĂ©mentation des styles architecturaux passe souvent par les patrons de conception. Ainsi, nous proposons une approche pour reprĂ©senter et appliquer les patrons de conception. Notre approche se base sur la reprĂ©sentation explicite des problĂšmes rĂ©solus par ces patrons. En effet, la reprĂ©sentation explicite du problĂšme rĂ©solu par un patron permet : (1) de mieux comprendre le patron, (2) de reconnaĂźtre l’opportunitĂ© d’appliquer le patron en dĂ©tectant une instance de la reprĂ©sentation du problĂšme dans les modĂšles du systĂšme considĂ©rĂ©, et (3) d’automatiser l’application du patron en la reprĂ©sentant, de façon dĂ©clarative, par une transformation d’une instance du problĂšme en une instance de la solution. Pour vĂ©rifier et valider notre approche, nous l’avons utilisĂ©e pour reprĂ©senter et appliquer diffĂ©rents patrons de conception et nous avons effectuĂ© des tests pratiques sur des modĂšles gĂ©nĂ©rĂ©s Ă  partir de logiciels libres.Software engineering researchers have long tried to understand the software process development to mechanize it or at least to codify its good practices. We identify two major approaches to characterize the process. The first approach—known as transformational—sees the process as a sequence of property-preserving transformations. This idea was recently adopted by the OMG’s model-driven architecture (MDA). The second approach consists in identifying and codifying proven solutions to recurring problems. Research on architectural styles, frameworks and design patterns are part of this approach. Our research recognizes the complementarity of these two approaches, in particular in the design step. Indeed within the model-driven development context, we view software design as the process of applying codified solution patterns to input models. Software design is typically defined in terms of architectural design and detailed design. Architectural design aims at organizing the software in modules or components that meet a set of non-functional requirements while detailed design is—in some way—concerned by the contents of the identified components. Architectural design relies on architectural styles which are principles of organization to optimize certain quality requirements, whereas detailed design relies on design patterns to assign responsibilities to classes. Both architectural styles and design patterns are design artifacts that encode proven solutions to recurring design problems. While these design artifacts are documented, the decision to apply them remains essentially manual. Besides, once a decision has been made to use a design artifact, there is no adequate support to apply it to existing models. As design patterns present an ‘‘easier’’ problem to solve, and because architectural styles implementation relies on design patterns, our strategy for addressing these issues was to try to solve the problem for design patterns first, and then tackle architectural styles. Hence, in this thesis, we propose an approach for representing and applying design patterns. Our approach is based on an explicit representation of the problems solved by design patterns. Indeed, and explicit representation of the problem solved by a pattern enables to: 1) better understand the pattern, 2) recognize the opportunity of applying the pattern by matching the representation of the problem against the models of the considered system, and 3) specify declaratively the application of the pattern as a transformation of an instance of the problem into an instance of the solution. To verify and validate the proposed approach, we used it to represent and apply several design patterns. We also conducted practical tests on models generated from open source systems

    Approche de métamodélisation pour la simulation et la vérification de modÚle. Application à l'ingénierie des procédés

    Get PDF
    Nous proposons dans cette thĂšse une dĂ©marche permettant de dĂ©crire un DSML (Domain Specific Modeling Language) et les outils nĂ©cessaires Ă  l'exĂ©cution, la vĂ©rification et la validation des modĂšles. La dĂ©marche que nous proposons offre une architecture gĂ©nĂ©rique de la syntaxe abstraite du DSML pour capturer les informations nĂ©cessaires Ă  l'exĂ©cution d'un modĂšle et dĂ©finir les propriĂ©tĂ©s temporelles qui doivent ĂȘtre vĂ©rifiĂ©es. Nous nous appuyons sur cette architecture pour expliciter la sĂ©mantique de rĂ©fĂ©rence et l'implanter. Plus particuliĂšrement, nous Ă©tudions les moyens : – d'exprimer et de valider la dĂ©finition d'une traduction vers un domaine formel dans le but de rĂ©utiliser des outils de model-checking. – de complĂ©ter la syntaxe abstraite par le comportement ; et profiter d'outils gĂ©nĂ©riques pour pouvoir simuler les modĂšles construits. Enfin, de maniĂšre Ă  valider les diffĂ©rentes sĂ©mantiques implantĂ©es vis-Ă -vis de la sĂ©mantique de rĂ©fĂ©rence, nous proposons un cadre formel de mĂ©tamodĂ©lisation. ABSTRACT : We propose in this thesis a specific taxonomy of the mechanisms allowing to express an execution semantics for Domain Specific Modeling Languages (DSMLs). Then, we integrate these different mechanisms within a comprehensive approach describing DSMLs and tools required for model execution, verification and validation. The proposed approach provides a rigorous and generic architecture for DSML abstract syntax in order to capture the information required for model execution. We rely on this generic architecture to make the reference semantics explicit and implement it. More specifically, we study the means : – to express and validate the definition of a translation into a formal domain in order to re-use model-checking techniques. – to enrich the abstract syntax with the definition of the DSML behaviour and take advantage of generic tools so to simulate the built models. Finally, for the purpose of validating the equivalence of different semantics implemented according to the reference semantics, we also propose a formal metamodeling framewor
    corecore