Title: Gnration de tests partir de spcifications algbriques : loutil LOFT
1Génération de tests à partir de spécifications
algébriques l outil LOFT
Prototypage de spécifications algébriques
conditionnelles positives Automatisation de
stratégies de sélection Programmation logique
équationnelle, réécriture conditionnelle et
mécanismes de contrôle
2Exemple listes dentiers naturels
- SPECIF NatList USE Nat Boolean
- SORTS nlist
- GENERATORS
- empty nlist
- cons _ _ nat nlist nlist
- OPERATIONS
- is_empty _ nlist boolean
- head _ nlist nat
- tail _ nlist nlist
- length _ nlist nat
- sorted _ nlist boolean
3Exemple listes dentiers naturels (2)
- VARIABLES
- Lnlist, A,Bnat
- AXIOMS
- is_empty1 is_empty(empty) true
- is_empty2 is_empty(cons(A,L)) false
- head1 head(cons(A,L)) A
- tail1 tail(cons(A,L)) L
- length1 length(empty) 0
- length2 length(cons(A,L)) s(length(L))
- sorted1 sorted(empty) true
- sorted2 sorted(cons(A,empty)) true
- sorted3 sorted(cons(A,cons(B,L))) and(
le(A,B), sorted(cons(B,L)) )
4Spécifications Algébriques
- Spécifications structurées hiérarchie de
modules - SP DSP SP0 SP1 ...
- Module de spécification DSP (S, Ax)
- signature S sortes (types), noms dopérations
(générateurs et opérations définies),
spécifications utilisées - ensembles daxiomes Ax équations
conditionnelles positives entre termes bien
formés, dont les variables (typées) sont
quantifiées universellement - t1 t'1 ... tn t'n gt t t
5Test, soumission et oracle
- Test instance close dun axiome de SP, t1 t'1
... tn t'n Þ t t' - ex head(cons(3,empty)) 3
- Soumission évaluation de valeurs concrètes par
P - evalP(t1), evalP(t'1), ... evalP(t), evalP(t')
- Oracle quand evalP(t1) P evalP(t'1) et ...
et evalP(tn) P evalP(t'n) alors
evalP(t) P evalP(t') - ( P égalité abstraite entre
valeurs ) - s est une sorte observable P (ou le langage de
programmation) fournit un prédicat dégalité (eqs
)
6Jeux de test exhaustifs
- ExhaustSP s f f Î Ax, s substitution close
- Hypothèse minimale (TestableP) MP est une
S-algèbre finiment générée, pour toute sorte
observable s, eqs est une congruence - Oracle partiel égalités sur les sortes
observables - A partir de là on ignore les problèmes
dobservabilité - Remarques
- Les tests conditionnels dont les prémisses sont
fausses ne peuvent pas mettre en échec un
programme - Les prémisses qui sont vraies sont testées
ailleurs - EqExhSP s t s t (t1 t'1 ... tn
t'n Þ t t' ) Î Ax, - s substitution close,
- SP ¾ ( s t1 s t'1 ... s tn s t'n )
7Sélection de tests
- A partir de EqExhSP admettre des hypothèses de
sélection de façon à pouvoir se restreindre à un
sous-ensemble fini T de taille raisonnable
(compromis coût / couverture de la spécification)
- A partir dun objectif de test toute formule
conditionnelle positive conséquence de la
spécification - Critères de couverture un jeu de tests par
axiome (ou objectif), instances closes (de la
conclusion) des axiomes (conditionnels) - satisfaisant les prémisses des axiomes
conditionnels - en exploitant les sous-domaines induits par les
utilisations dopérations définies (sous-cas
correspondant aux axiomes) - Méthode analyse par cas (dépliage des opérations
définies) pour caractériser des sous-domaines,
hypothèses de sélection et stratégies associées
8Hypothèses de régularité
- Si la formule f est vraie pour toute
substitution de la variable X, de "taille" a
bornée par n, alors f est vraie pour toute
substitution de X - ( "t Î TW ) ( a(t) n Þ Mp ú f(t) ) Þ (
"t Î TS )( Mp ú f(t) ) - Exemple
- f sorted( cons(A,cons(B,L)) ) and( le(A,B),
sorted(cons(B,L)) ), - variable L de sorte nlist, a length, n 1,
- Stratégie sélection des substitutions telles
que length(L) 1 - L empty
- L cons(C,empty)
9Hypothèses duniformité sur une sorte
- Si la formule f est vraie pour une substitution
t0 de la variable X, alors f est vraie pour toute
substitution de X - ( "t0 Î TW ) ( Mp ú f(t0) Þ ( "t Î TS )( Mp
ú f(t) ) ) - Exemple uniformité pour A, B et C de sorte nat
dans les substitutions sélectionnées par
régularité (choix dune valeur quelconque pour A,
B et C) - length(L) 0 A 3, B 1
- sorted( cons(3,cons(1,empty)) )
- and( le(3,1), sorted(cons(1,empty)) )
- length(L) 1 A 0, B 5, C 2
- sorted( cons(0,cons(5,cons(2,empty))) )
- and( le(0,5),sorted(cons(5,cons(2,empty)))) )
10Décomposition en sous-domaines dépliage des
opérations définies
- Caractériser des sous-domaines du domaine de
validité dune formule en exploitant les cas de
définition donnés par les axiomes - sorted(cons(A,cons(B,L))) and(le(A,B),
sorted(cons(B,L))) - Remplacement dégal à égal en utilisant les
axiomes définissant "and", puis ceux définissant
"le"
and1 and( true, true ) true and2 and(
false, true ) false and3 and( true, false )
false and4 and( false, false ) false
- le1 A B Þ le( A, B ) true
- le2 lt( A, B ) true Þ le( A, B ) true
- le3 lt( B, A ) true Þ le( A, B ) false
11Décomposition en sous-domaines (2)
- and1 le(A,B) true sorted(cons(B,L))
true - le1 A B sorted(cons(B,L)) true
- le2 lt(A,B) true sorted(cons(B,L))
true - and2 le(A,B) false sorted(cons(B,L))
true - le3 lt(B,A) true sorted(cons(B,L))
true - and3 le(A,B) true sorted(cons(B,L))
false - le1 A B sorted(cons(B,L)) false
- le2 lt(A,B) true sorted(cons(B,L))
false - and4 le(A,B) false sorted(cons(B,L))
false - le3 lt(B,A) true sorted(cons(B,L))
false - On peut continuer en dépliant sorted ...
12Décomposition en sous-domaines (3) influence de
laxiomatisation, prise en compte des axiomes
effaçants
- Axiomatisation dun and séquentiel
- and-seq1 and( true, Bool ) Bool
- and-seq2 and( false, X ) false
- la valeur du second argument est inutile lorsque
le premier vaut false on ne déplie pas dans le
terme correspondant (réduction de la
combinatoire) - and-seq1 le(A,B) true sorted(cons(B,L))
Bool - le1 A B sorted(cons(B,L)) Bool
- le2 lt(A,B) true sorted(cons(B,L))
Bool - and-seq2 le(A,B) false sorted(cons(B,L))
X - le3 lt(B,A) true sorted(cons(B,L)) X
13Uniformité sur un sous-domaine D
- Si la formule f est vraie pour une substitution
(t1, ... tn) dans D des variables (X1, ... Xn),
alors f est vraie pour toute substitution de (X1,
... Xn) dans D - ( "(t1, ... tn) Î D (t1, ... tn) Î TWn
) ( Mp ú f(t1, ... tn) Þ ( "(t1, ... tn)
Î D )( Mp ú f(t1, ... tn) ) ) - Remarque ces sous-domaines sont des conjonctions
déquations - solutions de problèmes équationnels dans la
théorie définie par les axiomes unification dans
la théorie équationnelle de SP
14Usage du dépliage et des hypothèses de sélection
- Dépliage si la formule contient des occurrences
dopérations définies (membre droit ou prémisses)
permettant de caractériser des sous-cas
intéressants - sorted(cons(A,cons(B,L))) and(le(A,B),
sorted(cons(B,L))) - Uniformité
- sur un domaine sous-domaine obtenu par dépliage
- sur une sorte pour une sorte importée (définie
dans un module de spécification utilisé et déjà
testé), pour des variables dont la valeur nest
pas contrainte - tail(cons(A,L)) L
- Régularité pour une variable dune sorte
dintérêt (en cours de définition) si on ne peut
pas faire de dépliage intéressant - tail(cons(A,L)) L
15LOFT (LOgic for Functions and Testing)
- Stratégies de sélection et dépliage résolution
contrôlée de problèmes équationnels - Surréduction conditionnelle (conditional
narrowing) (RAP, SLOG) procédure de résolution
équationnelle dans la théorie dune spécification
conditionnelle positive (modèle initial) - simulation par résolution de clauses de Horn
- mécanismes de contrôle inspirés des langages de
programmation logique avec contraintes (PROLOG
II, Mu-Prolog, Eclipse) méta-clauses "wait"
, "do_not_unfold"
16Simulation de la surréduction conditionnelle
- Spécifications avec constructeurs
- définitions inductives par rapport à des
générateurs libres - en orientant les axiomes de gauche à droite, on
obtient un système de règles de réécriture
confluent et noethérien sur les termes clos - opérations complètement définies par rapport aux
générateurs (complétude uniquement pour les
termes complètement définis) - head(empty) ltgt head(empty)
- Traduction en clauses de Horn
- à chaque opération darité n est associé un nom
de prédicat darité n 1 - les occurrences internes dopérations définies
sont remplacées par des variables résultats selon
un parcours en profondeur du terme (à gauche
dabord)
17Traduction en clauses de Horn exemple
- Clauses définissant lopération length
- length( empty, 0 ).
- length( cons(A, L), s(N) ) -
- length( L, N ).
- Clauses définissant lopération sorted
- sorted( empty, true ).
- sorted( cons(A, empty), true ).
- sorted( cons(A, cons(B, L)), Bool ) -
- le( A, B, Bool1 ),
- sorted( cons(B, L), Bool2 ),
- and( Bool1, Bool2, Bool ).
18Mécanismes de contrôle sélection
- Dépliage résolution équationnelle contrôlée,
les réponses sont des paires substitution,contr
aintes - unfold_std( directives , eq1, ... eqn)
(requête) - dépliage des opérations de eq1 ... eqn selon
directives - do_not_unfold( f(...) t ) (module de
contrôle) - méta-clauses interdisant la résolution des
sous-buts filtrés par f(...) t - Uniformité
- random_choice choix aléatoire de laxiome à
appliquer (backtrack si échec) - ?( contraintes ) première solution de
contraintes (cut de Prolog) - ground_instances instanciation close des
variables (choix aléatoire des générateurs)
19Dépliage de and(lt(A,B),sorted(cons(B,L)))
résolution contrôlée
20Mécanismes de contrôle résolution
- Stratégie de résolution choix du sous-but
sunifiant avec le minimum de têtes de clauses - wait( f(...) t ) (module de contrôle)
- méta-clauses retardant la résolution du sous-but
filtré - init_iter, max_depth (paramètres)
- profondeur itérative bornée
- rewrite (paramètre, requête)
- réécriture entre les étapes de résolution
- Module de simplification
- règles de réécriture complémentaires (e.g.
and(true, B) B ) - factorize factorisation de sous-buts
- and(A,B) Bool, and(A,B) false
- Þ and(A,B) false avec Bool false
21Panneau de contrôle
22(No Transcript)
23Exemple de requête
- Dépliage des opérations and, le (au plus une
fois), - puis, pour chaque paire substitution,
contraintes calculée par dépliage, première
solution avec stratégie aléatoire, - enfin, instanciation close des variables.
-
- unfold_std( ( lt, 0), (sorted, 0) ,
- and( le(A, B), sorted(cons(B, L))) Bool ),
- random_choice, ?,
- ground_instances.
24Solutions de la requête
Boolboolean false, Anat sucf(3), Bnat
sucf(2), Lnlist empty Boolboolean false,
Anat sucf(2), Bnat sucf(1), Lnlist
cons(0, empty), Boolboolean true, Anat
sucf(1), Bnat sucf(1), Lnlist cons(sucf(3),
cons(sucf(3), cons(sucf(5), empty))) Boolboolean
false, Anat sucf(1), Bnat
sucf(1), Lnlist cons(sucf(2), cons(sucf(2),
cons(0,empty))) Boolboolean true, Anat
0, Bnat sucf(9), Lnlist cons(sucf(10),
cons(sucf(10), cons(sucf(13), empty))) Boolboole
an false, Anat sucf(1), Bnat
sucf(3), Lnlist cons(0, empty)
25Objectifs de test
- Propriétés conséquences de la spécification que
lon voudrait tester - dans le programme sous test (vérification)
- dans la spécification ? (validation)
- i0 insert(A, empty) cons(A,empty)
- i1 le(A,B) true gt
- insert(A, cons(B, L)) cons(A,cons(B,L))
- i2 le(A,B) false gt
- insert(A, cons(B, L)) cons(B,insert(A,L))
- Objectif de test pour insert et sorted
- sorted(insert(A,L)) sorted(L)
26Mise à lépreuve de la spécification pour
lobjectif (1)
- Dépliage du membre gauche
- ??- unfold_std(('ltnat,nat-gtboolean',0),
- ('sortednlist-gtboolean',2),
- ('insertnat,nlist-gtnlist',2),
- sorted(insert(A,L))B),
- random_choice,?,
- nodisplay.
- NUMBER OF SOLUTIONS 38
Confrontation des cas au membre droit ??-
unfold_std(('ltnat,nat-gtboolean',0),
('sortednlist-gtboolean',2),
('insertnat,nlist-gtnlist',2), sorted(insert(A
,L))B), random_choice,?,
ground_instances, ?(sorted(L)B),
nodisplay. NUMBER OF SOLUTIONS 38
27Mise à lépreuve de la spécification pour
lobjectif (2)
- Dépliage du membre droit
- ??- unfold_std(('ltnat,nat-gtboolean',0),
- ('sortednlist-gtboolean',2),
- sorted(L)B),
- random_choice,?,
- nodisplay.
- NUMBER OF SOLUTIONS 23
Confrontation au membre gauche ??-
unfold_std(('ltnat,nat-gtboolean',0),
('sortednlist-gtboolean',2), sorted(L)B),
random_choice,?, ground_instances,
?(sorted(insert(A,L))B), nodisplay. NUMBER
OF SOLUTIONS 23
Puis sélection des cas de test par dépliage et
uniformité
28Résultats expérimentaux métro MAGGALY
- Définition des conditions dalarme des portes
selon la localisation du train, le numéro du
segment, la position, la vitesse - Stratégie de dépliage standard opérations
booléennes, comparaison de vitesses - 254 tests pour les 4 axiomes définissant
lalarme, dont 230 tests pour le cas darrêt
durgence - Mutations sur une version Modula-2 du programme
(académique) détection de tout les mutant
erronés et dune vraie faute - Autres utilisations de LOFT animation de
spécifications et test dos-à-dos des versions
successives de la spécification
29Comparaison avec le test statistique(collaboratio
n avec le LAAS)
- Analyse de mutations sur un programme C
(contrôle/commande de centrale électrique) - 1345 mutants
- 5 jeux de tests différents pour chaque méthode de
sélection (mesure de stabilité) - LAAS couverture statistique du critère tous
les chemins 19 chemins, 405 entrées - LRI stratégie de dépliage standard à partir
dune spécification algébrique, 282 entrées (47
flots de 6 entrées consécutives)
30Comparaison avec le test statistique (2)
- Score parfait pour le LAAS (détection de tous les
mutants erronés) - Score presque parfait pour le LRI (de 0.98 à 1)
2 mutants erronés ne sont pas systématiquement
détectés (uniformités trop fortes) - Les deux méthodes ont des résultats meilleurs et
plus stables que les approches classiques - tous les chemins de 0.79 à 0.84
- Test aléatoire uniforme de 0.56 à 0.84