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

Le , par GLDavid

0PARTAGES

1  0 
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.

@++

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de gifffftane
Membre émérite https://www.developpez.com
Le 04/08/2008 à 18:18
Je trouve que c'est nécessaire, mais il est difficile de régler ce qui doit être testé.

Pour le faire, j'ai commencé par jemmy, puis je me suis aperçu que j'avais meilleur compte à tout faire moi même. Donc je n'utilise plus que le swing standard, je n'ai même pas de bibli perso.

Dans tous les cas, cela nécessite une bonne connaissance de swing.
0  0 
Avatar de djsnipe
Membre confirmé https://www.developpez.com
Le 04/08/2008 à 20:39
Après quelques tentatives de prototypage d'une solution de test unitaire d'IHM Web, j'ai considéré que c'était finalement inutile dans ce contexte. Ou plutôt inadapté (pour éviter d'en faire hurler certains).
Ces tests sont très lourds à coder pour du WEB (vérif de code html, problèmes si du javascript génère du html ... une horreur), est très dur à tester unitairement si tout un enchainement est nécessaire pour arriver à une page donnée, et ne peux pas vérifier le rendu visuel final qui est primordial. Et pour le Swing ou le HTML, l'apparence sur un redimensionnement, c'est dur à automatiser (ok, pas impossible pour le Swing).

Je préfère donc maintenant quand c'est nécessaire (grosses phases de non regression sur de grosses appli) mettre en place des outils qui font de la capture d'interactions clavier/souris avec l'appli pour l'aspect fonctionnel de l'interface. Le rendu est toujours contrôlé par une personne physique, et dans les projets web, souvent en multi navigateurs (j'aime le web ).
0  0 
Avatar de guigui5931
Membre chevronné https://www.developpez.com
Le 05/08/2008 à 0:20
Pour les applications web il y a Selenium qui marche très bien.
0  0 
Avatar de simon.brandhof
Membre régulier https://www.developpez.com
Le 06/08/2008 à 6:57
et pour les tests de non-régression Swing, il y a JDiffChaser
0  0 
Avatar de GLDavid
Membre expert https://www.developpez.com
Le 06/08/2008 à 8:19
Bonjour

Merci de vos réponses. Si je résume vos dires, il apparaît que tester unitairement une IHM est difficile, chose qui était décrite dans d'autres forums tels que celui de Sun.
Toutefois, je jetterais un regard sur les solutions que vous proposez et je pense que rédiger un scénario de test fonctionnel sera la meilleure solution.
J'attends d'autres avis avant de clore ce thread.
Merci encore à vous.

@++
0  0 
Avatar de gifffftane
Membre émérite https://www.developpez.com
Le 06/08/2008 à 9:00
Heu... il faut s'entendre sur le sens du mot difficile.

Difficile techniquement (comment faut-il tester ? ), oui, mais formateur. Tu pourrais aussi bien dire Tester une IHM est formateur. Peut être n'auras-tu pas le même regard.

Difficile conceptuellement (que faut-il tester ? ), oui aussi, mais là on souffre de la culture ambiante (cette épouvantable notion de couverture de test, par ex.) complètement à coté de la plaque pour les IHM. Il vaut mieux, à mon humble avis, partir de la notion Qu'est-ce qui est sensible pour l'utilisateur ou pour le développeur ?

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.
0  0 
Avatar de djsnipe
Membre confirmé https://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.
0  0 
Avatar de gifffftane
Membre émérite https://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.
0  0 
Avatar de super_navide
Nouveau Candidat au Club https://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.
0  0 
Avatar de tosirap
Candidat au Club https://www.developpez.com
Le 12/08/2008 à 8:42
Salut,

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

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

A+
0  0 
Contacter le responsable de la rubrique ALM

Partenaire : Hébergement Web