Vérification de programmes OCaml à l'exécution
Auteur / Autrice : | Clément Pascutto |
Direction : | Jean-Christophe Filliâtre, Thomas Gazagnaire |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 18/10/2023 |
Etablissement(s) : | université Paris-Saclay |
Ecole(s) doctorale(s) : | École doctorale Sciences et technologies de l'information et de la communication (Orsay, Essonne ; 2015-....) |
Partenaire(s) de recherche : | Laboratoire : Laboratoire Méthodes formelles (Gif-sur-Yvette, Essonne ; 2021-....) |
Référent : Faculté des sciences d'Orsay | |
graduate school : Université Paris-Saclay. Graduate School Informatique et sciences du numérique (2020-….) | |
Entreprise : Tarides | |
Equipe de recherche : Toccata (Saclay) | |
Jury : | Président / Présidente : Ralf Treinen |
Examinateurs / Examinatrices : Antoine Rollet, Frédéric Loulergue, Delphine Longuet | |
Rapporteur / Rapporteuse : Antoine Rollet, Frédéric Loulergue |
Résumé
Les outils de vérification formelle, en particulier dans le domaine de la vérification déductive, apportent des garanties statiques fortes de correction des systèmes logiciels, mais nécessitent un haut degré d'expertise et des durées de développement considérables. Ces obstacles compromettent parfois leur mise en place dans un contexte industriel, et presque toujours leur passage à l'échelle dans des systèmes complexes. Dans ce contexte, la vérification dynamique (comprendre : à l'exécution) permet une approche plus graduelle. Alors que les spécifications sont toujours exprimées en termes logiques précis, on s'assure de la correction de l'implémentation par des tests automatiques à mesure de son exécution, plutôt que par des preuves. L'expertise nécessaire est alors restreinte à la conception de spécifications et l'interprétation des résultats de test. La communauté du langage de programmation OCaml n'échappe pas à ce constat. Malgré le fait que le langage semble propice à la mise en place de méthodes formelles, aucun outil ne paraît connaître une adoption large pour la production de code OCaml spécifié ou vérifié. De surcroît, pour un outil prétendant répondre à cette question, il faut également prendre en compte les spécificités du langage, notamment les interactions avec le typage statique, l'influence de la représentation mémoire et du ramasse-miettes ou les idiomes liés à la programmation fonctionnelle. Dans ce travail, on propose des techniques de vérification dynamique de code OCaml applicables à des bases de code préexistantes et intégrables aux flux de travail des ingénieurs logiciels qui les maintiennent. En particulier, on présente brièvement Gospel, un langage de spécification accessible mais expressif pour OCaml. On décrit Ortac, un outil de vérification dynamique pour OCaml entièrement automatisé dont l'interface modulaire permet son utilisation dans une grande variété de scenarii (fuzzing, monitoring, test). Il entend supporter un sous-ensemble non trivial d'OCaml (e.g. foncteurs, exceptions, effets) avec l'appui du typage et dans un souci d'efficacité des vérifications effectuées (e.g. limitation des copies, gestion des entiers de précision arbitraire, vérification partielle des invariants de types). Enfin, on développe une famille d'optimisations de la mémoire pour la vérification de post-conditions faisant référence au pré-état. Elles prennent la forme de transformations de spécifications, généralisées pour être applicables dans d'autres langages, et prouvées correctes avec l'assistant de preuves Coq. Le travail entrepris permet d'envisager un écosystème de vérification automatisé, peu intrusif et adapté aux besoins des développeurs et développeuses de la communauté OCaml.