Administration basée MDE de composants logiciels
Transcription
Administration basée MDE de composants logiciels
Administration basée MDE de composants logiciels Franck Barbier Université de Pau et des Pays de l’Adour PauWare Research Group 1 Administration L’administration ou management concerne l’observation (supervision) et le contrôle (monitoring) d’« entités » Son développement principal est le monde des réseaux : norme GDMO (Guidelines for the Definition of Managed Objects), protocoles spécialisés (CMIP, SNMP…) L’approche objet puis l’approche composant/middleware autorise maintenant des approches canoniques illustrées par des technologies comme JMX (Java Management eXtensions) et son concept associé de MBean ou Managed Bean 2 Administration de logiciel L’administration de composants logiciels vise à « instrumenter » ces derniers pour gérer leurs fautes, les (re)-configurer dynamiquement si besoin et plus généralement les visualiser et mieux les comprendre L’activité d’administration en développement touche ainsi l’évaluation en général, le test et la prédiction de comportement des composants individuellement, ainsi que ceux des assemblages En déploiement, elle offre un véritable cadre de pilotage associée notamment à de technologies comme BIT (Built-In Test). Son coût peut cependant être dans certains cas prohibitif ! 3 Idées d’application Mise au point plus fine de programmes en condition de déploiement : code tracing/tracking… (ex. comportement de décodeurs MPEG en mode streaming, société Philips Semiconductors) Maintenance en ligne et à distance de composants et services distribués avec ou sans fil (cf. enquête Nouvel Observateur, société Nova, « 20% versus 5% ») Diagnostic en QoS : détection de goulots d’étranglement, équilibrage de charge (middleware…) 4 Le MDE dans tout cela ? Offrir une infrastructure d’administration ne donne pas les techniques effectives qui vont permettre de réaliser cette administration. Idée : rendre les composants logiciels intelligibles en les calquant sur les modèles mais aussi rendre ces modèles persistants à l’exécution (développement et/ou déploiement) -> exécutabilité Parallèle avec le model checking : Pas de vérification a priori tel que classiquement fait avec les méthodes formelles ou des méthodologies comme Neptune pour UML L’interface d’administration (voir démo. ci-après) rend les modèles tangibles, vivants… La vérification reste intuitive et expérimentale mais support pour génération de scénarii de test avec niveau de couverture de la vérification lié à l’utilisateur… 5 Environnement retenu Cible : UML State Machine Diagrams (version augmentée et « sûre ») UML Sequence Diagrams (version épurée de alt, opt… notamment) Technique de modélisation/implémentation : 1 composant logiciel <-> 1 statechart Assemblages décrits par scénarii Outils : Librairie Java PauWare.Statecharts (moteur Statecharts) avec mode BIT optionnel (sous-librairie) et support : JMX simple, EJB/RMI et EJB/JMS (Java Message Service) Extension PauWare.Velcro (systèmes mobiles et sans fil) avec support WMA (Wireless Message API) mais problème de réflexion Java résiduel 6 Eléments techniques, UML Sequence Diagrams (1/2) Scenario example c:Client s1:Server p:Proxy a given phenomenon(x) s2:Server t:Timer to be set(1ms) tell it: do this in less than 1ms do this in less than 1ms notify done time-out(1ms) done context Scenario inv: -- a scenario invariant let p = (Scenario.allInstances->select(name = “Scenario example”)).componentRole->select(symbolic name = “p”) in p->notEmpty() implies p = x.something -- something is a navigation in a UML Class Diagram from the type of the x parameter to the Proxy type Réf. bibliographiques (parmi d’autres) : T. Ziadi, L. Hélouët and J.-M. Jézéquel, Revisiting Statecharts Synthesis with an Algebraic Approach, ICSE’2004 F. Barbier and O. Constant, Executable Component-Based Scenarios, ICSE’2005/"Scenarios and State Machines: Models, Algorithmes and Tools" workshop 7 Eléments techniques, UML Sequence Diagrams (2/2) Scenario name : String invariant [0..*] : BooleanLiteralExp 1 Prescriptive sequence 1..* m3 m2 1..* symbolic name 1 2..* all {subsets all} ComponentRole m4 c->p: tell it: do this in less than 1ms 1..* 0..1 symbolic name : String p->s1: do this in less than 1ms 1 sender 1 receiver {ordered} s1->p: done m6 m1 m5 m7 p->s2: notify Message pre-condition [0..*] : BooleanLiteralExp post-condition [0..*] : BooleanLiteralExp ->c: a given phenomenon(x) c->t: to be set(1ms) m8 p->c: done t->c: time-out(1ms) 8 Eléments techniques, UML State Machine Diagrams (1/2) Mode d’exécution des modèles run-to-completion : Gestion de la réentrance (ex. : un composant s’envoie un message à lui-même, états concurrents) : cycle ininterruptible avec nécessité de prise en compte du message Compatibilité avec modèles de composants technologiques (ex. gestion des transactions en EJB), compatibilité avec Fractal ? Formalisation directe et intuitive de la configuration : public void reset() {to_state("Operate");} Broadcast et multicast supportés Partie systèmes mobiles et sans fil : approche par cache (réplication) du composant logiciel (i.e., automate) sur le tiers « management » : communication intensive entre composant embarqué et composant image, simulation possible de services locaux (e.g., timer event services)9 Eléments techniques, UML State Machine Diagrams (2/2) Programmable thermostat Operate Setup time-out(1000,null)/ set time(+ 1) time-out(1000,null) [no input < 90]/ set no input(no input + 1) temp down [target temperature > Min]/ temp up [target temperature < Max]/ ^self.target temperature changed ^self.target temperature changed Program refreshing time backward time forward Target temperature displaying entry/ display target temperature Period and program time refreshing temp down/ set no input(0) time-out(1000,null) [alternately <> 2]/ set alternately(alternately + 1) f-c view program entry/ display period and program time f-c/ switch mode Event temp up/ set no input(0) Program target temperature refreshing entry/ display program target temperature Ambient temperature displaying entry/ display ambient temperature f-c/ switch mode time-out(1000,null) [alternately = 2]/ set alternately(0) time backward time forward public void f_c() throws Statechart_exception { time-out(1000,null) [alternately = 2]/ set alternately(0) Current date and time refreshing set clock entry/ display current date and time set day Current date and time displaying _Programmable_thermostat.fires(_Ambient_temperature_displaying,_Ambient_temp erature_displaying); entry/ display current date and time Set program view program [period = 8]/ set period(1) time-out(1000,null) [alternately <> 2]/ set alternately(alternately + 1) temp down [target temperature > Min]/ target temperature.decrement view program [period <> 8]/ set period(period + 1) Set period temp up [target temperature < Max]/ target temperature.increment time backward/ set program time(-15) run program Run _Programmable_thermostat.fires(_Target_temperature_displaying,_Target_temperat ure_displaying,true,this,"switch_mode"); time forward/ set program time(+15) view program/ set period(1) Set program time time-out(1000,null) [not weekend]/ set target temperature(1,4) temp up [programat(period).target temperature < Max]/ program->at(period).target temperature.increment _Programmable_thermostat.fires(_Program_target_temperature_refreshing,_Progra m_target_temperature_refreshing,true,this,"switch_mode"); Set program target temperature time-out(1000,null) [weekend]/ set target temperature(5,8) _Programmable_thermostat.run_to_completion(); temp down [programat(period).target temperature > Min]/ program->at(period).target temperature.decrement hold temp } Set time temp down [target temperature > Min]/ target temperature.decrement Hold StateState-based programming support time-out(1000,null) [no input >= 90] time backward/ set time(-60) time forward/ set time(+60) Set current minute temp up [target temperature < Max]/ target temperature.increment set clock time backward/ set time(-3600) set clock time forward/ set time(+3600) Set current hour / ^timer.to be killed / ^timer.to be set(1000) time backward/ set time(-86400) time forward/ set time(+86400) Set current day target temperature changed [season switch in Is cool and season switch turned off/ ^air conditioner relay.stop,^furnace relay.stop, ambient temperature > target temperature]/ ^fan relay.stop(fan switch in Is auto),^run indicator.off ^air conditioner relay.run,^fan relay.run,^run indicator.on target temperature changed [season switch in Is cool and ambient temperature.asCelsius < (target temperature.asCelsius – delta)]/ ^air conditioner relay.stop,^fan relay.stop(fan switch in Is auto), ^run indicator.off target temperature changed [season switch in Is heat and ambient temperature < target temperature]/ ^furnace relay.run,^fan relay.run,^run indicator.on target temperature changed [season switch in Is heat and ambient temperature.asCelsius > (target temperature.asCelsius + delta)]/ ^furnace relay.stop,^fan relay.stop(fan switch in Is auto), ^run indicator.off Control fan switch turned on/ ^fan relay.run set day ambient temperature changed(temperature) [season switch in Is cool and ambient temperature > target temperature]/ ^air conditioner relay.run,^fan relay.run,^run indicator.on UMLUML-2 runrun-toto-completion model execution mode ambient temperature changed(temperature) [season switch in Is cool and ambient temperature.asCelsius < (target temperature.asCelsius – delta)]/ ^air conditioner relay.stop,^fan relay.stop(fan switch in Is auto), ^run indicator.off ambient temperature changed(temperature) [season switch in Is heat and ambient temperature < target temperature]/ ^furnace relay.run,^fan relay.run,^run indicator.on ambient temperature changed(temperature) [season switch in Is heat and ambient temperature.asCelsius > (target temperature.asCelsius + delta)]/ ^furnace relay.stop,^fan relay.stop(fan switch in Is auto), ^run indicator.off 10 Perspectives Transformateur XMI 2 -> PauWare.Statecharts Transformateur PauWare.Statecharts -> XMI 2 (prototypage rapide, documentation…) UML 2 Sequence Diagrams (terrain hautement instable, voir release de fin 2004) Composabilité basée état Philosophie Open Source : pourparlers avec www.fujada.de 11 Démo. Questions en suivant ? 12