Une nouvelle approche de la génération de suites de tests, adaptée d’une technique CLI, consiste à utiliser un système de planification. La planification est une technique bien étudiée du domaine de l’intelligence artificielle (IA) qui tente de résoudre des problèmes impliquant quatre paramètres:
- un état initial,
- un état objectif,
- un ensemble d’opérateurs et
- un ensemble d’objets sur lesquels opérer.
Les systèmes de planification déterminent un chemin de l’état initial à l’état objectif à l’aide des opérateurs. Comme exemple simple d’un problème de planification, étant donné deux mots et une seule opération qui remplace une seule lettre d’un mot par une autre, l’objectif pourrait être de changer un mot en un autre.
Dans les auteurs ont utilisé le planificateur IPP pour démontrer cette technique. L’interface utilisateur du système est d’abord analysée pour déterminer les opérations possibles. Ceux-ci deviennent les opérateurs utilisés dans le problème de planification. Ensuite, un état initial du système est déterminé, et un état d’objectif est spécifié qui, selon le testeur, permettrait l’exercice du système. Le système de planification détermine un chemin de l’état initial à l’état objectif, qui devient le plan de test.
L’utilisation d’un planificateur pour générer les cas de test présente certains avantages spécifiques par rapport à la génération manuelle. Un système de planification, par sa nature même, génère des solutions aux problèmes de planification d’une manière très bénéfique pour le testeur:
- Les plans sont toujours valables. La sortie du système est soit un plan valide et correct qui utilise les opérateurs pour atteindre l’état objectif, soit aucun plan du tout. Ceci est bénéfique car beaucoup de temps peut être perdu lors de la création manuelle d’une suite de tests en raison de cas de test non valides que le testeur pensait fonctionner mais qui ne fonctionnaient pas.
- Un système de planification fait attention à la commande. Souvent, pour tester une certaine fonction, le scénario de test doit être complexe et suivre un chemin à travers l’interface graphique où les opérations sont effectuées dans un ordre spécifique. Lorsqu’il est fait manuellement, cela peut entraîner des erreurs et peut également être assez difficile et fastidieux à faire.
- Enfin, et surtout, un système de planification est orienté vers les objectifs. Le testeur se concentre sur la génération de la suite de tests sur ce qui est le plus important, en testant la fonctionnalité du système.
Lors de la création manuelle d’une suite de tests, le testeur se concentre davantage sur la façon de tester une fonction (c’est-à-dire le chemin spécifique à travers l’interface graphique). En utilisant un système de planification, le chemin est pris en charge et le testeur peut se concentrer sur la fonction à tester. Un avantage supplémentaire de ceci est qu’un système de planification n’est en aucune façon limité lors de la génération du chemin et peut souvent trouver un chemin qui n’a jamais été anticipé par le testeur. Ce problème est très important à combattre.
Une autre méthode de génération de cas de test d’interface graphique simule un utilisateur novice. Un utilisateur expert d’un système a tendance à suivre un chemin direct et prévisible via une interface graphique, alors qu’un utilisateur novice suivrait un chemin plus aléatoire. Un utilisateur novice est alors susceptible d’explorer plus d’états possibles de l’interface graphique qu’un expert.
La difficulté réside dans la génération de suites de tests qui simulent l’utilisation du système « novice ». L’utilisation d’algorithmes génétiques a été proposée pour résoudre ce problème. Les chemins novices à travers le système ne sont pas des chemins aléatoires. Premièrement, un utilisateur novice apprendra avec le temps et ne fera généralement pas les mêmes erreurs à plusieurs reprises, et, deuxièmement, un utilisateur novice suit un plan et possède probablement des connaissances sur le domaine ou le système.
Les algorithmes génétiques fonctionnent comme suit: un ensemble de « gènes » sont créés au hasard et sont ensuite soumis à une tâche. Les gènes qui accomplissent le mieux la tâche sont conservés et ceux qui ne le font pas sont jetés. Le processus est à nouveau répété avec les gènes survivants répliqués et le reste de l’ensemble rempli de gènes plus aléatoires. Finalement, un gène (ou un petit ensemble de gènes s’il existe un ensemble de seuils) sera le seul gène de l’ensemble et est naturellement le mieux adapté au problème donné.
Dans le cas d’un test d’interface graphique, la méthode fonctionne comme suit. Chaque gène est essentiellement une liste de valeurs entières aléatoires de longueur fixe. Chacun de ces gènes représente un chemin à travers l’interface graphique. Par exemple, pour un arbre donné de widgets, la première valeur du gène (chaque valeur est appelée un allèle) sélectionnerait le widget sur lequel opérer, les allèles suivants rempliraient alors l’entrée du widget en fonction du nombre d’entrées possibles au widget (par exemple, une zone de liste déroulante aurait une entréethe la valeur de liste sélectionnée). Le succès des gènes est marqué par un critère qui récompense le meilleur comportement « novice ».
Un système pour effectuer ce test pour le système X window, mais extensible à tout système de fenêtrage est décrit dans. Le système X Window fournit des fonctionnalités (via XServer et le protocole des éditeurs) pour envoyer dynamiquement des entrées GUI et obtenir une sortie GUI du programme sans utiliser directement l’interface graphique. Par exemple, on peut appeler XSendEvent() pour simuler un clic sur un menu déroulant, et ainsi de suite. Ce système permet aux chercheurs d’automatiser la création et les tests de gènes, de sorte que pour toute application donnée testée, un ensemble de cas de test utilisateur novice peut être créé.