Technique Formelle : Définition
On appelle Technique Formelle, l'association :
1. d'un langage à sémantique formelle. Ce langage permet
la description abstraite des objets programmes à
développer. Un programme écrit dans un langage formel
constitue une spécification (ou modèle) formelle du
système à concevoir.
2. un système de preuve permettant d'exprimer et de
prouver des propriétés sur les modèles (approche pour
vérifier la cohérence d'un système par rapport à sa
spécification). Il existe actuellement deux principales
techniques de preuve sur modèle
Méthodes Formelles - O.Belkahla Driss 1
Technique Formelle : Définition
Ces méthodes sont structurées et naturellement
modulaires
Elles permettent des raisonnements
La syntaxe et la sémantique sont accompagnées de règles
de déduction (permettant de démontrer des propriétés)
Par exemple on peut utiliser la logique classique (formules
mathématiques, quantificateurs, etc.)
La syntaxe est celle des formules du calcul des prédicats
La sémantique est donnée par la théorie des modèles (un
ensemble de valeurs muni de prédicats et de fonctions
satisfaisant les formules)
Les règles de déduction sont celles de la logique du
premier ordre
Méthodes Formelles - O.Belkahla Driss 2
Technique Formelle : Définition
Le système de preuve :
Il permet la démonstration des propriétés relevantes du
système.
Il travaille sur un modèle du système
La preuve sur programme permet de s’assurer que le
modèle que nous avons réalisé se comporte de la bonne
façon, c’est à dire qu’il vérifie des propriétés exigées, qu’il
n’a pas de bugs
“Program testing can be used to show the presence of bugs, but never
show their absence” – Edsger W. Dijkstra
Méthodes Formelles - O.Belkahla Driss 3
Systèmes de preuves – Historique
1. Les débuts : travail des logiciens cherchant à formaliser le
raisonnement logique et mathématique
300 avant JC : le logicien Aristote réalise le premier système
formel
Année 30 : programme d’Hilbert (tentative d’unification de
l’ensemble des concepts mathématiques par le biais de la
logique), travaux de Gôdel (Théorème d’incomplétude)
⇒ logique propositionnelle, logique du premier ordre,
logique temporelle, théorie de la démonstration...
2. Suite à l’invention des ordinateurs : utilisation de ces concepts
pour tenir des raisonnements mathématiques ⇒ les systèmes
d’inférence : Prolog, Systèmes experts...
3. Puis création de programmes permettant le raisonnement sur
les programmes
⇒ Vérification formelleMéthodes Formelles - O.Belkahla Driss 4
Exemple de vérification formelle
• Comment vérifier que l’identité (a + b)2 = a2 + b2 + 2(a *b) est
correcte ?
• Une vérification naïve : examiner toutes les valeurs possibles de a, à
les croiser avec toutes les valeurs possibles de b (recherche
exhaustive)
⇒ Si les domaines de a et de b sont grands, cette vérification peut être
très longue. Et si les domaines sont infinis (par exemple les réels),
cette vérification ne peut pas être exhaustive
• En vérification formelle, on utilise des valeurs symboliques et on
applique les règles qui régissent le + et l' *
Les règles
Méthodes Formelles - O.Belkahla Driss 5
Spécifier pour modéliser
• L’étape de spécification force à comprendre
ce que doit faire chaque composant
• La spécification permet d’argumenter sur la
cohérence du composant
• La spécification permet d’énoncer des
propriétés sur le système avant même son
développement
Méthodes Formelles - O.Belkahla Driss 6
Spécifier pour valider
• La validation consiste à se demander si le texte
formel « dit bien » ce que l'on veut qu'il dise, s'il
« traduit » bien la demande informelle faite par
celui qui commande le logiciel
• La validation ne peut pas être automatisée
• La spécification permet de poser les bonnes
questions afin de s’assurer de l’adéquation des
composants au cahier des charges
Méthodes Formelles - O.Belkahla Driss 7
Spécifier pour programmer
• Une spécification est un contrat que le
programmeur doit respecter quand il
décide du comment
– critères de langages, bibliothèques…
– critères de complexité
– critères de généricité
• La spécification est une référence pour la
suite du développement
Méthodes Formelles - O.Belkahla Driss 8
Spécifier pour vérifier
• Une spécification permet à chaque étape du
développement de vérifier que la réalisation du
système respecte les attentes initiales
– En conception :
Cet algorithme calcule-t-il bien ce que j’ai spécifié ?
– En intégration :
Ce programme réalise-t-il bien le composant initialement
spécifié (notamment en termes de fonctionnalités)
Méthodes Formelles - O.Belkahla Driss 9
Exemple : ce programme est-il correct ?
début
c:=0;
répéter
si a mod 2 ≠ 0 alors c := c + b ;
a := a div 2;
b := b x 2;
jusqu’à a =1;
c := c + b;
fin
Méthodes Formelles - O.Belkahla Driss 10
Spécifier
• Définir le quoi pas le comment !
– Nom
– Des données en entrée
– Des résultats en sortie
– Une post-condition
• La définition des résultats en fonction des données d’entrée
– Une pré-condition
• Les conditions nominales = conditions sous lesquelles
l’opération doit garantir que le résultat est bien celui attendu
Méthodes Formelles - O.Belkahla Driss 11
Spécification + Programme Vérification
Quoi :
nom : multiplication russe
données : a,b deux entiers
résultat : c le produit de a par b
Comment :
début
c:=0;
répéter
si a mod 2 ≠ 0 alors c := c + b ;
a := a div 2;
b := b x 2;
jusqu’à a =1;
c:=c+b;
fin
Méthodes Formelles - O.Belkahla Driss 12
Quel langage pour spécifier
• Informel, Semi-formel…
• L’approche formelle consiste à utiliser un langage
formel syntaxiquement et sémantiquement bien
défini
– par opposition à une spécification en langage naturel
qui peut donner lieu à différentes interprétations
– Par opposition à une spécification semi-formelle (ex.
UML) qui dispose d’une syntaxe précise mais pas d’une
sémantique bien définie
Méthodes Formelles - O.Belkahla Driss 13
L’approche formelle
• L’intérêt de cette approche est qu’elle oblige le
« spécifieur » à énoncer sans ambiguïté ce que doit faire
son programme
Ainsi les problèmes sont soulevés dès le début et non durant
l’étape de conception où l’on pourra se consacrer aux difficiles
problèmes de l’optimisation
• Elle permet par ailleurs de prouver formellement des
propriétés sur le système dès sa spécification (il n’est plus
utile d’attendre son implémentation pour réaliser des
tests exhaustifs)
Méthodes Formelles - O.Belkahla Driss 14
Spécification formelle
c multiplication russe (a,b) =
PRE
a ∈ NATURAL ∧ b ∈ NATURAL ∧ a ≠ 0
THEN
c := a x b
END
début
c:=0;
répéter
si a mod 2 ≠ 0 alors c := c + b ;
a := a div 2;
b := b x 2;
jusqu’à a =1;
c:=c+b;
fin
Méthodes Formelles - O.Belkahla Driss 15
L’approche formelle
• Les méthodes formelles ne sont pas limitées à la
spécification
– Conception : par reformulation formelle on passe de la
spécification à du pseudo-code
– Codage : puis on génère automatiquement du code
exécutable
– Test Preuve : On prouve à chaque étape le respect des
spécifications initiales
Méthodes Formelles - O.Belkahla Driss 16
A quelles étapes les spécifications et les méthodes
formelles peuvent-elles être utilisées ?
Analyse et spécification :
– Description formelle des concepts clés du problème (domaine
d’application)
– Spécification formelle de la solution (comportement du système)
– Prototypage
Conception architecturale et détaillée :
– Spécification formelle de l’interface des modules.
– Méthode rigoureuse de raffinement
Codification :
– Preuves de programmes
– Synthèse automatique du code
– Utilisation d’assertions
Tests
Méthodes Formelles - O.Belkahla Driss 17
– Génération automatique des tests
Comment appliquer les MF ?
• Quel est votre problème ? Qu’est-ce que vous
voulez garantir ?
– Trouver une méthode formelle qui corresponde
• À votre domaine d’application
• À vos problèmes
• À vos contraintes de temps et de coûts
• …
• Comment les mettre en œuvre ?
– Les intégrer à votre cycle de développement
• Retour à moyen/long terme
• Par ex. : mettre à jour la spécification formelle quand la
spécification ou le système réalisé change
– Prendre les conseils d’un expert dans la méthode
choisie Méthodes Formelles - O.Belkahla Driss 18
Plusieurs Facteurs
• Domaines d’application / Problèmes possibles
– Quand utiliser cette approche ? Points sensibles à regarder
• Niveau d’expertise / Niveau d’intervention
– Nul (cliquer un bouton) / Moyen (écrire une spec formelle) / Elevé
(faire une preuve)
– Que faut-il faire (modèle, annotations, propriétés, …) ?
• Couverture du cycle de développement / Fidélité au logiciel
– À quelles étapes du cycle de développement ?
– Vérifications sur un modèle du logiciel ou le logiciel lui-même ?
• Disponibilité des outils / Niveau d’automatisme
• Expressivité : qu’est-ce que je peux prouver ?
Méthodes Formelles - O.Belkahla Driss 19
Bénéfices d’une spécification formelle
“Devoir en arriver à une meilleure compréhension de l’élément à
spécifier en forçant l’analyste à être abstrait tout en étant précis à
propos des propriétés du système peut être plus gratifiant que
d’avoir le document de spécification lui-même.” [Wing90]
Impact positif de l’effort de formalisation :
• Spécifications explicites, précises, non-ambigues
• Base pour la mise en œuvre et pour des vérifications formelles
• Outils (manipulation, analyse, simulation, génération de tests)
• Base pour le développement des tests
Méthodes Formelles - O.Belkahla Driss 20
Avantages des méthodes formelles
En plus des avantages de la précision et de la non ambiguïté
Exploiter des outils de preuve et d’évaluation symbolique
Ecrire assez facilement des maquettes (en prolog par
exemple)
Vérifier automatiquement les spécifications
Engendrer automatiquement des jeux de tests
Il est toujours possible de raffiner en une spécification
plus détaillée, voir de faire une implémentation abstraite
Méthodes Formelles - O.Belkahla Driss 21
Objectifs des méthodes formelles
• Re-formuler la spécification en utilisant les
mathématiques force à être précis
– Un moyen d’avoir des spécifications claires
– On explicite le « quoi » mais pas le « comment »
• Au passage : aussi crucial d’expliciter le « pourquoi »,
documentez !
• Avec des outils automatiques fournir des
preuves de fiabilité
– 60 à 80% du coût total est la maintenance (source
Microsoft)
– 20 fois plus cher de gérer un bug en production
plutôt qu’en conception
• Exemples célèbres : Pentium FDIV bug (Jan. 1995, pre-tax charge of
$475 million for Intel), Therac 25 (5 morts), Ariane 501 (~$220 million), …
Méthodes Formelles - O.Belkahla Driss 22
Bugs célèbres
1.La sonde climatique Mars Polar Lander : La firme ayant reçu le
mandat de bâtir le système de navigation avait bien reçu toutes les
indications de la NASA, mais a décidé d’utiliser le système impérial de
mesure au lieu du système métrique. Une décision désastreuse,
l’appareil s’est écrasé 125 millions de dollars plus tard.
2.Le vol 501 d’Ariane 5 : Un bug informatique n’a jamais été décelé sur
ce satellite, jusqu’à ce qu’il soit envoyé dans l’espace. Précisément 36,7
secondes après son déploiement, une boule de feu a embrasé le ciel. La
perte estimée s’élève à 8,5 MILLIARDS de dollars. Tout un bug
http://esamultimedia.esa.int/docs/esa-x-1819eng.pdf
3.Logiciel comptable défaillant : Il y a quelques années, l’Agence de
traitement des pensions alimentaires d’Angleterre a demandé à EDS de
créer un système de gestion. Ce qu’EDS fit, mais la firme présenta un
produit horriblement complexe et truffé d’erreurs d’incompatibilité. Une
perte d’un milliard de dollars.
Méthodes Formelles - O.Belkahla Driss 23
Bugs célèbres
4. Explosion d’un oléoduc russe: En 1982 en pleine Guerre froide, la CIA estimait
que l’Union soviétique était en train de voler de la technologie américaine. Pour
se défendre, les États-Unis conçurent un bogue informatique afin d’empêcher
l’Europe de l’ouest de s’approvisionner en gaz naturel à partir de l’URSS. Le
résultat fut un désastre financier.
5.Lundi noir : Certains se rappelleront qu’en 1987, une enquête sur les marchés
financiers a fait paniquer les investisseurs qui ont décidé de se départir rapidement de
leurs actions, mais les systèmes informatiques n’ont pas suivi. Le marché s’est alors
effondré.
6.L’accélérateur médical Therac-25: Cet appareil fut construit en France afin d’aider
dans le traitement par radiation. Malheureusement, le système d’exploitation du
Therac-25 fut conçu par un informaticien plutôt inexpérimenté. Conséquence: le rayon
d’électrons était si concentré qu’il a tué cinq patients.
7.Du double dosage pour Multidata Systems: Multidata System International a conçu
un logiciel destiné à calculer la quantité de radiation que des patients doivent recevoir.
Toutefois, ce logiciel avait certaines limitations et les médecins ont tenté de
contourner le problème en jouant quelque peu avec les données. Le logiciel n’a pas
aimé du tout, et a commencé à doubler la quantité de radiation aux patients. Inutile
de dire que dédommager les victimesMéthodes a coûté- O.Belkahla
Formelles très cher.Driss 24
Bugs célèbres
8. Où vas-tu, missile? : Pendant la guerre du Golfe en 1991, un système antimissiles
fut mis en place afin de protéger les troupes sur place. Mais un bug informatique
a fait en sorte que le système calculait mal le temps de réponse, et certaines
cibles s’en trouvèrent totalement ignorées. Beaucoup d’argent gaspillé, mais
beaucoup plus triste, une centaine de vies aussi.
9.La Troisième guerre mondiale évitée: Un satellite russe a causé tout un vent de
panique quand il a confondu quelques réflexions solaires pour une volée de missiles
provenant des États-Unis. Dieu merci, le lieutenant colonel Stanislav Petrov a réalisé à
temps qu’il s’agissait d’une erreur, évitant une catastrophe mondiale.
10.La sonde spatiale Mariner: Lorsqu’un programmeur a entré le code de navigation
dans le système de la sonde, il a omis d’y intégrer une ligne de code. L’ordinateur a
totalement perdu le contrôle en tentant de réparer les erreurs pendant la mise à feu.
Après 237 secondes bien comptées, le Centre de contrôle n’a pas eu le choix et a
procédé à la destruction complète de l’appareil. Adieu, 18,2 millions de dollars.
Source : http://www.topito.com/top-10-des-erreurs-de-programmations-les-plus-
couteuses-de-lhistoire
Méthodes Formelles - O.Belkahla Driss 25
Classification des Techniques Formelles
suivant la sémantique
1. Les approches constructives (opérationnelles, basées
sur état explicite)
2. Les approches algébriques ou fonctionnelles
Méthodes Formelles - O.Belkahla Driss 26
Classification des Techniques Formelles
suivant la sémantique
1. Les approches constructives (opérationnelles,
basées sur état explicite)
se fondent sur une sémantique à état de type automate
l'état est modifié par les opérations qui modélisent
l'aspect comportemental du système
Les propriétés sont exprimées par des expressions
logiques sur les variables du système
Exple : les Systèmes de Transitions Etiquetés (STE), les
réseaux de Petri (RdP), B...
Méthodes Formelles - O.Belkahla Driss 27
Classification des Techniques Formelles
suivant la sémantique
1. Les approches constructives (opérationnelles,
basées sur état explicite)
2. Les approches algébriques ou fonctionnelles
Sémantique définie par une algèbre
variables et opérations sont définies suivant cette
algèbre
le système est décrit par un ensemble d'équations
Ensemble d’équations = description du comportement
Exple : parmi les langages formels suivant cette
approche : Z, VDM, LOTOS, LUSTRE...
Méthodes Formelles - O.Belkahla Driss 28
Rappel de la définition de TF
On appelle Technique Formelle, l'association :
1. d'un langage à sémantique formelle
2. un système de preuve
Méthodes Formelles - O.Belkahla Driss 29
Systèmes de preuves en informatique
Quelques échecs retentissants (comme par exemple la panne
du réseau téléphonique aux USA en 1989 ou la destruction du premier
exemplaire de la fusée Ariane 5 en 1996) ont achevé de convaincre
de l'impérieuse nécessité de vérifier certains logiciels ou
systèmes de contrôle-commande.
Il existe plusieurs techniques pour effectuer de telles
vérifications, les principales étant :
le test
la démonstration automatique (Theorem Proving)
la vérification sur modèle (Model Checking)
Méthodes Formelles - O.Belkahla Driss 30
Systèmes de preuves en informatique
Le test : indispensable et permet de découvrir de nombreuses
erreurs, mais il ne peut pas être exhaustif et n'apporte donc que
des réponses partielles
La démonstration automatique (Theorem Proving) : capable de
répondre à toutes les questions de vérification qui se posent en
pratique, mais sa mise en œuvre est souvent lourde et compliquée
et les outils actuels sont seulement capables d'assister un
ingénieur à qui revient la charge de construire la preuve
La vérification sur modèle (Model Checking) : l'intermédiaire
entre le test et la démonstration : il s'agit d'une méthode
exhaustive et en grande partie automatique. Le travail de
l'ingénieur se limite à la construction d'un modèle formel du
système et à la formalisation des propriétés à vérifier
Méthodes Formelles - O.Belkahla Driss 31
Systèmes de preuves en informatique
Deux techniques de preuves sur modèle :
1) Theorem Proving (TP) ou vérification par preuves
2) Model-Checking (MC) ou vérification exhaustive
Méthodes Formelles - O.Belkahla Driss 32
Systèmes de preuves en informatique
1) Theorem Proving (TP) ou vérification par preuves :
• Utilisation d’une axiomatique et d’un système de déduction
logique
• Preuve = Théorème du système axiomatique considéré
• Theorem prover : B, PVS, Coq ...
La plupart des outils sont disponibles gratuitement et/ou librement
ohttp://gulliver.eu.org/wiki/FreeSoftwareForFormalVerification
ohttp://www.atelierb.eu/php/telecharger-atelier-b-fr.php
• Consiste à démontrer de manière systématique, en utilisant
les règles d'inférences d'une logique, un théorème de
correction
Exemple : soit une spécification S, est-il possible de démontrer
automatiquement qu'une propriété ϕ est une conséquence
logique de S ? Méthodes Formelles - O.Belkahla Driss 33
Systèmes de preuves en informatique
2) Model-Checking (MC) ou vérification exhaustive :
• Se base une description du système sous forme d’automate
• Vérification d’une propriété par parcours exhaustif des états
du système => propriétés vraies quelque soit l’exécution du
système
• Model-Checker : SPIN, VDM ...
• Consiste à vérifier, de manière exhaustive en parcourant tous
les états possibles du système, que le théorème est satisfait.
Exemple : soit un système de transition T représentant le
fonctionnement d'un programme P, est-il possible de
démontrer automatiquement qu'une propriété ϕ est garantie
par T (et donc P), c'est-à-dire qu'aucune exécution de P ne
viole ϕ ? Méthodes Formelles - O.Belkahla Driss 34
Systèmes de preuves en informatique
Ces méthodes ne sont pas concurrentes mais
complémentaires et aucune d'entre elles ne peut prétendre
apporter seule une réponse définitive aux problèmes de
sureté de fonctionnement
Néanmoins, dans l'état actuel de leurs développements,
ces différentes techniques permettent déjà de traiter de
vrais exemples industriels, et ceci à coût maîtrisé
De plus, les erreurs détectées auraient souvent eu des
conséquences financières, économiques ou humaines sans
commune mesure avec les investissements effectués
Méthodes Formelles - O.Belkahla Driss 35
Méthodes formelles
“Les méthodes formelles sont des techniques basées sur les
mathématiques pour décrire des propriétés de systèmes
informatiques. Elles fournissent un cadre pour spécifier,
développer et vérifier des systèmes d’une façon
systématique, plutôt que d’une façon ad hoc” [Wing90]
Eléments clés d’une méthode formelle :
Langage formel pour l’écriture de spécifications
Règles pour évaluer la validité/qualité des spécifications
Stratégies et règles pour raffiner (mettre en œuvre) les
spécifications et vérifier ces raffinements
Fondation sur laquelle tout repose = spécification formelle
Méthodes Formelles - O.Belkahla Driss 36
Méthodes formelles
Avec les méthodes formelles, les cycles de vie classiques ne
marchent plus. Il faut les adapter !
Le cycle de vie de BALZER représente la nouvelle famille de
cycles de vie adaptés au développement formel
Choix de
conception
Méthodes Formelles - O.Belkahla Driss 37
Méthodes formelles
Présentation du développement formel
Méthodes Formelles - O.Belkahla Driss 38