pour la Couverture de Code Structurelle
Transcription
pour la Couverture de Code Structurelle
.Soutenance de thèse de doctorat présentée à l’Université Pierre et Marie Curie Langages Applicatifs et Machines Abstraites pour la Couverture de Code Structurelle Philippe Wang sous la direction d’Emmanuel Chailloux Université Pierre et Marie Curie École Doctorale Informatique, Télécommunications et Électronique de Paris Jeudi 4 octobre 2012 à 14h00, sur le campus Jussieu, salle 25-26-105 . . . . . . Résumé Cette thèse présente une étude qui répond à un besoin industriel d’avoir des outils pour aider à la qualité et au respect des processus de développement de logiciels critiques comme ceux du domaine de l’avionique civile. Il s’agit de l’étude de la couverture de code structurelle pour un langage de la famille ML. Dans ce contexte, ML apparaît comme un langage particulièrement riche en constructions de haut-niveau d’abstraction et expressif. Son utilisation est un élément de progrès mais soulève des problèmes d’adaptation des pratiques du génie logiciel classique pour les systèmes critiques. Notamment, la notion de couverture des conditions et des décisions ainsi que les critères de couverture dérivés se complexifient rapidement. Nous donnons alors en première contribution plusieurs sémantiques pour l’interprétation des définitions des conditions et des décisions pour un langage d’expressions de haut-niveau que nous avons complètement formellement défini. Ensuite, nous donnons la sémantique formelle pour une implantation pour la mesure de couverture par réécriture du code source, ce que nous appelons l’instrumentation intrusive. Puis, nous étudions une technique qui ne réécrit pas le code, ce qui permet d’avoir la possibilité d’utiliser le même binaire pour les tests et pour la production. Cette technique, que nous appelons non intrusive, consiste à générer les informations de correspondance entre le code source et le code machine, et éventuellement d’autres informations, pour que l’environnement d’exécution incluant une machine virtuelle puisse enregistrer les traces nécessaires à l’élaboration des rapports de couverture. Enfin, nous comparons ces deux approches, en terme de sémantique, d’utilisation et d’implantation. 2/4 Abstract This thesis presents a study on structural code coverage for a language of the ML family, in response to an industrial need in safety-critical software domain to develop tools. In this context, ML appears as a particularly rich and high-level language with a high degree of expressiveness. Its use is a progress but also raises issues when trying to use classical safety-critical software engineering processes. Notably, the two notions of conditions and decisions as well as coverage criteria associated with them rapidly become very complex. So the first contribution of this thesis is to give several formal semantics to the question of what conditions and decisions are when using a language of the ML family, which is formally specified. Then, we present a formalised technique for structural code coverage which rewrite the source code to produce traces at run-time. We name it the intrusive instrumentation. We also formalise another technique which does not rewrite the source code, which allows to use the same binary for both testing activities and distribution. This second technique is called non intrusive and consists in generating at compile-time the information needed to match the machine code back to the source code, but also other information for the execution environment to record the traces that we need to generate a coverage report. Finally, we compare these two techniques both formally and practically, but also in terms of implementation. 3/4 Informations complémentaires I Lieu : campus Jussieu, 4 place Jussieu, 75005 Paris. I Ce document sera mis à jour prochainement pour fournir plus de précisions. Date de révision de ce document : 19 septembre 2012 4/4