รTAT DE LโART
Il existe un certain nombre dโoutils servant ร tester les applications web. Dans ce chapitre, nous classons les approches existantes en quatre grandes familles quโon nomme successivement :
outils de tests, approches visuelles, approches dรฉclaratives et outils RWD. Nous allons les exposer en donnant un peu plus de dรฉtails sur quelques outils relatifs ร chaque famille dโapproches. Enfin, nous citons leurs points faibles en montrant leurs limites dans certains cas.
OUTILS DE TEST
La dรฉtection de bugs dโinterface peut dโabord รชtre abordรฉe comme un problรจme de test logiciel classique. Sous cet angle, il se veut une gรฉnรฉralisation des fonctionnalitรฉs offertes par des logiciels dโanalyse de sites web comme Google Analytics 1 ou Piwik 2. Ces outils suivent les requรชtes HTTP et fournissent un tableau de bord pour analyser des donnรฉes de base : pays dโorigine, durรฉe dโune session, etc. Cependant, ces outils ne gรจrent gรฉnรฉralement pas Ajax, ne peuvent pas รชtre utilisรฉs comme outils de test (ils nโรฉvaluent pas les conditions sur le contenude la page par exemple) et ne signalent rien sur le contenu de la page, sur les actions de lโutilisateur ou les requรชtes Ajax.
Les logiciels de test en ligne tels que Capybara, Selenium WebDriver, Watij ou Sahi sont plus proches de nos objectifs. Ces outils fournissent diffรฉrents langages pour dรฉcrire les tests et รฉcrire des assertions sur lโapplication. Les scripts WebDriver sont รฉcrits en Java ; Capybara a sa propre API 3 dans le langage Ruby; Watij utilise WebSpec, 4 qui est une API dรฉfinie par-dessus Java (3.5 donne un exemple de test webspec-watij) ; et Sahi utilise SahiScript, une extension de JavaScript. 5 Tous ces langages sont impรฉratifs (cโest-ร -dire procรฉduraux) et visent ร piloter une application en effectuant des actions.
La partie test se rรฉduit ร lโinsertion dโinstructions similaires ร assert dans le code du script. A titre dโexemple, la figure 3.1 donne un extrait de code Java pour Selenium WebDriver pour vรฉrifier que tous les รฉlรฉments satisfaisant un sรฉlecteur CSS sont ร gauche.
CAPYBARA
Capybara est un framework dโautomatisation Web utilisรฉ pour crรฉer des tests fonctionnels qui simulent lโinteraction des utilisateurs ร une application. Il constitue une bibliothรจque conรงue pour รชtre utilisรฉe sur un pilote Web sous-jacent (underlying web driver) tels que selenium-web driver, rack test driver ou capybara-webkit. Il fournit un DSL (Domain Specific Language) servant ร dรฉcrire les actions exรฉcutรฉes par ces pilotes Web [30] Une fois la page est chargรฉe via le DSL et le pilote Web sous-jacent, Capybara essayera de localiser lโรฉlรฉment pertinent dans le DOM (Document Object Model) et exรฉcutera une action, du genre : clics de boutons, de liens, etc. Son DSL dรฉployรฉ pour exprimer les actions ร exรฉcuter est trรจs intuitif. la figure 3.2 montre quelques unes de ses commandes de base. Dans le but de trouver un รฉlรฉment[30], Capybara, par lโintermรฉdiaire du DSL, cherchera dans le DOM, les attributs suivants :
โ Champ de texte (fill_in) : id, name, รฉlรฉment dโรฉtiquette associรฉ (label).
โ Cliquez sur un lien/bouton (click_link/ click_button) : id, titre, texte dans la balise, valeur.
โ Case ร cocher/bouton radio/liste dรฉroulante (check/ uncheck/ choose/ select) : id, nom, รฉlรฉment dโรฉtiquette associรฉ (label).
โ Tรฉlรฉcharger le fichier (attach_file) : id, nom.
WATIJ
Watij ou Web Application Testing en Java est un projet de test, implรฉmentรฉ en Java, destinรฉ ร automatiser les tests fonctionnels des applications Web au-dessus de IE (Internet Explorer). Il est basรฉ sur la conception de Watir [33] et possรจde une capacitรฉ de recherche dโรฉlรฉments lui permettant de trouver, dโaccรฉder et de contrรดler facilement nโimporte quel รฉlรฉment HTML ร travers le DOM en mobilisant lโinterface COM. Il prend en charge, dโautre part, les expressions XPath pour trouver les รฉlรฉments HTML sur une page et gรจre les pop-up (fenรชtres contextuel du navigateur) en les interceptant et les rendant disponibles pour lโinteraction. Watij peut dรฉtecter la fin du chargement dโune page en cours de chargement.Watij dispose dโun ensemble relativement riche dโAPI pour lโรฉcriture de scripts de simulation. La connexion ร un site Web exige ร chaque fois, des informations tel que le nom de lโutilisateur et le mot de passe (page de connexion (login) de Yahoo figure 3.4).
Les tรขches manuelles demandรฉes, dans ce cas, ร lโutilisateur sont les suivantes :
1. Afficher une fenรชtre de navigateur ;
2. Mettre lโURL correcte pour ouvrir cette page ;
3. Attendre que la page se charge et se stabilise ;
4. Taper le nom dโutilisateur dans le champ ID ;
5. Taper le mot de passe ;
6. Cliquer sur le bouton Connexion.
Le code appropriรฉ pour automatiser les tests fonctionnels de ces รฉtapes, en utilisant Watij, est donnรฉ dans la figure 3.3.
SAHI
Sahi est un outil open source dโautomatisation et de test dโapplications web. En tant quโoutil dโautomatisation, Sahi offre la possibilitรฉ dโenregistrer et de lire des scripts. Il prend en charge Java et JavaScript. Mรชme si SahiScript ressemble ร JavaScript, il nโest pas exรฉcutรฉ comme le JavaScript normal dans le navigateur. Lโidรฉe de base du fonctionnement de Sahi est dรฉcrite ci-dessous : les parties centrales de Sahi montrรฉs dans la figure 3.7 incluent le serveur proxy Sahi et le moteur JavaScript.
Les rรฉponses HTML qui transitent par le proxy sont modifiรฉes de telle sorte que JavaScript soit injectรฉ au dรฉbut et ร la fin de la rรฉponse. Cela permettra au navigateur dโenregistrer et de lire les scripts et de communiquer avec le proxy en cas de besoin. En plus de la gestion des demandes de pages du navigateur, Sahi gรจre รฉgalement les commandes personnalisรฉes liรฉes ร lโenregistrement, ร la lecture, etc ; envoyรฉes par celui-ci.
Les fonctionnalitรฉs propres de Sahi, font de lui un bon support des fichiers de base de donnรฉes, supportant JavaScript, AJAX ainsi que les API simples, Outre ses fonctionnalitรฉs normales, ร lโรฉgard de la prise en charge de ยซ ant ยป(lโoutil logiciel). Du fait que ses API ne dรฉpendent pas beaucoup de la structure HTML, le contrรดleur Sahi (IDE) peut รชtre utilisรฉ dans diffรฉrents navigateurs. Sahi qui nโutilise pas XPath, renferme des API tels que : _ near, _in, etc, lโaidant ร trouver un รฉlรฉment par rapport ร un autre. ยซ SahiScript ยป est fondรฉ sur JavaScript.
Il est analysรฉ par Sahi et exรฉcutรฉ par le moteur JavaScript rhino. La figure 3.6 illustre un exemple de constructions (exemple dโรฉcriture de conditions) dans Sahi. Elles sont identiques ร JavaScript hormis le $ obligatoire utilisรฉ dans les variables.
De plus, tous les outils mentionnรฉs ci-dessus (ร lโexception de Sahi) nรฉcessitent un plugin spรฉcifique au navigateur pour fonctionner, et ne supportent donc quโune poignรฉe de navigateurs, en gรฉnรฉral les ยซ Big Five ยป (Firefox, Safari, IE, Opera et Chrome). Cependant, la part de marchรฉ des navigateurs autres que ceux-ci รฉquivaut ร 20%, et sโรฉlรจve ร 63% pour les appareils autres que les ordinateurs de bureau (tablettes, consoles et mobiles). 6. En dehors de Sahi, ces outils de test nโatteignent pas plus des trois quarts du marchรฉ, et pour certains, seulement 25% pour les appareils autres que les ordinateurs de bureau. Par consรฉquent, lโaffirmation selon laquelle ยซ la plupart des utilisateurs ยป sont pris en charge par eux est ร peu prรจs non fondรฉe.
APPROCHE VISUELLE
Pour dรฉceler les dรฉfauts dans la mise en page, lโoutil principal dรฉployรฉ par ce genre de techniques est gรฉnรฉralement la vision par ordinateur. Ces derniรจres consistent entre autres, en la dรฉlimitation des bordures des รฉlรฉments par la dรฉtection des contours et en la dรฉcouverte des changements par le calcul de la diffรฉrence entre deux captures dโรฉcran dont les couleurs du texte des arriรจre-plans seront comparรฉes pour repรฉrer le texte illisible. Au lieu dโagir sur des informations spรฉcifiques ร la mise en page, telles que la taille et la position des รฉlรฉments, ces techniques sont basรฉes sur la comparaison des captures dโรฉcran, pixel par pixel. Dans ce cas, les erreurs sous la forme dโune capture dโรฉcran sont signalรฉes et clairement marquรฉes.
WEBSEE
Certains travaux ont รฉgalement รฉtรฉ rรฉalisรฉs sur lโutilisation des techniques dโanalyse dโimage pour identifier les problรจmes de mise en page [69]. WebSee [58] est en particulier, un outil implรฉmentรฉ en Java qui utilise plusieurs bibliothรจques tierces pour implรฉmenter certains des algorithmes spรฉcialisรฉs. Il applique des techniques du domaine de la vision par ordinateur pour analyser la reprรฉsentation visuelle des pages Web pour dรฉtecter automatiquement et localiser les รฉchecs de prรฉsentation. WebSee identifie les รฉchecs de prรฉsentation, puis dรฉtermine les รฉlรฉments dans la source HTML de la page qui pourraient รชtre responsables des รฉchecs observรฉs en comparant la reprรฉsentation visuelle de la page Web rendue sous test et son apparence dโorigine (oracle).
A cette fin, WebSee prend en entrรฉe le code HTML/CSS de la page ร analyser et un oracle (une image) du rendu attendu de la page. Un ensemble de diffรฉrences entre la page rendue et lโimage de rรฉfรฉrence est calculรฉ, et ces diffรฉrences sont ensuite regroupรฉes en groupes susceptibles de reprรฉsenter diffรฉrents dรฉfauts sous-jacents dans la page. Une deuxiรจme phase de traitement tente dโidentifier les รฉlรฉments HTML correspondant aux pixels de diffรฉrence, qui sont ensuite ordonnรฉs par une mรฉtrique de prioritรฉ et envoyรฉs ร lโutilisateur. La figure 3.8 montre les diffรฉrentes phases de lโapproche : La premiรจre entrรฉe est la page web (P) qui devrait รชtre analysรฉ pour dรฉterminer les dรฉfaillances de prรฉsentation. La forme de P est une URL qui pointe vers soit un emplacement sur le rรฉseau ou dโun systรจme de fichiers oรน tous les fichiers HTML, CSS, JavaScript, et les fichiers mรฉdias de P sont accessibles.
La deuxiรจme entrรฉe est lโoracle (O) qui spรฉcifie les propriรฉtรฉs dโexactitude visuels de P. La forme de O est une image qui peut รชtre soit une maquette ou une capture dโรฉcran dโune version correcte de P.
PHANTOMCSS
PhantomCSS [20] est un framework de test dโinterface graphique open source qui possรจde la capacitรฉ de situer les changements dโune itรฉration ร une autre par des algorithmes diffรฉrant sur deux images. Dโautre part, il permet dโexclure certaines parties de lโinterface graphique du test. Les pages Web susceptibles dโafficher des donnรฉes non contrรดlรฉes par le dรฉveloppeur et des รฉlรฉments tels que des annonces Web, des donnรฉes utilisateur, des banniรจres animรฉes, des images et du texte, trouvent dans ces caractรฉristiques un instrument bรฉnรฉfique. Le dรฉveloppeur dans ce cas est obligรฉ de spรฉcifier manuellement les parties de lโinterface graphique non concernรฉes par les tests en nommant lโรฉlรฉment en question, ou le spรฉcifiant ses coordonnรฉes x et y.
SIKULI
Un autre framework dโautomatisation est Sikuli [39], qui identifie et manipule les contrรดles de lโinterface graphique dans une page web en utilisant la recherche par image (sub-image searching). Les captures dโรฉcran constituent la base de cette approche visuelle pour la recherche et lโautomatisation des interfaces utilisateurs. Elle permet aux utilisateurs :
โ de prendre une capture dโรฉcran dโun รฉlรฉment de lโinterface graphique (comme un bouton de la barre dโoutils, une icรดne ou une boรฎte de dialogue) ;
โ dโinterroger un systรจme dโaide en faisant appel ร la capture dโรฉcran au lieu du nom de lโรฉlรฉment;
โ de fournir รฉgalement une API de script visuel pour automatiser les interactions de lโinterface graphique, par lโintermรฉdiaire des modรจles de capture dโรฉcran pour diriger les รฉvรฉnements de la souris et du clavier.
Dans lโexemple montrรฉ dans la figure 3.11, le bouton de fermeture doit effacer le contenu de la zone de texte ainsi que lui-mรชme. Supposons que lโinterface graphique soit dรฉjร dans un รฉtat qui contient un ยซ 5 ยป, au dรฉbut nous trouvons la zone de texte bleue sur lโรฉcran et stockons la rรฉgion correspondante qui a la plus grande similaritรฉ dans la zone bleue. Ensuite, aprรจs avoir cliquรฉ sur le bouton de fermeture, deux assert Not Exist sont utilisรฉs pour vรฉrifier la disparition dans la zone bleue [39].
APPLITOOLS
La segmentation pure de lโimage des pages Web et la comparaison visuelle pixel par pixel sont ร lโorigine de lโoutil commercialisรฉ AppliTools Eyes [2], qui offre une interaction des scripts de test crรฉes par lโutilisateur et son application. Dans cet outil, le serveur Web est chargรฉ de tรฉlรฉcharger les captures dโรฉcran en appliquant un algorithme de diffรฉrence dโimage entre lui et une capture dโรฉcran prรฉcรฉdente. La diffรฉrence entre les deux images est traduite par AppliTools par une dรฉtection des rรฉgressions dans une mise en page GUI. Ces changements dans une interface Web sont exploitรฉs par le dรฉveloppeur pour actualiser lโimage de base dans le cas oรน le changement รฉtait intentionnel.
Cependant, cette approche est orientรฉe vers la dรฉtection de bugs de type statique de chevauchement ou de dรฉbordement des รฉlรฉments dans un document, et actuellement ne supporte pas la vรฉrification de modรจles temporels ร travers plusieurs instantanรฉs de la mรชme page. De plus, lโapproche gรฉnรจre beaucoup de faux positifs si la page rendue contient du texte lรฉgรจrement diffรฉrent de lโimage de rรฉfรฉrence. Cโest le cas lorsque, par exemple, la fenรชtre du navigateur a des dimensions diffรฉrentes et que le texte sโรฉcoule diffรฉremment (mais pas nรฉcessairement incorrectement) par rapport ร lโimage. Pour rรฉsoudre ce problรจme, lโutilisateur doit dรฉfinir manuellement, pour chaque oracle, ce que lโon appelle des rรฉgions dynamiques qui devraient รชtre ignorรฉes par le systรจme lors de lโanalyse de la page.
APPROCHE DรCLARATIVE
Les techniques dans cette derniรจre famille fonctionnent directement sur des informations sur la mise en page. Elles peuvent obtenir des informations sur les รฉlรฉments (position, largeur et hauteur) impliquรฉs dans lโinterface graphique, que ce soit par analyse dโimage ou par ยซ siphonnage ยป (scraping) de lโinterface graphique. Cโest dโailleurs ce que ces techniques ont en commun. La maniรจre de relier les diffรฉrents รฉlรฉments de mise en page les uns aux autres ainsi que les valeurs de leurs paramรจtres de mise en page sont indiquรฉs par les entrรฉes de ces approches, qui ne sont pas tant un script que des documents dรฉclaratifs.
Les assertions opรฉrรฉes sur lโinterface graphique peuvent par exemple รชtre de la forme ยซ lโรฉlรฉment 1 est-il situรฉ ร gauche de lโรฉlรฉment 2 ? ยป ou ยซ lโรฉlรฉment 1 a-t-il une largeur infรฉrieure ร lโรฉlรฉment 2 ? ยป. Certaines de ces techniques ont des langages spรฉcialisรฉs dรฉcrivant des assertions comme celles-ci.
Les spรฉcifications dรฉclaratives des interfaces utilisateurs ont fait lโobjet de beaucoup de recherches dans le passรฉ. Les premiรจres tentatives incluent le systรจme MASTERMIND, qui utilise un langage de modรฉlisation basรฉ sur CORBA [67] ; dโautres approches incluent le modรจle de mise en page dโAuckland [57], Adobe Adam et Eve [66] et les modรจles de propriรฉtรฉs [57].
MASTERMIND
Dans MASTERMIND, le dรฉveloppeur de lโinterface utilisateur doit crรฉer des modรจles de tรขche (task model), dโapplication (domaine) et de prรฉsentation. Le modรจle dโapplication est spรฉcifiรฉ ร lโaide du langage de dรฉfinition dโinterface CORBA (IDL). Le modรจle de tรขche prรฉsente les tรขches de lโutilisateur final dans une structure hiรฉrarchique et comporte les informations de commande nรฉcessaires pour contrรดler lโinterface utilisateur lors de lโexรฉcution. Le modรจle de prรฉsentation dรฉcrit la disposition de lโinterface utilisateur, y compris les affichages statiques et dynamiques. Il permet la spรฉcification des mises ร jour automatiques de prรฉsentation lorsque les donnรฉes dโapplication ou le contexte de prรฉsentation changent. En outre, il intรจgre des principes de conception graphique afin de donner un soutien complet au concepteur de dialogue.
AUCKLAND LAYOUT MODEL (ALM)
Le modรจle de mise en page dโAuckland (ALM) est une technique implรฉmentรฉ pour ยซ .NET ยป, Java et Haiku, permettant de spรฉcifier une mise en page 2D. Elle est utilisรฉe pour organiser les contrรดles dans une interface graphique. Le modรจle permet la spรฉcification de contraintes basรฉes sur lโalgรจbre linรฉaire. Il calcule une disposition optimale en utilisant la programmation linรฉaire.
Les รฉgalitรฉs et les inรฉgalitรฉs linรฉaires peuvent รชtre spรฉcifiรฉes sur les tabulations horizontales et verticales, qui sont des lignes virtuelles formant une grille dans laquelle tous les รฉlรฉments de lโinterface graphique sont alignรฉs .
Lโexemple dans la figure 3.12 montre, la maniรจre de disposer trois boutons en mobilisant trois zones. Les boutons ont dรฉjร รฉtรฉ ajoutรฉs ร la fenรชtre, mais ils nโont pas รฉtรฉ arrangรฉs. Leur emplacement et leur taille sont dรฉterminรฉs par la spรฉcification ALM (figure 3.13). Quelque soit le redimensionnement de la fenรชtre, les deux colonnes auront toujours la mรชme largeur, et les deux lignes la mรชme hauteur en raison de la linรฉaritรฉ des deux contraintes.
ADOBE ADAM ET EVE
ASL (Adobe Source Libraries) est un projet au sein du Adobe Software Technology Lab (STLab). Cโest un ensemble de bibliothรจques de composants logiciels, rendu disponible sous licence Open Source par Adobe Systems, permettant de dรฉfinir des algorithmes sous forme dรฉclarative. Les deux premiรจres bibliothรจques significatives dans ASL sont : la bibliothรจque de modรจle de propriรฉtรฉs (Adam) et la bibliothรจque de modรจle de mise en page (Eve) dont les composants permettent de modรฉliser lโapparence et le comportement dโune interface dans une application logicielle. Adam consiste en un solveur et un langage dรฉclaratif pour dรฉcrire les contraintes et les relations sur une collection de valeurs qui sont gรฉnรฉralement les paramรจtres dโune commande dโapplication (une fonction). Adam fournit la logique qui contrรดle le comportement dโune interface Humaine (IH). Il est similaire dans son concept ร une feuille de calcul ou ร un gestionnaire de formulaires.
Les valeurs sont dรฉfinies et les valeurs dรฉpendantes sont recalculรฉes. Adam procure des fonctionnalitรฉs pour rรฉsoudre les valeurs interdรฉpendantes, mais il ne constitue pas un systรจme de contrainte gรฉnรฉral. Eve consiste en un solveur et un langage dรฉclaratif pour la construction dโune IH. Le solveur de mise en page prend en compte une description riche des รฉlรฉments de 14 interfaces pour obtenir une disposition de haute qualitรฉ rivalisant avec ce qui peut รชtre rรฉalisรฉ avec le placement manuel.
Une seule description suffit pour plusieurs plateformes et langages OS. Eve a รฉtรฉ dรฉveloppรฉe pour fonctionner avec Adam ; il peut cependant aussi, รชtre utilisรฉe seule. Adam et Eve peuvent รชtre intรฉgrรฉes dans un certain nombre dโenvironnements. Ils ont la facultรฉ de fonctionner ensemble, ou indรฉpendamment, mais, ils doivent รชtre combinรฉs avec dโautres installations pour construire une application. Parmi les exemples typiques dโinterfaces utilisateur effectuant la synthรจse de paramรจtres de commande : la boรฎte de dialogue ยซ Enregistrer sous ยป dans le cas dโenregistrement dโun fichier image (figure 3.14). Elle se compose dโun champ de texte pour entrer le nom du fichier, un menu de types de fichiers et des curseurs offrant deux possibilitรฉs pour configurer la compression lors de lโenregistrement dans un format qui le prend en charge.
Les valeurs des curseurs sont liรฉes par une relation exprimant le compromis entre le taux de compression et la qualitรฉ de lโimage.
|
Table des matiรจres
Introduction
1 Notions gรฉnรฉrales sur le webย
1.1 Le fonctionnement du web
1.2 Le langage HTML
1.3 Les Cascading StyleSheets (CSS)
1.4 JavaScript
1.5 Le fonctionnement interne des navigateurs web
2 Les bugs dโinterface dans les applications webย
2.1 Types dโapplications web
2.2 Types de bugs dโinterface
3 รtat de lโartย
3.1 Outils de test
3.2 Approche visuelle
3.3 Approche dรฉclarative
3.4 Outils RWD
3.5 Discussion sur les approches exisantes
4 Dรฉtection de bugs dโinterfaceย
4.1 Un interprรฉteur pour les propriรฉtรฉs Cornipickle
4.2 Le langage Cornipickle .
4.3 Exprimer des propriรฉtรฉs avec Cornipickle
5 Dรฉtection avancรฉe : bugs comportementaux et RWDย
5.1 Bugs comportementaux dans le Beep Store
5.2 Solutions actuelles
5.3 Solution proposรฉe
5.4 Expรฉriences et rรฉsultats
6 Vers un meilleur feedback pour lโutilisateurย
6.1 Gรฉnรฉration de contre-exemple : les tรฉmoins
6.2 Localisation des erreurs dans les applications web
6.3 Calcul de la rรฉparation
6.4 Exemples
7 Conclusion gรฉnรฉrale
Bibliographie