Génération Automatique De Tests Unitaires Avec Praspel, Un Langage De Spécification Pour PHP the Art of Contract-Based Testing in PHP with Praspel
Total Page:16
File Type:pdf, Size:1020Kb
CORE Metadata, citation and similar papers at core.ac.uk Provided by HAL - Université de Franche-Comté G´en´erationautomatique de tests unitaires avec Praspel, un langage de sp´ecificationpour PHP Ivan Enderlin To cite this version: Ivan Enderlin. G´en´eration automatique de tests unitaires avec Praspel, un langage de sp´ecificationpour PHP. Informatique et langage [cs.CL]. Universit´ede Franche-Comt´e,2014. Fran¸cais. <NNT : 2014BESA2067>. <tel-01093355v2> HAL Id: tel-01093355 https://hal.inria.fr/tel-01093355v2 Submitted on 19 Oct 2016 HAL is a multi-disciplinary open access L'archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destin´eeau d´ep^otet `ala diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publi´esou non, lished or not. The documents may come from ´emanant des ´etablissements d'enseignement et de teaching and research institutions in France or recherche fran¸caisou ´etrangers,des laboratoires abroad, or from public or private research centers. publics ou priv´es. Thèse de Doctorat école doctorale sciences pour l’ingénieur et microtechniques UNIVERSITÉ DE FRANCHE-COMTÉ No X X X THÈSE présentée par Ivan Enderlin pour obtenir le Grade de Docteur de l’Université de Franche-Comté K 8 k Génération automatique de tests unitaires avec Praspel, un langage de spécification pour PHP The Art of Contract-based Testing in PHP with Praspel Spécialité Informatique Instituts Femto-ST (département DISC) et INRIA (laboratoire LORIA) Soutenue publiquement le 16 juillet 2014 devant le Jury composé de : Rapporteurs Lydie du Bousquet Professeur à l’Université Joseph Fourier Arnaud Gotlieb Chargé de recherche habilité à l’IRISA Examinateur Michel Rueher Professeur à l’Université de Nice Sophia Antipolis Directeurs Fabrice Bouquet Professeur à l’Université de Franche-Comté Frédéric Dadeau Maître de conférences à l’Université de Franche-Comté Alain Giorgetti Maître de conférences à l’Université de Franche-Comté Remerciements Je tiens à profiter de l’occasion qui m’est offerte pour remercier toutes les personnes qui ont été soutenantes. Je tiens à remercier avant tout mon Dieu, the Everlasting, pour cette épreuve, ses promesses et son soutien en tout temps. Merci. Je souhaite remercier ma petite femme, Hend, lady caramel, pour son éternel amour, sa patience, son écoute et son infini tendresse. Je t’aime. Q Ì .½J.k@ .ú ×XB@ AîEAJk C«ðAîEA@ ð Aë . C« YJë èñÊm '@ ð èQK QªË@ ú æ k. ðP Qº@ à@ YK P@ Je souhaite particulièrement remercier mes parents et beaux-parents, Nadine et Q Q Christophe, ÖÞ ð èA Jk, mes sœurs et belles-sœurs, Naomi et Joanna, ø Q å ð Pð ¯, ainsi que toute ma famille, pour leur présence et leur soutien. Merci à tous les amis de France, de Suisse, de Tunisie, du Maroc, d’Italie, de Grèce, du Brésil, du Kenya, de Belgique, du Mexique, de Macédoine et de partout, qui m’ont aidé dans ma thèse et qui m’aident dans Hoa. Par ordre alphabétique, un immense et sincère merci à Abdallah Ben O., Alexandre V., Alexis von G., Bap- Елизабета С tiste et Anne-Laure F., F.- ., Emmanuel T., Frédéric H., Guislain D., Gérard E., Isabelle et Yves D., ÈCg. YÒm×, Jean-Marie G., Julien B., Julien C., Julien L., Kalou C. C., Laura et Raphaël E., Lucie et á Ó@ M., María Aydeé S. S. et Cédric J., Marta P., Mikaël R., Naomy W., Nawo M., Ophélie et Matthieu C., Raphaëlle M., Σοφία και Κώστας Τ., Stéphane P., Sylvie et Kiko F., Sébastien H., Willy M., Wilma et Fabio S. (et toute la troupe !), Yohann D., toute la communauté de Hoa, d’atoum et de PHP, et tout ceux que j’aurais oublié. Et bien sûr, merci à mes encadrants : Fabrice B., Frédéric D. et Alain G. pour leur savoir, leur patience et être restés à mes côtés durant cette aventure ! y 10 5 x = 16 sin(t)3 −15 −10 −50 5 1015 x y = 13 cos(t)− 5 cos(2t)− 2 cos(3t)− cos(4t) −5 −10 −15 Table des matières 1 Introduction 1 1.1 Behavioral Interface Specification Language ................. 3 1.2 Contexte et problématique . 4 1.2.1 PHP: Hypertext Preprocessor .................... 4 1.2.2 Test unitaire . 5 1.2.3 Langage de spécification . 6 1.3 Contributions . 7 1.3.1 Praspel et les domaines réalistes . 7 1.3.2 Générateurs de données . 7 1.3.3 Critères de couverture des contrats . 8 1.4 Plan du mémoire . 8 2 État de l’art 9 2.1 Langages de contrat . 9 2.2 Contract-based Testing ............................ 13 2.3 Génération de données . 18 2.3.1 Technique de génération . 19 2.3.2 Données générées . 22 2.4 Synthèse . 24 3 Langage de spécification 27 3.1 Domaines réalistes . 27 3.1.1 Implémentation . 28 3.1.2 Hiérarchie et univers . 29 3.1.3 Paramètres . 29 3.1.4 Classification . 31 3.2 Praspel . 32 3.2.1 Clauses . 34 3.2.2 Expressions . 38 3.2.3 Description de tableaux . 41 3.3 Synthèse . 43 i ii Table des matières 4 Génération de données de test 45 4.1 Génération standard . 46 4.2 Génération à partir de propriétés sur les tableaux . 48 4.2.1 Étude des propriétés les plus utilisées . 49 4.2.2 Syntaxe des propriétés . 49 4.2.3 Sémantique ensembliste des propriétés . 52 4.2.4 Solveur de contraintes . 54 4.3 Génération à partir de grammaire pour les chaînes de caractères . 61 4.3.1 Langage de description de grammaire . 61 4.3.2 Compilateur de compilateurs LL(⋆) . 64 4.3.3 Algorithmes de génération à partir de grammaires . 69 4.4 Génération d’objets . 79 4.5 Synthèse . 81 5 Critères de couverture de contrat 83 5.1 Couverture de contrat . 84 5.1.1 Graphe d’une expression . 85 5.1.2 Graphe d’un contrat atomique . 87 5.1.3 Contrat atomique avec plusieurs clauses @throwable . 87 5.1.4 Graphe d’un contrat avec une clause @behavior . 89 5.1.5 Contrat avec plusieurs clauses @behavior . 90 5.1.6 Cas de la clause @default ..................... 90 5.1.7 Cas de la clause @invariant ................... 90 5.2 Définitions . 92 5.3 Critères de couverture . 95 5.3.1 Critère de Couverture de Clause . 97 5.3.2 Critère de Couverture de Domaine . 97 5.3.3 Critère de Couverture de Prédicat . 99 5.3.4 Combinaisons . 100 5.4 Synthèse . 101 6 Implémentations et outillage 103 6.1 Implémentation dans Hoa . 104 6.1.1 Hoa\Realdom ............................105 6.1.2 Hoa\Praspel ............................106 6.1.3 Hoa\Compiler et Hoa\Regex . 108 6.2 Praspel . 109 6.2.1 Analyses . 111 6.2.2 Modèle objet . 112 6.2.3 Exportation et importation . 114 Table des matières iii 6.2.4 Désassemblage . 114 6.2.5 Runtime Assertion Checker . 115 6.3 Intégration dans atoum . 117 6.3.1 Présentation d’atoum . 118 6.3.2 Extension : Praspel dans atoum . 120 6.4 Synthèse . 124 7 Expérimentations 125 7.1 Test à partir de grammaires . 126 7.1.1 Auto-validation du compilateur et des algorithmes . 126 7.1.2 Validation d’applications Web . 129 7.2 Solveur sur les tableaux . 130 7.3 Étude de cas : UniTestor . 132 7.3.1 Présentation générale . 132 7.3.2 Modus operandi et résultats . 134 7.4 Ingénieurs bénévoles . 134 7.4.1 Présentation générale . 135 7.4.2 Modi operandi ............................136 7.4.3 Couverture de code des suites de tests . 136 7.4.4 Temps de rédaction des suites de tests . 137 7.4.5 Génération de données de test . 138 7.4.6 Tests paramétrés . 140 7.4.7 Erreurs détectées . 141 7.4.8 Expertise humaine : discussion . 143 7.5 Performance et régression de PHP . 145 7.6 Synthèse . 146 8 Conclusions et perspectives 147 8.1 Recapitulare ..................................147 8.2 Summa summarum ..............................150 8.3 Perspectives . 150 8.3.1 Inclure de nouvelles méthodes de test . 150 8.3.2 Améliorer le langage . 152 8.3.3 Vers des outils industriels ? . 153 Annexes 155 1 Grammaire du langage Praspel en PP . 156 2 Grammaire du langage PP en langage PP . 162 3 Grammaire des PCRE en langage PP . 164 Bibliographie 167 Table des définitions 3.1 Caractéristiques d’un domaine réaliste . 28 4.1 Constraint Satisfaction Problem ....................... 52 4.2 Grammaire . 61 5.1 Graphe d’expression . 84 5.2 Graphe de contrat . 84 5.3 Graphe des domaines . 85 5.4 Graphe des prédicats . 86 5.5 Chemins dans un graphe de contrat . 92 5.6 Routes et sentiers dans un graphe de contrat . 93 5.7 Test unitaire, cas de test et suite de tests . 93 iv Table des figures 3.1 Début d’implémentation du domaine réaliste Boundinteger. 30 3.2 Univers des domaines réalistes. 30 3.3 Grammaire de Praspel : haut niveau. 33 3.4 Grammaire de Praspel : clauses. 33 3.5 Un contrat Praspel typique avec toutes les clauses. 35 3.6 Classe Filesystem.............................. 37 3.7 Grammaire de Praspel : expressions. 38 3.8 Grammaire de Praspel : construction des expressions. 39 4.1 Processus de génération des données pseudo-aléatoire. 47 4.2 Étude des fonctions sur les tableaux. 50 4.3.