Ecole de Jeunes Chercheurs en Programmation - jeudi 30 juin 2016

Exposé : Model-Based Testing in Practice (PDF)

Matériel supplémentaire

Manipulation réalisée en section 4 - Model-Based Testing with ModelJUnit

Cette section contient les ressources pour refaire les manipulations réalisées lors de la séance.

Pré-requis

Pour pouvoir utiliser les fichiers ci-dessous, vous devez vous procurer :

Etape 1 - Conception d'une FSM simple

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

Etape 2 - Connexion au système sous test

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

Etape 3 - Ajout des oracles

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

Etape 4 - Machine à états-finis étendue

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)

Etape 5 - Amélioration du verdict

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.

Pour aller plus loin...

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.

Alternative : test en ligne adaptatif

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