École Centrale Paris Techniques de vérification formelle
3eannée Année 2014-2015
TP - Spécification et test avec JML
L’objectif de ce TP est d’écrire des spécifications pour une classe Java à l’aide du langage
JML et de tester cette classe en s’aidant des spécifications et des outils associés à JML. Vous
trouverez l’archive contenant les squelettes des fichiers à compléter et les implantations à tester
à l’adresse http://www.lri.fr/~longuet/Enseignements/14-15/ECP-TVF/TP-JML.zip.
Spécification des tableaux redimensionnables. On considère la classe RArray implan-
tant des tableaux redimensionnables. Une instance de la classe RArray est un tableau dont les
valeurs non null sont stockées au début du tableau, entre les indices 0 et taille (exclu). Un
même objet peut être présent plusieurs fois dans le tableau.
Le constructeur de la classe permet d’initialiser un RArray vide de la capacité passée en
argument (non nulle). Il est possible de vider entièrement un RArray avec clear. On peut
savoir si un élément est présent dans un RArray avec contains, le nombre d’occurrences
de cet élément avec nbOcc, et un des indices auxquels se trouve un élément avec index (la
méthode renvoie 1si l’élément n’est pas présent).
Il est toujours possible d’ajouter un élément à un RArray avec la méthode add, il est
redimensionné si besoin. La méthode replace permet de remplacer l’élément à l’indice index
par un nouvel élément, et renvoie l’élément remplacé. On peut supprimer l’objet se trouvant
à un indice donné avec removeInd. On peut supprimer toutes les occurrences d’un objet avec
remove, qui renvoie true si l’élément a pu être supprimé, false sinon.
public class RArray {
private Object[] tab;
private int taille;
public RArray(int capacite) {}
public void clear() {}
public boolean contains(Object e) {}
public int nbOcc(Object e) {}
public int index(Object e) {}
public void add(Object e) {}
public Object replace(Object e, int indice) {}
public Object removeInd(int indice) {}
public boolean remove(Object e) {}
}
Fichiers fournis. Le fichier RArray.refines-java va contenir la spécification JML de
la classe RArray.java dont sont fournies plusieurs implantations, chacune dans un dossier
RArray*. Elle donne en en-tête le chemin de la classe implantant cette spécification. Il fau-
dra changer ce chemin pour changer l’implantation à tester.
1
//@ refines "RArray1/RArray.java";
Le fichier TestRArray.java contiendra les tests pour cette classe RArray. Le but est
d’écrire la spécification JML et les tests pour la classe RArray, et de tester les implantations
fournies contre votre spécification JML.
Pour ce faire, dans le dossier contenant la spécification et les tests :
> jmlc RArray.refines-java
> javac TestRArray.java
> jmlrac TestRArray
Questions.
1. Complétez le squelette du fichier RArray.refines-java fourni :
(a) donnez en JML les invariants de la classe RArray ;
(b) pour chacune des méthodes de la classe RArray, donnez une spécification JML de
cette méthode en termes de pré et post-conditions.
2. Complétez le squelette de la classe TestRArray.java fourni avec un ensemble de mé-
thodes de test, de manière à couvrir les différents cas de la spécification JML de la classe
RArray.
3. Exécutez vos tests avec jmlrac sur la classe RArray dont la spécification
RArray.refines-java a été compilée avec jmlc (comme expliqué plus haut). Corrigez
vos spécifications en fonction des résultats de vos tests.
N.B. : vous pouvez compiler vos spécifications à tout moment avec jmlc.
Fichiers à rendre.
Envoyer à [email protected] les fichiers RArray.refines-java et TestRArray.java com-
plétés, ainsi qu’un rapport de test des implantations fournies, expliquant pour chacune les non
conformités trouvées.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !