320 likes | 458 Views
Membres du jury: Prof. Bruno Legeard Prof. Jan Tretmans Dr. Bruno Marre Prof. Olivier Ridoux Prof. Claude Jard Dr. Vlad Rusu. (rapporteur) (rapporteur) (examinateur) (examinateur) (directeur de thèse) (encadrant).
E N D
Membres du jury: Prof. Bruno Legeard Prof. Jan Tretmans Dr. Bruno Marre Prof. Olivier Ridoux Prof. Claude Jard Dr. Vlad Rusu (rapporteur) (rapporteur) (examinateur) (examinateur) (directeur de thèse) (encadrant) Méthodes symboliques pour la génération de tests de systèmes réactifs comportant des données Eléna Zinovieva Leroux 22 novembre 2004
Environnement Systèmes Réactifs • complexes, • critiques. Doivent être fiables et sans erreur importante. • test, • vérification, • analyse statique, • …
CoffeeButton ? CoffeeButton ? Tea ! Tea ! Coffee ! Coffee ! Fail Fail Pass Pass bouton de café thé Cas de test café Test Exécution d’une implémentation sous test avec l’intention d’y trouver des erreurs. « Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence. » E.W. Dijkstra
Mars Climate Orbiter de la NASA (Octobre 1999) [Isbell & Savage] automatisation du test Désastre: écrasé sur la planète au lieu d’atteindre une orbite sécurisé. Pourquoi:erreur logicielle – erreur lors de la conversion des unités de mesure américaines en valeurs métriques. • Diminution du coût. • Identification plus facile des erreurs. Pourquoi s’intéresser au test? • Le test est largement utilisé dans l’industrie, mais il estcoûteux. • La détection d’erreurs graves dans les systèmes réactifs est très importante. « Testing often consume 50% of software effort. » B. Boehm
Plan Test de conformité boîte noire. Cadre formel du test de conformité. Génération symbolique de cas de test. Exécution d’un cas de test. Outil : STG. Conclusionet perspectives.
? Test de conformité boîte noire conforme à ? Implémentation du système Spécification (et objectif de test) Génération de cas de test automatique Cas de test Exécution du test Inconclusive Fail Pass
Des techniques énumératives aux techniques symboliques Motivations : • Explosion combinatoire de l’espace d’états; • Les cas de test ne sont pas génériques. Solution : Utiliser un nouveau modèle et des techniquessymboliques pour produire un cas de test!
Notre approche • Modèlesymbolique : IOSTS. • Génération symboliquede cas de test : • Spec, TP IOSTS TC IOSTS. • Exécution de cas de test : • instanciation des entrées par la résolution de contraintes.
Plan • Test de conformité boîte noire. • Cadre formel du test de conformité: • système symbolique de transitions à entrée/sortie (IOSTS), • relation de conformité, • cas de test & implémentation sous test, • propriétés attendues des cas de test. • Génération symbolique de cas de test. • Exécution d’un cas de test. • Outil : STG. • Conclusionet perspectives.
Objectif de test Begin Begin visible cPrice>0 (pRemVal=vPaid) Return ! (pRemVal) Idle (pBevtp = COFFEE) Deliver ! (pBevtp) t vPaid:=0 Cancel ? Cancel ? (vPaid<cPrice) Return ! (pRemValtp) Pay pCoinVal > 0 Coin ? (pCoinVal) vPaid:=vPaid+pCoinVal (vPaid<cPrice) & (pRemVal=cPrice-vPaid) Return ! (pRemVal) Return Traces(Spec) Accept (vPaid ≥ cPrice) & (pRemVal=vPaid-cPrice) Return ! (pRemVal) vPaid:=cPrice Choose (vBev = pBev) Deliver ! (pBev) Cancel ? Delivery Reject ChooseBeverage ? (pBev) vBev := pBev Empty ! Machine à café Système symbolique de transitions à entrée/sortie (IOSTS) Spécification Exemple de comportement : t. Coin ? (5) . Return ! (2) . ChooseBererage ? (COFFEE) . Deliver ! (COFFEE)
Entrées non spécifiées (IUT ioc Spec) L? L! Sorties non spécifiées Spécification partielle ¬ (IUT ioc Spec) Relation de conformité ioc (version faible d’ioco[Tretmans96]) : aprèsuncomportement visible de la spécification Spec, l’implémentation sous test IUT n’est autorisée à produire que les sorties spécifiées. Formellement : IUT ioc Spec = ∀ s ∈ Traces(Spec) . [ Out(IUT after s) ⊆ Out(Spec after s) ] Comportements visibles d’une Spec IUT
Machine à café Cas de test & IUT …………… BeverageType ChooseBeverage (BeverageType pBeverage) { cerr << "ChooseBeverage("; if(pBeverage == COFFEE) { cerr << “TEA)"; return TEA; } if(pBeverage == TEA) { cerr << "TEA)"; return TEA; } } …………… cPrice>0 <Begin,Begin> (pCoinVal>0) & (pCpinVal ≥ cPrice) Coin ! (pCoinVal) vPaid:=0+pCoinVal <Pay,Begin> (pRemVal = vPaid-cPrice) & (vPaid > 0) & (vPaid ≥cPrice) Return ? (pRemVal) vPaid:=cPrice <Choose,Begin> (pBev=COFFEE) & (vPaid = cPrice) & (vPaid > 0) ChooseBeverage ! (pBev) vBev := pBev <Delivery,Begin> (vPaid = cPrice) & (vPaid > 0) Empty ? (pBev=COFFEE) & (vBev=pBev) & (vPaid > 0) & (vPaid=cPrice) Deliver ? (pBev) ( (pBev=COFFEE) & (vBev=pBev) & (vPaid > 0) & (vPaid=cPrice) ) Deliver ? (pBev) Pass Fail Inconclusive
Propriétés des cas de test • TC est non biaisé s’il ne rejette pas les IUT conformes. • TC est précis s’il produit le verdict Pass lorsque la trace observée de l’IUT est une trace de la Spec sélectionnée par l’objectif de test TP. • TC est concluant s’il produit le verdict Inconclusive quand la trace observée de l’IUT est une trace de la Spec qui finit par une action de sortie mais aucun prolongement de cette trace ne peut produire le verdict Pass.
Plan Test de conformité boîte noire. Cadre formel du test de conformité. Génération symbolique de cas de test. Exécution d’un cas de test. Outil : STG. Conclusionet perspectives.
Génération symbolique de cas de test • Génération symbolique • de cas de test : • Calcul du produit SP = Spec TP; • Construction des comportements • visibles SPvis; • Sélection et simplification du • graphe de test TG; • Complétion de TG en entrée. Spécification Spec Cas de test TC Objectif de test TP
Exemple : calculduproduit SP = Spec TP Spec cPrice>0 & true cPrice>0 (pRemVal=vPaid) Return ! (pRemVal) Begin <Begin,Begin> tau vPaid:=0 tau vPaid:=0 Cancel ? Idle (vPaid<cPrice) & (pRemVal=cPrice-vPaid) Return ! (pRemVal) Cancel ? <Idle,Begin> <Choose,Reject> pCoinVal > 0 Coin ? (pCoinVal) vPaid:=vPaid+pCoinVal (vPaid<cPrice) & (vPaid ≥cPrice) & (pRemVal=vPaid-cPrice) Return ! (pRemVal) vPaid:=cPrice pCoinVal > 0 Coin ? (pCoinVal) vPaid:=vPaid+pCoinVal (vPaid<cPrice) & (vPaid ≥cPrice) & (pRemVal=cPrice-vPaid) Return ! (pRemVal) Return Pay (vPaid ≥ cPrice) & (pRemVal=vPaid-cPrice) Return ! (pRemVal) vPaid:=cPrice <Return,Reject> (vBev = pBev) Deliver ! (pBev) <Pay,Begin> Cancel ? (vPaid<cPrice) & (pRemVal=cPrice-vPaid) Return ! (pRemVal) (vPaid ≥cPrice) & (pRemVal=vPaid-cPrice) Return ! (pRemVal) vPaid:=cPrice Delivery Choose ChooseBeverage ? (pBev) vBev := pBev Cancel ? <Choose,Begin> <Idle,Reject> Empty ! ChooseBeverage ? (pBev) vBev := pBev TP otherwise true (pBevtp ≠ COFFEE) Deliver ! (pBevtp) <Delivery,Begin> Empty ! Begin (vBev=pBev) & (pBev ≠COFFEE) Deliver ! (pBev) (vBev=pBev) & (pBev=COFFEE) Deliver ! (pBev) (pBevtp = COFFEE) Deliver ! (pBevtp) Cancel ? <Begin,Accept> (vPaid<cPrice) Return ! (pRemValtp) <Begin,Reject> Accept Reject otherwise otherwise
Génération symbolique de cas de test • Génération symbolique • de cas de test : • Calcul du produit SP = Spec TP; • Construction des comportements • visibles SPvis : • clôture, • déterminisation. • Sélection et simplification du • graphe de test TG; • Complétion de TG en entrée. Spécification Spec Cas de test TC Objectif de test TP • Résultat après le produit : • Traces(SP) = Traces(Spec) • ATraces(SP) Traces(Spec) ATraces(TP)
Ga a() Aa G1 1 A1 Gn n An ln+1 l2 ln G1 & (G2◦A1) & … & (Gn◦An-1◦…◦A1) & (Ga◦An◦An-1◦…◦A1) a() Aa ◦ An ◦ An-1 ◦…◦ A1 la la l1 l1 Construction des comportements visibles (1/2) pas de cycle d’actions internes. Clôture : Exemple : clôture(SP) cPrice>0 SP cPrice>0 <Begin,Begin> <Begin,Begin> vPaid:=0 Cancel ? vPaid:=0 (pCoinVal>0) & (0<max) Coin ? (pCoinVal) vPaid:=0+pCoinVal <Idle,Begin> Cancel ? vPaid:=vPaid (pCoinVal>0) & (vPaid < max) Coin ? (pCoinVal) vPaid:=vPaid+pCoinVal <Return,Reject> <Pay,Begin> <Return,Reject> <Pay,Begin>
lc l2 l1 l lb lb lc l2 l1 l Construction des comportements visibles (2/2) termine sous une condition syntaxique. Déterminisation : (G1 & ¬G2) a() A1 (¬G1 & G2) a() A2 G1 a() A1 G2 a() A2 (G1 & G2) a() Gb b(b) Ab Gc c(c) Ac Gc c(c) Ac Gb b(b) Ab l1,2 (Gc◦A2) c(c) (Ac◦A2) (Gb◦A1) b(b) (Ab◦A1) Exemple : SPvis = det(clôture(SP)) clôture(SP) Begin Begin pCoinVal > 0 Coin ? (pCoinVal) vPaid := pCoinVal pCoinVal > 0 Coin ? (pCoinVal) vPaid := pCoinVal Pay Pay vPaid > 3 Coffee ! v := 2 vPaid 3 Coffee ! v := 1 vPaid < 3 Coffee ! v := 1 vPaid 3 Coffee ! v := 2 vPaid = 3 Coffee ! WaitMilk WaitSugar WaitMilk WaitSugar Wait1,2 vPaid – v > 0 Sugar ! vPaid := vPaid v := v vPaid – v > 0 Sugar ! vPaid := vPaid v := v vPaid + v > 10 Milk ! vPaid := vPaid + v v := v vPaid + v > 10 Milk ! vPaid := vPaid + v v := v Coffee&Sugar Coffee&Milk Coffee&Sugar vPaid + 2 > 10 Milk ! vPaid := vPaid + 2 v := 2 Coffee&Milk vPaid – 1 > 0 Sugar ! vPaid := vPaid v := 1
Génération symbolique de cas de test • Génération symbolique • de cas de test : • Calcul du produit SP = Spec TP; • Construction des comportements • visibles SPvis; • Sélection et simplification du • graphe de test TG; • Complétion de TG en entrée. Spécification Spec Cas de test TC • Résultat après construction de SPvis : • Traces(SPvis) = Traces(SP) = Traces(Spec) • ATraces(SPvis) = ATraces(SP) Objectif de test TP
Sélection du graphe de test SPvis avec S – ensemble des états, S0 – ensemble des états initiaux, Sbut – ensemble des états buts. S0 S Coin ? (5) inconclusive Problème : Sélectionner un sous graphe de SPvis menant à la satisfaction de l’objectif de test TP. Return ! (2) Cancel ? ChooseBeverage ? (COFFEE) Empty ! Deliver ? (COFFEE) Solution : Sbut coreach(SPvis,Sbut) non calculables de manière exacte sur-approximation coreach(SPvis,Sbut) sur-approximation calcul exact TG
et simplification TG = miroir(reach(TG,S0)) & cPrice>0 <Begin,Begin> & (pCoinVal>0) & (cPrice>0) & (pCpinVal ≥ cPrice) Coin ! (pCoinVal) vPaid:=0+pCoinVal <Pay,Begin> (pRemVal=vPaid-cPrice) & (vPaid > 0) & (cPrice > 0) & (vPaid ≥cPrice) Return ? (pRemVal) vPaid:=cPrice analyse d’accessibilité avec NBac analyse de co-accessibilité avec NBac <Choose,Begin> (pBev=COFFEE) & (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) ChooseBeverage ! (pBev) vBev := pBev & <Delivery,Begin> (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) Empty ? (pBev=COFFEE) & (vBev=pBev) & (vBev=COFFEE) (cPrice > 0) & (vPaid > 0) & (vPaid=cPrice) Deliver ? (pBev) + miroir Pass Inconclusive Exemple : sélection du graphe de test Résultat de l‘analyse de la co-accessibilité TG’ = coreach(SP’vis,Sacc) SP’vis cPrice>0 <Begin,Begin> pCoinVal>0 & (cPrice>0) & <Begin,Begin> (cPrice>0) (cPrice > 0) & (pCoinVal > 0) (0+pCoinVal ≥ cPrice) (vPaid ≥ cPrice) Coin ? (pCoinVal) vPaid:=0+pCoinVal (cPrice > 0) Cancel ? vPaid := 0 pCoinVal>0 (pRemVal = vPaid-cPrice) & ¬[ (cPrice>0) & (cPrice = cPrice) ] Return ! (pRemVal) vPaid:=cPrice <Pay,Begin> <Pay,Begin> (cPrice>0) & (vPaid ≥ cPrice) (pRemVal=vPaid-cPrice) & (cPrice>0) & (vPaid > 0) & (cPrice > 0) & (vPaid ≥cPrice) & (pRemVal=vPaid-cPrice) pRemVal=vPaid-cPrice (cPrice=cPrice) (vPaid=cPrice) (vPaid > 0) & (cPrice > 0) & (vPaid<cPrice) & (pRemVal=cPrice-vPaid) Return ! (pRemVal) <Return,Reject> Inconclusive <Choose,Begin> (cPrice>0) & (vPaid=cPrice) Return ! (pRemVal) vPaid:=cPrice true (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) Cancel ? <Delivery,Begin> (cPrice>0) & (vPaid=cPrice) & (vBev=COFFEE) (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) Empty ! <Choose,Begin> Inconclusive <Idle,Reject> (pBev=COFFEE) & (pBev=vBev) (cPrice > 0) & (vPaid = cPrice) & (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) (vBev = COFFEE) (pBev = COFFEE) <Begin,Accept> (cPrice>0) & (vPaid=cPrice) & (vBev=COFFEE) ChooseBeverage ? (pBev) vBev := pBev (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) & (vBev=pBev) & (pBev ≠COFFEE) Deliver ! (pBev) <Delivery,Begin> (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) & (vBev=pBev) & (pBev=COFFEE) (pBev=COFFEE) & (vBev=pBev) & (cPrice > 0) & (vPaid=cPrice) & (vBev=COFFEE) (pBev=COFFEE) & (vBev=pBev) & ¬[ (cPrice > 0) & (vPaid=cPrice) & (vBev=COFFEE) ] Deliver ! (pBev) Deliver ! (pBev) <Begin,Accept> Pass <Begin,Reject>
Génération symbolique de cas de test • Génération symbolique • de cas de test : • Calcul du produit SP = Spec TP; • Construction des comportements • visibles SPvis; • Sélection et simplification du • graphe de test TG. • Complétion de TG en entrée. Spécification Spec Cas de test TC • Résultat après sélection de TG : • Traces(TG) Traces(SPvis) = Traces(SP) = Traces(Spec) • Tracespass(TG) = ATraces(Spec TP) • Tracesinconc (TG) (Traces(Spec) Traces(Spec).L!Spec) \ pref(ATraces(Spec TP)) Objectif de test TP
TC est non biaisé TC est précis TC est concluant Exemple : complétion de TG en entrée • Traces(TC) = Traces(TG) Tracesfail(TC) • Tracesfail(TC) Traces(Spec) . L!Spec \ Traces(Spec) TG vers TC cPrice>0 <Begin,Begin> (pCoinVal>0) & (cPrice>0) & (pCpinVal ≥ cPrice) Coin ! (pCoinVal) vPaid:=0+pCoinVal otherwise ? • Tracespass(TC) = Tracespass(TG) = ATraces(Spec TP) <Pay,Begin> otherwise ? (pRemVal=vPaid-cPrice) & (vPaid > 0) & (cPrice > 0) & (vPaid ≥cPrice) Return ? (pRemVal) vPaid:=cPrice otherwise ? <Choose,Begin> (pBev=COFFEE) & (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) ChooseBeverage ! (pBev) vBev := pBev • Tracesinconc(TC) = Tracesinconc(TG) • (Traces(Spec) Traces(Spec).L!Spec) \ • pref(ATraces(Spec TP)) otherwise ? <Delivery,Begin> (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) Empty ? (pBev=COFFEE) & (vBev=pBev) & (vBev=COFFEE) (cPrice > 0) & (vPaid > 0) & (vPaid=cPrice) Deliver ? (pBev) Fail Pass Inconclusive
Plan Test de conformité boîte noire. Des techniques énumératives aux techniques symboliques. Génération symbolique de cas de test. Exécution d’un cas de test. Outil : STG. Conclusion et perspectives.
Exécution d’un cas de test IUT d’une machine à café cPriceIUT = 3 TC cPrice>0 <Begin,Begin> (pCoinVal>0) & (cPrice>0) & (pCoinVal ≥ cPrice) Coin ! (pCoinVal) vPaid:=0+pCoinVal Coin ? (5) otherwise ? <Pay,Begin> otherwise ? (pRemVal=vPaid-cPrice) & (vPaid > 0) & (cPrice > 0) & (vPaid ≥cPrice) Return ! (2) Return ? (pRemVal) vPaid:=cPrice otherwise ! otherwise ? <Choose,Begin> ChooseBeverage ? (COFFEE) (pBev=COFFEE) & (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) otherwise ! ChooseBeverage ! (pBev) vBev := pBev otherwise ? <Delivery,Begin> Empty ! Deliver ! (COFFEE) (vPaid = cPrice) & (vPaid > 0) & (cPrice > 0) (pBev=COFFEE) & (vBev=pBev) & (vBev=COFFEE) (cPrice > 0) & (vPaid > 0) & (vPaid=cPrice) Fail Inconclusive Pass Empty ? Deliver ? (pBev) Fail Pass Inconclusive • instanciation des constantes symboliques, • résolution des gardes.
Plan Test de conformité boîte noire. Cadre formel du test de conformité. Génération symbolique de cas de test. Exécution d’un cas de test. Outil : STG. Conclusion et perspectives.
Outil : STGen collaboration avec D. Clarke et F.-X. Ponscarme Spécification & Objectif de test • Génération • opérations symboliques, • analyse approchée par • interprétation abstraite • (NBac). Dotty STG Génération de cas de test NBac Cas de test abstrait • Exécution • compilation (C++/Java), • résolution de contraintes • (Omega). Compilation IUT (C++/Java) • Expérimentations • BRP, • CEPS [CJRZ-Esmart01] : • ~30 variables et constantes symboliques, • 30 localités et 91 transitions syntaxiques. Cas de test (C++/Java) Omega Pass, Inconclusive, Fail
Plan Test de conformité boîte noire. Cadre formel du test de conformité. Génération symbolique de cas de test. Exécution d’un cas de test. Outil : STG. Conclusionet perspectives.
Contributions[CJRZ-Esec01, CJRZ-Esmart01, CJRZ-Tacas02, Z-Movep02, JJRZ-RR04 ] Originalité : • Génération de cas de test génériques. • Traitementde systèmes non déterministes. • Sélection symbolique de cas de test basée sur l’analyse approchée et indépendante de l’approximation. Implémentation : La génération symbolique de testsest complètement automatisée (STG).
Perspectives • Améliorer les critères de sélection : • génération automatique d’objectifs de test, • génération de cas de test à partir de spécifications et de critères de couverture, • … • Combiner des méthodes de validation dans le processus de développement. • Réaliser plus d’études de cas.
Спасибо Merci Thank you