examen de mai 2014 - Master informatique

Transcription

examen de mai 2014 - Master informatique
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
1
Examen de MI047 - CPS
Frédéric Peschanski
Mai 2014
Durée
: 2 heures
Documents autorisés
Barème
donné à titre indicatif.
: Notes de cours
Exercice 1 : Spécications et tests (≈ 7-8 points)
L'objectif de cet exercice est de spécier une version simpliée de la partie serveur du protocole
(IRC).
Voici le squelette de spécication du service IRC :
Internet Relay Chat
service : IRC
types : Boolean, Integer, enum UserRole { ADMIN, USER }, Set
observators :
userIds : [IRC] -> Set<Integer>
hasNick : [IRC] * Integer -> Boolean
userNick : [IRC] * Integer -> String
pre : userNick(S,id) require hasNick(S,id)
userId : [IRC] * String -> Integer
pre : userId(S,n) require hasNick(S,n)
userRole : [IRC] * Integer -> UserRole
pre : userRole(S,id) require id ∈ userIds(S)
channels : [IRC] -> Set<String>
channelAdmin : [IRC] * String -> Integer
pre : channelAdmin(S,chan) require chan ∈ channels(S)
userJoins : [IRC] * Integer -> Set<String>
pre : userJoins(S,id) require id ∈ userIds(S)
chanUsers : [IRC] * String -> Set<Integer>
pre : chanUsers(S,chan) require chan ∈ channels(S)
// A COMPLETER (si besoin)
constructors :
init : -> [IRC]
operators :
connect : [IRC] * Integer * UserRole -> [IRC]
pre : connect(S,id,role) require // A COMPLETER : Question 1.2
nick : [IRC] * Integer * String -> [IRC]
pre : nick(S,id,user) require // A COMPLETER : Question 1.3
create : [IRC] * String * String -> [IRC]
pre : create(S,user,chan) require // A COMPLETER : Question 1.4
join : [IRC] * String * String -> [IRC]
pre : join(S,user,chan) require // A COMPLETER : Question 1.5
observations :
[invariants]
// A COMPLETER : Question 1.1
...
// A COMPLETER : Observations des opérations, Questions 1.2, 1.3, etc.
...
Le service de IRC enregistre :
les identiants numériques (id) des utilisateurs du service,
les pseudos (nick names ou nick) de ces
mêmes utilisateurs, sachant qu'un utilisateur a au plus un nick name,
le rôle de chaque utilisateur : simple utilisateur (rôle USER) ou administrateur
(rôle ADMIN),
les canaux de discussion identiés par
des chaînes de caractères (channels),
les utilisateurs administrateurs de canaux, sachant que chaque canal a exactement un administrateur,
les abonnements (joins) des utilisateurs
aux canaux de discussion. Un même utilisateur peut s'abonner à plusieurs canaux.
Les opérations principales du service sont :
la connection (connect) d'un nouvel utilisateur au service avec un identiant unique et un rôle spécié,
l'association d'un nick name (nick) à un identiant d'utilisateur,
la création d'un canal de discussion par son administrateur (create),
l'abonnement (join) d'un utilisateur à un canal de discussion existant.
Dénir les invariants de la spécication, en particulier les invariants de minimisation (au moins trois
dans cette spécication) ainsi qu'au moins :
Invariant utile : deux utilisateurs d'id diérents ne peuvent avoir le même nick name.
Invariant utile : les canaux auxquels sont abonnés des utilisateurs sont bien des canaux existants.
Question 1.1
Compléter la spécication pour ajouter l'opération connect de connexion d'un nouvel utilisateur au
service IRC. Il faut préciser la précondition de l'opération ainsi que les observations associées.
Question 1.2
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
2
: si le domaine et le codomaine d'un observateur OBS restent inchangés, alors on écrira simplement OBS
inchangé. S'il ne reste que des observateurs inchangés, alors on peut écrire le reste inchangé.
Remarque
Question 1.3
Même question pour l'opération nick.
Question 1.4
Même question pour l'opération
canal de discussion.
create.
Même question pour l'opération
plusieurs canaux de discussion.
join.
Question 1.5
Nous rappelons que seul un administrateur peut créer un
Nous remarquons qu'un même utilisateur peut s'abonner à
Question 1.6 Par sécurité, les opérations connect, create et join devraient être convergentes. Est-ce le cas dans notre
spécication ? Si c'est le cas, donner le critère de convergence pour chaque opération, sinon modier la spécication
pour corriger ce problème. On pourra notamment ajouter des observateurs si nécessaire.
Remarque : la décroissance stricte du critère de convergence sera justiée de manière informelle.
Exercice 2 : Modélisation de systèmes concurrents (≈ 5-6 points)
Dans cet exercice, nous utilisons le langage FSP pour modéliser une version simpliée de protocole de communication
sur canal non-able.
Question 2.1
Un premier modèle de notre système est exprimé en FSP de la façon suivante :
const N = 3
SENDER = SENDER[1],
SENDER[i:1..N] = (send[i] -> SENDER[i+1]),
SENDER[N+1] = STOP.
RECEIVER = RECEIVER[1],
RECEIVER[i:1..N] = (recv[i] -> RECEIVER[i+1]
|pass[i] -> RECEIVER[i+1]),
RECEIVER[N+1] = STOP.
CHANNEL = CHANNEL[1],
CHANNEL[i:1..N] = (input[i] -> CHOICE[i]),
CHOICE[i:1..N] = (success -> output[i] -> CHANNEL[i+1]
| fail -> lost[i] -> CHANNEL[i+1]),
CHANNEL[N+1] = STOP.
||SYSTEM = ( SENDER || RECEIVER || CHANNEL )/send[i:1..N]/input[i],
recv[i:1..N]/output[i],
lost[i:1..N]/pass[i].
||SPEC = (SYSTEM)\{success,fail}.
Dessiner l'automate de la spécication ||SPEC une fois minimisée.
Le système précédent perd des messages. Introduire un protocole de réémission de message fonctionnant de la façon suivante :
L'émetteur (SENDER) réemet le message courant tant qu'il ne reçoit pas le paquet de conrmation (action ack)
de la part du receveur. S'il reçoit le ack alors il passe au message suivant.
Le récepteur émet le paquet ack s'il reçoit bien le message courant, sinon il se remet en attente du message
courant.
Le processus CHANNEL est légèrement modié de la façon suivante :
Question 2.2
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
3
CHANNEL = CHANNEL[1],
CHANNEL[i:1..N] = (input[i] -> CHOICE[i]),
CHOICE[i:1..N] = (success -> output[i] -> CHANNEL[i+1]
| fail -> lost[i] -> CHANNEL[i]),
CHANNEL[N+1] = STOP.
On suppose également que la spécication est modiée :
||SPEC = (SYSTEM)\{success,fail,ack}.
Donner les dénitions modiées des processus SENDER et RECEIVER.
Question 2.3 (bonus) Le protocole de conrmation par ack suppose que la communication des paquets de contrôle
est able. Proposer, de façon informelle, une modication du protocole qui permette la communication able avec
perte potentielle des paquets ack.
Exercice 3 : Logique de Hoare (≈ 7-8 points)
Question 3.1
Faire la démonstration de correction du triplet de Hoare suivant :
def
{P RE = tab.length > 0}
{
var n
a = tab[0]
b = tab[0]
n = 1
while(n < tab.length) {
if (tab[n] < a) {
a = tab[n]
} else if (tab[n] > b) {
b = tab[n]
} else skip
n = n + 1
}
}
def
{P OST = tab.length > 0
∧ ∀i ∈ [0..tab.length−1], a≤tab[i]≤b
∧ ∃j ∈ [0..tab.length−1], tab[j ]=a
∧ ∃k ∈ [0..tab.length−1], tab[k]=b }
:
1. l'opération skip est une opération silencieuse dont la caractérisation en logique de Hoare est simplement l'axiome
Remarques
(skip)
suivant : {Q} skip {Q}
2. Dans la preuve l'étape (invariant ∧ condition vraie =⇒ precondition du corps) pour la boucle while ( ... ) doit
être clairement détaillée. Normalement c'est l'étape [9] dans le raisonnement (si on saute les blocs lexicaux
sans déclaration de variable locale).
3. Nommer chaque condition non-triviale dans la preuve (comme P RE et P OST ci-dessus) pour pouvoir y faire
référence sans tout recopier.
Si on appelle PROG1 le programme de la question précédente, alors on s'intéresse maintenant au
programme suivant :
Question 3.2
def
{P RE = tab.length > 0}
PROG1
def
{P OST = tab.length > 0
∧ ∀i ∈ [0..tab.length−1], a≤tab[i]≤b
∧ ∃j ∈ [0..tab.length−1], tab[j ]=a
∧ ∃k ∈ [0..tab.length−1], tab[k]=b }
// suite ...
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
n = 0;
while(n < tab.length) {
if(tab[n] < a) {
cpy[n] = a ;
} else if (tab[n] > b) {
cpy[n] = b ;
} else {
cpy[n] = tab[n] ;
}
n = n + 1;
}
{P OST 2}
Proposer une dénition intéressante 1 pour la postcondition P OST 2.
Question 3.3 (bonus)
1.
false
Faire une démonstration du triplet {P OST } n=0 ; while(. . . ) . . . {P OST 2}.
est un exemple de postcondition inintéressante.
4

Documents pareils