Automatisation: Architecture modulaire, la clé pour limiter la maintenance ?

Les problèmes de maintenance sont récurrents avec les tests automatisés. C’est même une des raisons majeures de l’échec de l’automatisation des tests.

La maintenance doit être effectuée à chaque changement applicatif impactant un ou plusieurs cas de tests.  Cette maintenance, si elle est mal gérée peut très vite devenir très gourmande en temps dès lors où l’on multiplie les cas de test.

Comment limiter cette maintenance ?

Revenons à la base et prenons une application simple. Comment peut-on implémenter les tests ci-dessous et quel sera l’impact de ce choix sur la maintenance ?

Test 1 :

Test 2 :

Test 3 :

On peut implémenter ces tests de 2 façons.

·        Solution 1 : Solution généralement utilisée, chaque test est développé indépendamment. Les étapes sont directement écrites au sein du test, certaines parties étant fréquemment répétées. De plus, si l’affichage du mail est modifié, il faut alors maintenir les 3 tests précédents, en faisant, pour ces 3 tests les mêmes modifications.

·        Solution 2 : Solution par module. On parle alors d’architecture modulaire. Dans ce cas les tests « appellent » les modules. La mise à jour d’un module entraine la mise à jour de l’ensemble des tests faisant appel à ce module. Si l’affichage du mail est modifié il faut alors pour maintenir ces cas, une seule modification sur le module approprié. Il faut par contre travailler en amont sur l’architecture de l’automate.

L’architecture modulaire serait-elle une solution pour limiter efficacement la maintenance ?

Tout d’abord : qu’est-ce qu’un module ?

On peut par exemple faire 1 module par écran (même s’il existe différentes manières de procéder et niveaux de modularité). Dans le cas de mes tests en exemple on aurait alors 4 modules (car 4 écrans parcourus par les tests):

·        Le module ou écran « Téléphone » : pour ouvrir l’application => Module 1

·        Le module ou écran « Liste des mails » : pour toute vérification ou action sur cet écran => Module 2

·        Le module ou écran « Affichage Mail » : pour toute vérification ou action sur un mail affiché => Module 3

·        Le module ou écran « Composeur » : pour toute vérification ou action sur l’écran pour écrire un mail => Module 4

A noter : ces modules pourront être utilisés pour tout nouveau test développé.

Un Module peut être considéré comme une fonction avec plusieurs variables. Prenons le Module 2 : La liste des mails.

Ce Module peut avoir comme entrée des variables de vérifications et d’actions :

·        Exemple de variable: présence de bouton, d’un mail (en fait vérifier la présence d’un objet avec un ID) ou simplement vérifier l’affichage de cet écran (Vérification nom de la page)

·        Une action : un clic

Ici, pour simplifier on pourrait avoir l’appel au comme suit : Module_1(A,B,C) où A vérifie la présence d’un ID, B compare le nom de la page à la page attendue et C clique sur l’ID voulu. Ces 3 variables pouvant être vide si on ne veut pas d’action (ex : Module_1(12, ,13), voudrait dire que l’on vérifie la présence de l’ID 12 et que l’on clique sur l’ID 13).

Tout cela doit être pensé et développé en amont. Dès lors où ce module est développé, il est alors possible de l’utiliser pour l’ensemble des tests.

Maintenant que nous avons les modules, comment les articule-t-on pour avoir une architecture modulaire ?

Reprenons le test 2 (le seul qui passe par les 4 modules). Avec une architecture modulaire cela pourrai donner cela :

Pour chaque étape, on a bien 1 Action => 1 Résultat.

Ici, on appelle les modules en donnant les variables que l’on souhaite (cliquer sur un ID, vérifier la présence de boutons, les valeurs de champs…).

Pour résumé, les 3 cas de tests définis initialement peuvent ressembler à cela avec une architecture modulaire :

Avec pour chaque appel de module, l’action ou la vérification souhaitée. Vous remarquerez, qu’à l’exception des variables, les tests 1 et 3 sont identiques, la différence se fait donc avec uniquement les variables utilisées lors de l’appel.

Enfin, au niveau maintenance, si le module 2 est affecté, il suffit alors de mettre à jour ce module pour mettre à jour les 3 tests et potentiellement 8 occurrences dans l’ensemble des 3 tests.

Conclusion :

Les automates à architecture modulaire sont une autre façon de penser l’écriture des cas de tests automatisés. Cela demande de la réflexion en amont et une bonne organisation. Par contre, lorsque les modules sont développés, les coûts de maintenance deviennent dérisoires par rapport à une architecture plus classique. De plus la multiplication des tests n’engendre plus une multiplication des coûts de maintenance. Si 2 modules sont affectés, il suffit de mettre à jour ces 2 modules. La maintenance sera la même qu’il y ait 5 ou 500 tests affectés.

J’aimerai finir en faisant une petite digression sur l’histoire des tests automatisés. Initialement les tests automatisés étaient un enregistrement d’action. A chaque modification d’une seule étape, il fallait jeter le cas de test et tout refaire. S’en est suivi un développement des tests de façon à ne pas avoir à les jeter au moindre changement afin de réduire les coûts de maintenance. L’architecture modulaire est simplement la suite logique dans l’évolution de l’automatisation et la diminution de la maintenance.

Pensez à rejoindre le groupe Le métier du test si le test vous intéresse !

N’hésitez pas à me suivre et lire mes autres articles si vous voulez en apprendre plus sur le test ou venir partager vos connaissances

Merci à tous ceux qui mettent « j’aime », partagent ou commentent mes articles

5 Responses

    1. Bonjour,
      Robot framework est du KDT (Keyword Driven Testing), cela n’est donc pas forcément lié à une architecture modulaire même si, sur le principe, cela s’en rapproche.
      Il y a 2 articles qui traitent de Robot Framework dans la taverne.
      Le premier est un article de la série « Outils de test », le second un article plus détaillé sur son utilisation et écrit par un invité: https://latavernedutesteur.fr/2020/02/12/pourquoi-robot-framework-alexis-pallier/

  1. pourquoi malgré les atouts de test modulaire, certain gardent la méthode classique ? rentable dans des cas particuliers ? ou c’est juste manque de connaissances & compétences pour les tests modulaires? Merci d’avance

    1. Il y a un grand nombre de réponses à cette question.
      il y a bien sûr le manque de connaissances ou compétences mais aussi le devoir faire vite, les problèmes liés à l’existant…
      La pratique est souvent plus complexe que la théorie 🙁

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

testeur

Testeur: choisir c’est être libre!

Le testeur est continuellement amené à faire des choix dans sa vie professionnelle. Ces choix sont liés à des questions auxquelles il se doit de répondre et qui peuvent ressembler à: Quels tests faire ? Sous quelle forme ? Quelles améliorations apporter au process ? Quelles adaptation apportées suite au

Lire la suite »
Agilité

18 : Conseils d’application de l’ATDD en mode manuel et agile (3 / 3)

Considérons maintenant deux exemples où une tâche est touchée par des modifications de spécifications internes (changements d’ergonomie, règles de gestion, … qui auraient dû être pris en compte au sein de l’US INVEST initiale). Elles ne peuvent pas être qualifiées d’INVEST … Les US étant déjà  de tailles très faibles,

Lire la suite »
culture générale

Les autistes asperger : des super testeurs ?

Introduction : L’autisme est un handicap assez connu qui a pour conséquence de rendre la personne atteinte de ce dernier peu sociable, un peu « dans son monde ». Personnellement j’ai connu cette maladie en regardant le film « Rain man » il y a un certain nombre d’années. Déjà dans ce film on pouvait

Lire la suite »