Le travail que nous prรฉsentons dans cette thรจse a รฉtรฉ รฉlaborรฉ au niveau de lโรฉquipe SAFA du laboratoire dโingรฉnierie des systรจmes complexes (LISCO) de lโuniversitรฉ de Badji-Mokhtar dโAnnaba. Lโรฉquipe SAFA (Software Architecture and Formal Approaches) sโactive autour des thรจmes liรฉs ร lโingรฉnierie du logiciel. Son activitรฉ de recherche se concentre actuellement sur les nouveaux paradigmes de gรฉnie logiciel, et plus particuliรจrement les paradigmes dโarchitectures logicielles et les approches formelles.
Lโarchitecture logicielle comme nouvelle discipline du gรฉnie logicielle, dรฉcrit de maniรจre abstraite les systรจmes ร lโaide de composants logiciels, les relations entre ces composants, leurs propriรฉtรฉs fonctionnelles et non fonctionnelles ainsi que les principes qui rรฉgissent leur conception et leur รฉvolution [IEE 00]. Afin de maitriser le processus de dรฉveloppement de logiciels basรฉs architectures, un langage de spรฉcification est nรฉcessaire. Les langages de description dโarchitectures (ADLs) rรฉpondent ร ce besoin, et fournissent une reprรฉsentation abstraite des รฉlรฉments de base constituant un systรจme complexe, en rรฉduisant le coรปt de dรฉtection et de correction dโerreurs [Med 02]. Ces langages sont formels et peuvent dรฉcrire lโarchitecture dโun systรจme assez complexe [Cle 96]. Un ADL garanti un niveau รฉlevรฉ dโabstraction, ignorant ainsi les dรฉtails dโimplรฉmentation [Med 00]. Grรขce ร cette description abstraite, les ADLs aident les dรฉveloppeurs, en facilitant le contrรดle du processus de dรฉveloppement ร un stade avancรฉ [Hus 13]. Les ADLs sont donc cruciaux dans le dรฉveloppement logiciel particuliรจrement ceux basรฉs architecture. Chaque ADL a ses caractรฉristiques, certains ADLs ont รฉtรฉ proposรฉ pour la modรฉlisation dโarchitectures dans un domaine bien prรฉcis, dโautres sont plus spรฉcialisรฉs. Voici une liste non exhaustive dโADLs prรฉsents dans la littรฉrature : LIEANNA [Tra 93], Artek [Ter 95], MetaH [Bin 96], Aesop [Sha 96], SADL [Mor 97] ; [Mor 95), Weaves [Gor 94] ; [Gor91], Wright [All 97], AESOP [Gar 95], Darwin [Mag 95], Acme [Gar 00], Rapide [Luc 95], UNICON [Sha 95] and C2 [Tay 96].
Les applications des ADLs sont trรจs diverses, cโest pourquoi beaucoup dโADLs sont dรฉveloppรฉs. La liste est si importante quโil est fastidieux de discuter en dรฉtail chaque ADL avec son รฉvaluation. Dans [Hus 13], Sajjad organise ces dรฉtailles, en regroupant les secteurs industriel et universitaire.
Prรฉsentation des contributions
Bien que certains ADLs supportent les reconfigurations dynamiques ร des niveaux variables, le problรจme de la fiabilitรฉ de ces reconfigurations nโest pas rรฉellement abordรฉ comme un objectif ร part entiรจre. En effet cet aspect est peu dรฉtaillรฉ, et il manque clairement un mรฉcanisme robuste pour lโรฉvaluation des systรจmes. La programmation par composants, associรฉe ร des outils et des langages dรฉdiรฉs, comme les langages de description dโarchitecture, est un bon support pour les reconfigurations dynamiques dโarchitecture. Grรขce ร la rรฉflexion, les modรจles de composants permettent lโintrospection et les modifications dans les systรจmes ร lโexรฉcution, tout en maintenant une connexion causale entre architecture et systรจme concret. Modifier dynamiquement un systรจme ร travers son architecture nโest pas sans poser des problรจmes de fiabilitรฉ, et qui demeure une prรฉoccupation importante du gรฉnie logiciel. En gรฉnรฉral, la plupart des modรจles de composants ne dรฉfinissent pas les besoins et les rรจgles ร respecter pour que les applications basรฉes sur ces modรจles puissent รฉvoluer et sโadapter dynamiquement au cours de leur exรฉcution [Ket 04].
La fiabilitรฉ des reconfigurations dynamiques est un problรจme global qui requiert une dรฉmarche rigoureuse, dont le point de dรฉpart serait de dรฉfinir le concept de cohรฉrence dans une architecture, essentiellement dโun point de vue structurel. La cohรฉrence dโune architecture est ensuite conditionnรฉe par la satisfaction dโun ensemble de contraintes exprimรฉes dans une certaine logique. Les contraintes doivent รชtre extensibles, afin de permettre dโexprimer les invariants aux niveaux des configurations, et de couvrir le cotรฉ sรฉmantique des opรฉrations de reconfiguration. La cohรฉrence doit รชtre maintenue mรชme dans le systรจme reconfigurรฉ. Il est aussi important de vรฉrifier les contraintes avant de valider les modifications des reconfigurations.
Ce travail [Mez 18], permet de formaliser une configuration dโarchitecture (figure 1.1). Dans cet objectif, nous dรฉcrivons les contraintes en logique des prรฉdicats du premier ordre, que nous traduisons ensuite en utilisant un style architectural Acme/Armani dรฉtaillรฉ dans [Mon 01] afin de valider la configuration statique. En ce qui concerne lโaspect dynamique, il est validรฉ par un autre processus, oรน les contraintes sontย ย en Plastik et le systรจme validรฉ dans le modรจle OpenCom. Etant donnรฉ lโinfluence de lโarchitecture dโun systรจme sur lโensemble des attributs de qualitรฉ dโun systรจme logiciel, il devient pertinent de dรฉvelopper un support pour la qualitรฉ logicielle dรฉs le niveau architectural. En effet, ce travail reprรฉsente le niveau de base qui inclut : le style architectural, les composants, les connecteurs et les contraintes de configuration. En prรฉservant la conformitรฉ de la couche architecturale ร la couche application, et en assurant la consistance, une spรฉcification formelle dโun modรจle Acme peut servir ร plusieurs fins :
โ Permettre une vรฉrification formelle dโune conception Acme ;
โ Fournir la base dโun langage de description dโarchitecture formelle pour Acme ;
โ Fournir une spรฉcification plus abstraite et indรฉpendante du langage de programmation pour le modรจle Acme ;
โ Permettre une comparaison rigoureuse avec les autres modรจles de composants ;
โ Permettre une spรฉcification formelle et une vรฉrification des outils Acme ;
Programmation par composants
La programmation par composant est un paradigme de dรฉveloppement pour la conception et lโimplรฉmentation de systรจmes logiciels et qui ressort de lโincapacitรฉ de lโapproche orientรฉ objet ร soutenir une rรฉutilisation efficace [Jai 16]. Les composants sont plus abstraits que les classes dโobjets et peuvent รชtre considรฉrรฉs comme des fournisseurs de services autonomes. La composition doit รชtre conforme aux rรจgles de construction des architectures, et se fait grรขce aux langages de description des architectures. En ce qui concerne les contraintes, elles sont gรฉrรฉes par des styles architecturaux. Avec la croissance de la taille et de la complexitรฉ du logiciel, lโapproche traditionnelle qui correspond ร la construction ร partir de zรฉro, devient de plus en plus inefficace en termes de productivitรฉ et de coรปt. Afin de rรฉpondre aux exigences de qualitรฉ, et des logiciels modernes ร grande รฉchelle, diffรฉrents paradigmes de dรฉveloppement ont รฉtรฉ introduits dans le but de faciliter la crรฉation de systรจmes รฉvolutifs, flexibles, fiables et rรฉutilisables.
La programmation par objets a รฉmergรฉ depuis une vingtaine dโannรฉe [Coi 06] et sโest ainsi imposรฉe comme รฉvolution majeure par rapport ร la programmation procรฉdurale. Le paradigme objet apporte en effet de bonnes propriรฉtรฉs, telles quโun niveau dโabstraction plus รฉlevรฉ (concepts de classes et dโinstances), etc. Cependant, lโobjet nโest pas suffisamment abstrait et reste ร un niveau de granularitรฉ trop fin pour maitriser aisรฉment la structuration des systรจmes complexes, structuration indispensable ร leur maintenance et ร leur รฉvolution. Les lacunes de lโapproche objet ont menรฉ ร la crรฉation dโun nouveau paradigme de programmation : le composant. Le paradigme composant est une approche appropriรฉe et mรฉthodique, qui implique la construction dโun systรจme en utilisant des briques de bases qui ont รฉtรฉ dรฉveloppรฉs ร diffรฉrents moments, par diffรฉrentes personnes, et probablement en ayant ร lโesprit diffรฉrents concepts et utilisations [Sha 12]. Afin de pouvoir dรฉcouvrir les diffรฉrents composants, leurs maniรจres de communiquer et de construire dynamiquement lโassemblage, un environnement de composants fournit toujours un mรฉcanisme dโintrospection et un mรฉcanisme dโinvocation dynamique (le rรฉfรฉrentiel des interfaces et le DII (Dynamic Invocation Interface) de CORBA [Gei 00], lโAPI java.lang.reflect du langage Java [Bel 99][Bel 98], les interfaces IUnknown et IDispatch dans COM). Lโintrospection permet de dรฉcouvrir ร lโexรฉcution les interfaces dโun composant. En Java, lโintrospection permet aussi de dรฉcouvrir la structure interne des composants (les attributs). Depuis JDK version 1.1, la sรฉrialisation des objets Java met en ลuvre ce mรฉcanisme dโintrospection de maniรจre automatique afin de permettre de rendre un objet ou un graphe dโobjets de la JVM persistant pour stockage ou รฉchange. Lโinvocation dynamique permet de construire dynamiquement des requรชtes sur les composants. Lโassociation de ces deux mรฉcanismes permet de construire des outils dโinteraction sur les composants pour configurer/reconfigurer un assemblage de composants.
Modรจles de composants
Le concept de composant logiciel est relativement ancien [Mcl 68]. Il est dรฉcrit comme une brique logicielle composable et facilement rรฉutilisable, dโoรน lโappellation de composant sur lโรฉtagรจre (Composant On The Shell ou COTS). Cependant, il nโexiste pas de dรฉfinition universelle dโune description dโarchitecture ร composant. Selon Szyperski [Szy 98], un composant ยซ est une unitรฉ de composition dont les interfaces et les dรฉpendances contextuelles sont spรฉcifiรฉes sous forme de contrats explicites ยป. Il peut รชtre ยซ dรฉployรฉ indรฉpendamment et est composable par des tiersย ยป. Selon Heieneman et Council [Cou 01]. Un composant logiciel est un รฉlรฉment conforme ร un modรจle de composition, pouvant รชtre indรฉpendamment dรฉployรฉ et composรฉ. Le modรจle de composition dรฉfinit les standards de spรฉcification et dโinteraction. Lโimplรฉmentation du modรจle reprรฉsente un ensemble dโoutils logiciels supportant lโexรฉcution des composants conformes au modรจle. En comparaison aux objets, et de part la nature des encapsulations fortes dans le composant (boite noire), les composants offrent une plus grande modularitรฉ et facilitรฉ de rรฉutilisation, ainsi quโune meilleure indรฉpendance entre les briques logicielles, reprรฉsentant clairement les dรฉpendances requises et fournies. La sรฉparation des prรฉoccupations (separation of concerns) est une approche de conception qui consiste ร distinguer les prรฉoccupations fonctionnelles et extra-fonctionnelles dans un systรจme afin dโisoler des aspects indรฉpendants ou faiblement couplรฉs. Elle reprรฉsente un point fort de la programmation par composants [Dij 82]. Le cycle de vie du logiciel est dรฉcomposรฉ en plusieurs phases : De la conception de lโarchitecture, au dรฉveloppement du code mรฉtier des composants, suivi de leur dรฉploiement et finalement de leur exรฉcution. Lโarchitecture dโune application, quant ร elle, est composรฉe de la dรฉfinition des diffรฉrentes instances des diffรฉrents composants utilisรฉs et de la spรฉcification de leurs interconnexions, cโest-ร -dire les dรฉpendances entre les services requis et fournis, ainsi que les schรฉmas de communication utilisรฉs lors de lโexรฉcution [Riv 00]. Cette dรฉmarche repose sur des techniques dโinjection de dรฉpendances dans le code dโimplรฉmentation. Elle offre certains avantages, entre autre, le dรฉveloppeur peut se concentrer sur un problรจme ร la fois. Les besoins et les contraintes de chaque aspect รฉvoluent de maniรจre autonome, grรขce ร la suppression des interactions entre aspects orthogonaux. En fonction du milieu, la dรฉfinition dโun composant peut varier. En effet, dans le milieu acadรฉmique, un composant est vu comme รฉtant une entitรฉ bien dรฉfinie, souvent petite avec des propriรฉtรฉs fonctionnelles et non-fonctionnelles. Dans lโindustrie par contre, un composant est considรฉrรฉ comme une partie rรฉutilisable du systรจme, mais que celle-lร nโest pas nรฉcessairement bien dรฉfinie dans ses interfaces et sa conformitรฉ ร un modรจle de composant.
|
Table des matiรจres
1 Introduction
1.1 Contexte et problรฉmatique
1.2 Prรฉsentation des contributions
1.3 Organisation du document
I Etat de lโart
2 Concepts et technologies associรฉs au sujet
2.1 Programmation par composants
2.1.1 Modรจles de composants
2.1.2 Elรฉments dโarchitecture
2.1.3 รtude de quelques modรจles de composants
2.1.3.1 Le modรจle JavaBeans
2.1.3.2 Le modรจle Entreprise JavaBeans
2.1.3.3 Le modรจle COM
2.2 Langages de description dโarchitectures et styles architecturaux
2.2.1 Les langages de description dโarchitectures
2.2.2 Contraintes et styles architecturaux
2.3 Dynamicitรฉ des architectures logicielles
2.3.1 Rรฉflexion et architectures rรฉflexives
2.3.1.1 Systรจmes rรฉflexifs
2.3.1.2 Langages rรฉflexifs
2.3.1.3 Architectures rรฉflexives
2.3.2 Reconfiguration dynamique
2.4 Conclusion
3 Fiabilitรฉ des architectures logicielles reconfigurables
3.1 Critรจres de sรฉlection des travaux
3.2 Plateformes construisant un modรจle dโarchitecture
3.2.1 ฯ-ADL
3.2.2 C2SADL
3.2.3 Dynamic Wright
3.2.4 Acme/Plastik
3.3 Synthรจse des ADL รฉtudiรฉs
3.4 Conclusion
II Contribution
4 Modรฉlisation des configurations Acme
4.1 LโADL Acme
4.1.1 Cลur du modรจle Acme
4.1.2 Implรฉmentations et outils associรฉs au modรจle
4.2 Processus de vรฉrification de la cohรฉrence
4.3 Spรฉcification du modรจle Acme
4.3.1 Un mรฉta-modรจle pour Acme
4.4 Spรฉcification du modรจle par des contraintes dโintรฉgritรฉ
4.5 Traduction de formalisme Armani
4.5.1 Elements architecturaux
4.5.2 Contraintes
4.6 Test et validation
4.6.1 Dรฉclaration des exigences pour lโexemple systรจme ATM
4.6.2 Diagramme de modรฉlisation de lโATM
4.6.2.1 Diagramme de composant
4.6.2.2 Interfaces de lโATM
4.6.3 Formalisation dโun ATM en Acme/Armani
4.6.4 Rรจgles de cohรฉrence et vรฉrification du modรจle
4.7 Conclusion
5 Spรฉcification des reconfigurations dynamiques
5.1 Gestion des reconfigurations dynamiques par les ADLs
5.1.1 Aspects clรฉs des reconfigurations dynamiques
5.1.2 Contraintes dโintรฉgritรฉ spรฉcifiques ร la reconfiguration
5.2 Analyse des opรฉrations de reconfiguration dans Acme /Plastik
5.2.1 Spรฉcification des opรฉrations primitives
5.2.2 Traduction des conditions et contraintes
5.2.3 Lโinfrastructure dโexรฉcution
5.3 Plate-forme dโexรฉcution
5.3.1 Principales structures de donnรฉes
5.3.2 Principe
5.4 Conclusion
6 Conclusion et Perspectives
6.1 Synthรจse et bilan des contributions
6.2 Perspectives
Bibliographie