inf3143moz-code.org/uqam/cours/inf3143/cours/18_revisions.pdf · 2018-12-06 · inf3143...
TRANSCRIPT
![Page 1: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/1.jpg)
INF3143
Modélisation et spécificationformelles des logiciels
Hiver 2018
Alexandre TerrasaDépartement d’informatique, UQÀM
![Page 2: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/2.jpg)
RévisionsAutomates
2
![Page 3: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/3.jpg)
RE -> NFA
3
Traduire l’expression régulière en NFA
a*(b|cd?)+
![Page 4: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/4.jpg)
RE -> NFA
4
![Page 5: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/5.jpg)
NFA -> DFA
5
![Page 6: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/6.jpg)
RévisionsAssertions
6
![Page 7: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/7.jpg)
Exercice 1
7
Soit le code suivant:
int division(int a, int b) {
assert b > 0;
int res = 0;
while(a >= b) {
res ++;
a -= b;
}
return res;
}
![Page 8: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/8.jpg)
Assertions désactivées
8
Que se passe-t-il si on appelle la méthode avec
a = 10 b = 1
a = 8 b = 2
a = 6 b = 0
Les assertions sont désactivées java -da
![Page 9: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/9.jpg)
Assertions désactivées
9
Que se passe-t-il si on appelle la méthode avec
a = 10 b = 1 # retourne 10
a = 8 b = 2 # retourne 4
a = 6 b = 0 # boucle infinie
Les assertions sont désactivées java -da
![Page 10: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/10.jpg)
Assertions activées
10
Que se passe-t-il si on appelle la méthode avec
a = 10 b = 1
a = 8 b = 2
a = 6 b = 0
Les assertions sont activées java -ea
![Page 11: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/11.jpg)
Assertions activées
11
Que se passe-t-il si on appelle la méthode avec
a = 10 b = 1 # retourne 10
a = 8 b = 2 # retourne 4
a = 6 b = 0 # lève AssertionException
Les assertions sont activées java -ea
![Page 12: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/12.jpg)
Soit le code suivant:
int countChars(String input, char toCount) {
assert input != null;
int count = 0;
for(char c : input.toCharArray()) {
if(c == toCount) {
count ++;
}
}
return count;
}
Exercice 2
12
![Page 13: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/13.jpg)
Assertions désactivées
13
Que se passe-t-il si on appelle la méthode avec
input = “Bonjour” b = ‘z’
input = “Bonjour” b = ‘o’
input = null b = ‘o’
Les assertions sont désactivées java -da
![Page 14: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/14.jpg)
Assertions désactivées
14
Que se passe-t-il si on appelle la méthode avec
input = “Bonjour” b = ‘z’# retourne 0
input = “Bonjour” b = ‘o’# retourne 2
input = null b = ‘o’# lève NullPointeurException (null.toCharArray())
![Page 15: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/15.jpg)
Assertions activées
15
Que se passe-t-il si on appelle la méthode avec
input = “Bonjour” b = ‘z’
input = “Bonjour” b = ‘o’
input = null b = ‘o’
Les assertions sont activées java -ea
![Page 16: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/16.jpg)
Assertions désactivées
16
Que se passe-t-il si on appelle la méthode avec
input = “Bonjour” b = ‘z’# retourne 0
input = “Bonjour” b = ‘o’# retourne 2
input = null b = ‘o’# lève AssertionException (assert input != null)
![Page 17: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/17.jpg)
Soit le code suivant:
List<Integer> getRange(int from, int to) {
assert from <= to;
ArrayList<Integer> res = new ArrayList<>();
while(from <= to) {
res.add(from);
from ++;
}
return res;
}
Exercice 3
17
![Page 18: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/18.jpg)
Assertions désactivées
18
Que se passe-t-il si on appelle la méthode avec
from = 0 to = 10
from = 10 to = 10
from = -10 to = 10
from = 10 to = -10
Les assertions sont désactivées java -da
![Page 19: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/19.jpg)
Assertions désactivées
19
Que se passe-t-il si on appelle la méthode avec
from = 0 to = 10 # [0, 1, 2, …, 10]
from = 10 to = 10 # [10]
from = -10 to = 10 # [-10, -9, …, 9, 10 ]
from = 10 to = -10 # []
Les assertions sont désactivées java -da
![Page 20: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/20.jpg)
Assertions activées
20
Que se passe-t-il si on appelle la méthode avec
from = 0 to = 10
from = 10 to = 10
from = -10 to = 10
from = 10 to = -10
Les assertions sont activées java -ea
![Page 21: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/21.jpg)
Assertions désactivées
21
Que se passe-t-il si on appelle la méthode avec
from = 0 to = 10 # [0, 1, 2, …, 10]
from = 10 to = 10 # [10]
from = -10 to = 10 # [-10, -9, …, 9, 10 ]
from = 10 to = -10 # AssertionError
Les assertions sont désactivées java -da
![Page 22: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/22.jpg)
RévisionsTests unitaires
22
![Page 23: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/23.jpg)
Exercice 1
23
Voir la classe TemplateVar
https://github.com/Morriar/INF3143_revisions_final
Écrire les tests unitaires pour les méthodes
● TemplateVar / checkVarString● getVarName● getRegex
![Page 24: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/24.jpg)
Exercice 2
24
Voir la classe Template
https://github.com/Morriar/INF3143_revisions_final
Écrire les tests unitaires pour les méthodes
● parse● registerVar / hasVar / getVar● render
![Page 25: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/25.jpg)
Exercice 3
25
L’implémentation de Template / TemplateVar contient un bogue…
Il faut:
1. l’isoler grâce à vos tests2. le fixer
![Page 26: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/26.jpg)
Sur GitHub:
https://github.com/Morriar/INF3143_revisions_final/tree/correction/test/ex2
Exercices 1, 2, 3
26
![Page 27: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/27.jpg)
RévisionsContrats
27
![Page 28: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/28.jpg)
Question de rappel
28
Quels sont les 6 principes de la conception par contrats?
![Page 29: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/29.jpg)
Question de rappel
29
Quels sont les 6 principes de la conception par contrats?
1. Séparer requêtes et commandes
2. Séparer requêtes primitives et dérivées
3. Pour chaque requête dérivée, écrire une post-condition spécifiant la valeur de chaque requête primitive
4. Pour chaque commande, écrire une post-condition spécifiant la valeur de chaque requête primitive
5. Pour chaque requête et commande, décider d’une pré-condition que le client doit remplir
6. Écrire les invariants décrivant les propriétés non-variables des objets
![Page 30: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/30.jpg)
Exercice 1
30
Parmi les méthodes de la classe ArrayList de Java, lesquelles sont des commandes, lesquelles sont des requêtes, ou ni l’un ni l’autre?
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#method_summary
![Page 31: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/31.jpg)
Exercice 1
31
requêtes
get,
contains
indexOf,
isEmpty,
lastIndexOf,
size
commandes
add(int, E),
clear,
ensureCapacity,
removeRange,
trimToSize
presque commandes
add(E),
addAll,
remove
removeAll
retainAll
set
![Page 32: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/32.jpg)
Exercice 2
32
Parmi les requêtes de la classe ArrayList, lesquelles sont des primitives, lesquelles sont des dérivées?
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#method_summary
![Page 33: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/33.jpg)
Exercice 2
33
requêtes primitives
get,
indexOf,
lastIndexOf,
size
requêtes dérivées
isEmpty,
contains
![Page 34: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/34.jpg)
Exercice 3
34
Utilisez l’approche de conception par contrats vue en classe pour écrire les contrats des classes suivantes:
● Template● TemplateVar
![Page 35: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/35.jpg)
Sur GitHub:
https://github.com/Morriar/INF3143_revisions_final/tree/correction/src/ex2
Exercice 3
35
![Page 36: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/36.jpg)
Exercice 4
36
Soit l’interface IVaisseau
interface IVaisseau {
@Requires(“e instanceOf Equipement”)
void chargeEquipement(Equipement e);
}
Que pensez-vous du contrat suivant?
public class VaisseauCombat implements IVaisseau {
@Requires(“e instanceOf EquipementMilitaire”)
public void chargeEquipement(Equipement e);
}
![Page 37: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/37.jpg)
Exercice 4
37
Soit l’interface IVaisseau
interface IVaisseau {
@Requires(“e instanceOf Equipement”)
void chargeEquipement(Equipement e);
}
public class VaisseauCombat implements IVaisseau {
@Requires(“e instanceOf EquipementMilitaire”)
public void chargeEquipement(Equipement e);
}
Pré-condition renforcée: invalide
![Page 38: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/38.jpg)
Exercice 5
38
Soit l’interface IVaisseau
interface IVaisseau {
@Ensures(“result <= 100”)
int vitesseMax();
}
Que pensez-vous du contrat suivant?
public class MonVaisseau implements IVaisseau {
@Ensures(“result <= 200”)
int vitesseMax();
}
![Page 39: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/39.jpg)
Exercice 5
39
Soit l’interface IVaisseau
interface IVaisseau {
@Ensures(“result <= 100”)
int vitesseMax();
}
public class MonVaisseau implements IVaisseau {
@Ensures(“result <= 200”)
int vitesseMax();
}
Post-condition affaiblie: invalide
![Page 40: INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département](https://reader034.vdocuments.mx/reader034/viewer/2022042108/5e88dc7fc30ff5687b5ee883/html5/thumbnails/40.jpg)
Pour un examen en douceur...
40
Quelques conseils
● la documentation est autorisée● lisez bien les questions● lisez bien le code● allez-y par élimination● ...● remplissez bien les cases avec un stylo
bleu ou noir!