Thèse soutenue

Vérification de programmes OCaml à l'exécution

FR  |  
EN
Auteur / Autrice : Clément Pascutto
Direction : Jean-Christophe FilliâtreThomas 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é

FR  |  
EN

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.