INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143...

40
INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département d’informatique, UQÀM

Transcript of INF3143moz-code.org/uqam/cours/INF3143/cours/18_revisions.pdf · 2018-12-06 · INF3143...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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!