Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

789 views

Published on

Brève présentation des applications des méthodes formelles développées au LIF

Published in: Education
  • Be the first to comment

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

  1. 1. À la chasse aux bugs avec le Laboratoire d'informatique formelle Les mathématiques au service de l'assurance-qualité
  2. 2. NSERC CRSNG Fonds de recherche Nature et technologies
  3. 3. Ariane V 1996
  4. 4. Ariane V 1996
  5. 5. 6 rappels en 2010
  6. 6. 400 000 rappels
  7. 7. 59 500 000 000 $
  8. 8. M. Gauche M. Droit
  9. 9. M. Gauche M. Droit
  10. 10. ATELIERS GAU
  11. 11. ? !
  12. 12. Votre code ? !
  13. 13. Librairie Service web Module Votre code ? !
  14. 14. b c a
  15. 15. b Plan Devis Contrat ... c a
  16. 16. b c a
  17. 17. b c a b c a
  18. 18. b ? c a b c a ?
  19. 19. b ? c a b c a ?
  20. 20. TESTING
  21. 21. T ES T M.
  22. 22. ? Pas exhaustif T ES T M.
  23. 23. ? Pas exhaustif T ES T M. Long…
  24. 24. ? Basé sur la compréhension du testeur Pas exhaustif ? T ES T M. Long…
  25. 25. ATELIERS
  26. 26. ATELIERS
  27. 27. ATELIERS
  28. 28. ATEL GAU
  29. 29. X ATEL GAU
  30. 30. X ATELIERS GAU
  31. 31. X ATELIERS GAU ? ?
  32. 32. Programmation Tests unitaires Tests fonctionnels Tests système Après sortie
  33. 33. % de bugs introduits 85% Programmation Tests unitaires Tests fonctionnels Tests système Après sortie
  34. 34. % de bugs introduits % de bugs trouvés 85% Programmation Tests unitaires Tests fonctionnels Tests système Après sortie
  35. 35. % 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
  36. 36. 1. jlq ie 2. fjf ...
  37. 37. p. 3 p. 8
  38. 38. Toutes les histoires possibles
  39. 39. Toutes les histoires possibles Toutes les histoires du livre
  40. 40. Toutes les histoires possibles Toutes les histoires plausibles Toutes les histoires du livre
  41. 41. Toutes les histoires possibles Toutes les histoires plausibles Toutes les histoires du livre
  42. 42. Combien d'histoires possibles ?
  43. 43. Combien d'histoires possibles ? 1 2
  44. 44. Combien d'histoires possibles ? 1 2 2 1
  45. 45. Combien d'histoires possibles ? 1 2 2 1 1 2 3
  46. 46. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2
  47. 47. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3
  48. 48. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3 2 3 1
  49. 49. Combien d'histoires possibles ? 1 2 1 2 3 2 1 1 3 2 2 1 3 2 3 1 3 1 2
  50. 50. 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
  51. 51. Histoires Combien d'histoires possibles ? 1 2 3 Pages 4 5
  52. 52. Histoires Combien d'histoires possibles ? 1 1 2 3 Pages 4 5
  53. 53. Histoires Combien d'histoires possibles ? 1 1 2 2 3 Pages 4 5
  54. 54. Histoires Combien d'histoires possibles ? 6 1 1 2 2 3 Pages 4 5
  55. 55. Histoires Combien d'histoires possibles ? 6 1 1 24 2 2 3 Pages 4 5
  56. 56. Histoires Combien d'histoires possibles ? 6 1 1 24 120 4 5 2 2 3 Pages
  57. 57. Histoires Combien d'histoires possibles ? 6 1 1 24 120 4 5 2 2 3 Pages
  58. 58. LEM 7500 lignes
  59. 59. LEM 7500 lignes Chevy Volt 10 000 000 lignes
  60. 60. LEM 7500 lignes Windows 7 50 000 000 lignes Chevy Volt 10 000 000 lignes
  61. 61. Windows 7 50 000 000 lignes Chevy Volt 10 000 000 lignes
  62. 62. Windows 7 50 000 000 lignes
  63. 63. 10 km
  64. 64. 1 km/h 10 km 1 km/h
  65. 65. 1 km/h 10 km 2 km/h 1 km/h
  66. 66. 1 km/h 10 km 2 km/h 1 km/h
  67. 67. 2M$ ains @ 1 km/h 2 tr 10 km 2 km/h 1 km/h
  68. 68. 2M$ ains @ 1 km/h 2 tr 10 km 20M$ rails @ 2 km/h 1 km/h
  69. 69. 2M$ ains @ 1 km/h 2 tr 10 km 20M$ rails @ 3.90$ rgot @ esca 2 km/h 1 km/h
  70. 70. 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
  71. 71. Position train 1 = 1 x t
  72. 72. Position train 1 = 1 x t Position train 2 = 10 - (1 x t)
  73. 73. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ?
  74. 74. Position train 1 = 1 x t Position train 2 = 10 - (1 x t) Moment de l'impact ? 1 x t = 10 - (1 x t)
  75. 75. 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
  76. 76. 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
  77. 77. 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
  78. 78. MATH S
  79. 79. E E
  80. 80. Logique mathematique E E
  81. 81. Logique mathematique E E Combinatoire des mots
  82. 82. Logique mathematique E E Combinatoire des mots Theorie des graphes
  83. 83. 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
  84. 84. 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
  85. 85. 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
  86. 86. 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
  87. 87. 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
  88. 88. 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
  89. 89. 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
  90. 90. 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
  91. 91. 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
  92. 92. 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
  93. 93. 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
  94. 94. 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
  95. 95. 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
  96. 96. 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
  97. 97. 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
  98. 98. 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
  99. 99. 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
  100. 100. É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
  101. 101. 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
  102. 102. 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
  103. 103. 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
  104. 104. 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
  105. 105. Vérification automatique
  106. 106. Exemple 1 Gestion des réseaux
  107. 107. Ne pas appuyer sur si est allumé
  108. 108. Ne pas appuyer sur si est allumé Actionner en même temps et
  109. 109. Ne pas appuyer sur si est allumé Actionner en même temps et Actionner seulement si indique 2
  110. 110. NON Un seul! Tjrs >2
  111. 111. X
  112. 112. 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 ...
  113. 113. 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 ...
  114. 114. 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 ...
  115. 115. 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 ...
  116. 116. 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 ...
  117. 117. 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 ...
  118. 118. ∀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₂)
  119. 119. 1 438 2
  120. 120. 1 438 2
  121. 121. 329 = 17 √
  122. 122. 329 = 17 √ 17 x 17
  123. 123. 329 = 17 √ 17 x 17
  124. 124. 329 = 17 √ 4 17 x 17 9
  125. 125. 329 = 17 √ 4 17 x 17 9
  126. 126. 329 = 17 √ 4 17 x 17 119
  127. 127. 329 = 17 √ 17 x 17 119
  128. 128. 329 = 17 √ 17 x 17 119 7
  129. 129. 329 = 17 √ 17 x 17 119 7
  130. 130. 329 = 17 √ 17 x 17 119 17
  131. 131. 329 = 17 √ 17 x 17 119 +17
  132. 132. 329 = 17 √ 17 x 17 119 +17 9
  133. 133. 329 = 17 √ 17 x 17 119 +17 9
  134. 134. 329 = 17 √ 17 x 17 119 +17 89
  135. 135. 329 = 17 √ 17 x 17 119 +17 89
  136. 136. 329 = 17 √ 17 x 17 119 +17 289
  137. 137. 329 = 17 X √ 17 x 17 119 +17 289
  138. 138. ? √329 = 17
  139. 139. ? √329 = 17 19 étapes
  140. 140. ? √329 = 17 19 étapes √329 =?
  141. 141. ? √329 = 17 19 étapes √329 =? 64 étapes
  142. 142. | | | | Nombre d'étapes 80 60 40 20 0 0 | | | | | 200 400 600 800 1000 Nombre à calculer ? √329 = 17 19 étapes √329 =? 64 étapes
  143. 143. | | | 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
  144. 144. | | | 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
  145. 145. | | | 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
  146. 146. | | Vérifier | Complexité | Calculer | | | | Taille du problème |
  147. 147. | | Vérifier | Complexité | Calculer | | | | Taille du problème |
  148. 148. | | | Vérifier | Complexité } Calculer | | | | Taille du problème | !!!
  149. 149. 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
  150. 150. Ajax web application Cloud computing Sylvain Hallé
  151. 151. Ajax web application Cloud computing JavaScript Sylvain Hallé
  152. 152. Ajax web application Cloud computing eG Be es atl Be el am n C va ara C Sylvain Hallé
  153. 153. Ajax web application Cloud computing <a onclick="javascript: findBand(’Beatles’)"> eG Be es atl Be el am n C va ara C Sylvain Hallé
  154. 154. Ajax web application Cloud computing findBand(’Beatles’) Sylvain Hallé
  155. 155. Ajax web application Cloud computing findBand(’Beatles’) Sylvain Hallé
  156. 156. Ajax web application Cloud computing artist =beatles findBand(’Beatles’) Sylvain Hallé
  157. 157. Ajax web application Cloud computing artist =beatles findBand(’Beatles’) Sylvain Hallé
  158. 158. Ajax web application Cloud computing artist =beatles document.innerHTML = Sylvain Hallé findBand(’Beatles’)
  159. 159. Ajax web application Cloud computing artist =beatles document.innerHTML = C Page is updated, not reloaded Sylvain Hallé findBand(’Beatles’)
  160. 160. Ajax web application Cloud computing artist =beatles document.innerHTML = C Server response only provides updated contents Sylvain Hallé findBand(’Beatles’)
  161. 161. 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é
  162. 162. Conceptually... Cloud computing Sylvain Hallé
  163. 163. Conceptually... Cloud computing Sylvain Hallé
  164. 164. Conceptually... Cloud computing Sylvain Hallé
  165. 165. Conceptually... Cloud computing Sylvain Hallé
  166. 166. Conceptually... Cloud computing Sylvain Hallé
  167. 167. Conceptually... Cloud computing Sylvain Hallé
  168. 168. Conceptually... Cloud computing Web service Sylvain Hallé Web client
  169. 169. Main issue Not like traditional programming: all input-output is exchanged unverified! Possible mismatch between messages sent and messages expected Sylvain Hallé
  170. 170. Interface contracts All possible sequences of all possibles messages with all possible values Sylvain Hallé
  171. 171. Interface contracts Constraints on individual messages Sylvain Hallé
  172. 172. Interface contracts Constraints on individual messages Sylvain Hallé Constraints on sequences
  173. 173. Interface contracts Data-aware sequential constraints Constraints on individual messages Sylvain Hallé Constraints on sequences
  174. 174. Interface contracts Interface contract = valid (error-free) interactions Data-aware sequential constraints Constraints on individual messages Sylvain Hallé Constraints on sequences
  175. 175. 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é
  176. 176. 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é
  177. 177. 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é
  178. 178. 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
  179. 179. 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
  180. 180. 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
  181. 181. 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
  182. 182. 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
  183. 183. 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
  184. 184. 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
  185. 185. 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
  186. 186. Linear Temporal Logic Alphabet (A) Set of possible messages Trace (A*) Sequence of messages Sylvain Hallé
  187. 187. 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
  188. 188. 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é
  189. 189. 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
  190. 190. 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
  191. 191. 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
  192. 192. 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
  193. 193. 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
  194. 194. 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
  195. 195. 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
  196. 196. 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
  197. 197. Six constraints for the Beep Store Constraints on individual messages Constraints on message sequences Data-aware constraints Sylvain Hallé
  198. 198. 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é
  199. 199. 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é
  200. 200. 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é
  201. 201. System
  202. 202. System
  203. 203. Instrumentation System
  204. 204. Instrumentation System
  205. 205. Instrumentation Trace System
  206. 206. Instrumentation Trace Events System
  207. 207. Instrumentation Trace Events System
  208. 208. Trace validation Instrumentation Trace Events System
  209. 209. Instrumentation System
  210. 210. Instrumentation Runtime monitoring System
  211. 211. Instrumentation Runtime monitoring System
  212. 212. Instrumentation Runtime monitoring Overhead System
  213. 213. 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
  214. 214. 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
  215. 215. Enforcing interface contracts at runtime XMLHttpRequest · JavaScript object · Provided by the browser · All communications to monitor already centralized: ‘‘no’’ instrumentation Sylvain Hallé
  216. 216. Enforcing interface contracts at runtime XMLHttpRequestBB Sylvain Hallé
  217. 217. Enforcing interface contracts at runtime XMLHttpRequestBB XMLHttpRequest · around original Wrapper · same methods Provides · messages before Checks relaying them Sylvain Hallé LTL-FO+ algorithm
  218. 218. 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é
  219. 219. 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é
  220. 220. 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); }
  221. 221. 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); }
  222. 222. 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)
  223. 223. 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
  224. 224. 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
  225. 225. 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)
  226. 226. On ne peut réussir un niveau sans sauter au moins une fois F action = jump
  227. 227. 20 Mario ne peut jamais sauter d'une hauteur supérieure à 20 G (action = jump → height < 20)
  228. 228. X Si Mario se penche, il ne peut pas sauter tout de suite après G (action = crouch → X action ≠ jump)
  229. 229. 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))
  230. 230. Deux derniers événements
  231. 231. État des moniteurs
  232. 232. Surcharge CPU
  233. 233. 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

×