HAL Id: inria-00000075
https://hal.inria.fr/inria-00000075
Submitted on 26 May 2005
HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci- entific research documents, whether they are pub- lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.
L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.
Utilisation des CHRs pour générer des cas de test fonctionnel pour la Machine Virtuelle Java Card
Sandrine-Dominique Gouraud, Arnaud Gotlieb
To cite this version:
Sandrine-Dominique Gouraud, Arnaud Gotlieb. Utilisation des CHRs pour générer des cas de test
fonctionnel pour la Machine Virtuelle Java Card. Premières Journées Francophones de Programmation
par Contraintes, CRIL - CNRS FRE 2499, Jun 2005, Lens, pp.383-392. �inria-00000075�
pour la Mahine Virtuelle Java Card
S.-D. Gouraud et A. Gotlieb
IRISA-CNRS-INRIA, UMR 6074
Campus Universitairede Beaulieu
35042 RENNESCedex
{gouraud,gotlieb}irisa.fr
Résumé
Le test fontionnel basé sur une spéiation for-
melle onsiste à dériver des as de test à partir d'un
modèleformelpourdéteterdesfautesdansuneimplé-
mentation.Dansnostravaux,nousétudionsl'utilisation
desConstraint HandlingRules (CHRs)pourautomati-
serlagénérationdeasdetestfontionnelbaséesurun
modèleformel.Notreétudedeasestun modèledela
MahineVirtuelleJavaCard(JCVM)éritdansunsous
ensemble du langage Coq. Dans et artile,nous dé-
nissons unetradutionautomatique dee modèlesous
formederèglesCHRdanslebutdegénérerdesasde
testpourlaJCVM.Lepointlédenotreapproheréside
dansl'utilisationdesdeepguardspourmodéliserdèle-
ment la sémantique de notre modèle formel. Ensuite,
nousproposonsuneapproheglobalepourlagénération
de asdetest fontionnelbasée surlesCHRsquipeut
êtreappliquéeàd'autresmodèlesformels.
1 Introdution
Le test fontionnel onsiste à 1) séletionner des
donnéesdetestàpartird'unmodèle(formel),2)exé-
uteruneimplémentationenutilisantetensemblede
tests, puis3)vérierlesrésultatsàl'aided'unorale.
En test fontionnel, un orale est une proédure a-
pabledansertainessituationsdeprédirelesrésultats
attendusd'unprogramme.Lesmodèlesformelslassi-
quementutilisésentestfontionnelsontlesspéia-
tions algébriques[7℄,lesmahinesB[6℄ ouenoreles
mahinesàétatsnis.Detellesspéiationsformelles
sontexploitéesparlesoutilsde preuveouparlesvé-
riateurs de modèles pour prouver la orretion de
l'implémentation mais quelquefois, il est souhaitable
delesutiliserpourgénérerdesensemblesdetests.
Dans nos travaux, nous nous intéressons au test
fontionnel basé sur des spéiations JSL (Jakarta
SpeiationLanguage).JSL[8℄estunlangageformel
issud'unsous-ensembledulangageCoqetquiestbasé
assistantde preuves destinéàl'origine àprouverdes
théorèmesd'ordresupérieur[1℄.LelangageJSL aété
déniand'obtenirunlangagedespéiationfaileà
lireetindépendantdetoutoutil.Dansleadredupro-
jetRNTLCASTLES[20℄dontl'objetifestdedénir
unenvironnementpourautomatiserlaertiationde
laplate-formeJavaCard[21℄,JSLaétéhoisiomme
base ommune. Une spéiation JSL de laMahine
Virtuelle Java Card a été dénie [3, 4℄ dans le but
devérierdespropriétésdeséuritédelaplate-forme
JavaCard.
La Mahine Virtuelle Java Card (JCVM) exéute
toutes les instrutions (ou les byteodes) suppor-
tées par Java Card (new, push, pop, invokestati,
invokevirtual,et.).Notre objetif onsisteàgéné-
rer des ensembles de tests àpartir des spéiations
JSL de haque instrution, à traduire es tests abs-
traits entests exéutables,àlesexéutersurl'implé-
mentationpuisàvérierlesrésultatsparrapportaux
spéiations.Danset artile,nousnous intéressons
àlapremièreetàladernièretâhesqui sontdespro-
blèmes diiles en test de logiiel. La onrétisation
etl'exéution destestsnesontpasdisutéesii.
Dansnostravaux,nousavonsétudiél'utilisationdes
Constraint Handling Rules (CHRs) pour générerdes
as de test et des orales àpartir de la spéiation
JSL de la JCVM. Nous dénissons des objetifs de
test baséssur laouverture derèglesde rééritureet
ladétetiondenon-onformité,etnousfournissonsdes
tehniquespourgénérerdesasdetestqui répondent
àesobjetifs.Notreidéeestdebénéierdelahaute
délarativitédesCHRspourexprimerdansunmême
adre àla fois lesobjetifs de test et lesrègles de la
spéiationJSL.Puis,enutilisantlapropagationtra-
ditionnelledesCHRsetl'énumération,nousgénérons
des tests et des orales omme solutions du système
deontraintes.
Cetartileestorganisédelafaçonsuivante:lase-
ution;lasetion 3estonsaréeàlasyntaxeet aux
sémantiquesdesCHRs;lasetion4introduitlesrègles
detradutionquipermettentdepasserdesrèglesJSL
àdes règlesCHR; dans lasetion 5nous présentons
deuxtehniquespourgénérerdesasdetestfontion-
nel selon des objetifs de test et nous disutons des
appliationsautestdelaJCVM;lestravauxonnexes
sontprésentés ensetion 6,puis lasetion 7termine
l'artileparnosperspetivesdereherhe.
2 Le Langage de Spéiation Jakarta
Le Langage de Spéiation Jakarta (JSL) [8℄ est
unpetitlangagequipermetdedérirelamahinevir-
tuelle dans un style mathématique neutre. C'est un
langagedepremierordreaveunsystèmedetypepoly-
morphiqueoùlesfontionssontdéritespardesrègles
derééritureonditionnelles.
2.1 Lasyntaxe
LesexpressionsdulangageJSLsontdestermesdu
premierordreaveégalité(==)onstruitsàpartirde
variableset desymbolesdeonstante.Unsymbolede
onstante est soit un symbole de onstruteur intro-
duit par les dénitions de type soit un symbole de
fontionintroduitparlesdénitionsdefontion.
Soient
C
unensembledesymbolesdeonstruteur,F
un ensemble de symboles de fontion etV
un en-semble de variables. L'ensemble des expressions JSL
est l'ensemble
E
de termes déni parE ::= V|E ==
E|CE
∗|FE
∗. Soitvar
une fontiondéniesurE → V
∗quiretournel'ensembledesvariablesd'uneexpression
JSL.
Chaque symbole de fontion est déni par un en-
semblede règlesderééritureonditionnelles.Ce for-
malismepeuommunen rééritureest enfait prohe
deslangagesfontionnelsaveltrageetdesassistants
de preuves. Ces règles de réériture onditionnelles
sontorientéesetdelaformesuivante :
l
1→ r
1, . . . , l
n→ r
n⇒ g → d
où:
g = f v
1. . . v
m ave∀i, v
i∈ V
et∀i, j, v
i6= v
j
l
iestsoitunefontionquin'introduitpasdenou- vellesvariablessoitunevariabletelleque1 ≤ i ≤ n, var(l
i) ⊆ var(g) ∪ var(r
1) ∪ . . . ∪ var(r
i−1)
r
i est une valeur appelée motif (pattern) etonstruite à partir de variables et de onstru-
teurs.Un motifneontientquedesnouvellesva-
riables,doitêtrelinéaire 1
ettelque
1 ≤ i, j ≤ n
eti 6= j
,var(r
i)∩var(g) = ∅
etvar(r
i)∩var(r
j) = ∅
1
Touteslesvariablesdoiventêtrediérentes :letermeC v v
où v∈ VetC∈ Cn'estpasautorisé.
d
est une expression telle quevar(d) ⊆ var(g) ∪ var(r
1) . . . ∪ var(r
n)
Sémantiquement, une règle signie que si pour tout
i
, le termel
i peut être réérit en le motifr
i, alorsl'expression
g
serééritenl'expressiond
.Parlasuite,esrèglesserontappeléesdesrèglesJSL.
L'exemple1donneunedénitionJSLdelafontion
plus
extraitedelaspéiationdelaJCVM.Exemple 1(Lesrègles JSL pour dénir
plus
)data nat = 0 | S nat.
f unction plus :=
h plus
_r1i n → 0
⇒ (plus n m) → m;
h plus
_r2i n → (S p)
⇒ (plus n m) → (S (plus p m)).
Où
n
,m
etp
sont des variables,0
etS
sont dessymboles de onstruteur et plus est un symbole de
fontion. La onstrution
h. . .i
permet de donner unnom à une règle :la première règle de
plus
est ainsinommée
hplus
_r1i
etla seondehplus
_r2i
.Des fontionspartielles et des fontionsindétermi-
nistespeuventaussiêtredéniesenJSL.
2.2 Lemodèle d'exéution
Étantdonnéunterme
e
,nousrappelonsquehaquesous-termede
e
peutêtreidentiéparunepositionp
:le terme
e
|p est lesous-terme dee
qui setrouve àlaposition
p
. L'expressione[p ← d]
signie que dans leterme
e
,lesous-termesituéàlapositionp
estremplaéparleterme
d
.Unesubstitutionθ
peutêtrevueommeunrenommagedevariables.
Soit
R
un ensemble derègles JSL.Une expressione
est réériteenuneexpressione
′ s'ilexisteune règlel
1→ r
1, . . . , l
n→ r
n⇒ g → d
dansR
,une positionp
dans
e
et unesubstitutionθ
telles que:
e
|p= θg
ete
′= e[p ← θd]
pour
1 ≤ i ≤ n, θl
i→
∗θr
ioù→
∗estlafermetureréexiveettransitivede
→
Exemple 2
Étant donné la dénition JSL de plus, le terme
(plus 0 (plus (S 0) 0))
peutseréérireenlemotif(S 0)
en trois dérivations diérentes(ii, onuentes):
(plus 0 (plus (S 0) 0)) →
r1(plus (S 0) 0)
→
r2(S (plus 0 0)) →
r1(S 0)
(plus 0 (plus (S 0) 0)) →
r2(plus 0 (S (plus 0 0)))
→
r1(S (plus 0 0)) →
r1(S 0)
(plus 0 (plus (S 0) 0)) →
r2(plus 0 (S (plus 0 0)))
→
r1(plus 0 (S 0)) →
r1(S 0)
Cette setionest inspirée del'artile [12℄ de Thom
Frühwirth,dulivre[13℄etdusiteWebdédiéauxCHRs
[22℄.LelangageConstraintHandlingRules(CHR)est
un langage à hoix dénitifs (ommitted-hoie) qui
se ompose de règles gardées dont les multi-têtes se
réérivent en des ontraintes plus simples jusqu'à e
qu'elles soientrésolues.Ce langageétendtoujoursun
langagehtequipossèdedesapaitésderésolutionde
ontraintes.DesimplémentationsdeCHRssontdispo-
nibles enElipseProlog,SistusProlog,HAL,et.
LesCHRs sontbaséessurdeuxprinipes:laSim-
pliation qui onsiste à remplaer des ontraintes
pardenouvellesontrainteslogiquementéquivalentes
mais plus simples et la Propagation qui onsiste à
rajouter de nouvelles ontraintes logiquement redon-
dantesmaisquipourraientapporterdenouvellessim-
pliations.
Dans e langage, une ontrainte est un prédiat
dupremier ordrepartiulier.Ceprédiat est soitune
ontrainteprédénie (built-in)qui existedéjàdans le
langage hte soit une ontrainte CHR (user-dened)
quiestdénieparl'utilisateurparunprogrammeCHR
(ensembleniderèglesCHR).
3.1 Lasyntaxe
IlexistetroissortesderèglesCHR:
Lesrèglesdesimpliationquisontdelaforme
H <=> G | B
Lesrèglesdepropagationquisontdelaforme
H ==> G | B
Lesrèglesdesimpagationquisontdelaforme
H
\
H′ <=> G | BPlus préisément, les multi-têtes
H
etH
′ sont desonjontions non-vides de ontraintes CHR, la garde
G
estune onjontionde ontraintes prédénieset leorps
B
est une onjontion non-vide de ontraintesprédénieset deontraintesCHR.
Dans ette setion, nous nous onentrons sur les
règles de simpliation et de propagation qui or-
respondent expliitement aux deux prinipes sur les-
quellesreposentlesCHRs.
Exemple 3(Les règlesCHR pour dénir plus)
R1 plus(A,B,R) <=> A=0 | R=B.
R2 plus(A,B,R) <=> A=s(C)
| plus(C,B,D), R=s(D).
C plus(A,B,R) ==> plus(B,A,R).
Laonstrution
. . .
permet de donner unnom àunerègle CHR : la première règle de simpliation de
plus est ainsi nommée R1, la seonde R2 et la règle
de propagationestnomméeC.
Étant donné une théorie sur les ontraintes notée
CT(ave
true
,f alse
etuneontrainted'égalité=
)quidétermine le sens des ontraintes prédénies, l'inter-
prétation délaratived'un programme CHR est don-
néepar une onjontion de formules logiquesuniver-
sellementquantiées.Ilyauneformuleparrègle.
Si
x ¯
dénotelesvariablesapparaissantdanslatêteH
et
y ¯
(resp.z ¯
)lesvariablesapparaissantdanslagarde (resp.orps)delarègle,alors:Si lagarde est satisfaite,une règle CHRde sim-
pliationestuneéquivalenelogique:
∀¯ x(∃ yG ¯ → (H ↔ ∃ zB)) ¯
Si lagarde est satisfaite, une règleCHR de pro-
pagationest uneimpliation:
∀¯ x(∃ yG ¯ → (H → ∃ zB)) ¯
LasémantiqueopérationnelledesprogrammesCHR
est donnée par un système de transitions où haque
étatest uneonjontion de ontraintes. L'état initial
estlebutàrésoudre.Unétatnalestsoituneonjon-
tiononsistanteetdanseas'estunsuès,soitune
onjontioninonsistanteetdanseas'estunéhe.
Il y a quatre transitions diérentes : une transition
pourrésoudrelesontraintesprédénies(Résoudre)et
trois transitions pourappliquer haque type deCHR
(Simplier,Propageret Simpagation).
Résoudre
Si
C
estune ontrainteprédénieEt
CT | = (C ∧ D) ↔ D
′Alors C,D
7→
D′Simplier
Si H <=> G | B
Et
CT | = D → ∃¯ x(H = H
′∧ G)
Alors H
′
,D
7→
D,H=H′,BPropager
Si H ==> G | B
Et
CT | = D → ∃¯ x(H = H
′∧ G)
Alors H
′
,D
7→
H′,D,H=H′,BLes règles sont appliquées de manière équitable
'est-à-dire que toute règle qui est appliable à une
hane d'être appliquée. De plus, la règle de propa-
gation est appliquée au plus une fois sur une même
ontrainte an d'éviter une non-terminaison triviale.
LesprogrammesCHRpeuventêtrenon-onuents.De
plus, si les gardes des règles pour un même prédiat
ne sontpas mutuellementexlusives,ils peuventêtre
indéterministes.
Exemple4 (Utilisationsimpledes CHRs)
CesdeuxexemplesmontrentommentlesCHRsfon-
tionnent.
plus(s(0),s(0),R)
7→
R2 plus(0,s(0),R1), R=s(R1)7→
R1 R1=s(0), R=s(R1)7→
R´esoudre R=s(s(0))Ceseondexempleexploite larèglede propagation:
sansetterègle,la ontrainteplus(M,s(0),s(s(0)))
serait suspendue.
plus(M,s(0),s(s(0)))
7→
C plus(M,s(0),s(s(0))), plus(s(0),M,s(s(0)))7→
R2 plus(M,s(0),s(s(0))), plus(0,M,s(0))7→
R1 plus(M,s(0),s(s(0))), M=s(0)7→
Resoudre´ plus(s(0),s(0),s(s(0))), M=s(0)7→
R2 plus(0,s(0),s(0)), M=s(0)7→
R1 s(0)=s(0), M=s(0)7→
Resoudre´ M=s(0)LelangageCHRaétéonçupourériredessolveurs
de ontraintes eaes et génériques [12℄. L'exemple
suivantmontreundesprinipauxintérêtsdesCHRs:
Exemple5
plus(M,0,N)
7→
C plus(M,0,N), plus(0,M,N)7→
R1 plus(M,0,N), M=N7→
Resoudre´ plus(M,0,M), M=NIi, la relation
M = N
est déduite alors queeneserait pas le as ave un solveur traditionnel sur les
termesde Herbrand.
4 De JSL à CHR
Lapremièreétapedenotreapproheonsisteàtra-
duireautomatiquementlesspéiationsJSLenCHR.
Les règles de tradution sont données sous forme de
jugements.
4.1 Lesrègles detradution
Ilyatroissortesderèglesdetradution:unerègle
pourlesexpressions,une pourlesrèglesderéériture
dontlesymboleest
→
etunepourlesrèglesJSLdontlesymboleest
⇒
.Danslesjugementssuivants,lava-riablerreprésenteratoujoursunenouvellevariable.
Le jugement
e t ⊳ {C}
signie que l'expression JSLe
setraduitenuntermetsouslesontraintesC.LetermetpeutêtreunevariableProlog,unatomeou
uneontrainteCHR.
v v ⊳ {true} c c ⊳ {true}
e
1t
1⊳ {c
1} . . . e
nt
n⊳ {c
n} c e
1. . . e
nc(t
1, . . . , t
n) ⊳ {c
1, . . . , c
n}
e
1t
1⊳ {c
1} . . . e
nt
n⊳ {c
n} f e
1. . . e
nr ⊳ {c
1, . . . , c
n, f(t
1, . . . , t
n, r)}
Le jugement
e → p C
signie que la règle quipermet deréérireune expression JSL
e
en unmotifp
setraduit enunensemblede ontraintes C. Si l'ex-pression
e
estunevariable,l'ensembledeontraintesCestréduitàuneontrainted'égalitéentredeuxtermes
e=p. Si l'expression
e
est un appel de fontion, l'en-semble deontraintes C ontient alorsles ontraintes
quiportentsurlesargumentsdelafontionauxquelles
s'ajoutelaontrainte CHRdénissantlafontion.
v → p v = p
e
1t
1⊳ {c
1} . . . e
nt
n⊳ {c
n} p p ⊳ {true}
f e
1. . . e
n→ p c
1, . . . , c
n, f(t
1, . . . , t
n, p)
Le jugement
l
1→ r
1, . . . , l
n→ r
n⇒ g → d g
′⇔ guards|body
signie que la règle JSLl
1→ r
1, . . . , l
n→ r
n⇒ g → d
setraduitparunerègleCHRg
′⇔ guards|body
oùg
′estlaontrainteCHRassoiéeàl'expression
g
, guardsest l'ensemble deontraintesorrespondant àla tradution des règlesde laforme
l
i→ r
i etbodyest l'ensemblede ontraintes qui or-respondentàlatradutiondel'expression
d
.l
1→ r
1g
1. . . l
n→ r
ng
ne t ⊳ {B}
l
1→ r
1, . . . , l
n→ r
n⇒ f v
1. . . v
k→ e
f(v
1, . . . , v
k, r) ⇔ g
1, . . . , g
n|B, r = t.
Notonsquel'indéterminisme,laonueneet laré-
ursivité sontpréservésparlatradution.
4.2 LesDeep Gua rds
Dans notre tradution, nous onsidérons que les
gardes des CHRs peuvent ontenir à la fois des
ontraintesProloget desontraintesCHR. Cetteap-
prohe,désignéesousletermededeepguards,abeau-
oup été étudiée par le passé. Par exemple, Smolka
rappelle dans son artile [17℄ que "les deep guards
onstitueleméanismeentralpourombinerlespro-
essusetlareherhe(enapsulée)pourlesproblèmes
de résolution". Les deep guards sont également utili-
sés dans plusieurssystèmes omme AKL, Oz [19℄ ou
enore HAL [10℄. Les deep guards sontbasées sur la
manièredontl'impliationdesgardesesttestéequand
ellessontomposées nonseulementde prédiats pré-
dénismaisaussid'appelsdeontraintes.Tehnique-
ment, le test d'impliation d'une ontrainte est ap-
pelé ask onstraint alors quel'ajoutd'une ontrainte
au magasin de ontraintes est appelé tell onstraint.
Ces deux opérations sont lairement diérentes. Par
exemple, si le magasin de ontraintes ontient
Z = f (X, Y ), Y = a
alors un tell onstraintX = Y
où=
dénote l'uniation dePrologdonneraunmagasindeontraintesontenant
Z = f (a, a)
tandisqueleaskonstraintorrespondantsuspendrajustelaontrainte
jusqu'àequ'elleousanégationsoitimpliquéeparle
magasindeontraintes.Notonsquehaquefoisqu'une