Add introduction lecture
This commit is contained in:
parent
e4563cd879
commit
895172baad
2 changed files with 171 additions and 0 deletions
BIN
content/conception_formelle/1_introduction/imgs/schema_v.png
Normal file
BIN
content/conception_formelle/1_introduction/imgs/schema_v.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
171
content/conception_formelle/1_introduction/index.md
Normal file
171
content/conception_formelle/1_introduction/index.md
Normal file
|
@ -0,0 +1,171 @@
|
|||
---
|
||||
title: "Conception formelle : introduction"
|
||||
date: 2023-01-06
|
||||
tags: ["Bugs", model-checking"]
|
||||
categories: ["Conception formelle", "Cours"]
|
||||
mathjax: true
|
||||
---
|
||||
|
||||
## Pourquoi?
|
||||
|
||||
### Un peu d'histoire: les bugs célèbre
|
||||
|
||||
### 1985 : Banque de New-York
|
||||
|
||||
Un entier passe de 32768 à 0, conséquence : 2 jours d'interruption de service et
|
||||
24 milliards de dollars d'emprunt et plus de 5 millions de perte.
|
||||
|
||||
### 1990: AT&T
|
||||
|
||||
Un `break` est oublié dans un `case` comme dans l'exemple ci-dessous:
|
||||
|
||||
```c
|
||||
switch(i) {
|
||||
case 1 : function1(); break;
|
||||
case 2 : function2(); // a forgotten break;
|
||||
default: defaultfunction();
|
||||
}
|
||||
```
|
||||
|
||||
75 millions d'appels téléphonique dans le vide, pour *American Airline*, 200 000
|
||||
réservations en moins. Heureusement AT&T utilisait déjà le réseau pour les
|
||||
déploiement. Si la propagation du bug a été accélérée, le **déploiement du
|
||||
patch** aussi.
|
||||
|
||||
### 1994 : bug du Pentium
|
||||
|
||||
Une erreur de calcul dans une fonction très particulière de processeur
|
||||
entrainait une erreur de calcul. La réponse d'*Intel* fut peu sympathique à
|
||||
l'époque qui assurait que peu de personnes utilisaient cette fonction etdonc
|
||||
**qu'ils ne fixeraient pas** le problème.
|
||||
|
||||
Depuis, *Intel* publie les preuves de calculs de leurs processeurs, tout
|
||||
comme *AMD*.
|
||||
|
||||
### 1996 : Ariane 5
|
||||
|
||||
Destruction de la fusée après 39 secondes de vol suite à deux grandes erreurs :
|
||||
|
||||
1. conversion d'un entier 64 bits vers 16 bits avec overflow
|
||||
2. les deux ordinateurs utilisés pour la redondance partageaient le même code.
|
||||
Le bug était donc présent sur les deux machines.
|
||||
|
||||
### 1985 - 1987 : Thernac 25
|
||||
|
||||
Nous sommes ici en présence du premier bug ayant tué un humain. Le Thernac
|
||||
25][l_thernac] était une machine utilisée en radiothérapie pour le traitement
|
||||
des cancers. Des patient se sont plaint de sensation de forte brulure lors de
|
||||
séances. Il a fallut attendre trois ans et au moins **4 morts** pour que le
|
||||
fabricant rappelle ce modèle et mène l'investigation
|
||||
|
||||
[l_thernac 25]: https://fr.wikipedia.org/wiki/Therac-25
|
||||
|
||||
## Besoin de fiabilité
|
||||
|
||||
Dès les années 1990, il y a une prise de conscience générale de la **nécessité**
|
||||
de garanties pour le développement logiciel. Ce qui comprend ben entendu **les
|
||||
test** effectués sur le code, l'**uniformisation** de la sémantique utilisée(UML
|
||||
-- *Universal Modelisation Laguage*), les **design patterns**.
|
||||
|
||||
## Panorama des méthodes formelles
|
||||
|
||||
Le but des méthodes formelles est de raisonner autour des logiciels pour
|
||||
déterminer les contrôles et comportements par les **méthodes mathématiques**.
|
||||
|
||||
Il faut pour cela obtenir un modèle former par l'analyse et le tester.
|
||||
|
||||
* est-ce que le modèle est le bon, est-il correct? : **la validation**
|
||||
* pouvons nous vérifier le modèle? : **la décidabilité**[^n_decidabilite]
|
||||
* pouvons nous traduire les résultats? : **l'abstraction**
|
||||
|
||||
[^n_decidabilite] ne proposition (on dit aussi énoncé) est dite décidable dans
|
||||
une théorie axiomatique si on peut la démontrer ou démontrer sa négation dans le
|
||||
cadre de cette théorie. Un énoncé mathématique est donc indécidable dans une
|
||||
théorie s'il est impossible de le déduire, ou de déduire sa négation, à partir
|
||||
des axiomes de cette théorie. Source [Wikipedia](https://fr.wikipedia.org/wiki/D%C3%A9cidabilit%C3%A9)
|
||||
|
||||
### Pour qui?
|
||||
|
||||
Les méthodes coûtent cher et le personnel qualifié manque. Par conséquent seul
|
||||
les entreprises développant des systèmes complexes et/ou critiques les
|
||||
utilisent.
|
||||
|
||||
Quelques précisions :
|
||||
|
||||
* **complexes** : beaucoup d'interactions entre les composants
|
||||
* **critiques** : important, que se soit économiquement, humainement ou les
|
||||
deux.
|
||||
|
||||
### Les outils
|
||||
|
||||
L'idée derrière ce type d'outils: **manipuler les preuves** : un programme est
|
||||
un théorème, est-il adapté? C'est**un autre problème**.
|
||||
|
||||
Ces outils ne sont pas entièrement automatiques.
|
||||
|
||||
#### Interprération abstraite
|
||||
|
||||
Transformer une problème concret en un problème abstrait plus simple, rendant la
|
||||
preuve plus facile à produite
|
||||
|
||||
\\( \(M_{\text{concret}} \models \phi\) \implies \( M_{\text{abstrait}} \models \phi \) \\)
|
||||
|
||||
#### Vérification du modèle
|
||||
|
||||
Prendre en entrée un modèle \\(M\\), une spécification \\(\phi\\). ON vérifie
|
||||
alors que \\(M\ \models \phi \).
|
||||
|
||||
#### Raffinement et implémentation
|
||||
|
||||
Autoriser la transformation d'une spécification en implémentation tout en
|
||||
préservant à chaque étapes les propriétés essentielles à notre système.
|
||||
|
||||
#### Gestion des tests
|
||||
|
||||
Génération de séquences de tests sur le modèle d'après la spécification. Ces
|
||||
tests dépendent du but recherchés.
|
||||
|
||||
Les test de **conformités** sont utilisés pour valider le vrai système. Les
|
||||
tests **d'interopérabilité** valident le système dans un contexte ouvert.
|
||||
|
||||
#### Système Stochastique
|
||||
|
||||
Utiliser les chaines de [Markov][l_markov] et les [processus stochastique]
|
||||
[l_stockas] pour étudier la probabilité qu'un évènements se produise.
|
||||
|
||||
## Choix de la méthode
|
||||
|
||||

|
||||
|
||||
Il n'y a pas une méthode à choisir, plusieurs méthodes formelles à appliquer en
|
||||
fonction de la position dans le cycle.
|
||||
|
||||
### model checking
|
||||
|
||||
N'utilisons pas les données mais prouvons les interaction inter-modules :
|
||||
|
||||
* pour clarifier le *cahier des charges*
|
||||
* pour aboutir un *cahier des charges*
|
||||
|
||||
### Preuve de théorème
|
||||
|
||||
Ici nous validons l'algorithme afin de prouver qu'il fonctionne. Nous pouvons
|
||||
alors implémenter soir dans un langage généraliste, soir dans un langage dédié
|
||||
(donc spécifique). On obtient alors **un code certifié**.
|
||||
|
||||
### Analyse de code binaire
|
||||
|
||||
Obtenir des garanties sur le code binaire -- qu'ils ne perturbent pas le
|
||||
système -- sans pour autant avoir le code source.
|
||||
|
||||
```
|
||||
code source -> décompilation -> modèle -> analyse
|
||||
```
|
||||
|
||||
### Génération de tests
|
||||
|
||||
Génération de tests pertinents pour notre application partir du modèle et du
|
||||
cahier des charges.
|
||||
|
||||
[l_markov]:https://fr.wikipedia.org/wiki/Processus_de_Markov
|
||||
[l_stockas]:https://fr.wikipedia.org/wiki/Processus_stochastique
|
Loading…
Add table
Add a link
Reference in a new issue