thumb|308x308px|Principe du . En informatique, la vérification de modèles, ou en anglais, est le problème suivant : vérifier si le modèle d'un système (souvent informatique ou électronique) satisfait une propriété. Par exemple, on souhaite vérifier qu'un programme ne se bloque pas, qu'une variable n'est jamais nulle, etc. Généralement, la propriété est écrite dans un langage, souvent en logique temporelle. La vérification est généralement faite de manière automatique. Sur le plan pratique, la vérification de modèles est devenue, au niveau industriel, la méthode de vérification de code et de systèmes matériels la plus populaire et la plus utilisée aujourd'hui.

Histoire La vérification de modèles s'appuie sur la logique temporelle dont l'un des pionniers est Amir Pnueli, qui reçut le prix Turing en 1996 pour () « Amir Pnueli », .. Le commence avec les travaux d'Edmund M. Clarke, E. Allen Emerson.Edmund M. Clarke, E. Allen Emerson: "Design and Synthesis of Synchronization Skeletons Using Branching-Time Temporal Logic". Logic of Programs 1981: 52-71.., Jean-Pierre QueilleIl est en particulier l'auteur de la première version du système CESAR : et Joseph Sifakis. au tout début des années 1980. Clarke, Emerson et Sifakis se sont vu attribuer le prix Turing 2007 pour leurs travaux sur le model checking .USACM: 2007 Turing Award Winners Announced..

Description Dans cette section, on précise ce que l'on entend par modèle et propriété puis par le problème de model checking.

Modèle thumb|378x378px|Système de transition d'états pour un distributeur de boissons. Le système est modélisé par un système de transition d'états. Il s'agit d'un graphe orienté : un sommet représente un état du systèmeEn terminologie des structures de Kripke, on parle d'un monde. et chaque arc représente une transitionEn terminologie des structures de Kripke, on parle daccessibilité. , c'est-à-dire une évolution possible du système d'un état donné vers un autre état. Chaque état du graphe orienté est étiqueté par l'ensemble des propositions atomiques vraies à ce point d'exécution (par exemple, i=2, le processeur 3 est en attente). Un tel graphe est aussi appelé une structure de Kripke.

Exemple du distributeur de boissons On donne ici l'exemple d'un distributeur de boissons qui peut être dans 4 états. : attente d'une pièce de monnaie, sélection d'une boisson, distribution d'une bouteille d'eau minérale et distribution d'une bouteille de jus d'orange.

Exemple de l'ascenseur L'état du système est décrit par le niveau courant de l'ascenseur entre 0 et 3, l'état des appels (, un par étage) et si l'ascenseur bouge et s'il patrouille vers le haut ou vers le bas. (il y a donc 4 × 2⁴ × 2 × 2 = ).

Propriété La propriété à vérifier est écrite par une formule de logique temporelle. Par exemple, si l'on souhaite vérifier que x = 0 une infinité de fois, on peut écrire la formule GF(x = 0) qui se lit « toujours, dans le futur, x = 0 ». On distingue : les propriétés de sécurité (safety en anglais), comme « l'ascenseur bouge toujours avec les portes fermées » ; les propriétés de vivacité (liveneness en anglais), comme « si l'ascenseur est appelé à un certain étage, alors il ira à cet étage ». Dwyer et al. ont identifié 55 types de spécification en logique temporelle linéaire qui apparaissent dans des applications industrielles.

Exemple du distributeur de boissons Par exemple, (GFa → (G(s → F(e ou j))) (si la machine attend une infinité de fois une pièce, alors toujours, dès que l'on sélectionne une boisson, dans le futur, une boisson (eau minérale ou jus d'orange) est délivrée) est une propriété vraie pour le distributeur de boissons.

Problème du model checking L'entrée du problème du model checking est un modèle (typiquement un système de transition d'états) et une propriété (typiquement écrite dans une logique temporelle). En sortie, on souhaite savoir si la propriété est vérifiée et, le cas échéant, un contre-exemple d'une exécution du système qui falsifie la propriété.

Algorithmes

Méthodes explicites Pour des propriétés de sûreté (toujours, p est fausse), on peut faire un parcours en profondeur du graphe et vérifier que chaque état vérifie p. Des algorithmes d'étiquetage existent pour la (CTL). D'autres méthodes sont fondées sur les automates. On transforme la négation de la formule à vérifier en un automate puis on fait le produit cartésien synchrone de l'automate et du modèle. On se ramène alors à tester si le langage de l'automate produit est vide ou non.

Méthodes symboliques Parcourir (ou énumérer) explicitement tous les mondes de la structure de Kripke peut être coûteux, c'est pourquoi des méthodes symboliques, introduites par Ken McMillan et Ed Clarke, Une approche, répandue pour la vérification de propriétés exprimées dans la logique temporelle arborescente, est fondée sur la représentation symbolique du modèle. De nombreuses méthodes de représentation d'ensembles d'états ont vu le jour. La plus connue utilise les diagrammes de décision binaire (BDD).

Discussions

Model checking borné Au lieu de considérer l'ensemble des traces d'exécution du système, on peut se limiter à des traces finies, de longueur bornée : c'est le borné. L'existence d'une trace vérifiant une certaine propriété est équivalente à la satisfiabilité d'une certaine formule booléenne. En effet, si un état du système est décrit par un k-uplet de booléens, et que l'on s'intéresse aux traces de longueur bornée par un certain n, on se ramène au problème de la satisfiabilité d'une formule propositionnelle (problème SAT). Plus précisément, si une formule identifie les états initiaux du système, une formule les états dont on veut tester l'accessibilité, et une formule est une relation de transition, alors on considère la formule booléenne où sont des propositions atomiques qui représentent l'état à l'étape i de l'exécution du système. Il existe divers logiciels, appelés solveurs SAT, qui peuvent décider « efficacement en pratique » le problème SAT. De plus, ces logiciels fournissent habituellement un exemple de valuation satisfaisant la formule en cas de succès. Certains peuvent produire des éléments d'une preuve de non-satisfiabilité en cas d'échec.

Une évolution récente est l'ajout, en sus de variables booléennes, de variables entières ou réelles. Les formules atomiques ne sont alors plus seulement les variables booléennes, mais des prédicats atomiques sur ces variables entières ou réelles, ou plus généralement des prédicats pris dans une théorie (par exemple , etc.). On parle alors de satisfiabilité modulo une théorie (par exemple, on pourra considérer comme prédicats atomiques les égalités et inégalités linéaires).

Autres modèles Le modèle peut être plus riche que des automates finis. Il existe par exemple du model checking sur des automates temporisés . Aussi, le concept de model checking se généralise en logique mathématique. Par exemple, la vérification de structures avec une formule de la logique du premier ordre est PSPACE-complet ; de même pour une formule de la logique monadique du second ordre. La vérification de structures automatiques avec une formule du premier ordre est décidable.

Abstraction Des techniques comme CEGAR (, « raffinement de l'abstraction guidé par les contre-exemples »). permettent de transformer un programme (écrit en C par exemple) en un modèle abstrait puis de raffiner successivement le modèle s'il est trop grossier.

Logiques modales Les logiques modales forment une extension de la logique propositionnelle permettant de représenter des modalités. Parmi celles-ci, on trouve par exemple les logiques temporelles, telles que LTL, CTL, CTL* ou le mu-calcul, mais aussi des logiques épistémiques, des logiques déontiques... Différents algorithmes de model-checking ont été conçus afin de traiter ces différentes logiques.

Logique pour les systèmes multi-agents Dans les systèmes multi-agents, on s'intéresse à des propriétés épistémiques comme « l'agent sait que x = 0 » d'où l'utilisation de logique épistémique et de logiques qui mélangent logique temporelle et épistémique.. On s'intéresse à raisonner sur l'existence de stratégies dans un jeu : il existe des logiques pour écrire des propriétés sur les jeux comme « l'agent a une stratégie pour qu'un jour x = 0 » ()..

Outils alloyAlloy. ; ARCAltaRica. ; uPPAALUPPAAL. ; APMC ; cADPCADP. ; csml, McbCsml, Mcb. ; cWB ; loTREC ; smvSmv. ; spinSpin.. ; spotSpot. ; nuSMVNuSMV. ; tinaTina. ; ROMEO. PAT

Depuis 2011, les outils qui le souhaitent participent au Model Checking Contest. (MCC), compétition internationale scientifique permettant de comparer les performances des « model checkers » sur différents types de calculs.

Complexité Un aspect important de la recherche en est de démontrer qu'une certaine classe de propriétés, ou une certaine logique, est décidable, ou que sa décision appartient à une certaine classe de complexité. La table suivante indique les complexités du model checking pour les trois logiques temporelles LTL, CTL et CTL*. La quantité |M| est la taille du modèle représenté explicitement. La quantité |φ| est la taille de la spécification en logique temporelle. La complexité de programme évalue la complexité du model checking lorsque la formule temporelle est fixée. Logique temporelleComplexité temporelle d'un algorithmeComplexité du model checkingComplexité de programme du model checkingLTLO(|M| ×2|φ|)PSPACE-completNLOGSPACE-completCTLO(|M| ×|φ|)P-completNLOGSPACE-completCTL*O(|M| ×2|φ|)PSPACE-completNLOGSPACE-complet Orna Kupferman et Moshe Y. Vardi ont introduit le problème du model checking de systèmes ouverts, abrégé en module checking. En module checking, l'entrée du problème est un système de transition où certains états sont contrôlés par le système proprement dit, et d'autres sont contrôlés par l'environnement. Une propriété temporelle est vraie dans un tel système de transition si elle est vraie quels que soient les choix de l'environnement. Plus précisément, étant donné un système de transition M, on considère son dépliage VM, qui est un arbre infini. Une propriété est vraie dans ce système si elle est vraie dans tout arbre obtenu en élaguant/supprimant de VM certains sous-arbres dont la racine est un successeur d'un état contrôlé par l'environnement. Pour le module checking, Orna Kupferman et Moshe Y. Vardi ont montré que les complexités atteignent celle du problème de satisfiabilité dans les logiques correspondantes : Logique temporelleComplexité du module checkingComplexité de programme du module checkingLTLPSPACE-completNLOGSPACE-completCTLEXPTIME-completP-completCTL*2EXPTIME-completP-complet Allur et al. ont étudié le model checking avec une extension de CTL et CTL* pour raisonner sur des stratégies dans un système multi-agent. La table suivante donne les résultats de complexité pour le model checking sur ATL et ATL*. Logique temporelleComplexité du model checkingComplexité de programme du module checkingATLP-completNLOGSPACE-completATL*2EXPTIME-completP-complet Comme le signalent Allur et al., le problème de model checking d'ATL* est proche du problème de synthèse LTL qu'ont développé Pnueli et Rosner, lui 2EXPTIME-complet également.

Algorithmes efficaces Un autre aspect de la recherche en est de rechercher des algorithmes efficaces sur des cas intéressants en pratique, de les implémenter, et de les appliquer à des problèmes réels. Notes et références

Voir aussi Articles connexes Diagramme de décision binaire Automate de Buchi Logique temporelle Méthodes formelles Test logiciel Structure de Kripke Réduction par ordre partiel

Bibliographie En français Gérard Berry La vérification de modèles (), Leçon du Collège de France du .

En anglais

Catégorie:Méthode de développement logiciel Catégorie:Méthode formelle Catégorie:Vérification de modèles