• Aucun résultat trouvé

Diagnostic des échecs de preuve sur des mutants

11

BILAN ET PERSPECTIVES

Dans ce chapitre, nous rappelons les objectifs de la thèse en partie 11.1 puis nous pré- sentons le bilan des travaux réalisés en partie 11.2 ainsi que les perspectives envisagées en partie 11.3.

11.1 R

APPEL DES OBJECTIFS

Notre objectif principal était de fournir une méthode de diagnostic automatique des échecs de preuve afin de décider si la cause d’un échec de preuve est une non-conformité entre le code et la spécification, ou la faiblesse d’un ou plusieurs sous-contrats de la spé- cification, ou enfin une incapacité de l’outil de vérification déductive. Nos travaux ont donc pour but d’améliorer et de faciliter le processus de spécification et de preuve des programmes qui est long et difficile et nécessite une connaissance des outils de preuve de programmes. En effet, il est souvent difficile pour l’utilisateur de décider laquelle de ces trois raisons est la cause de l’échec de la preuve car cette information n’est pas (ou rarement) donnée par le prouveur et requiert donc une revue approfondie du code et de la spécification.

Notre objectif était également de fournir une implémentation efficace de cette méthode de diagnostic des échecs de preuve, et d’évaluer les capacités de cet outil sur différents programmes.

11.2 B

ILAN

Nous avons d’abord développé une méthode de validation à l’exécution des annotations

E-ACSLliées au modèlé mémoire et implémenté une bibliothèque C permettant de valider

ces annotations à l’exécution.

Nous avons ensuite proposé une méthode originale d’aide à la vérification déductive, par génération de tests structurels sur une version instrumentée du programme d’origine. Cette méthode comporte une première étape de détection de non-conformités, puis une seconde étape de détection de faiblesses de sous-contrats (contrats de boucle ou de fonction appelée).

Nous avons dans un premier temps conçu une méthode de détection des non- conformités du code par rapport à la spécification dans les programmes C. Cette méthode

nécessite une traduction en C des annotations E-ACSL afin d’expliciter les violations po-

tentielles d’annotations par la création de nouvelles branches dans le programme. La préservation de la sémantique par cette traduction nous assure de trouver les erreurs dans le code et dans la spécification par génération de tests structurels à condition de couvrir tous les chemins d’exécution faisables du programme. Nous avons formalisé cette traduction afin de justifier sa correction. Puis nous avons implémenté cette méthode dans

STADY et expérimenté son efficacité par des mutations. Il est apparu que sur des pro-

grammes mutants, nous étions capables de détecter les erreurs introduites. En revanche lorsqu’aucune erreur n’a été détectée, le programme mutant peut être équivalent au pro- gramme d’origine, ou bien on peut avoir introduit une faiblesse de sous-contrat. Une telle faiblesse ne rend pas le programme invalide, mais empêche la vérification déductive du programme.

Nous avons alors décidé dans un second temps d’adapter notre méthode de détection des non-conformités afin de pouvoir détecter les faiblesses de sous-contrats. Cette nou- velle méthode nécessite une traduction en C des annotations E-ACSL différente de la

première, car nous voulons pouvoir “exécuter” certains contrats au lieu du code qu’ils spécifient. Nous avons intégré cette méthode à STADYet expérimenté son efficacité par

des mutations dans le cadre du diagnostic des échecs de preuve. Nos expérimentations ont permis de mettre en évidence le gain apporté par cette deuxième méthode par rap- port à une détection des non-conformités seule.

Nous avons ensuite conçu une méthode combinant la détection des non-conformités et la détection des faiblesses de sous-contrats afin d’aider au diagnostic des échecs de preuve. Cette méthode combinée essaie d’abord d’exhiber des non-conformités. Si aucune non-conformité n’est détectée, elle recherche des faiblesses de sous-contrats. Si aucune de ces deux phases n’a fourni de raison quant à l’échec de la preuve et si la génération de tests a couvert tous les chemins d’exécution faisables du programme, alors l’échec de la preuve est dû à une incapacité du prouveur. Sinon le problème reste non résolu.

Nous avons implémenté les différentes composantes de la méthode dans le greffon

STADY. La méthode de diagnostic elle-même n’est pas encore implémentée. D’autre part,

l’implémentation souffre de quelques limitations dues au support incomplet du langage de spécificationE-ACSL. Ces deux points sont laissés en perspectives.

Dans le cadre de travaux effectués avec R. Genestier et A. Giorgetti, STADY a été ap-

pliqué sur des programmes générant des tableaux structurés et a permis de faciliter la vérification déductive de ces programmes.

11.2.1 PUBLICATIONS ASSOCIÉES À LA THÈSE

Dans le cadre de nos travaux, nous avons présenté quatre communications de recherche lors de conférences internationales :

L’article [Kosmatov et al., 2013], publié à RV 2013, présente notre méthode de validation à l’exécution des annotationsE-ACSLliées au modèle mémoire et l’implémentation d’une

bibliothèque permettant de valider ces annotations à l’exécution.

L’article [Petiot et al., 2014b], publié à TAP 2014, détaille l’aspect méthodologique de notre méthode de détection des non-conformités entre le code et sa spécification.

L’article [Petiot et al., 2014a], publié à SCAM 2014, présente la traduction des annotations

ACSLen C pour la détection de non-conformités entre le code et la spécification.

L’article [Genestier et al., 2015], publié à TAP 2015, recense plusieurs programmes C dont la vérification déductive a été facilitée parSTADY.

Le rapport de recherche [Petiot et al., 2015] présente la méthode globale de diagnostic des échecs de preuve combinant la détection des non-conformités entre le code et la spécification et la détection des faiblesses de sous-contrats.

11.3 P

ERSPECTIVES

Nous suggérons maintenant quelques perspectives faisant suite à nos travaux dans le cadre des combinaisons d’analyses statiques et dynamiques et de l’aide à la vérification déductive.

11.3.1 FORMALISATION DE LA MÉTHODE

Compte tenu de l’importance de la traduction des annotations ACSL en C dans notre

approche, aussi bien pour la détection des non-conformités que pour la détection des fai- blesses de sous-contrats, la correction de cette traduction doit être assurée. Nous avons donné une première justification de cette correction dans le chapitre 4, mais il est pos- sible d’aller plus loin dans cette direction et de formaliser cette traduction à l’aide d’un outil comme COQ [Castéran et al., 2004] ou WHY3 [Filliâtre et al., 2013], d’une manière

similaire à [Herms et al., 2012].

Il serait également utile d’appliquer ce principe au générateur de tests. Ceci peut se tra- duire par la formalisation enCOQde certaines parties dePATHCRAWLERet/ou par l’utilisa-

tion d’un solveur de contraintes certifié comme celui formalisé dans [Carlier et al., 2012]. Ces deux pistes permettraient de s’assurer formellement de la correction des résultats produits par nos outils.

11.3.2 EXTENSION DE LA PRISE EN CHARGE D’ACSL

Dans nos travaux nous avons pris en charge la majorité des constructions du langage

E-ACSL (sous-ensemble “exécutable” d’ACSL). Il serait peut-être possible de traiter des

constructions du langageACSLqui sont en dehors du langageE-ACSL, comme les prédi-

cats inductifs. [Tollitte et al., 2012] propose une méthode d’extraction de code fonctionnel (pour COQ) à partir de spécifications inductives. Peut-être que ces travaux peuvent ser-

vir de base à une méthode de traduction des spécifications inductives en code impératif (en C notamment) ce qui permettrait de prendre en charge les prédicats inductifs dans

STADY.

Notre implémentation ne traite pas non plus les annotations faisant intervenir les nombres réels mathématiques et les nombres flottants du C. De telles annotations permettent no- tamment d’exprimer les erreurs d’arrondi se produisant lors des calculs sur les nombres flottants [Goubault et al., 2011]. Leur intégration au sein de STADY nécessiterait de for-

lors de la génération de tests, d’une manière similaire à ce que nous avons réalisé pour les entiers mathématiques d’E-ACSL.

11.3.3 AUTOMATISATION DE LA MÉTHODE

La méthode de détection des non-conformités et la méthode de détection des faiblesses de sous-contrats sont implémentées dansSTADY, mais la méthode les combinant ne l’est

pas. L’utilisation actuelle de STADY est la suivante. STADY doit être lancé une première

fois en mode “détection de non-conformités”’ (son mode par défaut). Puis, si aucune non-conformité n’a été détectée, STADY peut être lancé un nombre quelconque de fois

en mode “détection de faiblesses de sous-contrats”. Dans ce second mode, l’utilisateur indique àSTADYpour quels contrats une faiblesse doit être recherchée. Il revient donc à

l’utilisateur de réduire ou d’augmenter progressivement l’ensemble des contrats au fur et à mesure des exécutions deSTADY.

Ce processus pourrait être automatisé au cours d’une seule exécution deSTADYqui lan-

cerait d’abord une détection de non-conformités puis une ou plusieurs détections de fai- blesses de sous-contrats. Les contrats pour lesquels une faiblesse peut être recherchée pourraient être déterminés en analysant les dépendances entre les annotations du pro- gramme.

11.3.4 EXPÉRIMENTATIONS AVEC DES UTILISATEURS

Au cours de cette thèse nous avons expérimenté l’efficacité de notre outil en terme de capacité de diagnostic et de temps d’exécution. Néanmoins, nous n’avons pas pu mesu- rer l’impact réel de l’outil du point de vue d’un utilisateur qui a pour tâche de spécifier et vérifier un programme.

Nous pourrions par exemple former deux groupes d’utilisateurs débutants dans le do- maine de la vérification déductive, avec le niveau le plus homogène possible. Les utilisa- teurs du premier groupe auraient uniquement à leur disposition l’outil de preuve, tandis que ceux du second groupe pourraient également utiliser STADY. Les deux groupes au-

raient à spécifier et prouver formellement des programmes et nous pourrions ainsi com- parer les résultats produits par chacun des groupes.

Une telle expérimentation permettrait de quantifier et qualifier l’aide au diagnostic des échecs de preuve fourni par STADY et donc l’apport d’un tel outil pour la spécification et

[Pat, 2011] (2011). PathCrawler Online. http://pathcrawler-online.com.

[Ahn et al., 2010] Ahn, K., et Denney, E. (2010). Testing first-order logic axioms in program verification. Dans Fraser, G., et Gargantini, A., éditeurs, Tests and Proofs,

volume 6143 de Lecture Notes in Computer Science, pages 22–37. Springer Berlin Heidelberg.

[Ahrendt et al., 2015] Ahrendt, W., Chimento, J., Pace, G., et Schneider, G. (2015). A specification language for static and runtime verification of data and control pro- perties. Dans Bjørner, N., et de Boer, F., éditeurs, FM 2015 : Formal Methods, volume

9109 de Lecture Notes in Computer Science, pages 108–125. Springer International Publishing.

[Arndt, 2010] Arndt, J. (2010). Matters Computational - Ideas, Algorithms, Source Code [The fxtbook]. Published electronically at http ://www.jjj.de.

[Ball, 2005] Ball, T. (2005).A theory of predicate-complete test coverage and genera- tion. Dans de Boer, F., Bonsangue, M., Graf, S., et de Roever, W.-P., éditeurs, Formal

Methods for Components and Objects, volume 3657 de Lecture Notes in Computer Science, pages 1–22. Springer Berlin Heidelberg.

[Ball et al., 2011] Ball, T., Levin, V., et Rajamani, S. K. (2011). A decade of software model checking with slam. Commun. ACM, 54(7) :68–76.

[Barnett et al., 2006] Barnett, M., Chang, B.-Y., DeLine, R., Jacobs, B., et Leino, K. (2006).

Boogie : A modular reusable verifier for object-oriented programs. Dans de Boer,

F., Bonsangue, M., Graf, S., et de Roever, W.-P., éditeurs, Formal Methods for Com- ponents and Objects, volume 4111 de Lecture Notes in Computer Science, pages 364–387. Springer Berlin Heidelberg.

[Barrett et al., 2011] Barrett, C., Conway, C., Deters, M., Hadarean, L., Jovanovi´c, D.,

King, T., Reynolds, A., et Tinelli, C. (2011). CVC4. Dans Gopalakrishnan, G., et

Qadeer, S., éditeurs, Computer Aided Verification, volume 6806 de Lecture Notes in Computer Science, pages 171–177. Springer Berlin Heidelberg.

[Barrett et al., 2007] Barrett, C., et Tinelli, C. (2007). CVC3. Dans Damm, W., et Her-

manns, H., éditeurs, Computer Aided Verification, volume 4590 de Lecture Notes in Computer Science, pages 298–302. Springer Berlin Heidelberg.

[Baudin et al., 2015] Baudin, P., Cuoq, P., Filliâtre, J. C., Marché, C., Monate, B., Moy, Y.,

et Prevosto, V. (2015). ACSL : ANSI/ISO C Specification Language Version 1.9.

Published electronically at http://frama-c.com/acsl.html.

[Beckman et al., 2008] Beckman, N., Nori, A. V., Rajamani, S. K., et Simmons, R. J.

(2008). Proofs from tests. Dans ISSTA, pages 3–14. ACM.

[Beyer et al., 2007] Beyer, D., Henzinger, T., Jhala, R., et Majumdar, R. (2007). The soft- ware model checker blast. International Journal on Software Tools for Technology

Transfer, 9(5-6) :505–525.

[Botella et al., 2009] Botella, B., Delahaye, M., Hong-Tuan-Ha, S., Kosmatov, N., Mouy,

P., Roger, M., et Williams, N. (2009). Automating structural testing of c programs : Experience with pathcrawler. Dans Automation of Software Test, 2009. AST ’09.

ICSE Workshop on, pages 70–78. IEEE.

[Boyapati et al., 2002] Boyapati, C., Khurshid, S., et Marinov, D. (2002). Korat : Auto- mated testing based on java predicates. Dans Proceedings of the 2002 ACM SIG-

SOFT International Symposium on Software Testing and Analysis, ISSTA ’02, pages 123–133, New York, NY, USA. ACM.

[Burghardt et al., 2015] Burghardt, J., et Gerlach, J. (2015). ACSL by Example. Publi-

shed electronically at http://www.fokus.fraunhofer.de/download/acsl_by_example.

[Cadar et al., 2008a] Cadar, C., Dunbar, D., et Engler, D. R. (2008a). KLEE : unassis- ted and automatic generation of high-coverage tests for complex systems pro- grams. Dans 8th USENIX Symposium on Operating Systems Design and Implemen-

tation, OSDI 2008, December 8-10, 2008, San Diego, California, USA, Proceedings, pages 209–224. USENIX Association.

[Cadar et al., 2008b] Cadar, C., Ganesh, V., Pawlowski, P. M., Dill, D. L., et Engler, D. R.

(2008b). Exe : Automatically generating inputs of death. ACM Trans. Inf. Syst.

Secur., 12(2) :10 :1–10 :38.

[Canet et al., 2009] Canet, G., Cuoq, P., et Monate, B. (2009).A value analysis for C pro- grams. Dans Proceedings of the 2009 Ninth IEEE International Working Conference

on Source Code Analysis and Manipulation, SCAM ’09, pages 123–124, Washington, DC, USA. IEEE Computer Society.

[Carlier et al., 2012] Carlier, M., Dubois, C., et Gotlieb, A. (2012). A certified constraint solver over finite domains. Dans Giannakopoulou, D., et Méry, D., éditeurs, FM

2012 : Formal Methods, volume 7436 de Lecture Notes in Computer Science, pages 116–131. Springer Berlin Heidelberg.

[Castéran et al., 2004] Castéran, P., et Bertot, Y. (2004). Interactive theorem proving and program development. Coq’Art : The Calculus of inductive constructions.

Texts in Theoretical Computer Science. Springer Berlin Heidelberg.

[Chaki et al., 2003] Chaki, S., Clarke, E., Groce, A., Jha, S., et Veith, H. (2003). Modular verification of software components in C. Dans Proceedings of the 25th Internatio-

nal Conference on Software Engineering, ICSE ’03, pages 385–395, Washington, DC, USA. IEEE Computer Society.

[Chebaro et al., 2012a] Chebaro, O., Delahaye, M., et Kosmatov, N. (2012a). Testing In- executable Conditions on Input Pointers in C Programs with SANTE. Dans ICS-

SEA 2012 - 24th International Conference on Software & Systems Engineering and their Applications, pages 1–7, Paris, France. 7 pages - Session 11 : Testing - http ://ics- sea.enst.fr/icssea12/.

[Chebaro et al., 2012b] Chebaro, O., Kosmatov, N., Giorgetti, A., et Julliand, J. (2012b).

Program slicing enhances a verification technique combining static and dyna- mic analysis. Dans Proceedings of the 27th Annual ACM Symposium on Applied

Computing, SAC ’12, pages 1284–1291, New York, NY, USA. ACM.

[Chebaro, 2011] Chebaro, O. C. (2011). Classification of errors threats by static ana- lysis, program sclicing and structural testing of programs. Theses, Université de

[Cheon et al., 2005] Cheon, Y., et Leavens, G. T. (2005). A contextual interpretation of undefinedness for runtime assertion checking. Dans Proceedings of the Sixth Inter-

national Symposium on Automated Analysis-driven Debugging, AADEBUG’05, pages 149–158, New York, NY, USA. ACM.

[Christakis et al., 2012] Christakis, M., Müller, P., et Wüstholz, V. (2012). Collaborative verification and testing with explicit assumptions. Dans Giannakopoulou, D., et

Méry, D., éditeurs, FM 2012 : Formal Methods, volume 7436 de Lecture Notes in Com- puter Science, pages 132–146. Springer Berlin Heidelberg.

[Claessen et al., 2008] Claessen, K., et Svensson, H. (2008). Finding counter examples in induction proofs. Dans Beckert, B., et Hähnle, R., éditeurs, Tests and Proofs,

volume 4966 de Lecture Notes in Computer Science, pages 48–65. Springer Berlin Heidelberg.

[Clarke et al., 2003] Clarke, E., Grumberg, O., Jha, S., Lu, Y., et Veith, H. (2003).

Counterexample-guided abstraction refinement for symbolic model checking. J.

ACM, 50 :752–794.

[Clarke et al., 1982] Clarke, E. M., et Emerson, E. A. (1982). Design and synthesis of synchronization skeletons using branching-time temporal logic. Dans Logic of

Programs, Workshop, pages 52–71, London, UK. Springer.

[Clarke et al., 2009] Clarke, E. M., Emerson, E. A., et Sifakis, J. (2009). Model checking : algorithmic verification and debugging. Commun. ACM, 52(11) :74–84.

[Clarke et al., 1986] Clarke, E. M., Emerson, E. A., et Sistla, A. P. (1986). Automatic ve- rification of finite-state concurrent systems using temporal logic specifications.

ACM Trans. Program. Lang. Syst., 8(2) :244–263.

[Clarke, 1976] Clarke, L. A. (1976). A system to generate test data and symbolically execute programs. IEEE Trans. Softw. Eng., 2 :215–222.

[Clarke et al., 2006] Clarke, L. A., et Rosenblum, D. S. (2006). A historical perspective on runtime assertion checking in software development. SIGSOFT Softw. Eng.

Notes, 31(3) :25–37.

[Cok et al., 2005] Cok, D., et Kiniry, J. (2005). Esc/java2 : Uniting esc/java and jml.

Dans Barthe, G., Burdy, L., Huisman, M., Lanet, J.-L., et Muntean, T., éditeurs, Construction and Analysis of Safe, Secure, and Interoperable Smart Devices, volume 3362 de Lecture Notes in Computer Science, pages 108–128. Springer Berlin Heidel- berg.

[Comar et al., 2012] Comar, C., Kanig, J., et Moy, Y. (2012). Integration von formaler verifikation und test. Dans Automotive - Safety & Security 2012, Sicherheit und Zu-

verlässigkeit für automobile Informationstechnik, 14.-15. November 2012, Karlsruhe, Proceedings, LNI, pages 133–148. GI.

[Conchon, 2012] Conchon, S. (2012). SMT Techniques and their Applications : from Alt-Ergo to Cubicle. Thèse d’habilitation, Université Paris-Sud. In English, http://www.

lri.fr/~conchon/publis/conchonHDR.pdf.

[Conchon et al., 2007] Conchon, S., Contejean, E., Kanig, J., et Lescuyer, S. (2007).

Lightweight integration of the Ergo theorem prover inside a proof assistant. Dans

Proceedings of the second workshop on Automated formal methods, AFM ’07, pages 55–59, New York, NY, USA. ACM.

[Correnson, 2014] Correnson, L. (2014). Qed. computing what remains to be proved.

Dans Badger, J., et Rozier, K., éditeurs, NASA Formal Methods, volume 8430 de Lec- ture Notes in Computer Science, pages 215–229. Springer International Publishing.

[Cousot et al., 1992] Cousot, P., et Cousot, R. (1992). Abstract interpretation frame- works. Journal of Logic and Computation, 2(4) :511–547.

[Cousot et al., 2007] Cousot, P., Cousot, R., Feret, J., Mauborgne, L., Miné, A., Monniaux,

D., et Rival, X. (2007). Combination of abstractions in the ASTRÉE static analyzer.

Dans Proceedings of the 11th Asian computing science conference on Advances in computer science : secure software and related issues, ASIAN’06, pages 272–300, Berlin, Heidelberg. Springer.

[Csallner et al., 2004] Csallner, C., et Smaragdakis, Y. (2004). JCrasher : an automatic robustness tester for Java. Software : Practice and Experience, 34(11) :1025–1050.

[Csallner et al., 2005] Csallner, C., et Smaragdakis, Y. (2005). Check ’n’ Crash : combi- ning static checking and testing. Dans Proceedings of the 27th international confe-

rence on Software engineering, ICSE ’05, pages 422–431, New York, NY, USA. ACM.

[Csallner et al., 2008] Csallner, C., Smaragdakis, Y., et Xie, T. (2008). DSD-Crasher : A hybrid analysis tool for bug finding. ACM Trans. Softw. Eng. Methodol., 17 :8 :1–

8 :37.

[De Moura et al., 2008] De Moura, L., et Bjørner, N. (2008). Z3 : an efficient SMT sol- ver. Dans Proceedings of the Theory and practice of software, 14th international

conference on Tools and algorithms for the construction and analysis of systems, TA- CAS’08/ETAPS’08, pages 337–340, Berlin, Heidelberg. Springer.

[Delahaye et al., 2013] Delahaye, M., Kosmatov, N., et Signoles, J. (2013).Common spe- cification language for static and dynamic analysis of c programs. Dans Procee-

dings of the 28th Annual ACM Symposium on Applied Computing, SAC ’13, pages 1230–1235, New York, NY, USA. ACM.

[Detlefs et al., 2005] Detlefs, D., Nelson, G., et Saxe, J. B. (2005). Simplify : a theorem prover for program checking. J. ACM, 52 :365–473.

[Dijkstra, 1975] Dijkstra, E. W. (1975). Guarded commands, nondeterminacy and for- mal derivation of programs. Commun. ACM, 18 :453–457.

[Dross et al., 2014] Dross, C., Efstathopoulos, P., Lesens, D., Mentré, D., et Moy, Y.

(2014). Rail, space, security : Three case studies for SPARK 2014. Dans ERTS.

Published electronically at http://www.spark-2014.org.

[Engel et al., 2007] Engel, C., et Hähnle, R. (2007). Generating unit tests from formal proofs. Dans Gurevich, Y., et Meyer, B., éditeurs, Tests and Proofs, volume 4454 de

Lecture Notes in Computer Science, pages 169–188. Springer Berlin Heidelberg.

[Ernst, 2003] Ernst, M. D. (2003). Static and dynamic analysis : Synergy and duality.

Dans WODA 2003 : ICSE Workshop on Dynamic Analysis, pages 24–27, Portland, OR. ACM.

[Ernst et al., 2001] Ernst, M. D., Cockrell, J., Griswold, W. G., et Notkin, D. (2001). Dy- namically discovering likely program invariants to support program evolution.

IEEE Trans. Softw. Eng., 27 :99–123.

[Filliâtre et al., 2013] Filliâtre, J.-C., et Paskevich, A. (2013). Why3 – where programs meet provers. Dans Felleisen, M., et Gardner, P., éditeurs, Programming Languages

and Systems, volume 7792 de Lecture Notes in Computer Science, pages 125–128. Springer Berlin Heidelberg.

[Flanagan et al., 2002] Flanagan, C., Leino, K. R. M., Lillibridge, M., Nelson, G., Saxe,

J. B., et Stata, R. (2002). Extended static checking for Java. Dans Proceedings of

the ACM SIGPLAN 2002 Conference on Programming Language Design and Imple- mentation, PLDI ’02, pages 234–245, New York, NY, USA. ACM.

[Floyd, 1963] Floyd, R. W. (1963). Syntactic analysis and operator precedence. J.

ACM, 10 :316–333.

[Ge et al., 2011] Ge, X., Taneja, K., Xie, T., et Tillmann, N. (2011). DyTa : dynamic sym- bolic execution guided with static verification results. Dans Proceedings of the

33rd International Conference on Software Engineering, ICSE ’11, pages 992–994, New York, NY, USA. ACM.

[Genestier et al., 2015] Genestier, R., Giorgetti, A., et Petiot, G. (2015).Sequential gene- ration of structured arrays and its deductive verification. Dans Blanchette, J. C., et

Kosmatov, N., éditeurs, Tests and Proofs, volume 9154 de Lecture Notes in Computer Science, pages 109–128. Springer International Publishing.

[Gladisch, 2009] Gladisch, C. (2009). Could we have chosen a better loop invariant or method contract ? Dans Dubois, C., éditeur, Tests and Proofs, volume 5668 de

Lecture Notes in Computer Science, pages 74–89. Springer Berlin Heidelberg.

[Godefroid, 2007] Godefroid, P. (2007). Compositional dynamic test generation. SIG-

PLAN Not., 42 :47–54.

[Godefroid et al., 2005] Godefroid, P., Klarlund, N., et Sen, K. (2005). DART : directed automated random testing. Dans Proceedings of the 2005 ACM SIGPLAN confe-

rence on Programming language design and implementation, PLDI ’05, pages 213– 223, New York, NY, USA. ACM.

[Godefroid et al., 2008] Godefroid, P., Levin, M. Y., et Molnar, D. A. (2008). Automated whitebox fuzz testing. Dans Proceedings of the Network and Distributed System

Security Symposium, NDSS 2008, San Diego, California, USA, 10th February - 13th February 2008. The Internet Society.

[Godefroid et al., 2010] Godefroid, P., Nori, A. V., Rajamani, S. K., et Tetali, S. D. (2010).

Compositional may-must program analysis : unleashing the power of alterna- tion. Dans Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on

Principles of programming languages, POPL ’10, pages 43–56, New York, NY, USA. ACM.

[Gordon et al., 1993] Gordon, M. J. C., et Melham, T. F., éditeurs (1993). Introduction to HOL : a theorem proving environment for higher order logic. Cambridge University

Press, New York, NY, USA.

[Goubault et al., 2011] Goubault, E., et Putot, S. (2011). Static analysis of finite preci- sion computations. Dans Proceedings of the 12th international conference on Verifi-

cation, model checking, and abstract interpretation, VMCAI’11, pages 232–247, Berlin, Heidelberg. Springer.

[Granlund et al., 2014] Granlund, T., et the GMP development team (2014). GNU MP : The GNU Multiple Precision Arithmetic Library, 6.0.0 édition. Published electroni-

cally at http://gmplib.org/.

[Gulavani et al., 2006] Gulavani, B. S., Henzinger, T. A., Kannan, Y., Nori, A. V., et Ra-

jamani, S. K. (2006). SYNERGY : a new algorithm for property checking. Dans

Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering, SIGSOFT ’06/FSE-14, pages 117–127, New York, NY, USA. ACM.

[Gupta et al., 2009] Gupta, A., Majumdar, R., et Rybalchenko, A. (2009). From tests to proofs. Dans Proceedings of the 15th International Conference on Tools and Algo-

rithms for the Construction and Analysis of Systems : Held as Part of the Joint Eu-