Améliorer la vérification de modèles de logiciels avec des invariants auxiliaires
De nouvelles méthodes améliorent l'efficacité de la vérification des logiciels en utilisant des invariants auxiliaires.
― 8 min lire
Table des matières
- Le Besoin d'Invariants dans la Vérification de Modèle
- Le Rôle des Invariants Auxiliaires
- Aperçu de la Vérification de Modèle Basée sur l'Interpolation
- Méthodes Proposées pour Améliorer l'IMC
- Méthode 1 : Renforcement des Vérifications de Points Fixes
- Méthode 2 : Renforcement des Interpolants
- Mise en Œuvre et Évaluation
- Résultats de l'Évaluation
- Réduction des Déroulages et Requêtes
- Preuve de Tâches Supplémentaires
- Efficacité en Temps d'Exécution
- Conclusion
- Travaux Futurs
- Source originale
- Liens de référence
La Vérification de modèle logiciel est une méthode utilisée pour s’assurer que les programmes fonctionnent correctement selon leurs spécifications. L'un des principaux défis de ce processus est de générer des Invariants puissants. Les invariants sont des énoncés logiques qui doivent être vrais à certains moments d'un programme. Ils aident à garantir que le programme se comporte de manière sécurisée et correcte. Il existe différentes façons de créer ces invariants, allant des techniques simples de flux de données à des méthodes plus complexes impliquant l'interpolation de Craig.
L'analyse de flux de données est une méthode rapide et efficace, mais elle échoue parfois à produire des invariants assez forts. D'un autre côté, l'interpolation de Craig crée des invariants forts mais peut être lente et ne pas bien évoluer pour des programmes plus grands. Pour améliorer les méthodes de vérification de modèle, les chercheurs ont cherché à injecter des invariants dans ces algorithmes. Cet article discute d'une nouvelle approche qui combine la vérification de modèle basée sur l'interpolation avec des invariants auxiliaires pour améliorer l'efficacité et l'efficacité de la vérification.
Le Besoin d'Invariants dans la Vérification de Modèle
Dans la vérification de modèle, il est crucial de vérifier qu'un programme respecte ses propriétés de sécurité. Les propriétés de sécurité sont des conditions qui doivent toujours être vraies pendant l'exécution d'un programme. Par exemple, un programme ne doit jamais atteindre un état où il produit un résultat incorrect ou plante. Les invariants aident à établir ces propriétés de sécurité.
Un invariant de programme est une déclaration concernant les variables du programme qui doit être vraie à des moments spécifiques du programme pour tous les chemins d'exécution possibles. Trouver des invariants appropriés est souvent difficile mais essentiel pour prouver qu'un programme est sûr.
Différentes approches peuvent être utilisées pour générer des invariants. Certaines méthodes sont légères et s'exécutent rapidement, tandis que d'autres sont plus intensives et nécessitent des ressources informatiques significatives. L'objectif est de trouver un équilibre entre la génération d'invariants forts et le faire dans un délai raisonnable.
Le Rôle des Invariants Auxiliaires
Les chercheurs ont découvert que l'utilisation d'invariants auxiliaires - des invariants supplémentaires qui peuvent être injectés dans le processus de vérification de modèle - peut considérablement améliorer les performances de la vérification de modèle. Ces invariants auxiliaires aident à réduire l'espace d'état qui doit être analysé, rendant le processus de vérification plus rapide et plus efficace.
L'injection d'invariants auxiliaires dans la vérification de modèle a été étudiée dans divers contextes, tels que la vérification de modèle bornée et l'exécution symbolique. Cet article propose de combiner cette idée avec l'interpolation de Craig dans un algorithme spécifique appelé Vérification de Modèle Basée sur l'Interpolation (IMC).
Aperçu de la Vérification de Modèle Basée sur l'Interpolation
L'IMC a été introduite à l'origine pour la vérification matérielle, mais a récemment été adaptée pour la vérification logicielle. L'algorithme fonctionne en construisant des invariants inductifs à partir des interpolants de Craig dérivés de requêtes insatisfaisables. Lorsque qu'une requête ne peut pas être satisfaite, l'IMC dérive un interpolant qui représente un ensemble d'états accessibles à partir des conditions initiales du programme. En remplaçant cet nouvel interpolant dans le processus, l'IMC cherche de manière itérative à établir un point fixe, ce qui indique que la Propriété de sécurité est respectée.
Cependant, l'IMC peut rencontrer des difficultés en matière d'efficacité, car il peut falloir plusieurs itérations pour trouver un point fixe. Les invariants auxiliaires peuvent aider dans ce processus en renforçant les interpolants et en aidant à éliminer les états inaccessibles.
Méthodes Proposées pour Améliorer l'IMC
L'article introduit deux méthodes pour intégrer des invariants auxiliaires dans l'IMC.
Méthode 1 : Renforcement des Vérifications de Points Fixes
La première méthode se concentre sur l'amélioration des vérifications qui déterminent si l'algorithme a atteint un point fixe. En utilisant des invariants auxiliaires, l'IMC peut plus efficacement déterminer quand un point fixe a été atteint. Ce renforcement signifie qu'il est moins susceptible d'être trompé par des interpolants qui incluent des informations sur des états inaccessibles. L'idée est qu'en limitant les vérifications à un espace d'état plus pertinent, l'algorithme peut trouver un point fixe en moins d'itérations.
Méthode 2 : Renforcement des Interpolants
La deuxième méthode consiste à améliorer directement les interpolants que l'IMC génère. En conjuguant les interpolants originaux avec des invariants auxiliaires, les nouveaux interpolants sont rendus plus forts. Ce renforcement aide à garantir que les interpolants reflètent plus fidèlement les états accessibles, réduisant la probabilité de rencontrer des contre-exemples fallacieux. En d'autres termes, l'utilisation d'invariants auxiliaires durant l'interpolation donne des résultats plus précis et fiables.
Mise en Œuvre et Évaluation
Pour évaluer l'efficacité de ces techniques proposées, les chercheurs les ont mises en œuvre dans un cadre de vérification logicielle. Ils ont évalué leurs méthodes par rapport à la version simple de l'IMC et à d'autres outils de vérification de modèle à la pointe de la technologie. L'évaluation s'est concentrée sur plusieurs facteurs clés :
Réduction des Déroulages de Programme et des Requêtes d'Interpolation : Les chercheurs souhaitaient voir si l'injection d'invariants auxiliaires pouvait réduire le nombre de déroulages de programme et de requêtes d'interpolation nécessaires pour prouver les propriétés de sécurité.
Efficacité dans la Preuve de Tâches Supplémentaires : Ils ont également mesuré si l'IMC amélioré pouvait résoudre plus de problèmes que la version simple.
Efficacité en Temps d'Exécution : Les chercheurs ont examiné le temps pris par chaque approche pour atteindre une solution.
Résultats de l'Évaluation
Les résultats de l'évaluation ont montré des améliorations significatives lors de l'utilisation d'invariants auxiliaires.
Réduction des Déroulages et Requêtes
L'IMC amélioré nécessitait moins de déroulages de programme et de requêtes d'interpolation par rapport à la version simple. Cela était évident dans le nombre d'opérations nécessaires pour résoudre les mêmes tâches.
Preuve de Tâches Supplémentaires
Les méthodes améliorées ont réussi à prouver la correction de plusieurs tâches que l'IMC simple ne pouvait pas. Il a été constaté que 16 tâches supplémentaires étaient solvables en utilisant les techniques améliorées, démontrant un bénéfice clair de l'injection d'invariants auxiliaires.
Efficacité en Temps d'Exécution
En termes d'efficacité temporelle, l'IMC amélioré a montré une réduction notable du temps d'utilisation pour de nombreuses tâches complexes. Bien que l'IMC simple était plus rapide pour les tâches plus faciles, la version améliorée l'a surpassée à mesure que la complexité augmentait.
Conclusion
L'intégration d'invariants auxiliaires dans la vérification de modèle basée sur l'interpolation améliore considérablement son efficacité et son efficacité. En renforçant à la fois les vérifications de points fixes et les interpolants, les techniques proposées permettent la vérification de programmes difficiles qui étaient auparavant ingérables.
Cette recherche souligne l'importance de trouver des moyens efficaces pour améliorer les algorithmes existants en vérification logicielle, les rendant plus robustes et capables de relever des défis complexes. Les travaux futurs s'intéresseront à optimiser davantage l'utilisation des invariants auxiliaires, en s'assurant qu'ils ne sont appliqués que lorsqu'ils sont les plus bénéfiques pour le processus de vérification de modèle.
Globalement, les résultats contribuent aux efforts en cours pour améliorer la correction et la fiabilité des logiciels, ce qui est crucial pour la dépendance croissante au logiciel dans la vie quotidienne.
Travaux Futurs
La recherche ouvre diverses avenues pour de futures explorations. L'objectif est de peaufiner encore les deux méthodes pour minimiser l'effort informatique supplémentaire nécessaire pour la résolution SMT ou l'interpolation qui découle parfois de l'utilisation d'interpolants renforcés.
D'autres études pourraient explorer les effets de l'injection sélective d'invariants à des points stratégiques pendant le processus de vérification de modèle. En adaptant l'utilisation des invariants auxiliaires plus soigneusement, les gains d'efficacité pourraient être maximisés, entraînant des améliorations encore plus grandes.
En résumé, ce travail pose les bases de techniques d'injection d'invariants plus avancées dans la vérification logicielle, suggérant une direction prometteuse pour de futures recherches qui pourraient mener à des systèmes logiciels plus sûrs et plus fiables.
Titre: Augmenting Interpolation-Based Model Checking with Auxiliary Invariants (Extended Version)
Résumé: Software model checking is a challenging problem, and generating relevant invariants is a key factor in proving the safety properties of a program. Program invariants can be obtained by various approaches, including lightweight procedures based on data-flow analysis and intensive techniques using Craig interpolation. Although data-flow analysis runs efficiently, it often produces invariants that are too weak to prove the properties. By contrast, interpolation-based approaches build strong invariants from interpolants, but they might not scale well due to expensive interpolation procedures. Invariants can also be injected into model-checking algorithms to assist the analysis. Invariant injection has been studied for many well-known approaches, including k-induction, predicate abstraction, and symbolic execution. We propose an augmented interpolation-based verification algorithm that injects external invariants into interpolation-based model checking (McMillan, 2003), a hardware model-checking algorithm recently adopted for software verification. The auxiliary invariants help prune unreachable states in Craig interpolants and confine the analysis to the reachable parts of a program. We implemented the proposed technique in the verification framework CPAchecker and evaluated it against mature SMT-based methods in CPAchecker as well as other state-of-the-art software verifiers. We found that injecting invariants reduces the number of interpolation queries needed to prove safety properties and improves the run-time efficiency. Consequently, the proposed invariant-injection approach verified difficult tasks that none of its plain version (i.e., without invariants), the invariant generator, or any compared tools could solve.
Auteurs: Dirk Beyer, Po-Chun Chien, Nian-Ze Lee
Dernière mise à jour: 2024-10-25 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2403.07821
Source PDF: https://arxiv.org/pdf/2403.07821
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://svn.sosy-lab.org/software/cpachecker/branches/imc-with-invariants@
- https://www.sosy-lab.org/research/imc-df/
- https://gepris.dfg.de/gepris/projekt/378803395
- https://doi.org/10.1007/978-3-540-45069-6_1
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/loop-zilu/benchmark37_conjunctive.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/bitvector/s3_srvr_1a.BV.c.cil.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/loop-acceleration/phases_2-2.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label51.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label03.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label15.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label01.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/bitvector/s3_srvr_2a_alt.BV.c.cil.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/bitvector/s3_srvr_2a.BV.c.cil.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label12.c
- https://tex.stackexchange.com/a/536573
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/seq-mthreaded-reduced/pals_lcr-var-start-time.4.ufo.UNBOUNDED.pals.c.v+sep-reducer.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/seq-mthreaded-reduced/pals_lcr.4.ufo.UNBOUNDED.pals.c.v+lhb-reducer.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label04.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label11.c
- https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks/-/blob/svcomp22/c/eca-rers2012/Problem03_label19.c
- https://github.com/sosy-lab/benchexec
- https://www.sosy-lab.org