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