370 likes | 568 Views
Contribution à la génération automatique de tests pour les systèmes réactifs . Thierry Jéron Habilitation à diriger des recherches 16 mars 2004. Contexte: les systèmes réactifs. Env. P 2. P 1. Exemples: protocoles télécom, systèmes embarqués, systèmes contrôle/commande, etc.
E N D
Contribution à la génération automatique de tests pour les systèmes réactifs Thierry Jéron Habilitation à diriger des recherches 16 mars 2004
Contexte: les systèmes réactifs Env P2 P1 Exemples: protocoles télécom, systèmes embarqués, systèmes contrôle/commande, etc. Complexité, répartition croissante, criticité Nécessité de fiabilité / maîtrise des coûts méthodes formelles
br = b ?DT(d,br) !IND(d) !ACK(b) b:=1-b s br ≠ bit ?DT(d,br) !IND(d) !ACK(b) b:=1-b Spécification comportementale: exemple du protocole du bit alterné Env IND(data) RQ(data) CNF Receiver d:=0 b:=0 Transmitter ACK(bit) s b:=0 ?RQ(d)/ !DT(d,b) br = b ?ACK(br) / !CNF b:=1-b DT(data,bit) br ≠ bit ?ACK(br) / !DT(d,b) w Processus concurrents, communication (interne-externe), structure de contrôle, données. Langages de spécification : SDL, Lotos, UML, etc
Sémantique : systèmes de transitions (LTS) Spécification comportementale Spec Système de transitions (LTS) S = [[Spec]] simulation exhaustive état: (localités, val(var), files) action état’: (localités, val(var), files) Explosion combinatoire, voire infinitude (données, files)
Vérification et test Propriété P (automate, logique) Vérification de modèle S ⊨ P ? Spécification Spec S = [[Spec]] comportementale Test: Imp conforme à S ? I conf S ? Implémentation Imp Hyp: Imp modélisable par I
88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 Représentation model-checking de syst. infinis (YM Quemener,93-96) Observation répartie Historique ADP AAR PAMPA VerTeCS Non bornitude de files de CFSM Vérification Vérification à la volée Model checking Repr. 3D LTS Génération de tests à la volée (IOLTS) (P. Morel, 96-00) Gen. test (FSM) Test asynchrone & réparti Test de conformité & Observation Génération de tests symbolique (IOSTS) (E. Zinovieva, 00->) Test et jeux Test et contrôle (V.Tschaen, 01->)
Plan • Problématique du test • Génération de tests à la volée • Test asynchrone et réparti • Génération de tests symbolique • Bilan et perspectives
1. Problématique du test Test = analyse dynamique de programmes pour détecter des fautes par rapport à une spécification.≠ vérification de modèle :exhaustivité impossible en pratique Sélectionner les tests : • à partir du code : test boîte blanche/structurel • à partir de la spécification : test boîte noire Activité coûteuse et souvent artisanale Formaliser est incontournable pour Améliorer la qualité des tests Diminuer le coût du test
Générateur de tests Verdict Test de conformité de systèmes réactifs Pb: tester qu’une implémentationI (boîte noire) est conforme à sa spécificationS (supposée correcte). Critères de sélection S? Spécification S S! I conf S ? S? contrôle Implémentation I Cas de test S! observation
2. Génération de tests à la volée[CAV96-99,SCP97-00,IWTCS96,Cfip97, IDPT02,TSI03, …] Motivations: • Éviter l’explosion combinatoire • Traiter des systèmes non déterministes Cadre théorique: • Théorie du test des IOTS [Tretmans 95-96] Origines: LTS [DeNicola-Henessy84, Abramsky87, Philips87, Brinksma88] Contribution: • Formalisation des objectifs de test • Sélection de tests à la volée ← vérification à la volée
Le modèle: les IOLTS IOLTS (input/output LTS) : ~ IOTS [Tretmans96],IOA [Lynch88]sémantique de systèmes réactifs non-déterministes spécifications, implémentations, tests, objectifs S ?A non-déterminisme observable : Les entrées ne déterminent pas les sorties non-contrôlabilité ! Y ! X ?B t ?B non-déterminisme (au sens des automates) incertitude supprimé par déterminisation ! Z ! X
S !d ?A ! Y ! X !d t t ?A !d ?B !Y ! Z !X !d ?B !d !d ?B !Z !d Comportements visibles par le test Le test permet de contrôler les entrées et observer sorties et blocages (timers) • distinguer les blocages spécifiés dans S des autres ⇒ calculer les blocages sur S Vis(S)=det(D(S)) D(S) Automate de suspension Comportements visibles de référence. Base pour définir la conformité
I !d S? ?A !Y !X !d ?B !d ?B !Z !d Relation de conformité Plusieurs choix possibles: inclusion, égalité de traces, de sorties, de refus, etc ioco[Tretmans96] : après un comportement visible de la spécification, l’implémentation n’est autorisé à produireque les sorties et blocages spécifiées Entrées non spécifiées I ioco S Spécification partielle Sorties, blocages non spécifiées ¬ (I ioco S) vis(S) S!d
!d I Vis(S) ?A !d !Y !X !d ?B TC !d ?B ? otherwise !A Fail !Z !X !d !d !d ?Y ?X ?A Inconc ?d ! B !Y !X ? Z !d ?B !d Pass ?B !Z !d Cas de test et exécutions ∥ Verdict: Fail,Pass, Inconc Propriétés attendues des algorithmes de génération: Correction :I peut être rejetée par TC ⇒ ¬ (I ioco S) Exhaustivité: ¬ (I ioco S) ⇒ on peut générer TC qui peut rejeter I
* !x * !z Accept ? !A !B Principes de la génération de tests S Objectif de test : automate complet TracesAccept(TP) Calcul des blocages !d D(S) Déterminisation TP Vis(S) Algorithme non-déterministe [Tretmans96] [Lestiennes-Gaudel02] Produit: intersection de comportement Vis(S)xTP Sélection + Mirroir + Ajout des verdicts X CTG Conflits de contrôlabilité ? !A TC TC
!d Vis(S)) ?C ?A !Y !Y !X !d ?B !d ?B !Z ?C !d !Y !Z !d * ?B !x TP * !z Accept Étapes de la génération Produit Vis(S)xTP Sélection Verdicts Mirroir CTG Conflits de contrôlabilité TC Init ?C !d ?d ?A !A !Y !Y ?Y Fail !X ?X Inconc !d ?d reach(Init) ∩ coreach(Accept) !d ?d ?B !B ?otherwise ?B !B ?C !Y !Z ?Z Accept Pass reach(Init)
Propriétés des tests générés • Correction: possibilité de rejet non conformité • “Exhaustivité”: non-conformité possibilité de rejet • Tests arborescents ⇒ adaptés au non-déterminisme observable
Constat : S très grand ou infini |S| ≫ |TC| Idée: éviter de construire S construction paresseuse de S, D(S), Vis(S), Vis(S)xTP,CTG pilotée par TP utilisation d’une représentation implicite des IOLTS algorithmes basés sur DFS Génération à la volée Spec S D(S) Calcul à la volée TP Vis(S) CTG TC
Implémentation: TGV • Expérimentations dans des domaines variés. • Distribution: CADP, Agedis • Transfert: ObjectGéode Objectifde test bcg, IF Specification UML SDL IF Lotos Caesar open Object Géode IF open Umlaut API de Simulation (primitives parcours de S) CADP lib TGV Cas de test(bcg, aut, TTCN, )
Résumé de la contribution • Algorithmique de la génération de tests sur des modèles énumérés • Fondée sur une théorie du test bien établie • Implémentation efficace: génération à la volée (TGV) • Largement publié • Transfert industriel (Telelogic)
!a !b ?x !c !d !f ?z ?y !e ?a !x ?b ?d ?c !y !z 3. Test asynchrone et test réparti testeur I Contributions : • Inversion de la distorsion par estampillage [JJTV-FP99] • Distribution de testeur+ consensus [JJKV-FP98] Problèmes : • Test asynchrone : distorsion ⇒ perte d’information • Test réparti : coordination concurrence
4. Génération de tests symboliques[RBJ-IFM00, CJRZ-Tacas01, CJRZ-Esmart01,CJRZ-Esec01] Motivations: • Éviter l’explosion combinatoire ← données énumérées • “Programmes” de test génériques (non instanciés) Approche • Modèle symbolique: IOSTS(~ autres modèles similaires) Sémantique IOLTS ⇒ théorie du test identique • Génération symbolique: S , TP ∈IOSTS TC ∈ IOSTS Sélection par utilisation de l’interprétation abstraite [Cousot77] • Exécution : • Instanciation des entrées ← résolution de contraintes
Constante symbolique Variable propre/observée Localités val(l) paramètre de communication Modèle IOSTS condition Initiale Q TP Price >0 S Begin p =paid Return!(p) b = vb Deliver!(b) true t paid:=0 paid < Price Return?(m) S0 Cancel? Cancel? Empty!(b) Idle Return ¬(mb=COFFEE) Deliver!(mb) Reject v > 0 Coin?(v) paid:=paid+v paid < Price ∧ d = paid - Price Return!(d) Delivery mb=COFFEE Deliver!(mb) Pay Choose?(b) vb:=b Accept paid ≥ Price ∧ d=paid - Price Return!(d) paid:=Price Cancel? Choose
(s0,1,0,0) (s0,1,0,1) (s0,1,0,2) (s0,1,0,3) (s0,2,0,0) (s0,2,0,1) (s0,2,0,2) (s0,2,0,3) ⊨ Q (2,s1,3,0) (2,s1,2,0) (2,s1,3,1) (2,s1,2,1) (2,s1,2,2) (2,s1,3,2) (2,s1,2,3) (2,s1,3,3) Sémantique [[.]]: IOSTS IOLTSM [[M]] Condition initiale Q k>0 ⌃ v1=0 s0 vo < k ⌃x > 0 ⌃ (l=s0) in?(x) v1:= vo+ p; (l=s1) Garde Action(param.com.) Affectation s1 in?(2) in?(1)
Génération symbolique Opérations syntaxiques dont la sémantique commute avec les opérations sur les IOLTS : • Produit: xs • Calcul des blocages: Ds • Déterminisation: dets Vis(PS) = dets(Ds(S xsTP )) Traces([[ dets(Ds(S xsTP)) ]]) = Traces(det(D([[ S ]]xe [[ TP ]])) Sélection : reach, coreach non calculables de manière exacte⇒ sur-approximations reacha et coreacha [[.]] [[M]] M op ops [[.]] = [[ops(M)]] ops(M) op[[M]]
Conséquences de la sur-approximation Q reach(Q) ∩ coreach(Accept) [[Vis(PS)]] CTG ? Calcul exact ! Sur-approximation [[CTG]] ? ? Inconc reach(Q) Accept ?otherwise Fail
Exemple: calcul du produit Price >0 S PS Price >0 b=vb Deliver!(b) Begin p =paid Return!(p) Begin,s0 t paid:=0 t paid:=0 Empty!(b) Cancel? Return Idle Cancel? Delivery Return Reject Idle,s0 paid < Price ∧ d = paid - Price Return!(d) v > 0 Coin?(v) paid:=paid+v v > 0 Coin?(v) paid:=paid+v paid < Price ∧ d = paid - Price Return!(d) Idle Reject Choose?(b) vb:=b Pay Pay,s0 paid ≥ Price ∧ d =paid - Price Return!(d) paid:=Price paid ≥ Price ∧ d =paid - Price Return!(d) paid:=Price Cancel? Cancel? Choose Choose,s0 TP true Choose?(b) vb:=b Cancel? S0 ¬(b=COFFEE) ∧ b=vb Deliver!(b) Delivery,s0 mb=COFFEE Deliver!(mb) paid < Price Return!(m) b=COFFEE ∧ b=vb Deliver!(b) ¬(mb=COFFEE) Deliver!(mb) Empty!(b) Reject Begin Accept Accept Begin Reject
Sélection du graphe de test CTG Price >0 Price >0 Vis(PS) ?d paid:=0 Begin,s0 !d paid:=0 Begin,s0 Cancel? paid:=0 Cancel? !d ?d v ≥ Price Coin!(v) paid:=v Idle,s0 Idle,s0 Return Reject v > 0 Coin?(v) paid:=paid+v v > 0 Coin?(v) paid:=0+v ?otherwise v ≥ Price Coin!(v) paid:=v Pay,s0 paid < Price ∧ d = paid - Price Return!(d) Fail d =paid - Price Return?(d) paid:=Price Idle Reject Pay,s0 Cancel? paid ≥ Price ∧ d =paid - Price Return!(d) paid:=Price ?d Choose,s0 ?otherwise !d b=COFFEE Choose!(b) vb:=b Choose,s0 Choose?(b) vb:=b ¬(b=COFFEE) ∧ b=vb Deliver!(b) b=COFFEE ∧ b=vb Deliver!(b) Delivery,s0 vb=COFFEE ∧ b=vb Deliver?(b) Delivery,s0 vb= COFFEE ∧ b=vb Empty!(b) Empty!(b) Begin Accept Begin Reject Inconc Pass
Exécution: instanciation des constantes et résolution des gardes CTG Price >0 Implémentation I Price = 40 Begin,s0 ?d paid:=0 Résolution v ≥ Price !d Idle,s0 v ≥ Price Coin!(v) paid:=v Coin!(50) ?otherwise v ≥ Price Coin!(v) paid:=v Pay,s0 ?otherwise Return? (10) Fail d =paid - Price Return?(d) Fail ?d Choose!(COFFEE) Choose,s0 ?otherwise ?otherwise b=COFFEE Choose!(b) vb:=b Deliver?(COFFEE) vb=COFFEE ∧ b=vb Deliver?(b) Delivery,s0 vb= COFFEE ∧ b=vb Empty!(b) Empty?(COFFEE) Pass Inconc Pass Inconc
Outillage: STG Specification Test purpose Génération • Opérations symboliques • Analyse approchée par interprétation abstraite (NBAC) Exécution • Compilation C++/Java • Résolution de contraintes (Omega) Expérimentations : CEPS Distribution : prévue fin 2004 Génération de test NBAC dotty Test case Compilation IUT C++/Java C++/ Java Test case Omega verdict
Contributions à la génération de tests symbolique Originalité: • Génération de « programmes » de test • Traitement de systèmes non-déterministes • Théorie indépendante de l’approximation Cadre formel : ⇒ garantiede propriétés des tests : correction, « exhaustivité » Outillage (STG) : génération et exécution Publications
5. Bilan Contribution originale à l’algorithmique de la génération de tests • Techniques énumératives à la volée • Techniques symboliques • Non déterminisme • Asynchronisme et répartition Cadre formel propriétés des tests Outillage et expérimentations Passage à l’échelle
Travaux connexes Modèles voisins : FSM, EFSM (voir e.g. [Lee-Yannakakis 96]) contrôle et données Autres techniques à base d’objectifs : MSC[Grabowski et al 93]Utilisation de model-checkers(e.g.[Engels et al-97, Hong-Lee et al. 01]) limités dans le traitement du non-déterminisme Autres techniques symboliques : • Simulation symbolique + résolution de contraintes (pb de chemins) Smile [Eertink94] TVeda [Clatin et al. 95], Agatha [Lugato et al. 02], Gatel [Marre], BZ-TT [Legeard et al] + spec algébriques [Gaudel-James99, Lestiennes-Gaudel02], • Abstractions: EFSM[Petrenko et al 99-04]
Défis de la génération automatique de tests pour les systèmes réactifs Accroître l’usage industriel des méthodes formelles pour le test : ↗ qualité ↘ coûtsL’automatisation du test est un levier pour une meilleure introduction des méthodes formelles dans l’industrie. Passage à l’échelle de l’automatisation traiter efficacement des systèmes plus complexes en taille et expressivité Méthodologiesd’utilisation et de combinaison des méthodes formelles
Perspectives Accroître l’expressivité des modèles : contrôle, données, concurrence, communication, temps Améliorer les critères de sélection : objectifs, couverture, hypothèses de sélection Combiner les techniques pour la génération de tests : model-checking, preuve, analyse statique, interprétation abstraite, résolution de contraintes, ordres partiels, Combiner les méthodes de validation dans le processus de développement : Vérifications statiques, contrôle, test
Quelques travaux en cours Vérification et test de propriétés de sûreté Tester violation d’une propriété de sûreté valide sur la spécification [RMTJJ-Testcom04] Couverture en model-checking et génération de test [Hoskote et al. 99, Chockler et al. 01] Propriétés couvrantes tests couvrants Test de robustesse Tester la préservation de propriétés de sûreté en présence d’aléas Contrôle et test Contrôler la conformité d’une implémentation [JMRT-MSR03-CDC04-IJPR04]