Retour aux articles

L'agence

WanadevStudio

Tests automatiques fonctionnels d’applications 2D/3D

Comme nous le disions dans cet article, l’automatisation des tests dans le développement logiciel est indispensable : dès lors qu’une application commence à avoir un minimum d’importance, les tests automatiques permettront de gagner énormément de temps en évitant de reproduire ad vitam æternam les mêmes tests manuels, et éviteront beaucoup de régressions. Dans cet article, nous allons présenter différents types de tests automatiques dans le cadre plus spécifique d’applications 2D/3D, puisque c’est ce que nous faisons ! Cela va du test basique qui clique sur 3 boutons aux tests de plusieurs minutes reproduisant les actions comme un véritable utilisateur. Accrochez-vous, c’est parti !

Cibler les tests

La création de nouveaux jeux de tests peut prendre du temps de réflexion et de réalisation, et ces nouveaux tests vont également allonger le temps d’exécution de l’ensemble du processus de tests (c’est bien le seul désavantage 😅). C’est pourquoi il vaut mieux déjà bien cibler ce sur quoi vont porter les tests, en regardant les priorités et le temps disponible, et s’assurer de tester d’abord ce qui est le plus pertinent, le plus important dans le projet. L’idéal serait donc d’analyser quelles sont les fonctionnalités les plus utilisées (ou les plus critiques) dans le logiciel. Cela peut se faire de différentes manières, mais dans tous les cas, il faudra pour chacune d’entre elles regarder ce qui est le plus pertinent entre des tests unitaires et des tests fonctionnels… ou les deux.

image

image2

Les deux, bien joué !

On peut aussi faire une analyse de la couverture de code, une métrique qui vient en complément des différents tests. Le but n’est pas nécessairement d’avoir 100% de couverture de code par les tests, mais cela permet d’avoir un aperçu de ce qui est bien testé et de ce qui l’est moins, et cela pourra aider à déterminer où ajouter de nouveaux tests. Attention cependant à l’interprétation, une couverture importante ne signifie pas pour autant que les fonctionnalités les plus utilisées sont testées, et à l’inverse, on peut avoir un taux moins important quand bien même ce qui est majoritairement utilisé est testé.

couverture

Spécificités

De quoi a-t-on besoin pour faire des tests automatiques d’un logiciel 2D/3D ? On peut noter plusieurs particularités et difficultés résidant dans la façon de tester ce type de logiciels. En effet, on ne va pas pouvoir se limiter à tester des exécutions de fonctions, d’algorithmes et vérifier les résultats (comme pour des tests unitaires), il va nous falloir une simulation de l’interface afin de pouvoir tester toutes les actions possibles. Une des grandes différences avec d’autres types d’applications, c’est qu’ici on est beaucoup plus dynamique : il ne s’agit pas uniquement de widgets qui sont activés, provoquent quelque chose et affichent un retour, par étapes très distinctes ; on a une scène où toute interaction, y compris juste bouger la souris, peut avoir une importance, un effet. Il faut donc un système qui permette de réaliser tout ce dont on a besoin. Voyons quelques exemples :

  • Faire des tests de performances : analyse des FPS à l’utilisation, des performances globales et leur évolution, analyses plus spécifiques : temps de chargement, de traitement…
  • Avoir une utilisation réaliste de la souris : utiliser tous les boutons et types de clics, pouvoir spécifier des positions dans un canvas ou une scène 3D (pas uniquement cliquer sur des widgets, en somme), avoir un vrai déplacement de la souris, sans “téléportation”...
  • Contrôler une page Web, en incluant le fait de pouvoir utiliser WebGL, charger des fichiers, effectuer des captures d’écran et pouvoir récupérer les logs pendant l’exécution
  • ...

À partir de ces différentes actions, on va pouvoir créer nos propres fonctions pour tester précisément ce qu’on veut !

Mise en place et utilisation

Dans un premier temps, il faut d’abord… écrire les tests (eh oui 😜) qui vont utiliser tout ce qu’on a énoncé précédemment, en s’aidant aussi de frameworks existants (comme Puppeteer, Cypress… qui proposent pas mal de fonctionnalités bien utiles, comme le contrôle d’une page Web). À ce stade les possibilités sont déjà intéressantes car on peut en théorie couvrir l’ensemble du logiciel avec des tests d’intégration et end-to-end. Pour compléter, on peut également concevoir un enregistreur d’actions, afin de reproduire au pixel près une séquence d’actions comme un humain (un peu à la manière de l’onglet “recorder” dans les devtools de Chrome, à la différence que notre système est plus complet et qu’on l’a développé avant Google 😉). Cette solution permet de couvrir plus facilement beaucoup de fonctionnalités et il est souvent plus rapide d’enregistrer une séquence que d’écrire l’équivalent à la main, mais en revanche on ne dispose pas du détail du test directement visible dans le code et la séquence est souvent moins résistante aux changements.

Dans le cas d’applications 3D, c’est intéressant d’étudier précisément le rendu obtenu dans la scène. Pour cela il est possible de réaliser des comparaisons de screenshots sur différents développements. Ainsi, on aura un comparatif d’images qui souligne les différences visuelles entre deux prises de vues faites avec les mêmes caractéristiques. Cela est utile pour détecter une régression ou pour mettre en valeur une modification attendue.

Pour visualiser les résultats, on peut générer un rapport qui fait la synthèse de toutes les informations récoltées au cours du processus de tests automatiques : logs, savoir durant quel test une erreur s’est produite, rapport de stats, comparaisons visuelles…

diffs

Exemple de résultat de différences visuelles

Concernant l’exécution du processus de tests, il n’y a pas nécessairement besoin d’une grosse infrastructure : c’est à adapter selon la taille du projet et la vitesse de son évolution, mais quelques PCs dédiés à ça, ça peut déjà être suffisant. Un PC exécutera les tests les uns après les autres à chaque fois que ce sera nécessaire, et on pourra récupérer tous les fichiers produits durant l’exécution pour les analyser.

Pour finir

La conception d’un outil automatisé permettant de tester un ensemble de fonctionnalités avec une simulation d’utilisation réaliste s’avère pratique et importante dans le cadre d’un gros projet. Dans le cas de logiciels 2D/3D, lorsque le nombre de fonctionnalités augmente, que l’édition devient complexe et que le nombre d’actions et d’interactions possibles dans les scènes 2D/3D devient très important, c’est même indispensable. Il est vrai que la mise en place d’un tel système ne se fait pas en un claquement de doigt, mais les bénéfices apportés rentabilisent largement à moyen et long termes l’investissement réalisé. En effet, c’est une grande aide à la validation, puisque ça permet de couvrir un grand nombre de fonctionnalités et de cas d’utilisation, réduire le temps "humain" de tests et évite beaucoup de régressions. Sans compter qu’il serait difficile de couvrir tous les cas “à la main” et à chaque fois. C'est donc possible de faire des tests automatiques poussés, même pour des logiciels complexes ! Chaque projet aura ses propres spécificités et complexités, mais on peut toujours imaginer plein de choses pour toutes les différentes fonctionnalités.

Prochain objectif : après un bot qui teste à votre place, en concevoir un qui développe à votre place ! 😜

Liens

Commentaires

Il n'y a actuellement aucun commentaire. Soyez le premier !

  • Configurateur web à l'abonnement : forces et faiblesses

    Il y a 8 mois

    Aujourd’hui, si vous cherchez à mettre en place un configurateur sur votre site, deux grandes possibilités s'offrent à vous : les solutions par abonnement (du type SaaS) ou le développement sur mesure. Au premier abord, les solutions semblent proches, mais les enjeux sur le long terme eux, sont bien différents.

  • Les frameworks front, tous les mêmes !
    Méthodologie

    Il y a 9 mois

    C'est une phrase que j'ai osé sortir un jour dans la salle de pause de Wanadev. Je ne sais plus exactement avec quel collègue je discutais, j’essayais de le rassurer, il possédait déjà une certaine expérience avec React et allait devoir, en arrivant sur le projet sur lequel je travaille, se mettre à Vue.
    Il a malheureusement fallu qu'un autre collègue de passage nous entende pour ne pas trouver la conversation inintéressante et suggérer que j'en fasse un petit talk pour nos réu du lundi. Et, de fil en aiguille, me voilà en train d'en faire un article de blog. Comme quoi, note pour moi-même, il faut toujours se méfier des discussions dans les salles de pause.

  • [NOVEMBRE 2021] C'est la gazette de Wanadev !
    Méthodologie

    Il y a 12 mois

    Retrouvez ici les informations et actus du mois de novembre de l'Agence! Au programme de cette édition : découvrez le configurateur de fenêtre développé pour Caseo, recontrez François Deleglise, notre directeur communication et un nouvel espace de jeu pour les professionnels du loisir en VR. Bonne lecture !

  • Un peu d'ingérence dans votre infogérance ?
    Méthodologie

    Il y a 2 ans

    Même si les impacts sont difficiles à mesurer, on peut dire qu’il a eu un avant et un après incident OVH. Sans épiloguer sur l'incendie du 5 mars 2021 dernier, un petit vent de panique a soufflé sur les milliers de clients découvrant les problématiques de sécurisation des données. Les réactions à chaud d'une partie des utilisateurs (touchés ou non) montrent la méconnaissance et l'incompréhension qui existent dans les offres d'hébergement. Qui est responsable ? Qui fait quoi ? Comment vérifier mon offre ? Voici quelques clés de compréhension.

  • Améliorer la qualité avec les tests et la review

    Il y a 2 ans

    L’importance des tests et de la revue de code dans le cadre du développement logiciel est parfois négligée ou passée au second plan. Cet article a pour but de montrer que les tests logiciels constituent une étape cruciale qu’il faut considérer avec beaucoup de rigueur.

  • Configurateur de produits : comment et pourquoi le mettre en place ?
    Méthodologie

    Il y a 2 ans

    A l’heure où notre économie se réinvente lors de cette crise sanitaire, les nouvelles stratégies numériques sont au centre des préoccupations des entreprises. Que ce soit le retail de proximité ou encore la vente en BtoB, des secteurs entiers sont contraints de basculer sur de la vente en ligne.