• Aucun résultat trouvé

Activité composite

2.3 Formalisation

2.3.4 Activité composite

Uneactivité composite est représentée par un graphe orienté (La, R) où La ∈ SA+est l’ensemble des activités simples constituant les sommets du graphe, et R est une relation d’ordre stricte définissant les arcs du graphe, étiquetés dans {ε, true, false} tel que : Lt ⊆ La, Lt ∈ T A+est l’ensemble des sommets définissant des activités de tests. Rp ⊆ R est l’ensemble des arcs étiquetés par ε.

Rc ⊆ R est l’ensemble des arcs dans Lt × La étiquetés par true ou f alse.

résultat de la première évaluation est mémorisée et toutes les activités qui sont conditionnées par ce test seront exécutées, même si la variable x est modifiée par d’autres activités. Une activité est conditionnée par le résultat d’un test pas par la vérification de la condition elle-même.

FIGURE2.7: REPRÉSENTATION GRAPHIQUE DES ACTIVITÉS PRÉSENTÉES DANS L’EXEMPLE

FILROUGE DE LA PAGE36.

Rp∪ Rc = R.

Par simplification nous noterons en fonction des besoins une activité composite par un couple (La, R) ou un triplet (La, Rp, Rc).

Un arc (a1, a2, x) dans R exprime que l’activité a1 doit avoir terminé son exécution pour que l’activité a2 puisse être exécutée. Par voie de conséquence, la relation R est transi-tive, une activité ne pouvant s’exécuter que si tous les prédécesseurs de ses prédéces-seurs ont terminé leur exécution.

Nous faisons le choix dans une activité composite de ne représenter que les relations directes entre les activités et pas celles déduites par transitivité. Nous notons R(a), l’ensemble des prédécesseur, même indirects, d’une activité a relativement à la relation R.

Un arc (a1, a2, value) dans Rc exprime que l’activité a1 est une activité de test qui doit avoir terminé son exécution en retournant une valeur correspondant à value pour que l’activité a2 puisse être exécutée.

Notre travail ne porte pas sur la détermination de cette valeur. Mais nous utilisons cette valeur pour calculer les compositions d’activités.

Nous notons R|AL, larestriction d’une relation R à un ensemble d’activités simples AL : R|ALAL = {(ai, aj, e) ∈ R|ai, aj ∈ AL}

Nous notons idents(R) l’ensemble des identifiants des activités mises en jeu dans la re-lation.

2.3. Formalisation 43

Nous définissons les fonctions :

Soit ac = (La, Rp, Rc) = ({a1, ...an}, R), R = Rp∪ Rc

activities(ac) = La,

precedenceRelation(ac) = Rp, conditionRelation(ac) = Rc. variables(ac) = ∪i=n

i=1variables(ai)

Nous nommons les relations Rp, relation de précédence et les relations Rc, relations de conditions.

2.3.4.1 Relation de précédence

Nous notons Rp l’ensemble des relations de précédence.

Nous notons pred(Rp, a) (resp. succ) l’ensemble éventuellement vide des activités activi-tés précédentes (resp. successives), relativement à la relation de précédence Rp.

Soit Rp ∈ Rp,

pred(Rp, a) = {aj|(aj, a) ∈ Rp}, succ(Rp, a) = {aj|(a, aj) ∈ Rp}

Nous étendons ces fonctions à la fermeture transitive de Rp, notées respectivement pred

et succ.

Exemple Fil rouge:Relations de précédence

Dans les exemples de la figure2.7,

– la relation de précédence associée à ca1 est :

Rp1= {pred(a11,t1),pred(a12,a13),pred(a14,a15) } – la relation de précédence associée à ca2 est :

Rp2= {pred(a21,a22),pred(a22,a23) } – la relation de précédence associée à ca3 est :

Rp3= {pred(a31,a32),pred(a32,a33),pred(a33,a34),pred(a34,a35) }

L’union des relations de précédence se définit par l’union ensembliste.

2.3.4.2 Relation de condition

Nous notons Rc l’ensemble des relations de condition.

Nous notons condT rue(Rc, a) (resp. condF alse(Rc, a)) l’ensemble éventuellement vide des activités de tests dont la valeur de retour doit être valuée à true (resp. à false).

Soit Rc ∈ Rc,

condT rue(Rc, a) = {ai|(ai, a, true) ∈ Rc}, condF alse(Rc, a) = {ai|(ai, a, f alse) ∈ Rc}

Sur la base de ces deux fonctions, nous définissons la fonction cond qui à partir d’une activité simple renvoie l’ensemble éventuellement vide des activités de tests qui gardent cette activité.

cond(Rc, id) = condT rue(Rc, id) ∪ condF alse(Rc, id)

Exemple Fil rouge:Relations de condition

Dans les exemples de la figure2.7, toutes les relations n’ont pas été représentées, les voici : – la relation de condition associée à ca1 est :

Rc1= {cond(t1,a13,true),cond(t1,a12,true),cond(t1,a14,false),cond(t1,a15,false) } – la relation de condition associée à ca2 est :

Rc2= ∅

– la relation de condition associée à ca3 est :

Rc3= {cond(t3,a36,false),cond(t3,a31,true), cond(t3,a32,true),cond(t3,a33,true), cond(t3,a34,true),cond(t3,a35,true) }

Notons que les activités simples d’identifiant a32 et a36 sont exclusives.

Nous définissons à présent les fonctions condT rueet condF alsequi pour une activité et des relations de précédence et de conditions données renvoient l’ensemble des conditions à laquelle cette activité doit être assujettie, i.e. l’union des conditions qui portent sur elle-même et sur ses prédécesseurs. En effet, si l’un de ses prédécesseurs ne devait jamais s’exécuter, elle ne s’exécuterait pas.

condT rue(Rp, Rc, a) = condT rue(Rc, a)S

{condi|ai ∈ pred(Rp, a), (condi, ai, true) ∈ Rc} condF alse(Rp, Rc, id) =

condF alse(Rc, a)S

{condi|idi ∈ pred(Rp, a), (condi, ai, f alse) ∈ Rc}

Propriété 1 (Activités exclusives) Deux activités a1 et a2 sont exclusives au regard d’une relation, notée exclusive(R, a1, a2) si :

Soient id1 = ident(a1), id2 = ident(a2)

(condT rue(R, a1) ∩ condF alse(R, a2) 6= ∅) ∨ (condT rue(R, a2) ∩ condF alse(R, a1) 6= ∅)

Exemple Fil rouge:Activité composite

Sur les exemples de la figure2.7, les activités composites sont : ca1= ({a11,t1,a12,a13,a14,a15},Rp1,Rc1) inputs(ca1)={x} outputs(ca1)={result} ca2= ({a21,a22,a23},Rp2,Rc2) inputs(ca2)={y} outputs(ca2)={result} ca3= ({t3,a31,a32,a33,a34,a35,a36},Rp3,Rc3) inputs(ca3)={z} outputs(ca3)={result}

Propriété 2 (Activité composite valide versus incohérente) Une activité composite ac = (La, Rp, Rc) est valide si les tests sur les activités ne s’excluent pas, dans le cas

2.3. Formalisation 45

contraire elle est dite incohérente. ∀ai∈ La, condT rue(Rc, ai)T

condF alse(Rc, ai) = ∅

Les activités composites sur lesquelles nous travaillons sont des activités composites valides.

Exemple Fil rouge:Activités composites valides versus incohérentes

Dans tous les exemples donnés jusqu’à présents les activités composites sont valides. Voici un exemple d’activité composite incohérente :

ca=({a1,t1},{},{cond(t1,a1,false),cond(t1,a1,true)})

Fonction 1 (F1) : Copie d’activité composite La fonction de copie d’activités composites (copy) est définie de CA −→ CA.

Soit ac une activité composite, ac’= copy(ac) est une nouvelle activité composite dont toutes les activités qui la composent ont été recopiées (leur identifiant étant nouveau et leurs variables renommées), et les relations de précédence et de condition redéfinies sur ces nouvelles activités.

Une branche relative à une activité simple a dans une activité composite correspond à l’ensemble des activités qui sont conditionnées par au moins les mêmes conditions que l’activité a.

Fonction 2 (F2) : Branche d’une activité simple dans une activité composite La fonction getBranch est définie de CA × SA → SA

Soit ac = (La, Rp, Rc), a ∈ La, getBranch(ac, a) = {ai∈ La|

condT rue(Rc, a) ⊆ condT rue(Rc, ai), condF alse(Rc, a) ⊆ condF alse(Rc, ai)}. La branche correspondant à une activité simple non conditionnée dans une activité composite est l’ensemble des activités simples associées à l’activité composite.