Tests logiciels pour les automates finis

De nombreuses méthodes de test logiciel ont gagné en importance, les développeurs cherchant des moyens d'améliorer la qualité et de respecter les délais des projets : revue de code, tests unitaires, tests de régression, tests bêta, développement piloté par les tests, et bien d'autres. Quel que soit l'objectif d'un projet ou le langage de code source utilisé, il est largement admis que plus un défaut est détecté tôt, plus il est facile, économique et rapide à corriger.

La génération de code à partir de diagrammes d'automates d'états UML, une nouvelle fonctionnalité introduite dans la version 2 d'Altova UModel 2011, peut être utilisée pour valider la logique conceptuelle très tôt dans le cycle de développement du projet.

Conception pratique représentée dans un diagramme d'état

Un exemple fourni avec UModel présente un diagramme d'automate d'état simple et réaliste, accompagné d'une petite application de test que vous pouvez exécuter pour constater par vous-même à quel point il est facile de tester la logique d'une conception. Le diagramme d'automate d'état du projet AirCondition.ump, situé dans le dossier des exemples d'UModel 2011, décrit le fonctionnement d'un système de chauffage et de climatisation typique.

Le système comprend un bouton d'alimentation situé sur le côté gauche, qui permet de passer de l'état éteint à l'état allumé, une fonction modeSelect qui permet de choisir entre le chauffage et la climatisation, une fonction speedSelect pour le ventilateur, et un bouton de veille qui met le système en mode veille, comme indiqué sur le côté droit. Le dossier de projet exemple contient tout le code généré pour le diagramme par UModel, en Java, C# et Visual Basic. Pour essayer la version Java, il suffit d'utiliser la commande javac STMTester.java pour compiler le code et java STMTester pour l'exécuter. L'application de test affiche un panneau de contrôle simulé avec des fenêtres d'informations sur l'unité de chauffage et de climatisation. Les boutons de commande apparaissent en haut, l'état actuel est décrit dans la première fenêtre, et les messages de sortie générés par les modifications du système apparaissent dans la deuxième fenêtre.

Comme indiqué ci-dessus, le système démarre à l'état "éteint", le mode est réglé sur "chauffage" et le ventilateur est désactivé. Avant de faire fonctionner le système, vous pouvez éventuellement redimensionner le panneau de contrôle et le diagramme d'état pour suivre les actions de l'application de test directement dans le diagramme, comme illustré dans l'image de taille réduite ci-dessous.

Fonctionnement de la machine à états

Lorsque nous cliquons sur le bouton d'alimentation, la fenêtre d'état actuel est mise à jour, et une description détaillée des opérations qui se sont produites est affichée sous forme d'événement 1 dans la fenêtre des messages de débogage.

S'il fait chaud, nous pourrions vouloir modifier le mode pour qu'il soit en mode refroidissement et augmenter la vitesse du ventilateur. Pour cela, nous pouvons cliquer sur les boutons "modeSelect" et "speedSelect". La fenêtre "État actuel" se met à jour à chaque clic, et les événements 2 et 3 sont ajoutés à la fenêtre des messages de sortie.

Maintenant, nous pouvons constater comment l'application de test nous permet de tester en profondeur la logique de notre diagramme d'automate d'état en cliquant sur chaque séquence possible de sélections de boutons, afin de vérifier si elles produisent les résultats attendus. Par exemple, si nous mettons l'appareil en mode veille (Événement 4 ci-dessous), puis que nous appuyons sur le bouton "speedSelect", nous constatons dans les messages de sortie pour l'Événement 5 qu'aucun changement d'état ne se produit dans le sous-état nommé "RegionSpeed". Comparez l'Événement 5 à l'Événement 3 dans la fenêtre des messages de sortie, comme illustré ci-dessous.

Maintenant que le système est en mode veille et que nous n'avons plus besoin de chauffage ou de climatisation, économisons de l'énergie en appuyant sur le bouton d'alimentation pour l'éteindre.

Attendez une seconde, il semble que rien ne se soit passé. Aucune transition n'a eu lieu dans l'événement 6, et l'état actuel affiché dans la fenêtre supérieure est toujours "En veille" ! En examinant le diagramme de l'automate d'état, on constate que la seule façon de sortir du mode veille est de presser à nouveau le bouton "Veille". Est-ce vraiment le comportement que l'utilisateur moyen pourrait attendre ? Le bouton d'alimentation ne devrait-il pas éteindre le système lorsqu'il est en mode veille ?

Imaginez à quel point il pourrait être coûteux de résoudre ce problème si celui-ci n'avait été détecté que beaucoup plus tard, lors du développement du produit, alors que le prototype était testé par un organisme de réglementation ! Voici un défi que nous lançons à nos lecteurs : comment concevriez-vous une autre voie, plus directe, pour passer de l'état de veille à l'état d'arrêt ?

Tester vos propres automates

Vous pouvez utiliser les exemples de projets de génération de code pour les automates à états UModel comme modèles pour créer des applications de test pour vos propres conceptions. Vous voudrez profiter de la fonctionnalité UModel qui crée automatiquement des opérations dans une classe lorsque vous ajoutez des noms d'opérations aux transitions de votre automate à états.

De plus, le système d'aide de UModel contient des informations détaillées sur la génération de code à partir de diagrammes d'automates d'états, et utilise également le fichier de projet AirCondition.ump comme exemple.

Découvrez par vous-même comment vous pouvez améliorer le développement de vos projets en testant la logique de vos propres diagrammes d'automates finis avec Altova UModel – téléchargez dès aujourd'hui une version d'essai gratuite de 30 jours!