Cours Génie Logiciel II: Méthodes formelles pour la spécification et la vérification de logiciels

Cambridge University Press
Page 1 sur 56Lecteur de document UniversityLib

Cours Génie Logiciel II: Méthodes formelles pour la spécification et la vérification de logiciels

Software Engineering · lab

Voir tous les documents en génie logiciel

Cours "Génie Logiciel II"

Partie2: Méthodes formelles pour la spécification et la vérification de spécification et la vérification de logiciels

Niveau: II2 Enseignante: Rim DRIRA [email protected]

AU: 2017/2018

1

Objectifs du cours

 Introduire la spécification et la vérification

formelle dans la démarche de développement d’un logiciel

 Apprendre une méthode formelle: la méthode

B

 Apprendre deux techniques de vérification

formelle  Preuve de théorèmes  Vérification de modèles ou model checking

2

Plan

 Chapitre1: Introduction aux méthodes

formelles

 Chapitre2: La méthode B AMN (Abstract Machine Notation)

 Chapitre3: Vérification de modèles (ou

model checking)

3

Pré-requis

 Génie Logiciel 1

 Logiques formelles (propositions, prédicats,

interprétation, Systèmes formels, axiomes, théorèmes)

 Théorie des langages (automates finis et composition)  Théorie des langages (automates finis et composition)

4

Références

 [Abr96] J.-R. Abrial, “The B book”, Cambridge University Press, 1996.  [Abr10], “Modeling in Event-B : System and Software Engineering”, Cambridge

University Press, 2010.

 [Ger06]: Frédéric Gervais , "Combinaison de spécifications formelles pour la modélisation des systèmes d’information« , thèse de doctorat, Université de Sherbrooke, 2006.

http://cedric.cnam.fr/fichiers/RC1103.pdf  [Jul08]: Jacques Julliand, cours "Spécification, Vérification et Test" , Université

Franche-comté, 2008.

http://lifc.univ-fcomte.fr/~julliand/Lecon1_A_8SVT.pdf  [Mos08]: Olfa Mosbahi, "Développement formel des systèmes automatisés« ,  [Mos08]: Olfa Mosbahi, "Développement formel des systèmes automatisés« ,

thèse de doctorat, Université Tunis-ElManar, 2008. http://pegase.scd.inpl-nancy.fr/theses/2008_MOSBAHI_O.pdf  [Ngu98] H.P. Nguyen, "Dérivation de spécifications formelles B à partir de

spécifications semi-formelles", Thèse de Doctorat, CNAM, France, 1998.

http://lacl.univ-paris12.fr/laleau/sourcePublis/Before2003/PHD-PHNguyen.pdf  [SOM92]: Ian Sommerville, "Le Génie Logiciel », Addison-Wesley, 1992.

(bibliothèque de l’ENSI)

5

Références

Autres Références Bibliographiques

 David Harel, Michal Politi, Modeling reactive systems with statecharts

the statemateapproach, McGraw-Hill, 1998,

 Zohar Manna, Amir Pnueili, The Temporal Logic of Reactive and

Concurrent Systems: Specification, Springer, 1992. Concurrent Systems: Specification, Springer, 1992.

 Kevin Lano, The B language and method: a guide to practical formal

development, Springer, 1996,

 Philippe Schnoebelen, Vérification de logiciels Techniques et outils du

model-checking, Vuibert, 1999.

 Christel Baier, Joost-Pieter Katoen, Principles of Model-Checking, MIT

Press Cambridge, London, 2008.

6

Introduction

 Plusieurs catégories de systèmes à

développer  Les systèmes «grande consommation»

 Exemples: jeux, familiale, financière, etc.

 Les systèmes «sur mesure»

 Exemples: gestion de stock,

 Les systèmes «automatisés sûrs de Les systèmes «automatisés sûrs de fonctionnement»  Exemples: Robots pour réaliser des tâches pénibles dans l’industrie, distributeur de boisson, feu de croisement, accès à un parking payant, aéronautiques, etc.

Ces systèmes exigent un niveau de

sûreté et de fiabilité élevé

7

Pourquoi l'approche formelle?

 Validation difficile à réaliser: montrer que le logiciel

répond à sa spécification.

 Vérification limitée (cohérence entre les étapes du

développement) et non automatisée

 Impossibilité de garantir l’absence d’erreurs: Non

exhaustivité des cas envisagés lors des tests

 Coût élevé de la correction des erreurs surtout quand

elles sont détectées tard dans le cycle de développement.

8

Coût d’une erreur 1/2

Plus les erreurs sont détectées tard dans le cycle de développement, plus les coûts de correction sont élevés.

> 1000 heures / erreur

Maintenance

100 heures / erreur

Validation Finale

Installation sur site

Fin du développement Fin du développement

10 heures / erreur

Tests d’Intégration

1 heure / erreur

Tests Unitaire

Fin de l’effort de développement

En cas d’erreur

Développement du code source

9

Coût d’une erreur 2/2

 En phase de validation

 L’équipe de développement n’est plus disponible  L’installation est reportée

 En phase d’installation

 Le produit ne fonctionne pas correctement

perte du service

 Le produit ne fonctionne pas du tout

perte de la mission

 Le produit cause des atteintes à la vie humaine

Atteinte à l’image de l’entreprise et perte financière

Les conséquences sont donc plus catastrophiques pour les systèmes automatisés qui exigent une sûreté de fonctionnement

10

Que faire alors ?

 Le développement classique des systèmes automatisés sûrs de fonctionnement nécessite des tests qui peuvent à la fin obliger le développeur à refaire le développement.

 L’utilisation des méthodes formelles permet de remédier à ce problème. En effet ce sont des méthodes basées sur un fondement mathématique offrant la précision, l’absence fondement mathématique offrant la précision, l’absence d’ambiguité…..

 On peut ainsi partir des besoins spécifiés au départ, développer

un modèle formel pour ce système (décrivant l’aspect comportemental, fonctionnel et structurel), exprimer formellement les exigences et effectuer la preuve.

11

Que faire alors ?

Le Système

satisfait-il des exigences

Technique Sémantique

Modèle D’automates

Ou bien Ou bien

Technique Syntaxique

Formules Logiques

? |==

Publicité

? |--

Formule logique

Formule logique

Il faut qu’on arrive, après ce cours, à Il faut qu’on arrive, après ce cours, à modéliser, formaliser et vérifier modéliser, formaliser et vérifier

12

Chapitre1: Introduction aux méthodes formelles

Objectifs  Sensibiliser à l’intérêt d’introduire les méthodes formelles dans le cycle de développement d’un logiciel

 Comprendre comment on peut introduire les

méthodes formelles dans le cycle de développement méthodes formelles dans le cycle de développement d’un logiciel

 Définir les termes clés dans le domaine des méthodes

formelles

 Présenter quelques formalismes de spécification

formelle

 Introduire les techniques de la vérification formelle

13

Chapitre1: Introduction à la spécification et à la vérification formelles

Plan 1. Systèmes automatisés sûrs de

fonctionnement

2. Nécessité des méthodes formelles 3. Méthodes formelles et cycle de 3. Méthodes formelles et cycle de

développement

4. Comportement, environnement,

propriétés

5. Techniques de Vérification

14

Systèmes automatisés sûrs de fonctionnement fonctionnement

15

Systèmes automatisés sûrs de fonctionnement

 Un système est dit automatisé s’il exécute toujours le même cycle de travail pour lequel il a été programmé

 Les systèmes automatisés sûrs de

fonctionnement exigent un niveau de fonctionnement exigent un niveau de sûreté et de fiabilité élevé

 Ce sont des systèmes qui doivent répondre dans toutes les exécutions possibles aux propriétés exigées par l’utilisateur

16

Systèmes automatisés sûrs de

fonctionnement

Quelque chose de mauvais n’arrivera jamais

Quelque chose de bien arrivera nécessairement

Propriétés de sûreté

Propriétés de vivacité

Commandes

Système physique

Système Informatique de commandes

Informations sur l’état du système physique

17

Exemple d’un passage à niveau

 Le système physique est la barrière

 Le composant de contrôle (le système informatique à

développer) agit sur la barrière pour qu’elle soit baissée ou relevée

 Une propriété attendue de ce système (sûreté): Le

système ne doit pas permettre un accès simultané au système ne doit pas permettre un accès simultané au trafic ferroviaire et au trafic routier

Le passage à niveau

18

Exemple d’un système de contrôle d’un chauffage

Le système informatique est un système de contrôle d’un chauffage La propriété de sûreté est liée à la température ambiante qui ne doit pas déborder d’un intervalle. L’environnement est la température. Le composant physique (commandé) est l’appareil de chauffe chauffe Le contrôleur (qui est le logiciel que nous avons à développer) reçoit en entrée la valeur de la température et agit sur le composant physique si nécessaire pour chauffer ou refroidir Le composant logique (le contrôleur) et le composant physique ( contrôlé) doivent se comporter de façon à ce que la propriété soit vérifiée (température dans un intervalle).

19

Autres exemples

Le distributeur de billets

Les robots

Les feux de carrefour

La barrière de parking

20

Systèmes automatisés sûrs de fonctionnement

 Pour réduire la complexité et assurer un bon

fonctionnement, l’utilisation des méthodes formelles apparaît comme une solution principale

 Elle consiste à Introduire la spécification et la

vérification formelles dans le cycle de développement d’un logiciel

 Le système est ainsi spécifié et vérifié avant qu’il

ne soit implémenté

 Le document de référence devient le document formel

élaboré par la spécification

21

Méthodes formelles

22

Bref historique

 Avant dans les années 70, l’utilisation des méthodes formelles se

réalisait après l’implémentation  Le programme est traduit en automate et la vérification se fait sur

l’automate.

 Cependant, la correction d’une erreur découverte à ce stade était

très couteuse.

 Avec la complexité du code, les développeurs ont pensé à introduire la  Avec la complexité du code, les développeurs ont pensé à introduire la

vérification dans une phase très avancée du cycle de développement.

 Les logiques (propositionnelles et de prédicats) n’étaient pas

suffisantes pour décrire un comportement. On a pensé à introduire les logiques temporelles.

 Avec l’évolution des bases de données, la théorie des ensembles et la théorie des fonctions ont été introduites dans les approches formelles dans les années 90.

23

Méthodes Formelles

 Les méthodes formelles consistent à utiliser les mathématiques pour le développement de logiciels.

 Les principales activités sont :

 l’écriture d’une spécification formelle ;  l’écriture d’une spécification formelle ;  la vérification formelle de la spécification à

l’aide de raisonnements mathématiques.  Corriger la spécification si besoin

 la construction de programmes en transformant

formellement la spécification.

24

Spécification formelle: Définition

 Une spécification d’un logiciel est formelle si elle est

exprimée avec un langage qui possède:

 un vocabulaire et une syntaxe formellement définis;  une sémantique basée sur les mathématiques.  Expression dans un langage formel du quoi d’un système à

développer développer

 Offre une description claire, précise et non ambiguë du système sans référence aux détails d'implémentation:  La modélisation du fonctionnement du système.  La formulation rigoureuse des propriétés attendues du

système

25

Spécification formelle

 Avantages :

 Rigueur et précision des spécifications

 Faciliter la validation  Automatiser la vérification  Prévenir les erreurs

 Inconvénients :  Inconvénients :

 Nécessite une certaine qualification du client,

utilisateurs et développeurs  Difficulté de communication

26

Comparaison

Spécifications semi-formelles

Spécifications formelles

 Modèles graphiques et

intuitifs,  Support de

communication

Publicité

 Editeurs visuels  Editeurs visuels  Absence d’une

sémantique précise,

 Pas de vérification de propriétés (sûreté, vivacité, etc.)

 Sémantique précise et

rigoureuse

 Possibilité d’automatisation

de la vérification de de la vérification de propriétés

 Faciliter la validation  Difficiles à utiliser par les

non familiarisés

 Manque de support de

communication

Voir [Ngu98] pour des détails sur les possibilités de dériver des spécifications formelles à partir de spécifications semi-formelles

27

Transformation formelle

 Processus

qui

commence

par

l’élaboration

d’une

spécification formelle du système

 Et qui se poursuit en transformant cette spécification par spécification

parvenir raffinement suffisamment raffinée pour donner un code exécutable.

jusqu’à

une

à

 Permet s'investir dans les points les plus fins par étapes

et décomposer la vérification.

28

Vérification formelle

 Prouver formellement des propriétés sur le

système dès sa spécification

 Lors d’une transformation formelle:

 Prouver les propriétés  Prouver les propriétés  Prouver le passage d’un modèle à un autre

 Par définition, la vérification est "la

confirmation de preuves que les exigences spécifiées ont été satisfaites" (ISO 8402).

29

Méthodes formelles et cycle de développement de développement

30

Méthodes formelles et cycle de développement

 Introduire une phase de spécification formelle  Le document de référence devient le

document formel élaboré par la spécification spécification

 Intégrer la vérification formelle

dans les démarches de conception de logiciels.  Le système est ainsi spécifié et vérifié

avant qu’il soit implémenté

31

Méthodes formelles et cycle de développement

Validation

Analyse des besoins

Exigences: propriétés attendues (ex: de sûreté)

Spécification formelle

Conception Conception

Codage

Tests

Exploitation / Maintenance

Vérification

32

Spécification formelle et validation 1/2

 La validation consiste à se demander si le texte

formel traduit le cahier des charges

 La spécification formelle permet de poser les bonnes questions et d’être plus rigoureux bonnes questions et d’être plus rigoureux  La validation est facilitée

 La validation ne peut pas être automatisée

33

Spécification formelle et validation 2/3

 Lors du passage du cahier des charges vers la Spécification formelle, on risque toujours de:  Mal interpréter les besoins  Ne pas pouvoir formaliser toutes les propriétés qui

couvrent la totalité des besoins.

 Quelques voies pour éviter ces problèmes:  Quelques voies pour éviter ces problèmes:

 Compléter la vérification formelle par de la validation

à partir de jeux de tests,

 Utiliser plusieurs langages formels pour

augmenter le pouvoir d'expression et combiner l'efficacité des méthodes de vérification [Ger06]

34

Méthodes formelles et cycle de développement

 Les méthodes formelles ne sont pas limitées à la spécification mais couvent aussi:  Conception: par transformation formelle on passe de la spécification à du pseudo- on passe de la spécification à du pseudo- code

 Codage: on peut générer

automatiquement du code exécutable  Preuve: On prouve à chaque étape le

respect des spécifications initiales

35

Formalismes pour représenter des spécifications

 les langages dérivés de la logique classique pour

exprimer des systèmes transformationnels,

 les logiques temporelles pour exprimer des propriétés

dynamiques de vivacité des systèmes réactifs,

 les langages logico-ensemblistes comme Z, VDM et B pour décrire et vérifier des propriétés statiques sur les états des systèmes, états des systèmes,  les réseaux de Petri,

les automates communicants, LOTOS pour modéliser des systèmes concurrents avec ou sans partage de variables,

 les automates temporisés pour modéliser des systèmes

temps réels

36

Modélisation des exigences: Propriétés exigences: Propriétés attendues

37

Types de propriétés

 Sûreté (Safety) Invariants

 Quelque chose de mauvais n’arrivera

jamais  pas d’accès simultané de A et B à la

section critique  Vivacité (Liveness) Vivacité (Liveness)  Quelque chose de bien arrivera

nécessairement  si A veut entrer à la section, alors inévitablement il aura cet accès

38

Types de propriétés

Fatalité

sous

 Énonce que,

conditions quelque chose de bien finira par avoir lieu au moins une fois à partir d’un certain état.  Dans ce cas, on se situe dans la classe des  Dans ce cas, on se situe dans la classe des

certaines

propriétés de vivacité.

Equité

 Énonce que, sous certaines conditions, quelque chose aura lieu un nombre infini de fois.

39

Types de propriétés

Atteignabilité  Ces

propriétés

énoncent

qu’une

certaine situation peut être atteinte.  Nous pouvons exprimer aussi que quelque chose n’est jamais atteignable quelque chose n’est jamais atteignable alors et d’inatteignabilité.  Dans ce cas, on se situe dans la classe des

parlons

Publicité

nous

propriétés de sûreté.

40

Exemple : Contrôleur de feux de circulation d’un carrefour

 Problème: spécifier le fonctionnement d’un contrôleur de feux tricolores d’un carrefour.

 Les feux peuvent être :

 Hors service (hs) : tous les feux sont au jaune  En service (es) : ils évoluent selon  En service (es) : ils évoluent selon vert

rouge

jaune

rouge

 Lorsque le feu est au rouge sur une voie, les véhicules de cette voie ne peuvent s’engager dans le carrefour

41

Exemple : Contrôleur de feux de circulation d’un carrefour

 Propriétés souhaitées:

 Condition de sûreté (safety) : les

véhicules ne peuvent s’engager dans les deux voies simultanément.

 Condition de vivacité (liveness) : les  Condition de vivacité (liveness) : les véhicules ne sont pas bloqués infiniment sur l’une des (ou les deux) voies.  Ces propriétés sont décrites par :

((feuA=rouge)(feuBrouge))((feuArouge)(feuB=rouge))

42

Exemple: Accès à une section critique

Etant donnée une section critique (SC), un algorithme d’exclusion mutuelle doit satisfaire : 1- exclusion mutuelle (EM) sureté : si un processus est en SC alors aucun processus ne peut y être. 2- progrès (P) vivacité: si un groupe de processus demande d’entrer en SC alors l’un d’eux doit demande d’entrer en SC alors l’un d’eux doit obtenir l’accès 3- equite (E) vivacité : tout processus demandant d’entrer en SC doit y entrer ( au bout d’un certain temps) – pas de famine

43

Techniques de vérification vérification

44

Techniques de vérification

Deux approches de vérification:  Preuve de théorèmes (vérification

syntaxique)

 Vérification de modèles ou model  Vérification de modèles ou model checking (vérification sémantique)

45

Techniques de vérification

Preuve

 consiste à prouver des propriétés à partir

des axiomes du système et d’un ensemble de règles d’inférence.

 très puissantes  très puissantes  elles traitent des systèmes à nombre

d'états infinis

 elles sont indécidables dans le cas

général,  difficiles à automatiser.

46

Techniques de vérification

Model checking

 permet de savoir si un automate donné vérifie une

formule temporelle donnée

 consiste à parcourir exhaustivement l’espace d’´etats

d’un modèle fini du système à vérifier.  Les propriétés à vérifier sont généralement  Les propriétés à vérifier sont généralement

exprimées en logique temporelle.

 Un contre exemple est généré lorsque la propriété

n’est pas vérifiée par le modèle considéré.

 entièrement automatiques  limitées aux systèmes ayant un nombre fini d'états

 posent des problèmes en temps de traitement et en espace mémoire liés à l'explosion combinatoire en nombre d'états.

47

Techniques de vérification

Principe simplifié du model-checking

48

Une précision: TEST vs Preuve

Un test qui mène à une exécution

incorrecte apporte une information mais un test correct n’apporte aucune information

Une preuve correcte permet d’indiquer qu’une propriété P est vérifiée, alors que l’impossibilité de faire une preuve ne renseigne pas sur l’anomalie

49

Comparaison

Preuve

Model checking

 Applicable aux systèmes à

nombre infini d'états

 Difficulté d'automatiser les preuves de propriétés dynamiques dynamiques

 En cas d'échec de la preuve

automatique, l'utilisateur doit déterminer si c'est une erreur ou une difficulté de preuve.

 L’utilisateur doit guider le

prouveur.

 Simple à utiliser  Automatisation de la

vérification des propriétés dynamiques dynamiques

 Limité par l'explosion

combinatoire du graphe d'état (problème de place mémoire et de temps de calcul).

 Limité aux automates à nombre fini d'états.

50

Modéliser et vérifier selon la classe de selon la classe de systèmes

51

Modéliser et vérifier selon la classe de systèmes

 les langages formels et les outils associés sont adaptés à certaines classes de problèmes et pas à d'autres.

 Spécifier et vérifier selon la classe d’un

système:  Systèmes finis et systèmes infinis  Systèmes transformationnels et

systèmes réactifs

52

Modéliser et vérifier selon la classe de

systèmes

Systèmes finis= systèmes à nombre fini d'états: une classe où la question de la vérification est en général décidable.

Systèmes infinis = systèmes à nombre infini Systèmes infinis = systèmes à nombre infini

d'états où la question de la vérification est, en général, indécidable.

53

Modéliser et vérifier selon la classe de

systèmes

Systèmes transformationnels  Système transformationnel : retourne des résultats à partir de données. Le système est totalement sourd aux changements de son environnement.

 Exemples: un compilateur, un solveur de

systèmes d'équations linéaires, etc.

54

Modéliser et vérifier selon la classe de

systèmes

Systèmes réactifs  Un système réactif est un système qui évolue dans un environnement dont il doit prendre en compte les évolutions pendant son fonctionnement.  Il interagit constamment avec son environnement en

recevant des stimuli et en retournant des commandes. commandes.

 Exemples: un système d'exploitation, un IHM,

un Protocole de communication, etc.

55

Modéliser et vérifier selon la classe de systèmes

Spécifier et vérifier un système transformationnel

 Une spécification boîte noire par une pré et une post condition décrivant les états initiaux et finaux du système, convient.

 les langages dérivés de la logique classique permettent de modéliser et vérifier des systèmes transformationnels. transformationnels.

Spécifier et vérifier un système réactif

 Spécification boîte de verre du système et de son

environnement.

 On spécifie une collection d’actions et des propriétés sur leurs enchaînements dans les comportements internes du système.

 les logiques temporelles permettent de modéliser et vérifier les propriétés dynamiques des systèmes réactifs.

56