Mémoire de maîtrise (2018)
Résumé
L'utilisation croissante de systèmes informatiques critiques et l'augmentation de leur complexité rendent leur bon fonctionnement essentiel. Le model-checking logiciel permet de prouver formellement l'absence d'erreurs dans un programme. Il reste cependant limité par deux facteurs : l'explosion combinatoire et la capacité à spécifier le comportement correct d'un programme. Ces deux problèmes sont amplifiés dans le cas de programmes concurrents, à cause des différents entrelacements possibles entre les fils d'exécutions. Les assertions et les formules logiques LTL sont les deux formalismes de spécification les plus utilisés dans le cadre du model-checking logiciel. Cependant, ils sont limités dans un contexte concurrent : les assertions ne permettent pas d'exprimer des relations temporelles entre différents fils d'exécutions alors que les formules LTL utilisées par les outils actuels ne permettent pas d'exprimer des propriétés sur les variables locales et les positions dans le code du programme. Ces notions sont pourtant importantes dans le cas de programmes concurrents. Dans ce mémoire, nous établissons un formalisme de spécification visant à corriger ces limitations. Ce formalisme englobe LTL et les assertions, en permettant d'exprimer des relations temporelles sur des propositions faisant intervenir les variables locales et globales d'un programme ainsi que les positions dans le code source. Nous présentons aussi un outil permettant de vérifier une spécification exprimée dans ce formalisme dans le cas d'un programme concurrent codé en C. Notre formalisme se base sur la logique LTL. Il permet de surmonter deux des principales limitations rencontrées par les variantes de LTL utilisées par les outils de model-checking logiciel : manipuler des positions dans le code et des variables locales dans les propositions atomiques. La principale difficulté est de définir correctement dans l'ensemble du programme une proposition atomique lorsqu'elle dépend d'une variable locale. En effet, cette variable locale n'a de sens que dans une partie limitée du programme. Nous résolvons ce problème en utilisant le concept de zones de validité. Une zone de validité est un intervalle de positions dans le code source du programme dans laquelle la valeur d'une proposition atomique est définie à l'aide de sa fonction d'évaluation. Une valeur par défaut est utilisée hors de la zone de validité. Ceci permet de limiter l'utilisation de la fonction d'évaluation aux contextes où tous ses paramètres locaux sont définis.
Statistiques
Total des téléchargements à partir de PolyPublie
Téléchargements par année
Provenance des téléchargements
