Réunion projet ACI GECCOO 10 mars 2006

Slides:



Advertisements
Présentations similaires
Calcul géométrique avec des données incertaines
Advertisements

Spécification et qualité du logiciel
Le mécanisme des exceptions
Introduction à l’Algorithmique
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
CONTINUOUS TESTING Hakima Zidouri Informatique Réseau 3
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Yann Chevaleyre et Jean-Daniel Zucker
Master Génie Biologique et Informatique, première année
Autorisations Utilisation eCATT
Quoi ? Un tampon.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Ordonnancement des mouvements de deux robots
Recherche heuristique de similitudes dans les séquences dADN École Jeunes Chercheurs en Algorithmique et Calcul Formel Laurent Noé
Estella Annoni, Franck Ravat, Olivier Teste, Gilles Zurfluh
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Chapitre III Héritage (début)
Tests Programmation par contrats
Des RRA à la diagnosticabilité
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
le profil UML en temps réel MARTE
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Filtre programmable nawk(1)
Algorithmique et Programmation
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Journées Pattern Grenoble - 1 Une expérience à l'IUT de Bayonne : Les patrons Composite et Interprète Philippe Lopistéguy I.U.T. de Bayonne-Pays.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Karim-Cyril Griche LSR/IMAG
Cours 8 (18 novembre 2011) exceptions. héritagePOO-L3 H. Fauconnier2 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X();
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Patrons de conceptions de créations
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
IA IPR Académie de Rennes L’algorithmique une nouveauté ? Regard sur les programmes et les ressources ; quelques pistes.
Animateur : Med HAIJOUBI
Les assertions en Java.
Structures des données
07/21/09 1.
Test logiciel Xavier Baril.
Raffinement de modèles JML Julien Groslambert LIFC Besançon Réunion GECCOO - 25 Octobre 2005 FRE 2661.
Spécification de Demoney en JML par raffinement Pierre-Alain Masson, Julien Groslambert LIFC Besançon Réunion GECCOO - 10 mars 2006 FRE 2661.
Paradigmes des Langages de Programmation
Présenté par : Attia Hamza Merzouk Abdelkrim 2003/2004
Annexe 1 Tests unitaires d'applications Java avec JUNIT
LES PILES ET FILES.
Chapitre 3 Simulation de Fautes
La notion de type revisitée en POO
Les principes de la modélisation de systèmes
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
GESTION ET TRAITEMENT DES ERREURS
Université de Sherbrooke
Partie 2 : Acquisition de données avec une carte Daqmx
Types Abstraits.
Génération de tests pour la localisation automatique d’erreurs Yves Le Traon et Franck FLEUREY.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Le langage Racket (Lisp)
1 JEUX DE TESTS la méthode générale modèle de données critères fonctionnels d’extractions jeux de données jeux de données avant tests sélection exécution.
Deux exemples de travaux sur ce thème
MOCK.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Programmation par contraintes Réalisé par: WETCHA Chaima MOKDED Mohamed Ali FIA3-GL-AL 1 1.
PRÉSENTATION AGL LES TESTS LOGICIELS LES TEST LOGICIELS 1 Mickael BETTINELLI Brandon OZIOL Gaétan PHILIPPE Simon LUAIRE.
Transcription de la présentation:

Réunion projet ACI GECCOO 10 mars 2006 Génération automatique de tests à partir de spécifications JML Fabrice Bouquet, Frédéric Dadeau, Bruno Legeard, Julien Groslambert, Jacques Julliand Projet Cassis FRE 2661

Motivations Tester un programme à partir d’une spécification : Confronte le programme à sa spécification Vérifier que le programme est conforme à sa spécification Utilisation de la spécification : Cadre du test fonctionnel boite noire Produire les cas de test Permettre de comparer les résultats du programme avec la spécification

Motivations Intérêt majeur de JML dans le test : Mélange spécification et implantation :  variables et signatures de méthodes identiques Exécution du CT sur le système sous-test directe et gratuite Nombreux outils déjà existants Deux approches présentées : Approche aux limites (extension BZ-TT) Approche à partir des propriétés temporelles (complémentarité JAG) Objectif : produire de manière automatique des tests pour Java à partir de JML

Motivations Spécification Java/JML Critères de couverture de la spécification Compilation avec jmlc Extraction des cibles de tests Paramètres de la génération de tests Bytecode enrichi Calcul des séquences de test Fichiers .class Production de cas de tests Confrontation Réification Verdict

Plan de la présentation Quelques approches de test avec JML Approche du test aux limites à partir de JML Approche à partir de propriétés temporelles Conclusion et perspectives

Le test en Java/JML (1/4) JML permet de faire du test fonctionnel pour Java Oracle donné par le Runtime Assertion Checker (RAC) Pas d’assertions JML violées  test OK Présence d’assertions JML violées  test KO Point de vue « en général » du test en Java « The more test cases, the better » Production massive de tests Cas de tests insignifiants filtrés par le RAC

Le test en Java/JML (2/4) Type method(…) { try { body ; } catch (JMLPreconditionException e) { throw new JMLInternalPreconditionException( ); } catch (Exception e) { } finally { } } Principe de fonctionnement du Run-Time Assertion Checker : Évaluation des expressions \old Vérification de l’invariant I Vérification des préconditions P //@ invariant I ; /*@ requires P ; @ ensures Q ; @ signals (Exception) S ; @*/ Type method(…) { body ; } Vérification des postconditions exceptionnelles S Vérification des postconditions normales Q Vérification de l’invariant I

Le test en Java/JML (3/4) La référence JMLUnit Environnement d’exécution de tests unitaires de classes Java Combinaison Runtime Assertion Checker des JML tools JUnit Facilite la création de tests unitaires JUnit à partir de classes JML Utilisé par tous les outils de génération de test pour exécuter les tests Sélection des données de test manuelle  mais quelques automatisations Entiers : 0, 1, -1, Integer.MIN_VALUE, Integer.MAX_VALUE, + valeurs aléatoires Objets : null, constructeur par défaut Tableaux : null, aucun élément, un seul élément

Le test en Java/JML (4/4) Jartege : Java Random Test Generator C. Oriat – LSR Grenoble Choix aléatoire des appels de méthodes Choix aléatoire des valeurs des paramètres Filtrage des cas de tests non significatifs à la construction Tobias : Test Combinatoire Y. Ledru et al. – LSR Grenoble Combine les séquences de tests correspondant à un schéma défini par l’utilisateur Définition manuelle des valeurs d’entrées Filtrage des cas de tests inconclusifs à l’exécution TestEra / Korat : automated testing based on Java predicates C. Boyapati et al., MIT – Cambridge Génère les valeurs d’entrées satisfaisant un prédicat Java donné Nécessite des limitations (taille) sur les structures Cas de tests composés d’une création d’objet et d’une invocation de méthode

Plan de la présentation Quelques approches de test avec JML Approche du test aux limites à partir de JML Approche à partir de propriétés temporelles Conclusion et perspectives

Définition des cibles de tests Rappel : le test à partir de spécifications B Extraction du but aux limites : A partir d’un comportement de la spécification Découpage d’une opération Prédicat avant/après représenté sous forme d’un graphe Recherche d’un état qui permet l’activation du comportement En utilisant l’animation symbolique de la spécification Minimisation/maximisation des variables d’état En fonction de leur type (atomes, entiers, ensembles, etc.) Activation du comportement avec des valeurs des paramètres aux limites Inconvénient : état limite peut-être inatteignable Récemment modifié : Préambule vise à atteindre un état permettant d’activer un comportement Prédicat de spécialisation (éventuellement visant des valeurs limites) Toujours des valeurs aux limites pour les paramètres

Définition des cibles de test Objectif du test JML Tester une classe (ou un ensemble de classes) Bouchonner les autres classes (considérer qu’elles sont correctes) Activer les comportements des méthodes avec des paramètres pertinents Critères de couvertures Couverture des comportements Couverture des décisions Couverture des données Critère d’arrêt Activation de chaque comportement de chaque méthode de chaque classe

Définition des cibles de test Couverture des comportements Extraction des comportements /*@ requires P1 ; @ assignable A ; @ ensures Q1 ; @ also @ … @ requires PN @ ensures QN ; @ requires PN+1 ; @ signals (E1) S1 ; @ requires PN+M ; @ signals (EM) SM ; @*/ Type methode(T1 p1, …) { … } 1 P1  … PN  PN+1 … PN+M Hypothèse de travail : Exclusion mutuelle entre comportements Normal Chacun des comportements exceptionnels 2 No PN+M PN+1 P1 3 …… … … 4  P1 E1 EM Q1 5 …… … … … S1  PN SM PN … QM … A

Définition des cibles de test Couverture des décisions Réécriture des disjonctions dans les comportements P1  P2 Réécriture 1: P1  P2  Statement Coverage & Decision Coverage Réécriture 2 : P1 [] P2  Decision/Condition Coverage Réécriture 3 : P1   P2 []  P1  P2  Full Predicate Coverage Réécriture 4 : P1   P2 []  P1  P2 [] P1  P2  Multiple Decision Coverage

Définition des cibles de test Couverture des données Valeurs limites pour les paramètres de la méthode dans le contexte (partie avant) du comportement testé Paramètres numériques : bornes du domaine de définition du paramètre permettant d’activer le comportement ex. //@ requires p > 0; void method(short p) p = 1 [] p = 32767 Objet p de type C aux limites : valeurs systématiques « limites » Référence null Référence this (si \typeof(this) <: \type(C)) Objet p tel que : p != null && p != this && \typeof(p) == \type(C) Objet p tel que : p != null && p != this && \typeof(p)  : \type(C) Objet p tel que : p == p’ avec p’ autre paramètre Pour les cas 2,3,4,5 : combinaison avec la mise aux limites des attributs numériques du paramètre utilisés dans le comportement

Adaptation du test aux limites à JML (1/3) Calcul d’un objectif de test avec la technologie contrainte CLPS-BZ Considérer un état contraint du système (représentation symbolique) Environnement : ensemble objets  attributs  valeurs Quelque soient les objets existants (restriction : ensemble des adresses d’objets borné) Contraint par les ensembles de définition des types des attributs Poser les contraintes d’invariant de classe Réduire les domaines des valeurs des attributs des classes Poser la partie avant du comportement issu de la méthode à tester Pose des contraintes d’existence de this Application des règles de production des cas de test pour les objets Pose des contraintes d’existence des objets paramètres (cas 3,4,5 du slide précédent) Production d’un prédicat de spécialisation PspeObj Application des règles de production pour les données numériques Minimize/Maximize les valeurs numériques Production d’un prédicat de spécialisation PspeNum

Adaptation du test aux limites à JML (2/3) Travail avec les prédicats de spécialisation Pspe = PspeObj  PspeNum Pspe = objectif de test S’assurer de la consistance Pspe avec le contexte Préambule du cas de test : trouver par animation symbolique un état satisfaisant Pspe Le calcul de préambule contiendra : La création d’un objet de la classe testée (guidé) La création des objets correspondant aux paramètres objets de la méthode testée (guidé) L’invocation de méthodes pour placer l’objet testé dans un état satisfaisant l’activation du comportement (algorithme Best-First) L’invocation de méthodes pour placer les objets en paramètres aux limites (algorithme Best-First)

Adaptation du test aux limites à JML (3/3) Une fois le préambule calculé, on obtient un cas de test abstrait Cas de test réifié pour produire du code Java exécutable Le JML Run-Time Assertion Checker vérifiera les assertions (oracle) lors de l’exécution

Plan de la présentation Quelques approches de test avec JML Approche du test aux limites à partir de JML Approche à partir de propriétés temporelles Conclusion et perspectives

Approche à partir de propriétés temporelles Principe : utiliser les annotations générées par JAG Implantation du langage de M. Huisman & K. Trentelman exprimant des propriétés temporelles \always, \before, \unless, \until, … Basé sur la notion d’événements des appels de méthode, terminaison normale, exceptionnelle Rajoute des annotations : variables ghost, invariants, contraintes historiques Permet l’expression de propriété de sûreté et de vivacité

Approche à partir de propriétés temporelles Problématique : générer des tests pertinents vis-à-vis de la propriété Exemple : after beginTransaction() called always trDepth == true unless commitTransaction() called, abortTransaction() called Toutes les exécutions ne contenant pas d’appel à beginTransaction() ne sont pas pertinentes. trDepth = = true commitTransaction() abortTransaction() beginTransaction()

Approche à partir de propriétés temporelles A partir les propriétés de sûreté et de vivacité : Sûreté : //@ invariant Predcontexte  Propriete Vivacités : //@ invariant Variant >= 0 ; //@ constraints \old(PredEntrée) && !(PredSortie) ==> \old(Variant) > Variant ; //@ constraints \old(PredEntrée) && !(PredSortie) ==> requires(m1) || … || requires(mN) ; où m1, m2, …, mN sont des méthodes de progrès Objectif du test : activer les comportements de la spécification dans le contexte : \old(PredEntrée) && !(PredSortie) avec différentes couvertures Le Runtime Assertion Checker vérifie que la propriété n’est pas violée sur le code

Approche à partir de propriétés temporelles Principe de construction des cas de tests : Atteindre un état satisfaisant le contexte algorithme « best-first » Activation des comportements par : parcours en profondeur sans remise du graphe d’état algorithme de parcours de graphe [Col05] cherche à activer une liste de comportements dès qu’on comportement a été activé, on l’enlève de la liste tant que le contexte est satisfait Cas d’arrêts possibles : Plus de comportements activables Tous les comportements couverts Le contexte n’est plus satisfait Réification du cas de test utilisant les valeurs aux limites des paramètres

Approche à partir de propriétés temporelles Illustration du principe de construction des cas de tests : Comportements à activer cpt1, cpt2, cpt3, cpt4, cpt5, cpt6, cpt7, cpt8, cpt9 Contexte P P P P cpt2 cpt5 cpt1 cpt7 P P ! P ! P ! P ! P P cpt4 cpt3 P P P P cpt8 cpt3 cpt6 cpt9 Algo “meilleur d’abord” Algo “profondeur sans remise”

Collaboration JAG/JML-TT Modèle JML JML-TT Jeu de tests JML RAC Verdict Propriété JAG Implantation annotée Implantation

Plan de la présentation État de l’art du test avec Java basé sur JML Approche du test aux limites à partir de JML Approche à partir de propriétés temporelles Conclusion et perspectives

Conclusion Originalité par rapport à l’existant Génération automatique de tests basés sur la spécification Pas une séquence aléatoire ( Jartege) Complètement automatique ( Tobias) Utilisation des valeurs limites Classique pour les valeurs numériques Nouveauté pour les objets Calcul du préambule guidé Par l’activation d’un ou plusieurs comportement issus de la spécification Par les valeurs aux limites d’attributs spécifiques

Perspectives Évaluer la qualité des tests produits Adapter une autre méthode de génération des tests Test combinatoire + valeurs limites (approche à la Tobias) Test aléatoire + valeurs limites (approche à la Jartege) Comparer les approches