SlideShare une entreprise Scribd logo
1  sur  262
À la chasse aux bugs

avec le Laboratoire d'informatique formelle
Les mathématiques au service
de l'assurance-qualité
NSERC
CRSNG

Fonds de recherche
Nature et
technologies
Ariane V
1996
Ariane V
1996
6 rappels
en 2010
400 000 rappels
59 500 000 000 $
M. Gauche

M. Droit
M. Gauche

M. Droit
ATELIERS

GAU
?

!
Votre code

?

!
Librairie
Service web
Module
Votre code

?

!
b

c
a
b

Plan
Devis
Contrat
...

c
a
b

c
a
b

c
a

b

c
a
b

?

c
a

b

c
a

?
b

?

c
a

b

c
a

?
TESTING
T

ES

T
M.
?

Pas exhaustif

T

ES

T
M.
?

Pas exhaustif

T

ES

T
M.

Long…
?

Basé sur la
compréhension
du testeur

Pas exhaustif

?

T

ES

T
M.

Long…
ATELIERS
ATELIERS
ATELIERS
ATEL

GAU
X

ATEL

GAU
X
ATELIERS

GAU
X
ATELIERS

GAU

?

?
Programmation

Tests
unitaires

Tests
fonctionnels

Tests
système

Après
sortie
% de bugs introduits

85%

Programmation

Tests
unitaires

Tests
fonctionnels

Tests
système

Après
sortie
% de bugs introduits
% de bugs trouvés

85%

Programmation

Tests
unitaires

Tests
fonctionnels

Tests
système

Après
sortie
% de bugs introduits
% de bugs trouvés
coût de réparation

16 000$
85%
1000$

25$
Programmation

100$
Tests
unitaires

250$

Tests
fonctionnels

Tests
système

Après
sortie
1. jlq
ie
2. fjf
...
p. 3

p. 8
Toutes les
histoires
possibles
Toutes les
histoires
possibles

Toutes les
histoires
du livre
Toutes les
histoires
possibles

Toutes les
histoires
plausibles

Toutes les
histoires
du livre
Toutes les
histoires
possibles

Toutes les
histoires
plausibles

Toutes les
histoires
du livre
Combien d'histoires possibles ?
Combien d'histoires possibles ?
1

2
Combien d'histoires possibles ?
1

2

2

1
Combien d'histoires possibles ?
1

2

2

1

1

2

3
Combien d'histoires possibles ?
1

2

1

2

3

2

1

1

3

2
Combien d'histoires possibles ?
1

2

1

2

3

2

1

1

3

2

2

1

3
Combien d'histoires possibles ?
1

2

1

2

3

2

1

1

3

2

2

1

3

2

3

1
Combien d'histoires possibles ?
1

2

1

2

3

2

1

1

3

2

2

1

3

2

3

1

3

1

2
Combien d'histoires possibles ?
1

2

1

2

3

2

1

1

3

2

2

1

3

2

3

1

3

1

2

3

2

1
Histoires

Combien d'histoires possibles ?

1

2

3
Pages

4

5
Histoires

Combien d'histoires possibles ?

1

1

2

3
Pages

4

5
Histoires

Combien d'histoires possibles ?

1

1

2

2

3
Pages

4

5
Histoires

Combien d'histoires possibles ?

6
1

1

2

2

3
Pages

4

5
Histoires

Combien d'histoires possibles ?

6
1

1

24

2

2

3
Pages

4

5
Histoires

Combien d'histoires possibles ?

6
1

1

24

120

4

5

2

2

3
Pages
Histoires

Combien d'histoires possibles ?

6
1

1

24

120

4

5

2

2

3
Pages
LEM
7500 lignes
LEM
7500 lignes

Chevy Volt
10 000 000 lignes
LEM
7500 lignes
Windows 7
50 000 000 lignes

Chevy Volt
10 000 000 lignes
Windows 7
50 000 000 lignes

Chevy Volt
10 000 000 lignes
Windows 7
50 000 000 lignes
10 km
1 km/h

10 km

1 km/h
1 km/h

10 km

2 km/h

1 km/h
1 km/h

10 km

2 km/h

1 km/h
2M$
ains @
1 km/h 2 tr
10 km
2 km/h

1 km/h
2M$
ains @
1 km/h 2 tr
10 km
20M$
rails @
2 km/h

1 km/h
2M$
ains @
1 km/h 2 tr
10 km
20M$
rails @
3.90$
rgot @
esca
2 km/h

1 km/h
2M$
ains @
1 km/h 2 tr
10 km
20M$
rails @
. _ 0$
3_9___
rg_ot _@__
esca _ __ __
____ 2 km/h 0$
003.9
4 000
2

1 km/h
Position train 1 = 1 x t
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Moment de l'impact ?
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Moment de l'impact ?
1 x t = 10 - (1 x t)
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Moment de l'impact ?
1 x t = 10 - (1 x t)
2 x t = 10
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Moment de l'impact ?
1 x t = 10 - (1 x t)
2 x t = 10
t=5
Position train 1 = 1 x t
Position train 2 = 10 - (1 x t)
Moment de l'impact ?
1 x t = 10 - (1 x t)
2 x t = 10
t=5
Distance escargot: 2 x 5 = 10 km
MATH

S
E

E
Logique
mathematique

E

E
Logique
mathematique

E

E

Combinatoire
des mots
Logique
mathematique

E

E

Combinatoire
des mots
Theorie des
graphes
Un jeu mathématique

On vous po
se le problè
me suivant:
Si le train a
rrive en ret
ard et qu'il
pas de taxis
n'y a
à la gare, a
lors Jean ar
en retard à
rive
son rendezvous.
Jean n'est p
as en retard
à son rende
vous.
zLe train est
arrivé en re
tard.

?

Y avait-il d
es taxis
à la gare?

Sylvain Hallé - 8INF958 Spécification, test et vérification
Le 'calculus ratiocinator'
Dès 1665, Leibniz imagine un langage universel, la
lingua characteristica universalis, qui vise à...
Représenter toutes les
choses sujettes au
raisonnement
Établir des liens entre elles
au moyen d'un calcul de la
raison

Gottfried Wilhelm
Leibniz
(1646-1716)
Sylvain Hallé - 8INF958 Spécification, test et vérification
Le 'calculus ratiocinator'
« Alors, il ne sera plus
besoin entre deux
philosophes de discussions
plus longues qu'entre deux
mathématiciens, puisqu'il
suffira qu'ils saisissent leur
plume, qu'ils s'asseyent à
leur table de calcul (en
faisant appel, s'ils le
souhaitent, à un ami) et
qu'ils se disent l'un à
l'autre : « Calculons ! »

Gottfried Wilhelm
Leibniz
(1646-1716)

Sylvain Hallé - 8INF958 Spécification, test et vérification
Quelques définitions
Donnons à chaque affirmation élémentaire un symbole:

p
q
r

Le train est en retard
Il y a des taxis à la gare
Jean arrive en retard à son rendez-vous
Variables propositionnelles

Chacune de ces variables peut prendre l'une ou l'autre
de deux valeurs possibles:
Vrai (aussi noté V, 1, ⊤)
Faux (aussi noté F, 0, ⊥)

Sylvain Hallé - 8INF958 Spécification, test et vérification
Quelques définitions
Chacune des données du problème est un énoncé liant
certaines affirmations élémentaires au moyen de
connecteurs logiques
∧
∨
→
↔
¬

Conjonction (et)
Disjonction (ou)
Implication (si ... alors ...)
Équivalence (... si et seulement si ...)
Négation (non)

Sylvain Hallé - 8INF958 Spécification, test et vérification
Quelques définitions
On peut donc écrire symboliquement chacun des
énoncés de l'énigme:
Si l'avion arrive en retard et qu'il n'y a pas de taxis à
la gare, alors Jean arrive en retard à son rendez-vous
(p ∧ ¬q) → r
Jean n'est pas arrivé en retard à son rendez-vous
¬r
L'avion est arrivé en retard
p

Sylvain Hallé - 8INF958 Spécification, test et vérification
Comment résoudre le problème?
L'énigme a été réduite au problème symbolique suivant:
Étant donné que...
(p ∧ ¬q) → r
¬r
p
...sont vraies, peut-on conclure que q est vraie?
Comment peut-on le trouver?

Sylvain Hallé - 8INF958 Spécification, test et vérification
Valuation
Une valuation est une fonction ν qui affecte exactement
une valeur à chaque variable propositionnelle
Exemple: ν(p) = ⊤, ν(q) = ⊤, ν(r) = ⊥
On peut calculer la valuation d'une expression composée
à partir de la valuation de ses opérandes. Si φ et ψ sont
des expressions dont la valuation est connue, alors...
ν(φ ∧ ψ) = ⊤ lorsque ν(φ) = ν(ψ) = ⊤, sinon ⊥
ν(φ ∨ ψ) = ⊥ lorsque ν(φ) = ν(ψ) = ⊥, sinon ⊤
ν(φ → ψ) = ⊥ lorsque ν(φ) = ⊤ et ν(ψ) = ⊥, sinon ⊤
ν(φ ↔ ψ) = ⊤ lorsque ν(φ) = ν(ψ), sinon ⊥
ν(¬φ) = ⊤ lorsque ν(φ) = ⊥, et vice versa

Sylvain Hallé - 8INF958 Spécification, test et vérification
Modèle
Si φ est une expression et ν une valuation telle que
ν(φ) = ⊤, on dit que ν satisfait φ, ce que l'on peut écrire
ν⊨φ
Dans ce cas, on dit aussi que ν est un modèle de φ.
Exercice
1. Si l'on utilise n variables propositionnelles,
combien de valuations différentes peut-on créer?
2. Combien y a-t-il de modèles des expressions...
a) p ∨ q
b) (p ∧ q) → ¬p
Sylvain Hallé - 8INF958 Spécification, test et vérification
Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité

p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤

⊥
⊤
⊥
⊤

Sylvain Hallé - 8INF958 Spécification, test et vérification
Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité

p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤

⊥
⊤
⊥
⊤

⊥
⊥
⊥
⊤

Sylvain Hallé - 8INF958 Spécification, test et vérification
Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité

p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤

⊥
⊤
⊥
⊤

⊥
⊥
⊥
⊤

⊤
⊤
⊥
⊥

Sylvain Hallé - 8INF958 Spécification, test et vérification
Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité

p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤

⊥
⊤
⊥
⊤

⊥
⊥
⊥
⊤

⊥
⊥
⊥
⊥

⊤
⊤
⊥
⊥

Sylvain Hallé - 8INF958 Spécification, test et vérification
Conséquence logique
Pour résumer:
1. Les énoncés du problème
original ont été
formalisés en un ensemble
d'énoncés logiques

On vous po
se le problè
me suivant:
Si le train ar
rive en reta
rd et qu'il n'
pas de taxis
ya
à la gare, al
ors Jean arri
en retard à
ve
son rendez-v
ous.
Jean n'est pa
s en retard
à son rendez
vous.
Le train est
arrivé en re
tard.
Y avait-il de
s taxis
?
à la gare?

A = {(p ∧ ¬q) → r, ¬r, p}
2. On cherche maintenant à déterminer si la question
posée (q) est une conséquence logique de A, ou
autrement dit, à savoir si...
A⊨q

Sylvain Hallé - 8INF958 Spécification, test et vérification
Satisfaisabilité
Une expression φ est dite satisfaisable lorsque qu'il
existe au moins une valuation ν telle que ν ⊨ φ
...autrement dit, il existe un "monde" dans lequel
φ est vraie
On peut se convaincre que φ est satisfaisable si et
seulement si ¬φ n'est pas une tautologie
Problème de la satisfaisabilité (SAT)
Étant donné une expression φ, trouver une valuation
ν telle que ν ⊨ φ

Sylvain Hallé - 8INF958 Spécification, test et vérification
Qui a tué tante Agatha?
Quelqu'un vivant au Manoir a tué tante Agatha.
Agatha, le maître d'hôtel et Charles sont les seuls à
vivre au Manoir.
Un tueur déteste toujours sa victime, et n'est jamais
plus riche que celle-ci.
Charles ne déteste personne que tante Agatha déteste.
Agatha déteste tout le monde sauf le maître d'hôtel.
Le maître d'hôtel déteste tous ceux qui ne sont pas
plus riches que tante Agatha.
Le maître d'hôtel déteste tous ceux que tante Agatha
déteste.
Personne ne déteste tout le monde.

Sylvain Hallé - 8INF958 Spécification, test et vérification
Modélisation propositionnelle
Une modélisation du problème en logique
propositionnelle est peu commode
Beaucoup de variables
Beaucoup de formules répétées pour chaque variable
Et si on ajoute un individu au Manoir?
Peut-on faire mieux?

Sylvain Hallé - 8INF958 Spécification, test et vérification
Éléments
Le problème précédent concerne un certain nombre
d'éléments...
E = {Agatha, Maître d'hôtel, Charles}
...et donne une liste de faits à propos de ces éléments.
Par exemple:
"Tante Agatha est la victime"
"Tante Agatha déteste tout le monde, sauf le maître
d'hôtel"

Sylvain Hallé - 8INF958 Spécification, test et vérification
Prédicat
Un prédicat p est une fonction prenant des éléments en
entrée et retournant ⊤ ou ⊥. Formellement, on écrit:
n

arité du prédicat

p : E → {⊤,⊥}
Exemples:
prédicat d'arité 1 (unaire)
victime(__)
assassin(__)
prédicats d'arité 2 (binaires)
déteste(__, __)
plusRicheQue(__, __)

Intuitivement, un prédicat est une affirmation à propos
d'un ou plusieurs éléments

Sylvain Hallé - 8INF958 Spécification, test et vérification
Prédicat
Puisqu'un prédicat retourne toujours ⊤ ou ⊥, on peut
combiner les prédicats en utilisant les connecteurs de la
logique propositionnelle:
victime(Agatha)
assassin(Charles) → plusRicheQue(Agatha, Charles)
déteste(Agatha, Maître d'hôtel) ∨ assassin(Agatha)
Problème: que fait-on d'une affirmation comme
"Un assassin déteste toujours sa victime" ?

Sylvain Hallé - 8INF958 Spécification, test et vérification
Prédicat
Méthode #1 (façon propositionnelle): énumérer les cas
possibles
((assassin(Agatha) ∧ victime(Charles))
→ déteste(Agatha, Charles))
∧
((assassin(Charles) ∧ victime(Agatha))
→ déteste(Charles, Agatha))
∧
...
Peu commode...

Sylvain Hallé - 8INF958 Spécification, test et vérification
Quantificateurs
Méthode #2: utiliser des quantificateurs
∀x : ∀y : (assassin(x) ∧ victime(y)) → déteste(x,y)
"pour tout x (pris dans l'ensemble E)"

Intuitivement, si E = {a, b, c, ..., k}, alors
∀x : φ ≡ φ[x/a] ∧ φ[x/b] ∧ ... ∧ φ[x/k]
où φ[x/a] est l'expression φ dans laquelle on a remplacé
tous les x par a
Ex.: ∀x : assassin(x) ≡ assassin(Agatha) ∧
assassin(Charles) ∧ assassin(Maître d'hôtel)
Sylvain Hallé - 8INF958 Spécification, test et vérification
Vérification
automatique
Exemple 1
Gestion des réseaux
Ne pas appuyer
sur
si
est allumé
Ne pas appuyer
sur
si
est allumé

Actionner en même
temps
et
Ne pas appuyer
sur
si
est allumé

Actionner en même
temps
et

Actionner seulement
si
indique 2
NON
Un
seul!

Tjrs
>2
X
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...

ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.6 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.4 remote-as 100
...
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...

ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.6 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.4 remote-as 100
...
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...

ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.6 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.4 remote-as 100
...
ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.4 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.6 remote-as 100
...

ip vrf Customer_A
rd 100:110
route-target export 100:1000
route-target import 100:1000
!
ip vrf Customer_B
rd 100:120
route-target export 100:2000
route-target import 100:2000
!
interface Loopback0
ip address 10.10.10.6 255.255.255.255
ip router isis
!
interface Loopback101
ip vrf forwarding Customer_A
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
interface Loopback102
ip vrf forwarding Customer_B
ip address 200.0.4.1 255.255.255.0
no ip directed-broadcast
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.10.10.4 remote-as 100
...
∀s₁ ∈ /DeviceName :
∀s₂ ∈ /DeviceName :
∀v₁ ∈ /DeviceName/s₁/ip-vrf :
∀v₂ ∈ /DeviceName/s₂/ip-vrf :
v₁=v₂ → (
∃r₁ ∈ /DeviceName/s₁/ip-vrf/v₁/rd :
∃r₂ ∈ /DeviceName/s₁/ip-vrf/v₂/rd :
r₁=r₂)
1
438

2
1
438

2
329 = 17
√
329 = 17
√
17
x 17
329 = 17
√
17
x 17
329 = 17
√
4

17
x 17
9
329 = 17
√
4

17
x 17
9
329 = 17
√
4

17
x 17
119
329 = 17
√
17
x 17
119
329 = 17
√
17
x 17
119
7
329 = 17
√
17
x 17
119
7
329 = 17
√
17
x 17
119
17
329 = 17
√
17
x 17
119
+17
329 = 17
√
17
x 17
119
+17
9
329 = 17
√
17
x 17
119
+17
9
329 = 17
√
17
x 17
119
+17
89
329 = 17
√
17
x 17
119
+17
89
329 = 17
√
17
x 17
119
+17
289
329 = 17
X
√
17
x 17
119
+17
289
?
√329 = 17
?
√329 = 17
19 étapes
?
√329 = 17
19 étapes

√329

=?
?
√329 = 17
19 étapes

√329

=?
64 étapes
|
|
|
|

Nombre d'étapes

80
60
40
20
0

0

|
|
|
|
|
200 400 600 800 1000
Nombre à calculer

?
√329 = 17
19 étapes

√329

=?
64 étapes
|
|
|

Vérifier

|

Nombre d'étapes

80
60
40
20
0

0

|
|
|
|
|
200 400 600 800 1000
Nombre à calculer

?
√329 = 17
19 étapes

√329

=?
64 étapes
|
|
|

80
60
40
20
0

Vérifier

|

Nombre d'étapes

Calculer

0

|
|
|
|
|
200 400 600 800 1000
Nombre à calculer

?
√329 = 17
19 étapes

√329

=?
64 étapes
|
|
|

80
60
40
20
0

0

}

4x

Vérifier

|

Nombre d'étapes

Calculer

|
|
|
|
|
200 400 600 800 1000
Nombre à calculer

?
√329 = 17
19 étapes

√329

=?
64 étapes
|
|

Vérifier

|

Complexité

|

Calculer

|

|

|

|

Taille du problème

|
|
|

Vérifier

|

Complexité

|

Calculer

|

|

|

|

Taille du problème

|
|
|
|

Vérifier

|

Complexité

}

Calculer

|

|

|

|

Taille du problème

|

!!!
Complexité
Étant donné une expression à n variables, toutes les
méthodes vues jusqu'ici ont une complexité en pire cas
de l'ordre de 2n
Théorème (Cook, 1971)
Le problème SAT est un problème
NP-complet.
Conséquence: on ne sait pas
à l'heure actuelle s'il existe un
algorithme SAT dont le pire
cas serait inférieur à O(2n )
Si oui, alors P=NP !

Stephen A. Cook
(1939-)

Sylvain Hallé - 8INF958 Spécification, test et vérification
Ajax web application
Cloud computing

Sylvain Hallé
Ajax web application
Cloud computing

JavaScript

Sylvain Hallé
Ajax web application
Cloud computing

eG
Be es
atl
Be el
am n
C
va
ara
C

Sylvain Hallé
Ajax web application
Cloud computing

<a onclick="javascript:
findBand(’Beatles’)">

eG
Be es
atl
Be el
am n
C
va
ara
C

Sylvain Hallé
Ajax web application
Cloud computing

findBand(’Beatles’)

Sylvain Hallé
Ajax web application
Cloud computing

findBand(’Beatles’)

Sylvain Hallé
Ajax web application
Cloud computing

artist
=beatles

findBand(’Beatles’)

Sylvain Hallé
Ajax web application
Cloud computing

artist
=beatles

findBand(’Beatles’)

Sylvain Hallé
Ajax web application
Cloud computing

artist
=beatles

document.innerHTML =

Sylvain Hallé

findBand(’Beatles’)
Ajax web application
Cloud computing

artist
=beatles

document.innerHTML =

C
Page is updated,
not reloaded

Sylvain Hallé

findBand(’Beatles’)
Ajax web application
Cloud computing

artist
=beatles

document.innerHTML =

C
Server response only provides
updated contents

Sylvain Hallé

findBand(’Beatles’)
Ajax web application
Cloud computing

<Search>
<Artist>
beatles
</Artist>
</Search>

Does not need
to be a URL
Does not need
to be HTML

<SearchResults>
<Item>
<Artist>
The Beatles
</Artist>
<Title>
Rubber Soul
</Title>
</Item>
...
</SearchResults>
Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing

Sylvain Hallé
Conceptually...
Cloud computing
Web service

Sylvain Hallé

Web client
Main issue
Not like traditional programming: all
input-output is exchanged unverified!

Possible mismatch
between messages sent
and messages expected
Sylvain Hallé
Interface contracts
All possible sequences
of all possibles messages
with all possible values

Sylvain Hallé
Interface contracts

Constraints
on individual
messages

Sylvain Hallé
Interface contracts

Constraints
on individual
messages

Sylvain Hallé

Constraints
on sequences
Interface contracts

Data-aware
sequential constraints

Constraints
on individual
messages

Sylvain Hallé

Constraints
on sequences
Interface contracts
Interface contract =
valid (error-free) interactions
Data-aware
sequential constraints

Constraints
on individual
messages

Sylvain Hallé

Constraints
on sequences
Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

Examples:

Sylvain Hallé
Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

Examples:

1. The element Page must be an integer between 1 and 20."
/M

Sylvain Hallé
Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

Examples:

1. The element Page must be an integer between 1 and 20."
/M
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
Sylvain Hallé
Expressing data constraints
Simple XPath
Fetches portions of an XML document according to a
query path = sequence of tags

V

pM ®
: Q ´2
Examples:
p ’’, m) = {1,2,4}
(‘‘/a/b/c
p ’’, m) = Æ
(‘‘/a/b/d
Sylvain Hallé

{

M: set of messages
Q: set of XML query paths
V: set of atomic values

<a>
<b>
<c>1</c>
<c>2</c>
</b>
<d>
<c>9</c>
</d>
<b>
<c>3</c>
</b>
</a>

m
Expressing data constraints
XPath term
Expresses properties over values fetched by XPath expressions

p
"Û v Î
(x)
j
(q,m)
q x : j (v) for every
p
$ Û vÎ
(x)
j
(q,m)
q x : j (v) for some
Examples:
"x < 5
/a/b/c x :
$
/a/b x :
$ : "y £
x
/a/b/c x
/a/b/c y :
Sylvain Hallé

<a>
<b>
<c>1</c>
<c>2</c>
</b>
<d>
<c>9</c>
</d>
<b>
<c>3</c>
</b>
</a>

{

Q,
M, path
For some message m Î q Î

m

2
Expressing data constraints
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

1. The element Page must be an integer between 1 and 20."
/M
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
Sylvain Hallé

2
Expressing data constraints
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

1. " x : x > 0 Ù
x < 21
/Message/Page
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
Sylvain Hallé

2
Expressing data constraints
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>

1. " x : x > 0 Ù
x < 21
/Message/Page
2. $
/Message/Page x :

Sylvain Hallé

Û
$
/Message/Results y :

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Examples:

Sylvain Hallé

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Examples:
3. The Login request cannot be resent if its response is"
/
successful."
/
.

Sylvain Hallé

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Examples:
3. The Login request cannot be resent if its response is"
/
successful."
/
.

4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé

2
Linear Temporal Logic

Alphabet (A)
Set of possible messages

Trace (A*)
Sequence of messages

Sylvain Hallé
Linear Temporal Logic
LTL formula
Ga
Xa
Fa
aWb

= assertion on the sequence of states in a trace
"always a"
"a in the next"
"eventually a"
"a until b"

A B A C D C B E

G (a ®
X b) FALSE
Sylvain Hallé

...

ØW c
(d Ú
e)

TRUE
Linear Temporal Logic
Well-known results:

1. For every LTL formula jexists a Büchi automaton A j
, there
such that for every (infinite) trace s
:

s sj
| j L(A )
= Û
Î
-regular
i.e. LTL describes w languages
2. The alphabet symbols can be generalized to finite sets of
Boolean propositions
Þ
Let’s use XPath terms as our Boolean propositions

Sylvain Hallé
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Examples:
3. The Login request cannot be resent if its response is"
/
successful."
/
.

4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Examples:
3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.

4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

Examples:

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Xpath terms

3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.

4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé

2
Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>

Examples:

X

<Message>
<Action>
Login
</Action>
...
</Message>

<Message>
<Action>
CartCreate
</Action>
...
</Message>

Xpath terms

3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.

4. ("
CartCreate)
/Message/Action a : a ¹
W ("
LoginResponse)
/Message/Action a’ : a’ =
Sylvain Hallé

2
Three types of constraints (III)
Data-aware sequential constraints
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>

<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>

Examples:

5. There can be at most one active cart ID per session key."
/

Sylvain Hallé

2
Three types of constraints (III)
Data-aware sequential constraints
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>

<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>

Examples:
5. G ("
/Message/SessionKey k : "
/Message/CartId c :
G ("
/Message/SessionKey k’ : "
/Message/CartId c’ :
k = k’ ®
c = c’))

Sylvain Hallé

2
Three types of constraints (III)
Data-aware sequential constraints
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...

Examples:

<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...

X

6. You cannot add the same item twice to the shopping cart."
/

Sylvain Hallé

2
Three types of constraints (III)
Data-aware sequential constraints
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...

Examples:

<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...

X

6. G ("
/Message/Action a : a = CartAdd ®
"
/Message/ItemId i : X G ("
/Message/Action a’ :
a’ = CartAdd ® i’ : i ¹
"
i’ ))
/Message/ItemId
Sylvain Hallé

2
Six constraints for the Beep Store

Constraints on individual messages

Constraints on message sequences

Data-aware constraints

Sylvain Hallé
Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.

Constraints on message sequences

Data-aware constraints

Sylvain Hallé
Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
3. The Login request cannot be resent if its response is
successful.
4. CartCreate must follow a successful LoginResponse.

Data-aware constraints

Sylvain Hallé
Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
3. The Login request cannot be resent if its response is
successful.
4. CartCreate must follow a successful LoginResponse.
5. There can be at most one active cart ID per session key.
6. You cannot add the same item twice to the shopping cart.
Sylvain Hallé
System
System
Instrumentation

System
Instrumentation

System
Instrumentation
Trace

System
Instrumentation
Trace

Events

System
Instrumentation
Trace

Events

System
Trace
validation

Instrumentation
Trace

Events

System
Instrumentation

System
Instrumentation

Runtime monitoring

System
Instrumentation

Runtime monitoring

System
Instrumentation

Runtime monitoring

Overhead

System
Définition
Runtime monitoring
Étude du design d'outils pour observer et analyser un
système pendant son exécution.
Usages possibles:
Testing/débogage
Sécurité et détection d'intrusions
Protection contre les fautes/pannes
Compréhension de programmes
Plusieurs noms: runtime verification, runtime checking,
dynamic analysis, trace analysis, fault protection, ...

Sylvain Hallé - 8INF958 Spécification, test et vérification
Composantes
Structure de base d'un système de runtime monitoring:

Spécification
Système cible

Événement

État
interne

Moniteur
Senseur

Verdict
Réaction
(facultatif)
Sylvain Hallé - 8INF958 Spécification, test et vérification
Enforcing interface contracts at runtime

XMLHttpRequest

·
JavaScript object
·
Provided by the browser
·
All communications to monitor
already centralized: ‘‘no’’
instrumentation
Sylvain Hallé
Enforcing interface contracts at runtime
XMLHttpRequestBB

Sylvain Hallé
Enforcing interface contracts at runtime
XMLHttpRequestBB

XMLHttpRequest

· around original
Wrapper
· same methods
Provides
· messages before
Checks
relaying them
Sylvain Hallé

LTL-FO+
algorithm
Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net

Include BeepBeep

myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
</head>
<body>
...
</body>
</html>

Sylvain Hallé
Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net

Include BeepBeep

myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>

Sylvain Hallé
Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net

Include BeepBeep

myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>

Sylvain Hallé

myapplication.js
// Initializations
...
req = new XMLHttpRequest();
...
function abc()
{
...
req.send(some_message);
}
Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net

Include BeepBeep

beepstore.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>

Sylvain Hallé

beepstore.js
// Initializations
...
req = new XMLHttpRequestBB();
...
function abc()
{
...
req.send(some_message);
}
Add BeepBeep to an application
Create a contract
? file with LTL-FO+ formulas
# ------------------------------------------------------# BeepBeep contract file for the Beep Store
# ------------------------------------------------------% The element Page must be an integer between 1 and 20.
; G ([p /Message/Page] (((p) > ({0})) & ((p) < ({21}))))
% The element Page is mandatory only if Results is
present, otherwise it is forbidden.
; G ([a /Message/Action] (((a) = ({ItemSearch})) -> (
((<r /Message/Results> ({TRUE})) ->
(<p /Message/Page> ({TRUE}))) &
((<p /Message/Page> ({TRUE})) -> (
<r /Message/Results> ({TRUE}))))))
% The Login request cannot be resent if its response
is successful.
; G ([a /Message/Action] (((a) = ({LoginResponse})) ->
(X (G ([b /Message/Action] (!((b) = ({Login}))))))))

Sylvain Hallé

}

Caption: used
when violations
are discovered
Plain-text
LTL-FO+
(automatically
parsed)
Add BeepBeep to an application
When loading
 the application, BeepBeep starts as a small
Java applet inside the page
The
Beep
Store

Sign in or register
Search:

Search results for ‘Beatles’

What is this?
Login

Rubber Soul
The Beatles

Ask for account
Contact us
Fault parameters

Yellow Submarine
The Beatles

?/?/?/?/?/?:0:0

Sylvain Hallé

GO

Your Cart
Add BeepBeep to an application
When loading
 the application, BeepBeep starts as a small
Java applet inside the page
The
Beep
Store

Sign in or register
Search:

Search results for ‘Beatles’

What is this?
Login

Rubber Soul
The Beatles

Ask for account
Contact us
Fault parameters

?/?/?/?/?/?:0:0

Sylvain Hallé

Yellow Submarine
The Beatles

GO

Your Cart
BeepBeep’s visible interface

?/?/?/?/?/?:0:0
Current state of monitor
for each property
T:
t:
F:
f:
?:

last message made it true
is true
last message made it false
is false
not yet true/false

Sylvain Hallé

Number of
messages
processed

Cumulative
processing
time (in ms)
On ne peut réussir un niveau sans sauter au moins
une fois
F action = jump
20
Mario ne peut jamais sauter d'une hauteur
supérieure à 20
G (action = jump → height < 20)
X
Si Mario se penche, il ne peut pas sauter tout de
suite après
G (action = crouch → X action ≠ jump)
X
Mario ne peut jamais entrer en collision avec un
ennemi lorsqu'il tient une carapace
G (action = haveShell → X action ≠ collision)
ou mieux
G (action = haveShell →
(action ≠ collision U action = dropShell))
Deux derniers événements
État des moniteurs
Surcharge CPU
COVERSTORY

Verified software
My computer won’t fail me
Web-browser crashes are annoying, but as far as software malfunctions go, the
consequences are mild. With a plane’s autopilot or the control room of a nuclear power
station, it’s another matter. As our lives become ever more saturated with computers,
how can we know they won’t fail? Currently, we systematically test all conceivable
scenarios under which they might. A better insurance might be logic. [...]

32 | New Scientist | 16 October 2010

Contenu connexe

Tendances

Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrentsmohamed_SAYARI
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximationmohamed_SAYARI
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de triYassine Anddam
 
Exercices pascal fenni_2018
Exercices pascal fenni_2018Exercices pascal fenni_2018
Exercices pascal fenni_2018salah fenni
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)Dany-Jack Mercier
 
CAPES maths 2019 composition 1
CAPES maths 2019 composition 1CAPES maths 2019 composition 1
CAPES maths 2019 composition 1Dany-Jack Mercier
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétudeSana Aroussi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 
Limites de fonctions et de suites
Limites de fonctions et de suitesLimites de fonctions et de suites
Limites de fonctions et de suitesĂmîʼndǿ TrànCè
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitésalah fenni
 
Algorithme & structures de données Chap III
Algorithme & structures de données Chap IIIAlgorithme & structures de données Chap III
Algorithme & structures de données Chap IIIInes Ouaz
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018salah fenni
 
Jouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesJouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesEric De la Clergerie
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statiqueSana Aroussi
 

Tendances (19)

Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximation
 
Résumer arithmétique
Résumer arithmétiqueRésumer arithmétique
Résumer arithmétique
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
DCT1 4SI
DCT1  4SIDCT1  4SI
DCT1 4SI
 
Exercices pascal fenni_2018
Exercices pascal fenni_2018Exercices pascal fenni_2018
Exercices pascal fenni_2018
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)
 
CAPES maths 2019 composition 1
CAPES maths 2019 composition 1CAPES maths 2019 composition 1
CAPES maths 2019 composition 1
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Limites de fonctions et de suites
Limites de fonctions et de suitesLimites de fonctions et de suites
Limites de fonctions et de suites
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivité
 
Algorithme & structures de données Chap III
Algorithme & structures de données Chap IIIAlgorithme & structures de données Chap III
Algorithme & structures de données Chap III
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Jouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesJouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiques
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statique
 

En vedette

Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)
Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)
Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)Sylvain Hallé
 
Qui gardera les gardiens? (Présentation FUQAC 2012)
Qui gardera les gardiens? (Présentation FUQAC 2012)Qui gardera les gardiens? (Présentation FUQAC 2012)
Qui gardera les gardiens? (Présentation FUQAC 2012)Sylvain Hallé
 
A Runtime Monitoring Framework for Event Streams with Non-Primitive Arguments
A Runtime Monitoring Framework for Event Streams with Non-Primitive ArgumentsA Runtime Monitoring Framework for Event Streams with Non-Primitive Arguments
A Runtime Monitoring Framework for Event Streams with Non-Primitive ArgumentsSylvain Hallé
 
Activity Recognition Through Complex Event Processing: First Findings
Activity Recognition Through Complex Event Processing: First Findings Activity Recognition Through Complex Event Processing: First Findings
Activity Recognition Through Complex Event Processing: First Findings Sylvain Hallé
 
Graph Methods for Generating Test Cases with Universal and Existential Constr...
Graph Methods for Generating Test Cases with Universal and Existential Constr...Graph Methods for Generating Test Cases with Universal and Existential Constr...
Graph Methods for Generating Test Cases with Universal and Existential Constr...Sylvain Hallé
 
BeepBeep 3: A declarative event stream query engine (EDOC 2015)
BeepBeep 3: A declarative event stream query engine (EDOC 2015)BeepBeep 3: A declarative event stream query engine (EDOC 2015)
BeepBeep 3: A declarative event stream query engine (EDOC 2015)Sylvain Hallé
 
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"Sylvain Hallé
 
Solving Equations on Words with Morphisms and Antimorphisms
Solving Equations on Words with Morphisms and AntimorphismsSolving Equations on Words with Morphisms and Antimorphisms
Solving Equations on Words with Morphisms and AntimorphismsSylvain Hallé
 
A Case for "Piggyback" Runtime Monitoring
A Case for "Piggyback" Runtime MonitoringA Case for "Piggyback" Runtime Monitoring
A Case for "Piggyback" Runtime MonitoringSylvain Hallé
 
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)Sylvain Hallé
 
A formalization of complex event stream processing
A formalization of complex event stream processingA formalization of complex event stream processing
A formalization of complex event stream processingSylvain Hallé
 
Decentralized Enforcement of Artifact Lifecycles
Decentralized Enforcement of Artifact LifecyclesDecentralized Enforcement of Artifact Lifecycles
Decentralized Enforcement of Artifact LifecyclesSylvain Hallé
 
Chasing Bugs with the BeepBeep Event Stream Processor
Chasing Bugs with the BeepBeep Event Stream ProcessorChasing Bugs with the BeepBeep Event Stream Processor
Chasing Bugs with the BeepBeep Event Stream ProcessorSylvain Hallé
 
Runtime monitoring de propriétés temporelles par (streaming) XML
Runtime monitoring de propriétés temporelles par (streaming) XMLRuntime monitoring de propriétés temporelles par (streaming) XML
Runtime monitoring de propriétés temporelles par (streaming) XMLSylvain Hallé
 
Distributed Firewall Anomaly Detection Through LTL Model Checking
Distributed Firewall Anomaly Detection Through LTL Model CheckingDistributed Firewall Anomaly Detection Through LTL Model Checking
Distributed Firewall Anomaly Detection Through LTL Model CheckingSylvain Hallé
 
When RV Meets CEP (RV 2016 Tutorial)
When RV Meets CEP (RV 2016 Tutorial)When RV Meets CEP (RV 2016 Tutorial)
When RV Meets CEP (RV 2016 Tutorial)Sylvain Hallé
 
MapReduce for Parallel Trace Validation of LTL Properties
MapReduce for Parallel Trace Validation of LTL PropertiesMapReduce for Parallel Trace Validation of LTL Properties
MapReduce for Parallel Trace Validation of LTL PropertiesSylvain Hallé
 
Trabajo 3 evaluación
Trabajo 3 evaluaciónTrabajo 3 evaluación
Trabajo 3 evaluaciónZanon1998
 

En vedette (20)

Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)
Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)
Testing Web Applications Through User Interface Constraints (CASCON 2015 Talk)
 
Qui gardera les gardiens? (Présentation FUQAC 2012)
Qui gardera les gardiens? (Présentation FUQAC 2012)Qui gardera les gardiens? (Présentation FUQAC 2012)
Qui gardera les gardiens? (Présentation FUQAC 2012)
 
A Runtime Monitoring Framework for Event Streams with Non-Primitive Arguments
A Runtime Monitoring Framework for Event Streams with Non-Primitive ArgumentsA Runtime Monitoring Framework for Event Streams with Non-Primitive Arguments
A Runtime Monitoring Framework for Event Streams with Non-Primitive Arguments
 
Activity Recognition Through Complex Event Processing: First Findings
Activity Recognition Through Complex Event Processing: First Findings Activity Recognition Through Complex Event Processing: First Findings
Activity Recognition Through Complex Event Processing: First Findings
 
Graph Methods for Generating Test Cases with Universal and Existential Constr...
Graph Methods for Generating Test Cases with Universal and Existential Constr...Graph Methods for Generating Test Cases with Universal and Existential Constr...
Graph Methods for Generating Test Cases with Universal and Existential Constr...
 
BeepBeep 3: A declarative event stream query engine (EDOC 2015)
BeepBeep 3: A declarative event stream query engine (EDOC 2015)BeepBeep 3: A declarative event stream query engine (EDOC 2015)
BeepBeep 3: A declarative event stream query engine (EDOC 2015)
 
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"
Causality in Message-Based Interface Contracts: A Temporal Logic "Whodunit"
 
Solving Equations on Words with Morphisms and Antimorphisms
Solving Equations on Words with Morphisms and AntimorphismsSolving Equations on Words with Morphisms and Antimorphisms
Solving Equations on Words with Morphisms and Antimorphisms
 
A Case for "Piggyback" Runtime Monitoring
A Case for "Piggyback" Runtime MonitoringA Case for "Piggyback" Runtime Monitoring
A Case for "Piggyback" Runtime Monitoring
 
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)
Runtime Monitoring of Stream Logic Formulae (Talk @ FPS 2015)
 
A formalization of complex event stream processing
A formalization of complex event stream processingA formalization of complex event stream processing
A formalization of complex event stream processing
 
Decentralized Enforcement of Artifact Lifecycles
Decentralized Enforcement of Artifact LifecyclesDecentralized Enforcement of Artifact Lifecycles
Decentralized Enforcement of Artifact Lifecycles
 
Chasing Bugs with the BeepBeep Event Stream Processor
Chasing Bugs with the BeepBeep Event Stream ProcessorChasing Bugs with the BeepBeep Event Stream Processor
Chasing Bugs with the BeepBeep Event Stream Processor
 
Runtime monitoring de propriétés temporelles par (streaming) XML
Runtime monitoring de propriétés temporelles par (streaming) XMLRuntime monitoring de propriétés temporelles par (streaming) XML
Runtime monitoring de propriétés temporelles par (streaming) XML
 
Distributed Firewall Anomaly Detection Through LTL Model Checking
Distributed Firewall Anomaly Detection Through LTL Model CheckingDistributed Firewall Anomaly Detection Through LTL Model Checking
Distributed Firewall Anomaly Detection Through LTL Model Checking
 
When RV Meets CEP (RV 2016 Tutorial)
When RV Meets CEP (RV 2016 Tutorial)When RV Meets CEP (RV 2016 Tutorial)
When RV Meets CEP (RV 2016 Tutorial)
 
MapReduce for Parallel Trace Validation of LTL Properties
MapReduce for Parallel Trace Validation of LTL PropertiesMapReduce for Parallel Trace Validation of LTL Properties
MapReduce for Parallel Trace Validation of LTL Properties
 
Lucy
LucyLucy
Lucy
 
Trabajo 3 evaluación
Trabajo 3 evaluaciónTrabajo 3 evaluación
Trabajo 3 evaluación
 
grupo 1
grupo 1grupo 1
grupo 1
 

Similaire à À la chasse aux bugs avec la Laboratoire d'informatique formelle

Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfMbarkiIsraa
 
Logique séance 3 - Syntaxe et déduction naturelle.pptx
Logique séance 3 - Syntaxe et déduction naturelle.pptxLogique séance 3 - Syntaxe et déduction naturelle.pptx
Logique séance 3 - Syntaxe et déduction naturelle.pptxssuser1c93df1
 
presentation kadimi wahidi.pdf
presentation kadimi wahidi.pdfpresentation kadimi wahidi.pdf
presentation kadimi wahidi.pdfmouadwahidi
 
La recherche opérationnelle et l'optimisation combinatoire
La recherche opérationnelle et l'optimisation combinatoireLa recherche opérationnelle et l'optimisation combinatoire
La recherche opérationnelle et l'optimisation combinatoiresarah Benmerzouk
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptMbarkiIsraa
 
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdf
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdfDécidabilité et complexité 4_4 _ Problèmes NP-Complets.pdf
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdfDariusSteves
 
Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Frank Nielsen
 
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdffr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdfSidiAbdallah1
 
Exos corriges lois_continues
Exos corriges lois_continuesExos corriges lois_continues
Exos corriges lois_continuesManar Sefiane
 
4° exos loi-continues-sm.
4° exos loi-continues-sm.4° exos loi-continues-sm.
4° exos loi-continues-sm.Smaali Mondher
 
Calcul scientifique IVP
Calcul scientifique IVPCalcul scientifique IVP
Calcul scientifique IVPMouhamed Ndao
 
Ch logique cours
Ch logique coursCh logique cours
Ch logique coursbades12
 

Similaire à À la chasse aux bugs avec la Laboratoire d'informatique formelle (20)

Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
Logique séance 3 - Syntaxe et déduction naturelle.pptx
Logique séance 3 - Syntaxe et déduction naturelle.pptxLogique séance 3 - Syntaxe et déduction naturelle.pptx
Logique séance 3 - Syntaxe et déduction naturelle.pptx
 
transparents-Algo-correction.pdf
transparents-Algo-correction.pdftransparents-Algo-correction.pdf
transparents-Algo-correction.pdf
 
246242769 sequence-1-pdf
246242769 sequence-1-pdf246242769 sequence-1-pdf
246242769 sequence-1-pdf
 
presentation kadimi wahidi.pdf
presentation kadimi wahidi.pdfpresentation kadimi wahidi.pdf
presentation kadimi wahidi.pdf
 
La recherche opérationnelle et l'optimisation combinatoire
La recherche opérationnelle et l'optimisation combinatoireLa recherche opérationnelle et l'optimisation combinatoire
La recherche opérationnelle et l'optimisation combinatoire
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Ch logique (1)
Ch logique (1)Ch logique (1)
Ch logique (1)
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.ppt
 
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdf
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdfDécidabilité et complexité 4_4 _ Problèmes NP-Complets.pdf
Décidabilité et complexité 4_4 _ Problèmes NP-Complets.pdf
 
Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)Traitement des données massives (INF442, A4)
Traitement des données massives (INF442, A4)
 
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdffr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
 
Exos corriges lois_continues
Exos corriges lois_continuesExos corriges lois_continues
Exos corriges lois_continues
 
Puissance Et Taille D'échantillon
Puissance Et Taille D'échantillonPuissance Et Taille D'échantillon
Puissance Et Taille D'échantillon
 
4° exos loi-continues-sm.
4° exos loi-continues-sm.4° exos loi-continues-sm.
4° exos loi-continues-sm.
 
Regression logistque
Regression  logistqueRegression  logistque
Regression logistque
 
Calcul scientifique IVP
Calcul scientifique IVPCalcul scientifique IVP
Calcul scientifique IVP
 
Ch logique cours
Ch logique coursCh logique cours
Ch logique cours
 
Slides 2040-2-0
Slides 2040-2-0Slides 2040-2-0
Slides 2040-2-0
 
SuitesAG.pdf
SuitesAG.pdfSuitesAG.pdf
SuitesAG.pdf
 

Plus de Sylvain Hallé

Monitoring Business Process Compliance Across Multiple Executions with Stream...
Monitoring Business Process Compliance Across Multiple Executions with Stream...Monitoring Business Process Compliance Across Multiple Executions with Stream...
Monitoring Business Process Compliance Across Multiple Executions with Stream...Sylvain Hallé
 
A Stream-Based Approach to Intrusion Detection
A Stream-Based Approach to Intrusion DetectionA Stream-Based Approach to Intrusion Detection
A Stream-Based Approach to Intrusion DetectionSylvain Hallé
 
Event Stream Processing with BeepBeep 3
Event Stream Processing with BeepBeep 3Event Stream Processing with BeepBeep 3
Event Stream Processing with BeepBeep 3Sylvain Hallé
 
Smart Contracts-Enabled Simulation for Hyperconnected Logistics
Smart Contracts-Enabled Simulation for Hyperconnected LogisticsSmart Contracts-Enabled Simulation for Hyperconnected Logistics
Smart Contracts-Enabled Simulation for Hyperconnected LogisticsSylvain Hallé
 
Test Suite Generation for Boolean Conditions with Equivalence Class Partitioning
Test Suite Generation for Boolean Conditions with Equivalence Class PartitioningTest Suite Generation for Boolean Conditions with Equivalence Class Partitioning
Test Suite Generation for Boolean Conditions with Equivalence Class PartitioningSylvain Hallé
 
Synthia: a Generic and Flexible Data Structure Generator (Long Version)
Synthia: a Generic and Flexible Data Structure Generator (Long Version)Synthia: a Generic and Flexible Data Structure Generator (Long Version)
Synthia: a Generic and Flexible Data Structure Generator (Long Version)Sylvain Hallé
 
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)Sylvain Hallé
 
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)Sylvain Hallé
 
A Generic Explainability Framework for Function Circuits
A Generic Explainability Framework for Function CircuitsA Generic Explainability Framework for Function Circuits
A Generic Explainability Framework for Function CircuitsSylvain Hallé
 
Detecting Responsive Web Design Bugs with Declarative Specifications
Detecting Responsive Web Design Bugs with Declarative SpecificationsDetecting Responsive Web Design Bugs with Declarative Specifications
Detecting Responsive Web Design Bugs with Declarative SpecificationsSylvain Hallé
 
Streamlining the Inclusion of Computer Experiments in Research Papers
Streamlining the Inclusion of Computer Experiments in Research PapersStreamlining the Inclusion of Computer Experiments in Research Papers
Streamlining the Inclusion of Computer Experiments in Research PapersSylvain Hallé
 
Writing Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepWriting Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepSylvain Hallé
 
Real-Time Data Mining for Event Streams
Real-Time Data Mining for Event StreamsReal-Time Data Mining for Event Streams
Real-Time Data Mining for Event StreamsSylvain Hallé
 
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)Sylvain Hallé
 
Mining event streams with BeepBeep 3
Mining event streams with BeepBeep 3Mining event streams with BeepBeep 3
Mining event streams with BeepBeep 3Sylvain Hallé
 
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)Sylvain Hallé
 
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)Sylvain Hallé
 
Event Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsEvent Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsSylvain Hallé
 
A Few Things We Heard About RV Tools (Position Paper)
A Few Things We Heard About RV Tools (Position Paper)A Few Things We Heard About RV Tools (Position Paper)
A Few Things We Heard About RV Tools (Position Paper)Sylvain Hallé
 
La quantification du premier ordre en logique temporelle
La quantification du premier ordre en logique temporelleLa quantification du premier ordre en logique temporelle
La quantification du premier ordre en logique temporelleSylvain Hallé
 

Plus de Sylvain Hallé (20)

Monitoring Business Process Compliance Across Multiple Executions with Stream...
Monitoring Business Process Compliance Across Multiple Executions with Stream...Monitoring Business Process Compliance Across Multiple Executions with Stream...
Monitoring Business Process Compliance Across Multiple Executions with Stream...
 
A Stream-Based Approach to Intrusion Detection
A Stream-Based Approach to Intrusion DetectionA Stream-Based Approach to Intrusion Detection
A Stream-Based Approach to Intrusion Detection
 
Event Stream Processing with BeepBeep 3
Event Stream Processing with BeepBeep 3Event Stream Processing with BeepBeep 3
Event Stream Processing with BeepBeep 3
 
Smart Contracts-Enabled Simulation for Hyperconnected Logistics
Smart Contracts-Enabled Simulation for Hyperconnected LogisticsSmart Contracts-Enabled Simulation for Hyperconnected Logistics
Smart Contracts-Enabled Simulation for Hyperconnected Logistics
 
Test Suite Generation for Boolean Conditions with Equivalence Class Partitioning
Test Suite Generation for Boolean Conditions with Equivalence Class PartitioningTest Suite Generation for Boolean Conditions with Equivalence Class Partitioning
Test Suite Generation for Boolean Conditions with Equivalence Class Partitioning
 
Synthia: a Generic and Flexible Data Structure Generator (Long Version)
Synthia: a Generic and Flexible Data Structure Generator (Long Version)Synthia: a Generic and Flexible Data Structure Generator (Long Version)
Synthia: a Generic and Flexible Data Structure Generator (Long Version)
 
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)
Test Sequence Generation with Cayley Graphs (Talk @ A-MOST 2021)
 
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)
Efficient Offline Monitoring of LTL with Bit Vectors (Talk at SAC 2021)
 
A Generic Explainability Framework for Function Circuits
A Generic Explainability Framework for Function CircuitsA Generic Explainability Framework for Function Circuits
A Generic Explainability Framework for Function Circuits
 
Detecting Responsive Web Design Bugs with Declarative Specifications
Detecting Responsive Web Design Bugs with Declarative SpecificationsDetecting Responsive Web Design Bugs with Declarative Specifications
Detecting Responsive Web Design Bugs with Declarative Specifications
 
Streamlining the Inclusion of Computer Experiments in Research Papers
Streamlining the Inclusion of Computer Experiments in Research PapersStreamlining the Inclusion of Computer Experiments in Research Papers
Streamlining the Inclusion of Computer Experiments in Research Papers
 
Writing Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepWriting Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeep
 
Real-Time Data Mining for Event Streams
Real-Time Data Mining for Event StreamsReal-Time Data Mining for Event Streams
Real-Time Data Mining for Event Streams
 
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)
Technologies intelligentes d'aide au développement d'applications web (WAQ 2018)
 
Mining event streams with BeepBeep 3
Mining event streams with BeepBeep 3Mining event streams with BeepBeep 3
Mining event streams with BeepBeep 3
 
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
 
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)
A "Do-It-Yourself" Specification Language with BeepBeep 3 (Talk @ Dagstuhl 2017)
 
Event Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsEvent Stream Processing with Multiple Threads
Event Stream Processing with Multiple Threads
 
A Few Things We Heard About RV Tools (Position Paper)
A Few Things We Heard About RV Tools (Position Paper)A Few Things We Heard About RV Tools (Position Paper)
A Few Things We Heard About RV Tools (Position Paper)
 
La quantification du premier ordre en logique temporelle
La quantification du premier ordre en logique temporelleLa quantification du premier ordre en logique temporelle
La quantification du premier ordre en logique temporelle
 

Dernier

Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEBONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEgharebikram98
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 

Dernier (14)

Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEBONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 

À la chasse aux bugs avec la Laboratoire d'informatique formelle

  • 1. À la chasse aux bugs avec le Laboratoire d'informatique formelle Les mathématiques au service de l'assurance-qualité
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 10.
  • 12.
  • 14.
  • 15. 59 500 000 000 $
  • 16.
  • 20. ? !
  • 23. b c a
  • 25. b c a
  • 33. ? Basé sur la compréhension du testeur Pas exhaustif ? T ES T M. Long…
  • 42. % de bugs introduits 85% Programmation Tests unitaires Tests fonctionnels Tests système Après sortie
  • 43. % de bugs introduits % de bugs trouvés 85% Programmation Tests unitaires Tests fonctionnels Tests système Après sortie
  • 44. % de bugs introduits % de bugs trouvés coût de réparation 16 000$ 85% 1000$ 25$ Programmation 100$ Tests unitaires 250$ Tests fonctionnels Tests système Après sortie
  • 45.
  • 47.
  • 49.
  • 57. Combien d'histoires possibles ? 1 2 2 1 1 2 3
  • 58. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2
  • 59. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3
  • 60. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3 2 3 1
  • 61. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3 2 3 1 3 1 2
  • 62. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
  • 66. Histoires Combien d'histoires possibles ? 6 1 1 2 2 3 Pages 4 5
  • 67. Histoires Combien d'histoires possibles ? 6 1 1 24 2 2 3 Pages 4 5
  • 68. Histoires Combien d'histoires possibles ? 6 1 1 24 120 4 5 2 2 3 Pages
  • 69. Histoires Combien d'histoires possibles ? 6 1 1 24 120 4 5 2 2 3 Pages
  • 70.
  • 73. LEM 7500 lignes Windows 7 50 000 000 lignes Chevy Volt 10 000 000 lignes
  • 74. Windows 7 50 000 000 lignes Chevy Volt 10 000 000 lignes
  • 75. Windows 7 50 000 000 lignes
  • 76.
  • 77.
  • 78.
  • 79.
  • 80. 10 km
  • 82. 1 km/h 10 km 2 km/h 1 km/h
  • 83. 1 km/h 10 km 2 km/h 1 km/h
  • 84. 2M$ ains @ 1 km/h 2 tr 10 km 2 km/h 1 km/h
  • 85. 2M$ ains @ 1 km/h 2 tr 10 km 20M$ rails @ 2 km/h 1 km/h
  • 86. 2M$ ains @ 1 km/h 2 tr 10 km 20M$ rails @ 3.90$ rgot @ esca 2 km/h 1 km/h
  • 87. 2M$ ains @ 1 km/h 2 tr 10 km 20M$ rails @ . _ 0$ 3_9___ rg_ot _@__ esca _ __ __ ____ 2 km/h 0$ 003.9 4 000 2 1 km/h
  • 88.
  • 89. Position train 1 = 1 x t
  • 90. Position train 1 = 1 x t Position train 2 = 10 - (1 x t)
  • 91. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ?
  • 92. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ? 1 x t = 10 - (1 x t)
  • 93. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ? 1 x t = 10 - (1 x t) 2 x t = 10
  • 94. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ? 1 x t = 10 - (1 x t) 2 x t = 10 t=5
  • 95. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ? 1 x t = 10 - (1 x t) 2 x t = 10 t=5 Distance escargot: 2 x 5 = 10 km
  • 97. E E
  • 101. Un jeu mathématique On vous po se le problè me suivant: Si le train a rrive en ret ard et qu'il pas de taxis n'y a à la gare, a lors Jean ar en retard à rive son rendezvous. Jean n'est p as en retard à son rende vous. zLe train est arrivé en re tard. ? Y avait-il d es taxis à la gare? Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 102. Le 'calculus ratiocinator' Dès 1665, Leibniz imagine un langage universel, la lingua characteristica universalis, qui vise à... Représenter toutes les choses sujettes au raisonnement Établir des liens entre elles au moyen d'un calcul de la raison Gottfried Wilhelm Leibniz (1646-1716) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 103. Le 'calculus ratiocinator' « Alors, il ne sera plus besoin entre deux philosophes de discussions plus longues qu'entre deux mathématiciens, puisqu'il suffira qu'ils saisissent leur plume, qu'ils s'asseyent à leur table de calcul (en faisant appel, s'ils le souhaitent, à un ami) et qu'ils se disent l'un à l'autre : « Calculons ! » Gottfried Wilhelm Leibniz (1646-1716) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 104. Quelques définitions Donnons à chaque affirmation élémentaire un symbole: p q r Le train est en retard Il y a des taxis à la gare Jean arrive en retard à son rendez-vous Variables propositionnelles Chacune de ces variables peut prendre l'une ou l'autre de deux valeurs possibles: Vrai (aussi noté V, 1, ⊤) Faux (aussi noté F, 0, ⊥) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 105. Quelques définitions Chacune des données du problème est un énoncé liant certaines affirmations élémentaires au moyen de connecteurs logiques ∧ ∨ → ↔ ¬ Conjonction (et) Disjonction (ou) Implication (si ... alors ...) Équivalence (... si et seulement si ...) Négation (non) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 106. Quelques définitions On peut donc écrire symboliquement chacun des énoncés de l'énigme: Si l'avion arrive en retard et qu'il n'y a pas de taxis à la gare, alors Jean arrive en retard à son rendez-vous (p ∧ ¬q) → r Jean n'est pas arrivé en retard à son rendez-vous ¬r L'avion est arrivé en retard p Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 107. Comment résoudre le problème? L'énigme a été réduite au problème symbolique suivant: Étant donné que... (p ∧ ¬q) → r ¬r p ...sont vraies, peut-on conclure que q est vraie? Comment peut-on le trouver? Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 108. Valuation Une valuation est une fonction ν qui affecte exactement une valeur à chaque variable propositionnelle Exemple: ν(p) = ⊤, ν(q) = ⊤, ν(r) = ⊥ On peut calculer la valuation d'une expression composée à partir de la valuation de ses opérandes. Si φ et ψ sont des expressions dont la valuation est connue, alors... ν(φ ∧ ψ) = ⊤ lorsque ν(φ) = ν(ψ) = ⊤, sinon ⊥ ν(φ ∨ ψ) = ⊥ lorsque ν(φ) = ν(ψ) = ⊥, sinon ⊤ ν(φ → ψ) = ⊥ lorsque ν(φ) = ⊤ et ν(ψ) = ⊥, sinon ⊤ ν(φ ↔ ψ) = ⊤ lorsque ν(φ) = ν(ψ), sinon ⊥ ν(¬φ) = ⊤ lorsque ν(φ) = ⊥, et vice versa Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 109. Modèle Si φ est une expression et ν une valuation telle que ν(φ) = ⊤, on dit que ν satisfait φ, ce que l'on peut écrire ν⊨φ Dans ce cas, on dit aussi que ν est un modèle de φ. Exercice 1. Si l'on utilise n variables propositionnelles, combien de valuations différentes peut-on créer? 2. Combien y a-t-il de modèles des expressions... a) p ∨ q b) (p ∧ q) → ¬p Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 110. Table de vérité On peut calculer la valeur d'une expression pour toutes les valuations possibles au moyen d'une table de vérité p q (p ∧ q) → ¬p ⊥ ⊥ ⊤ ⊤ ⊥ ⊤ ⊥ ⊤ Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 111. Table de vérité On peut calculer la valeur d'une expression pour toutes les valuations possibles au moyen d'une table de vérité p q (p ∧ q) → ¬p ⊥ ⊥ ⊤ ⊤ ⊥ ⊤ ⊥ ⊤ ⊥ ⊥ ⊥ ⊤ Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 112. Table de vérité On peut calculer la valeur d'une expression pour toutes les valuations possibles au moyen d'une table de vérité p q (p ∧ q) → ¬p ⊥ ⊥ ⊤ ⊤ ⊥ ⊤ ⊥ ⊤ ⊥ ⊥ ⊥ ⊤ ⊤ ⊤ ⊥ ⊥ Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 113. Table de vérité On peut calculer la valeur d'une expression pour toutes les valuations possibles au moyen d'une table de vérité p q (p ∧ q) → ¬p ⊥ ⊥ ⊤ ⊤ ⊥ ⊤ ⊥ ⊤ ⊥ ⊥ ⊥ ⊤ ⊥ ⊥ ⊥ ⊥ ⊤ ⊤ ⊥ ⊥ Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 114. Conséquence logique Pour résumer: 1. Les énoncés du problème original ont été formalisés en un ensemble d'énoncés logiques On vous po se le problè me suivant: Si le train ar rive en reta rd et qu'il n' pas de taxis ya à la gare, al ors Jean arri en retard à ve son rendez-v ous. Jean n'est pa s en retard à son rendez vous. Le train est arrivé en re tard. Y avait-il de s taxis ? à la gare? A = {(p ∧ ¬q) → r, ¬r, p} 2. On cherche maintenant à déterminer si la question posée (q) est une conséquence logique de A, ou autrement dit, à savoir si... A⊨q Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 115. Satisfaisabilité Une expression φ est dite satisfaisable lorsque qu'il existe au moins une valuation ν telle que ν ⊨ φ ...autrement dit, il existe un "monde" dans lequel φ est vraie On peut se convaincre que φ est satisfaisable si et seulement si ¬φ n'est pas une tautologie Problème de la satisfaisabilité (SAT) Étant donné une expression φ, trouver une valuation ν telle que ν ⊨ φ Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 116. Qui a tué tante Agatha? Quelqu'un vivant au Manoir a tué tante Agatha. Agatha, le maître d'hôtel et Charles sont les seuls à vivre au Manoir. Un tueur déteste toujours sa victime, et n'est jamais plus riche que celle-ci. Charles ne déteste personne que tante Agatha déteste. Agatha déteste tout le monde sauf le maître d'hôtel. Le maître d'hôtel déteste tous ceux qui ne sont pas plus riches que tante Agatha. Le maître d'hôtel déteste tous ceux que tante Agatha déteste. Personne ne déteste tout le monde. Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 117. Modélisation propositionnelle Une modélisation du problème en logique propositionnelle est peu commode Beaucoup de variables Beaucoup de formules répétées pour chaque variable Et si on ajoute un individu au Manoir? Peut-on faire mieux? Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 118. Éléments Le problème précédent concerne un certain nombre d'éléments... E = {Agatha, Maître d'hôtel, Charles} ...et donne une liste de faits à propos de ces éléments. Par exemple: "Tante Agatha est la victime" "Tante Agatha déteste tout le monde, sauf le maître d'hôtel" Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 119. Prédicat Un prédicat p est une fonction prenant des éléments en entrée et retournant ⊤ ou ⊥. Formellement, on écrit: n arité du prédicat p : E → {⊤,⊥} Exemples: prédicat d'arité 1 (unaire) victime(__) assassin(__) prédicats d'arité 2 (binaires) déteste(__, __) plusRicheQue(__, __) Intuitivement, un prédicat est une affirmation à propos d'un ou plusieurs éléments Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 120. Prédicat Puisqu'un prédicat retourne toujours ⊤ ou ⊥, on peut combiner les prédicats en utilisant les connecteurs de la logique propositionnelle: victime(Agatha) assassin(Charles) → plusRicheQue(Agatha, Charles) déteste(Agatha, Maître d'hôtel) ∨ assassin(Agatha) Problème: que fait-on d'une affirmation comme "Un assassin déteste toujours sa victime" ? Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 121. Prédicat Méthode #1 (façon propositionnelle): énumérer les cas possibles ((assassin(Agatha) ∧ victime(Charles)) → déteste(Agatha, Charles)) ∧ ((assassin(Charles) ∧ victime(Agatha)) → déteste(Charles, Agatha)) ∧ ... Peu commode... Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 122. Quantificateurs Méthode #2: utiliser des quantificateurs ∀x : ∀y : (assassin(x) ∧ victime(y)) → déteste(x,y) "pour tout x (pris dans l'ensemble E)" Intuitivement, si E = {a, b, c, ..., k}, alors ∀x : φ ≡ φ[x/a] ∧ φ[x/b] ∧ ... ∧ φ[x/k] où φ[x/a] est l'expression φ dans laquelle on a remplacé tous les x par a Ex.: ∀x : assassin(x) ≡ assassin(Agatha) ∧ assassin(Charles) ∧ assassin(Maître d'hôtel) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 125.
  • 127. Ne pas appuyer sur si est allumé Actionner en même temps et
  • 128. Ne pas appuyer sur si est allumé Actionner en même temps et Actionner seulement si indique 2
  • 129.
  • 130.
  • 132.
  • 133. X
  • 134.
  • 135.
  • 136. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ...
  • 137. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ...
  • 138. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ... ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.6 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.4 remote-as 100 ...
  • 139. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ... ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.6 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.4 remote-as 100 ...
  • 140. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ... ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.6 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.4 remote-as 100 ...
  • 141. ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.4 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.6 remote-as 100 ... ip vrf Customer_A rd 100:110 route-target export 100:1000 route-target import 100:1000 ! ip vrf Customer_B rd 100:120 route-target export 100:2000 route-target import 100:2000 ! interface Loopback0 ip address 10.10.10.6 255.255.255.255 ip router isis ! interface Loopback101 ip vrf forwarding Customer_A ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! interface Loopback102 ip vrf forwarding Customer_B ip address 200.0.4.1 255.255.255.0 no ip directed-broadcast ! router bgp 100 bgp log-neighbor-changes neighbor 10.10.10.4 remote-as 100 ...
  • 142. ∀s₁ ∈ /DeviceName : ∀s₂ ∈ /DeviceName : ∀v₁ ∈ /DeviceName/s₁/ip-vrf : ∀v₂ ∈ /DeviceName/s₂/ip-vrf : v₁=v₂ → ( ∃r₁ ∈ /DeviceName/s₁/ip-vrf/v₁/rd : ∃r₂ ∈ /DeviceName/s₁/ip-vrf/v₂/rd : r₁=r₂)
  • 143.
  • 152. 329 = 17 √ 17 x 17 119
  • 153. 329 = 17 √ 17 x 17 119 7
  • 154. 329 = 17 √ 17 x 17 119 7
  • 155. 329 = 17 √ 17 x 17 119 17
  • 156. 329 = 17 √ 17 x 17 119 +17
  • 157. 329 = 17 √ 17 x 17 119 +17 9
  • 158. 329 = 17 √ 17 x 17 119 +17 9
  • 159. 329 = 17 √ 17 x 17 119 +17 89
  • 160. 329 = 17 √ 17 x 17 119 +17 89
  • 161. 329 = 17 √ 17 x 17 119 +17 289
  • 162. 329 = 17 X √ 17 x 17 119 +17 289
  • 164. ? √329 = 17 19 étapes
  • 165. ? √329 = 17 19 étapes √329 =?
  • 166. ? √329 = 17 19 étapes √329 =? 64 étapes
  • 167. | | | | Nombre d'étapes 80 60 40 20 0 0 | | | | | 200 400 600 800 1000 Nombre à calculer ? √329 = 17 19 étapes √329 =? 64 étapes
  • 168. | | | Vérifier | Nombre d'étapes 80 60 40 20 0 0 | | | | | 200 400 600 800 1000 Nombre à calculer ? √329 = 17 19 étapes √329 =? 64 étapes
  • 169. | | | 80 60 40 20 0 Vérifier | Nombre d'étapes Calculer 0 | | | | | 200 400 600 800 1000 Nombre à calculer ? √329 = 17 19 étapes √329 =? 64 étapes
  • 170. | | | 80 60 40 20 0 0 } 4x Vérifier | Nombre d'étapes Calculer | | | | | 200 400 600 800 1000 Nombre à calculer ? √329 = 17 19 étapes √329 =? 64 étapes
  • 174. Complexité Étant donné une expression à n variables, toutes les méthodes vues jusqu'ici ont une complexité en pire cas de l'ordre de 2n Théorème (Cook, 1971) Le problème SAT est un problème NP-complet. Conséquence: on ne sait pas à l'heure actuelle s'il existe un algorithme SAT dont le pire cas serait inférieur à O(2n ) Si oui, alors P=NP ! Stephen A. Cook (1939-) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 175. Ajax web application Cloud computing Sylvain Hallé
  • 176. Ajax web application Cloud computing JavaScript Sylvain Hallé
  • 177. Ajax web application Cloud computing eG Be es atl Be el am n C va ara C Sylvain Hallé
  • 178. Ajax web application Cloud computing <a onclick="javascript: findBand(’Beatles’)"> eG Be es atl Be el am n C va ara C Sylvain Hallé
  • 179. Ajax web application Cloud computing findBand(’Beatles’) Sylvain Hallé
  • 180. Ajax web application Cloud computing findBand(’Beatles’) Sylvain Hallé
  • 181. Ajax web application Cloud computing artist =beatles findBand(’Beatles’) Sylvain Hallé
  • 182. Ajax web application Cloud computing artist =beatles findBand(’Beatles’) Sylvain Hallé
  • 183. Ajax web application Cloud computing artist =beatles document.innerHTML = Sylvain Hallé findBand(’Beatles’)
  • 184. Ajax web application Cloud computing artist =beatles document.innerHTML = C Page is updated, not reloaded Sylvain Hallé findBand(’Beatles’)
  • 185. Ajax web application Cloud computing artist =beatles document.innerHTML = C Server response only provides updated contents Sylvain Hallé findBand(’Beatles’)
  • 186. Ajax web application Cloud computing <Search> <Artist> beatles </Artist> </Search> Does not need to be a URL Does not need to be HTML <SearchResults> <Item> <Artist> The Beatles </Artist> <Title> Rubber Soul </Title> </Item> ... </SearchResults> Sylvain Hallé
  • 194. Main issue Not like traditional programming: all input-output is exchanged unverified! Possible mismatch between messages sent and messages expected Sylvain Hallé
  • 195. Interface contracts All possible sequences of all possibles messages with all possible values Sylvain Hallé
  • 198. Interface contracts Data-aware sequential constraints Constraints on individual messages Sylvain Hallé Constraints on sequences
  • 199. Interface contracts Interface contract = valid (error-free) interactions Data-aware sequential constraints Constraints on individual messages Sylvain Hallé Constraints on sequences
  • 200. Three types of constraints (I) Constraints on individual messages <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> Examples: Sylvain Hallé
  • 201. Three types of constraints (I) Constraints on individual messages <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> Examples: 1. The element Page must be an integer between 1 and 20." /M Sylvain Hallé
  • 202. Three types of constraints (I) Constraints on individual messages <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> Examples: 1. The element Page must be an integer between 1 and 20." /M 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. Sylvain Hallé
  • 203. Expressing data constraints Simple XPath Fetches portions of an XML document according to a query path = sequence of tags V pM ® : Q ´2 Examples: p ’’, m) = {1,2,4} (‘‘/a/b/c p ’’, m) = Æ (‘‘/a/b/d Sylvain Hallé { M: set of messages Q: set of XML query paths V: set of atomic values <a> <b> <c>1</c> <c>2</c> </b> <d> <c>9</c> </d> <b> <c>3</c> </b> </a> m
  • 204. Expressing data constraints XPath term Expresses properties over values fetched by XPath expressions p "Û v Î (x) j (q,m) q x : j (v) for every p $ Û vÎ (x) j (q,m) q x : j (v) for some Examples: "x < 5 /a/b/c x : $ /a/b x : $ : "y £ x /a/b/c x /a/b/c y : Sylvain Hallé <a> <b> <c>1</c> <c>2</c> </b> <d> <c>9</c> </d> <b> <c>3</c> </b> </a> { Q, M, path For some message m Î q Î m 2
  • 205. Expressing data constraints <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> 1. The element Page must be an integer between 1 and 20." /M 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. Sylvain Hallé 2
  • 206. Expressing data constraints <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> 1. " x : x > 0 Ù x < 21 /Message/Page 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. Sylvain Hallé 2
  • 207. Expressing data constraints <Message> <Action>ItemSearch</Action> <Results>5</Results> <Keyword>beatles</Keyword> <Page>1</Page> </Message> 1. " x : x > 0 Ù x < 21 /Message/Page 2. $ /Message/Page x : Sylvain Hallé Û $ /Message/Results y : 2
  • 208. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Examples: Sylvain Hallé 2
  • 209. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Examples: 3. The Login request cannot be resent if its response is" / successful." / . Sylvain Hallé 2
  • 210. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Examples: 3. The Login request cannot be resent if its response is" / successful." / . 4. CartCreate must follow a successful LoginResponse." / Sylvain Hallé 2
  • 211. Linear Temporal Logic Alphabet (A) Set of possible messages Trace (A*) Sequence of messages Sylvain Hallé
  • 212. Linear Temporal Logic LTL formula Ga Xa Fa aWb = assertion on the sequence of states in a trace "always a" "a in the next" "eventually a" "a until b" A B A C D C B E G (a ® X b) FALSE Sylvain Hallé ... ØW c (d Ú e) TRUE
  • 213. Linear Temporal Logic Well-known results: 1. For every LTL formula jexists a Büchi automaton A j , there such that for every (infinite) trace s : s sj | j L(A ) = Û Î -regular i.e. LTL describes w languages 2. The alphabet symbols can be generalized to finite sets of Boolean propositions Þ Let’s use XPath terms as our Boolean propositions Sylvain Hallé
  • 214. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Examples: 3. The Login request cannot be resent if its response is" / successful." / . 4. CartCreate must follow a successful LoginResponse." / Sylvain Hallé 2
  • 215. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Examples: 3. G (" /Message/Action a : a = LoginResponse ® (X G " Login)) /Message/Action a’ : a’ ¹ . 4. CartCreate must follow a successful LoginResponse." / Sylvain Hallé 2
  • 216. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> Examples: X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Xpath terms 3. G (" /Message/Action a : a = LoginResponse ® (X G " Login)) /Message/Action a’ : a’ ¹ . 4. CartCreate must follow a successful LoginResponse." / Sylvain Hallé 2
  • 217. Three types of constraints (II) Constraints on message sequences <Message> <Action> LoginResponse </Action> ... </Message> Examples: X <Message> <Action> Login </Action> ... </Message> <Message> <Action> CartCreate </Action> ... </Message> Xpath terms 3. G (" /Message/Action a : a = LoginResponse ® (X G " Login)) /Message/Action a’ : a’ ¹ . 4. (" CartCreate) /Message/Action a : a ¹ W (" LoginResponse) /Message/Action a’ : a’ = Sylvain Hallé 2
  • 218. Three types of constraints (III) Data-aware sequential constraints <Message> <SessionKey>123</SessionKey> <CartId>789</CartId> ... </Message> <Message> <SessionKey>123</SessionKey> <CartId>789</CartId> ... </Message> Examples: 5. There can be at most one active cart ID per session key." / Sylvain Hallé 2
  • 219. Three types of constraints (III) Data-aware sequential constraints <Message> <SessionKey>123</SessionKey> <CartId>789</CartId> ... </Message> <Message> <SessionKey>123</SessionKey> <CartId>789</CartId> ... </Message> Examples: 5. G (" /Message/SessionKey k : " /Message/CartId c : G (" /Message/SessionKey k’ : " /Message/CartId c’ : k = k’ ® c = c’)) Sylvain Hallé 2
  • 220. Three types of constraints (III) Data-aware sequential constraints <Message> <Action>CartAdd</Action> <Items> <Item> <ItemId>567</ItemId> ... Examples: <Message> <Action>CartAdd</Action> <Items> <Item> <ItemId>567</ItemId> ... X 6. You cannot add the same item twice to the shopping cart." / Sylvain Hallé 2
  • 221. Three types of constraints (III) Data-aware sequential constraints <Message> <Action>CartAdd</Action> <Items> <Item> <ItemId>567</ItemId> ... Examples: <Message> <Action>CartAdd</Action> <Items> <Item> <ItemId>567</ItemId> ... X 6. G (" /Message/Action a : a = CartAdd ® " /Message/ItemId i : X G (" /Message/Action a’ : a’ = CartAdd ® i’ : i ¹ " i’ )) /Message/ItemId Sylvain Hallé 2
  • 222. Six constraints for the Beep Store Constraints on individual messages Constraints on message sequences Data-aware constraints Sylvain Hallé
  • 223. Six constraints for the Beep Store 1. The element Page must be an integer between 1 and 20. 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. Constraints on message sequences Data-aware constraints Sylvain Hallé
  • 224. Six constraints for the Beep Store 1. The element Page must be an integer between 1 and 20. 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. 3. The Login request cannot be resent if its response is successful. 4. CartCreate must follow a successful LoginResponse. Data-aware constraints Sylvain Hallé
  • 225. Six constraints for the Beep Store 1. The element Page must be an integer between 1 and 20. 2. The element Page is mandatory only if Results is present, otherwise it is forbidden. 3. The Login request cannot be resent if its response is successful. 4. CartCreate must follow a successful LoginResponse. 5. There can be at most one active cart ID per session key. 6. You cannot add the same item twice to the shopping cart. Sylvain Hallé
  • 226.
  • 227. System
  • 228. System
  • 239. Définition Runtime monitoring Étude du design d'outils pour observer et analyser un système pendant son exécution. Usages possibles: Testing/débogage Sécurité et détection d'intrusions Protection contre les fautes/pannes Compréhension de programmes Plusieurs noms: runtime verification, runtime checking, dynamic analysis, trace analysis, fault protection, ... Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 240. Composantes Structure de base d'un système de runtime monitoring: Spécification Système cible Événement État interne Moniteur Senseur Verdict Réaction (facultatif) Sylvain Hallé - 8INF958 Spécification, test et vérification
  • 241. Enforcing interface contracts at runtime XMLHttpRequest · JavaScript object · Provided by the browser · All communications to monitor already centralized: ‘‘no’’ instrumentation Sylvain Hallé
  • 242. Enforcing interface contracts at runtime XMLHttpRequestBB Sylvain Hallé
  • 243. Enforcing interface contracts at runtime XMLHttpRequestBB XMLHttpRequest · around original Wrapper · same methods Provides · messages before Checks relaying them Sylvain Hallé LTL-FO+ algorithm
  • 244. Add BeepBeep to an application Copy BeepBeep ? in the application's directory http://beepbeep.sourceforge.net Include BeepBeep  myapplication.html <html> <head> <title>My Application </title> <script type="text/javascript" href="myapplication.js"/> </head> <body> ... </body> </html> Sylvain Hallé
  • 245. Add BeepBeep to an application Copy BeepBeep ? in the application's directory http://beepbeep.sourceforge.net Include BeepBeep  myapplication.html <html> <head> <title>My Application </title> <script type="text/javascript" href="myapplication.js"/> <script type="text/javascript" href="beepbeep.js"/> </head> <body> ... </body> </html> Sylvain Hallé
  • 246. Add BeepBeep to an application Copy BeepBeep ? in the application's directory http://beepbeep.sourceforge.net Include BeepBeep  myapplication.html <html> <head> <title>My Application </title> <script type="text/javascript" href="myapplication.js"/> <script type="text/javascript" href="beepbeep.js"/> </head> <body> ... </body> </html> Sylvain Hallé myapplication.js // Initializations ... req = new XMLHttpRequest(); ... function abc() { ... req.send(some_message); }
  • 247. Add BeepBeep to an application Copy BeepBeep ? in the application's directory http://beepbeep.sourceforge.net Include BeepBeep  beepstore.html <html> <head> <title>My Application </title> <script type="text/javascript" href="myapplication.js"/> <script type="text/javascript" href="beepbeep.js"/> </head> <body> ... </body> </html> Sylvain Hallé beepstore.js // Initializations ... req = new XMLHttpRequestBB(); ... function abc() { ... req.send(some_message); }
  • 248. Add BeepBeep to an application Create a contract ? file with LTL-FO+ formulas # ------------------------------------------------------# BeepBeep contract file for the Beep Store # ------------------------------------------------------% The element Page must be an integer between 1 and 20. ; G ([p /Message/Page] (((p) > ({0})) & ((p) < ({21})))) % The element Page is mandatory only if Results is present, otherwise it is forbidden. ; G ([a /Message/Action] (((a) = ({ItemSearch})) -> ( ((<r /Message/Results> ({TRUE})) -> (<p /Message/Page> ({TRUE}))) & ((<p /Message/Page> ({TRUE})) -> ( <r /Message/Results> ({TRUE})))))) % The Login request cannot be resent if its response is successful. ; G ([a /Message/Action] (((a) = ({LoginResponse})) -> (X (G ([b /Message/Action] (!((b) = ({Login})))))))) Sylvain Hallé } Caption: used when violations are discovered Plain-text LTL-FO+ (automatically parsed)
  • 249. Add BeepBeep to an application When loading  the application, BeepBeep starts as a small Java applet inside the page The Beep Store Sign in or register Search: Search results for ‘Beatles’ What is this? Login Rubber Soul The Beatles Ask for account Contact us Fault parameters Yellow Submarine The Beatles ?/?/?/?/?/?:0:0 Sylvain Hallé GO Your Cart
  • 250. Add BeepBeep to an application When loading  the application, BeepBeep starts as a small Java applet inside the page The Beep Store Sign in or register Search: Search results for ‘Beatles’ What is this? Login Rubber Soul The Beatles Ask for account Contact us Fault parameters ?/?/?/?/?/?:0:0 Sylvain Hallé Yellow Submarine The Beatles GO Your Cart
  • 251. BeepBeep’s visible interface ?/?/?/?/?/?:0:0 Current state of monitor for each property T: t: F: f: ?: last message made it true is true last message made it false is false not yet true/false Sylvain Hallé Number of messages processed Cumulative processing time (in ms)
  • 252.
  • 253. On ne peut réussir un niveau sans sauter au moins une fois F action = jump
  • 254. 20 Mario ne peut jamais sauter d'une hauteur supérieure à 20 G (action = jump → height < 20)
  • 255. X Si Mario se penche, il ne peut pas sauter tout de suite après G (action = crouch → X action ≠ jump)
  • 256. X Mario ne peut jamais entrer en collision avec un ennemi lorsqu'il tient une carapace G (action = haveShell → X action ≠ collision) ou mieux G (action = haveShell → (action ≠ collision U action = dropShell))
  • 257.
  • 261.
  • 262. COVERSTORY Verified software My computer won’t fail me Web-browser crashes are annoying, but as far as software malfunctions go, the consequences are mild. With a plane’s autopilot or the control room of a nuclear power station, it’s another matter. As our lives become ever more saturated with computers, how can we know they won’t fail? Currently, we systematically test all conceivable scenarios under which they might. A better insurance might be logic. [...] 32 | New Scientist | 16 October 2010