Exposé : Model-Based Testing in Practice (PDF)
Cette section contient les ressources pour refaire les manipulations réalisées lors de la séance.
Pour pouvoir utiliser les fichiers ci-dessous, vous devez vous procurer :
Dans un premier temps, nous allons décrire une machine à états finis simple, qui définit une petite vingtaine d'états et qui gère l'authentification du porteur de carte. Nous faisons pour l'instant abstraction des sommes d'argent (pas d'opération de retrait).
Fichier : FSM1.java
Ce modèle implante la machine à états-finis présentée ci-dessous (cliquez pour ouvrir dans une fenêtre séparée)
Pour compiler ce fichier, placez le fichier FSM1 et toutes les archives JAR dans le même dossier et compilez avec la ligne de commande :
javac -cp .:modeljunit-2.5-jar-with-dependancies.jar:selenium-server-standalone-2.53.0.jar:junit.jar FSM1.java
N.B. Vous pouvez vous servir d'un IDE (IntelliJ, Eclipse, NetBeans) paramétré de façon adéquat pour effectuer ces manipulations.
N.B. Pour les éventuels utilisateurs de Windows, remplacez dans les lignes de commande les séparateurs :
par ;
Pour exécuter le fichier :
java -cp .:modeljunit-2.5-jar-with-dependancies.jar:selenium-server-standalone-2.53.0.jar:junit.jar FSM1
Ces commandes seront à répéter avec tous les fichiers
Dans cette étape, on ajoute à notre FSM la connexion avec le système sous test, par l'intermédiaire du pilote Selenium. Ainsi, nous allons pouvoir exécuter les tests au fur et à mesure de leur construction.
Deux éléments à prendre en compte :
Fichiers : FSM2.java et DAB_Adapter.java
Dans cette étape, on ajoute la vérification du résultat attendu pour établir le verdict du test.
On utilise pour cela le mécanisme de vérification d'assertions de JUnit qui permettra d'identifier où se situe l'erreur en cas de non-conformité.
On s'appuie ici sur la lecture des messages sur l'écran du DAB. Là encore, il faut lire le bon message au bon moment (certains messages n'apparaissent que quelques secondes à l'écran).
Fichier : FSM3.java
On ajoute à cette étape la gestion de la transaction avec une machine à états finis étendue, dans laquelle on trouvera
deux variables de type entier, modélisant le solde de la carte et le portefeuille de l'utilisateur. Le choix du
montant à retirer se fait aléatoirement, et est abstrait par deux opérations demandeRetraitOK
et demandeRetraitKO
.
Fichier : EFSM1.java
Ce modèle implante la machine à états-finis étendue présentée ci-dessous (cliquez pour ouvrir dans une fenêtre séparée)
Dans cette dernière étape, on s'intéresse à augmenter la précision du verdict en s'appuyant sur des observations plus fines. Notamment on ajoute la vérification du portefeuille et du solde de la carte.
Fichier : EFSM2.java
Attention à bien réaliser ces observations là où pourraient se trouver d'éventuelles erreurs.
Voici 5 mutants qui comportent chacun une erreur par rapport au DAB de référence.
Modifiez :
pour identifier les erreurs qui se sont glissées dans ces mutants.
Une variant introduit ici un modèle non-déterministe : après avoir demandé un retrait, soit celui-ci est accordé, soit il est refusé (en fonction du montant choisi aléatoirement). C'est la réponse du SUT qui fait évoluer le modèle.
Cette variante implante la machine à états-finis étendue non déterministe présentée ci-dessous (cliquez pour ouvrir dans une fenêtre séparée)
Fichier : EFSM3.java
Frédéric Dadeau - frederic.dadeau@univ-fcomte.fr