Débat Java : Mise en oeuvre de tests unitaires sur des interfaces graphiques

Le , par GLDavid, Membre expert
Bonjour

La question est simple si je puis dire. J'ai développé une application et je valide le code par des unit tests (JUnit 3.8). La seule chose qui me pose problème est l'interface graphique. Pouvez-vous me conseiller sur comment s'y prendre pour appliquer des unit tests sur une interface graphique ?
Est-ce finalement nécessaire ?
Merci d'avance de vos réponses.

@++


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de djsnipe djsnipe - Membre confirmé http://www.developpez.com
le 06/08/2008 à 9:09
Citation Envoyé par gifffftane  Voir le message
Et puis aussi les tests IHM ne sont nullement limités aux tests unitaires. Il peut très bien y avoir des tests d'intégration impliquant l'IHM, heureusement.

En effet, même si pour ma part je limiterai les tests IHM aux tests d'intégration (automatisés ou non selon la taille du projet) et les aspects dits sensibles aux développeurs et utilisateurs se retrouvent dans des tests unitaires des services appelés par la couche graphique. L'intégration des services avec les IHM est fait par test unitaire manuel lors des développements en plus des tests visuels sur l'aspect.
Avatar de gifffftane gifffftane - Membre émérite http://www.developpez.com
le 06/08/2008 à 9:29
Oui, je ne sais pas si c'est ce sur quoi djsnipe voulait insister, mais en tous les cas j'y insiste : dans le domaine des tests GUI (comme dans tous les autres d'ailleurs) il doit toujours y avoir complémentarité entre les tests automatiques et les tests manuels, jamais opposition ; les tests automatiques ne doivent jamais être un prétexte pour dire C'est passé, donc c'est bon.. (et encore moins les tests manuels, d'ailleurs).

Ce que demande le client est que l'application marche, non pas que les tests marchent.

Aussi il faut s'entendre sur le sens des termes : par test unitaire, j'entends plus volontiers test d'une classe java, et non tests unitaires de service : ça c'est plutôt de l'intégration, pour le codeur, puisque un service implique en général plusieurs classes, et même plusieurs couches (base de données, etc).

Mais ce qui se conçoit clairement s'exprime sans difficulté du moment auquel on se comprend bien dans ce que l'on veut dire et qui est bien d'accord.

Et c'est vrai que, la plupart du temps, les tests IHM sont en fait du niveau intégration, puisqu'ils impliquent la monopolisation de la ressource écran-clavier-souris, forcément. Ils sont unitaires (à mon sens) lorsqu'ils se limitent au niveau M du MVC.
Avatar de super_navide super_navide - Provisoirement toléré http://www.developpez.com
le 12/08/2008 à 8:27
Pour tester une éfficacement une IHM il faut qu'elle réponde le mieux possible au model MVC (Model Vue Controlleur)
Tu test via des JUnits ton model puis quelque tests manuel sur l'IHM.
Le plus gros des tests sont à faire sur le Model car si le Model ne fonctionne pas correctement alors forcement ton IHM ne fonctionne pas aussi

Le model contient toutes le comportement metier de ton ihm.
Avatar de tosirap tosirap - Candidat au Club http://www.developpez.com
le 12/08/2008 à 8:42
Salut,

Je te conseille Squish For Java (http://www.froglogic.com/pg?id=Produ...ns&subsub=java).

J'ai utilisé cet outil pour effectuer des tests fonctionnels pour une lourde appli SWT, c'était très efficace.

A+
Avatar de longbeach longbeach - Rédacteur http://www.developpez.com
le 12/08/2008 à 15:37
+1 pour Selenium.
Avatar de supermanu supermanu - Membre confirmé http://www.developpez.com
le 12/08/2008 à 16:27
+2 pour Selenium

Selenium va te permettre d' "enregistrer" les manipulations que tu fais avec ton navigateur : clique sur un lien, remplissage d'un formulaire, submit d'un formulaire.... Puis de rejouer ce que tu as enregistré.

Avantages :
- le plus gros avantage que je vois c'est la possibilité d'être feignant
Imagine que ton application comporte par exemple une fonctionnalité "créer un compte" qui se fait sur 3-4 formulaires successifs et où il faut remplir plein de champs... Avec Selenium, tu le fais une fois en enregistrant. Puis tu relance ce scénario à chaque fois que tu veux tester la fonctionnalité...

Inconvénients :
- Il faut que le code HTML soit "bien fait". C'est à dire que les champs comportent des id par exemple. Selenium offre d'autres moyens de trouver des champs (position, style css...) mais il risque d'en oublier quelque uns à l'enregistrement...

- Les tests que tu vas pouvoir faire pour vérifier que ta vue fonctionne correctement vont être du style : "est-ce que la page comporte le texte xxxxxx ?" "est-ce que l'image yyyyyy est bien affichée ?"
Donc comme on le voit, tout ce joue sur la vue. Et dans certains projets, les vues sont très souvent modifiées....

donc à toi de voir suivant le type de projet, la complexité des vues....
Avatar de eracius eracius - Membre régulier http://www.developpez.com
le 21/08/2008 à 9:54
Selenium parait très intéressant et peut permettre de mettre en place une première batterie de tests simples.

Mais je pense que le mieux reste le test par l'utilisateur ou au moins par une personne étrangère au développement.

Pour ma part, je fais tester mon interface web par un collègue, non informaticien, qui parvient toujours à mettre le doigt sur les petits problèmes et autres incohérences qui m'aurait échappées. Après, cette démarche est très couteuse en temps mais m'a permis jusqu'à présent de limiter très fortement les retours de bug une fois l'application déployé chez le client.

Néanmoins mon interface n'est utilisé que par un nombre réduit de personnes ce qui me permet donc d'être très réactif en cas de problème. Pour une application grand publique, je suppose que des tests beaucoup plus exhaustifs seront nécessaires pour être sur de ne pas crouler sous les rapports de bugs et ça peut rapidement devenir un vrai casse tête sans une bonne organisation (scénarios prédéfinis pour que le testeur gagne du temps et compagnie).
Avatar de schneidb schneidb - Membre actif http://www.developpez.com
le 25/08/2008 à 10:56
+1 pour selenium qui marche je crois sous firefox.
Sur internet explorer il y a iMacros.
Avatar de rroommuu rroommuu - Membre averti http://www.developpez.com
le 25/08/2008 à 17:26
Selenium fonctionne aussi bien avec IE qu'avec FF. Par contre, le plug-in permettant d'enregistrer les tests n'est disponible que pour firefox.
Avatar de nicolav nicolav - Nouveau membre du Club http://www.developpez.com
le 29/08/2008 à 16:19
Pour des tests sur interface graphiques, tu peux utiliser des frameworks de tests tels que marathon ou encore Fest.
J'ai utilisé ce dernier pour des tests sur un logiciel. Je vérifiais si des JOptionPane s'affichaient bien, si le texte dedans était le bon...
ça marchait plutôt bien.
Avatar de Laurent Tardif Laurent Tardif - Membre à l'essai http://www.developpez.com
le 05/09/2008 à 17:02
Alors pour apporter une reponse qui t'aidera j'espere
1) oui et plusieurs fois oui, les tests sur une IHM sont utils, par contre, ils sont difficile a mettre en place et a maintenir si on ne fait pas attention.
2) des regles de codage peuvent simplifier leur ecriture : id uniq sur les elements HTML resultant, .... convention de nomage sur les form, ...
3) les tests doivent essentiellement tester la navigation, le comportement, pas le look & feel (tu peux verifier la presence d'elements, que ton html est bien formé, test java script ont une bonne syntaxe) mais pas plus.
Selenium (IDE/RC/GRID) te premettra d'automatiser tout ca relativement simplement.
4) bien evidement, faire des scenarios de tests reproductibles et automatisable
Offres d'emploi IT
Ingénieur qualité logiciel au CEPS H/F
Safran - Ile de France - Osny (95520)
Expert sécurité en audit d'applications (H/F)
Société Générale - Ile de France - Val-de-Marne
Software engineer H/F
Safran - Ile de France - Magny-les-Hameaux / Saclay

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique ALM