É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