Votre opinion sur le cours de ce matin : | Votre opinion sur le TD de la semaine dernière : |
Soit une interface I
et une spécification informelle des
méthodes qu'elle déclare. Le but de ce TD est d'écrire des tests qui
éprouvent toute classe C
qui implémente I
.
Le TD sera réalisé en Java (créer pour cela le projet td5
)
bien que la méthodologie qu'il propose s'applique à tout autre langage de
programmation.
testI
telle que pour chaque classe
C
dont la déclaration est de la forme
class C implements I { ... }un appel à
testI(new C(...), ...)effectue une batterie de tests sur l'objet de la classe
C
passé en argument et affiche un diagnostic à l'écran.
(Les points de suspension représentent ici d'éventuels paramètres
nécessaires au constructeur et aux tests.)
Confinement
La batterie de tests lancée par testI(new C(...), ...)
ne
doit donc jamais « planter » au sens où,
pour toute exception levée durant l'exécution d'une méthode
de C
I
, elle doit être rattrapée
(et considérée comme correcte) ;
I
, elle doit être signalée
comme un comportement inattendu.try { ... code susceptible de lever une exception de classe E ... } catch (E e) { ... traitement du cas exceptionnel ... }
On va tester ici des programmes de tri.
On fournit un fichier intsort.zip
qui doit être décompressé
dans le répertoire src/
(par exemple
avec la commande unzip
intfifo.zip
). Il contient notamment une interface
Sort
dont l'unique méthode
public void sort(int[] a);effectue un tri en place du tableau d'entiers
a
,
ainsi que plusieurs classes qui implémentent Sort
.
Écrire une classe TestSort
dans le paquet default
qui teste si une classe qui implémente Sort
répond à la spécification
suivante :
sort
le tableau a
est trié par ordre croissant ;sort
laisse invariant le nombre d'occurrences
d'un entier dans le tableau a
.
L'appliquer sur les différents tris fournis
(Sort1.java
, Sort2.java
, etc.)
pour déterminer l'unique tri qui est correct.
Pour un code incorrect, on essayera de donner à chaque fois
un contre-exemple indiquant la provenance du dysfonctionnement observé.
Bien entendu, il faut jouer le jeu et ne pas regarder le code des différentes classes fournies.
Déposer le fichier TestSort.java
:
src/
(par exemple
avec la commande unzip
intfifo.zip
). Il contient notamment
une interface FIFO
dont la spécification est la suivante :
int size()
renvoie le nombre d'éléments contenus dans la file. void put(int n)
ajoute un élément à la fin de la
file s'il reste de la place ;FullQueueException
.int get()
supprime et renvoie le premier élément de la file lorsqu'elle n'est pas vide;
EmptyQueueException
.FIFOWrapper
dans le
paquet default
contenant (entre autres) :
FIFOWrapper(FIFO f, int max)
qui prend en arguments une file et sa capacité de stockage i.e. le
nombre maximum d'éléments qu'elle peut contenir.
size
représentant le nombre exact
d'éléments (supposés) contenus dans la file f
.
int size()
qui renvoie le résultat de
f.size()
, après l'avoir comparé au
champ size
.
void put(int n)
qui
appelle f.put(n)
, vérifie le comportement en termes
d'exception et vérifie que f.size()
est bien mis à jour.
int get(int e)
qui appelle
f.get()
, vérifie que le résultat est égal
à e
, le cas échéant, vérifie le comportement en termes
d'exception et vérifie que f.size()
est bien mis à jour.
Déposer le fichier FIFOWrapper.java :
À l'aide de la classe FIFOWrapper
, écrire une
classe TestFIFO
à même de tester une implémentation
de FIFO
.
L'appliquer sur les différents programmes fournis
(Queue1.java
, Queue2.java
, etc.)
pour déterminer l'unique code qui est correct.
Pour un code incorrect, on essayera de donner à chaque fois
un contre-exemple indiquant la provenance du dysfonctionnement observé.
Bien entendu, il faut là encore jouer le jeu et ne pas regarder le code des différentes classes fournies.
Déposer le fichier TestFIFO.java :
Une solution vous est proposée.