Interactive Runtime Verification Raphaël Jakse
Total Page:16
File Type:pdf, Size:1020Kb
Interactive Runtime Verification Raphaël Jakse To cite this version: Raphaël Jakse. Interactive Runtime Verification. Mathematical Software [cs.MS]. Université Grenoble Alpes, 2019. English. NNT : 2019GREAM075. tel-02460734v2 HAL Id: tel-02460734 https://hal.inria.fr/tel-02460734v2 Submitted on 28 Sep 2020 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. THÈSE Pour obtenir le grade de DOCTEUR DE LA COMMUNAUTÉ UNIVERSITÉ GRENOBLE ALPES Spécialité : informatique Arrêté ministériel : 25 mai 2016 Présentée par Raphaël Jakse Thèse dirigée par Jean-François Méhaut et encadrée par Yliès Falcone, Université Grenoble Alpes préparée au sein du Laboratoire d’Informatique de Grenoble à l’École Doctorale Mathématiques, Sciences et technologies de l’information, Informatique Interactive Runtime Verification Vérification de propriétés interactive à l'exécution Thèse soutenue publiquement le 18 Décembre 2019, devant le jury composé de : Fabrice Dupros Ingénieur de recherche, ARM, examinateur Yliès Falcone Maître de conférence, Université Grenoble Alpes, encadrant de thèse João Lourenço Professeur, Universidade Nova de Lisboa, rapporteur Jean-François Méhaut Professeur, Université Grenoble Alpes, directeur de thèse Hervé Marchand Charché de recherche, Inria Rennes Bretagne-Atlantique, examinateur Gwen Salaün Professeur, Inria Grenoble, Examinateur, président du jury Alexandre Termier Professeur, Inria Rennes Bretagne-Atlantique, rapporteur Abstract Résumé en Français Les ordinateurs sont partout. Nous leur faisons confiance pour un grand, et grandissant, nombre de tâches, parmi lesquelles certaines sont critiques. Les conséquences des bogues logiciels sont diverses, de l’agacement léger à la mort de plusieurs personnes. Ainsi, il est important de s’assurer que les logiciels sont fiables. Corriger les bogues est une activité très chronophage du processus de développement logiciel. Dans cette thèse, nous présentons la vérification interactive à l’exécution, qui combine la vérification à l’exécution et le débogage interactif. La vérification à l’exécu- tion est une méthode formelle pour étudier le comportement d’un système à l’exécution. Elle consiste à faire correspondre des traces d’exécutions d’un système avec des pro- priétés comportementales. Ces propriétés font partie des spécifications du système. Le débogage interactif consiste à étudier un système durant son exécution pour comprendre ses bogues et les corriger en inspectant interactivement son état interne. La vérification interactive à l’exécution a pour objectif de rendre le débogage interactif moins fastidieux et plus systématique en s’appuyant sur les aspects automatiques et rigoureux de la vérifi- cation à l’exécution. Nous avons pour but de faciliter la partie débogage du processus de développement logiciel. Nous définissons une manière efficace et pratique de vérifier des propriétés comportementales automatiquement sur un programme en utilisant un débo- gueur interactif. Nous rassemblons la détection et la compréhension de bogues dans une méthodologie intégrée, en guidant le débogage interactif avec la vérification à l’exécution. Nous fournissons un modèle formel pour les programmes vérifiés interactivement à l’exé- cution. Nous modélisons l’exécution d’un programme en train d’être débogué, composé avec un moniteur (pour l’émission de verdicts) et un scénario (pour conduire la session de débogage). Nous fournissons des garanties sur la validité des verdicts produits par le moniteur en nous appuyant sur une relation de simulation faible entre le programme initial et le programme vérifié interactivement. De plus, nous fournissons une vue algo- rithmique du modèle adaptée à l’écriture d’implémentations. Nous introduisons ensuite un cadre et une architecture distribuée pour la vérification interactive à l’exécution. Cela permet de vérifier plusieurs propriétés simultanément et de déboguer un système dis- tribué, composé de multiples processus communicants. Les moniteurs, le scénario et les programmes débogués eux-mêmes s’exécutent de façon distribuée en utilisant un pro- tocole que nous avons vérifié avec le vérificateur de modèles SPIN. Notre architecture distribuée est conçue pour s’adapter à des composants existants. Nous présentons Verde, une implémentation de la vérification interactive à l’exécution. Une première version est basée sur le débogueur GNU (GDB) pour vérifier interacti- vement des programmes C et C++. Une deuxième version, Dist-Verde, est une implé- mentation de notre architecture distribuée compatible avec les programmes C et C++ à travers GDB et les programmes Java à travers JDB, le débogueur Java. Nous présentons des expérimentations en utilisant Verde, évaluant l’utilité de l’approche et les performances de notre implémentation. Nos résultats montrent que la vérification interactive à l’exécution est applicable dans une variété de cas et aide à étudier les bogues. Mots-clés : vérification à l’exécution, débogage interactif, fiabilité, ingénierie logicielle, systèmes distribués, propriétés, bogues 3 3 Abstract in English Computers are ubiquitous. We trust them for a huge and increasing number of tasks, some critical. Consequences of software defects are various, from little annoyances to the loss of multiple lives. Hence, ensuring software reliability is instrumental. Fixing bugs is a very time-consuming activity of the software development cycle. In this thesis, we present interactive runtime verification (i-RV), which combines runtime verification and interactive debugging. Runtime verification is a formal method to study the behavior of a system at runtime. It consists in matching runtime traces of a sys- tem at runtime against behavioral properties. These properties are part of the system specification. Interactive debugging consists in studying a system at runtime in order to understand its bugs and fix them, inspecting its internal state interactively. Interactive runtime verification aims to make interactive debugging less tedious and more system- atic by leveraging the rigorous and automated aspects of runtime verification. We aim to ease the debugging part of the software development cycle. We define an efficient and convenient way to check behavioral properties automatically on a program using an interactive debugger. We gather bug detection and bug understanding in an integrated workflow, by guiding interactive debugging using runtime verification. We provide a formal model for interactively runtime verified programs. We model the execution of a program under a debugger composed with a monitor (for verdict emis- sion) and a scenario (for steering the debugging session). We provide guarantees on the soundness of the verdicts issued by the monitor by exhibiting a weak simulation (relation) between the initial program and the interactively runtime verified program. Moreover, we provide an algorithmic view of this model suitable for producing implementations. We then introduce a distributed and adaptive framework for interactive runtime verifica- tion. It allows checking several requirements simultaneously and debugging a distributed system composed of communicating processes. The monitors, the scenario and the de- bugged programs themselves run distributed using an orchestrating protocol which we verified using the SPIN model checker. Our distributed framework is designed to adapt to existing components. We present Verde, an implementation of interactive runtime verification. A first version is based on the GNU Debugger (GDB) to interactively runtime verify C and C++ pro- grams. A second version, Dist-Verde, is an implementation of our distributed framework compatible with C and C++ programs through GDB and Java programs through JDB, the Java Debugger. We report on experiments using Verde assessing the usefulness of interactive runtime verification and the performance of our implementation. Our results show that interactive runtime verification is applicable in a variety of cases and helps to study bugs. Keywords: runtime verification, interactive debugging, reliability, software engineer- ing, distributed systems, property, bugs. Merci ! Je tiens à remercier Chloé, Maman et Papa, pour m’avoir accompagné, guidé et soutenu tout au long de ce doctorat, et bien avant. Merci pour ces weekends tranquilles et rassurants loin de l’agitation et de la polution citadine, ces apéros, ces moments studieux ensemble, ces randonnées agréables, ces petites marches ou ces tours de vélo autour de la maison. On vient quand même malgré la connexion moisie, parce qu’on y est bien. Merci aussi pour ces petits restos sur le campus. Je voudrais remercier Mamie et Papi, qui ont toujours été confiants sur le bon déroulement de mes études, y compris ce doctorat. Merci aussi à toute la famille : Camille, Donavan, Émilie, Geneviève, Gérald, Laurent, Lisa, Marie-Noelle, Marion, Rémi, Séverine. Vous êtes géniaux. Merci Bruno, Céline et Ludo, plus loins mais là. Je tiens aussi à remercier Solène, qui a décidé de bien vouloir me supporter au cours de la dernière année de ce doctorat. Une tâche ardue s’il en est. Merci pour toute cette joie