lundi 31 mars 2014

Tests, Qualité et Agilité avec Visual Studio 2013 pour une approche Dev-Tests Partie 2 : Visual Studio 2013: L’outillage pour les Tests

L’offre Visual studio 2013 ne propose pas moins de 4 modules répondant à l’ensemble des besoins en termes d’écriture et d’exécution des Tests. Nous allons les passer en revue puis démontrer comment en quelques minutes il est possible de mettre en œuvre un plan de test via le nouveau module Web de Test Manager 2013
Microsoft Test Manager 2013 (MTM) est un client lourd pour l’écriture et l’exécution des cas de tests fonctionnels encore appelés tests d’acceptance. MTM va permettre également de conduire des sessions de tests exploratoires. Le point fort  de ce module  est la capacité à enregistrer les actions effectuées par le testeur pour générer automatiquement un cas de test à partir de la session exploratoire, de façon à pouvoir les répéter.







MTM va permettre également une automatisation partielle ou complète de l’exécution des tests via une fonctionnalité d’enregistrement des actions effectuées par le testeur.
L’intérêt est que le testeur pourra alors sélectionner plusieurs actions et lancer contextuellement la commande Play pour voir ces actions jouées automatiquement lui permettant d’arriver plus rapidement à l’étape de validation du Test.
 La grande nouveauté apportée par Visual Studio 2013 est le support Web pour la gestion et l’exécution des tests avec Web Access 2013 permettant à l’instar de test Manager les actions suivantes :

·        La création de plans de test.
·        La gestion des suites de test.
·        La création de cas de tests incluant le support des étapes partagées et l’utilisation des paramètres
·        L’entrée et l’édition en masse des cas de test à l’aide d’une Grid View
·        La copie de cas de tests à partir d’Excel vers un Grid View et vice versa.
·        L’exécution des tests.
·        L’édition de tests lors de l’exécution.
·        Tester des Application Windows Store sur un périphérique distant (tablette, téléphone) 
Afin de démontrer la productivité et la simplicité pour la mise en œuvre d’un plan de test avec Visual Studio 2013, nous allons utiliser la version Web, dont l’un des attraits est qu’il permet aux équipes de tests de démarrer rapidement sans avoir à installer de logiciels sur leur poste de travail. Les différentes étapes à suivre sont :
La création d’un plan de test
Un plan de test est un conteneur de suites et cas de tests. Un plan de test est généralement utilisé pour déterminer les tests à exécuter et valider une itération donc typiquement des Sprints. On pourra également avoir des plans de tests de Release ou de non régression.
La création d’un plan de test est extrêmement simple comme montré ci-dessous :
Etant connecté au portail Web Access, activer l’onglet Test puis appeler la commande : Création de Plan de test comme montré ci-dessous
 


Renseigner le nom du plan de test puis valider. On créera généralement un plan de test par Sprint ou itération.


Nous allons ensuite organiser notre plan de test en suites de tests qui permettent de créer une arborescence hiérarchique à l’intérieur d’un plan de tests, par exemple dans un scénario Scrum of Scrums pour séparer les tests des différentes équipes.
Nous allons dans notre exemple créer deux suites : Développement et Déploiement en utilisant la commande Ajout de suite statique
Une fois renseignées, les listes apparaissent au-dessous du nœud parent du plan de test comme montré ci-dessous :
Astuce : Lors de la création des suites, on souhaite avoir un affichage suivant un ordre spécifique, pour cela, il suffit préfixer les suites par des chiffres permet d’obtenir l’ordre souhaité.
L’étape suivante va consister à ajouter des Exigences ou PBIs (Product Backlog Item équivalent d’une User Story en Scrum) aux différentes suites :
Pour cela on utiliser la commande  d’ajout d’exigences : " Requirement Based Suite "
 
 

Il suffit alors simplement d’exécuter la requête proposée que l’on peut modifier si nécessaire, puis sélectionner les PBIs à tester et valider en cliquant le bouton Ajouter
Les PBIs sont ainsi ajoutés à la suite sélectionnée.
Note : Il est important de relier les cas de tests aux PBIs testés afin de pouvoir rapidement à l’aide des outils de Reporting, estimer la couverture fonctionnelle des tests. Pour cela, une fois le plan de test décomposé en suites, il suffit d’ajouter les PBIs du Sprint en cours aux différentes suites.
La dernière phase va consister à écrire l’ensemble des cas de tests nécessaires à la validation des critères d’acceptance des PBIs.
Simplement cliquer droit sur le PBI à tester puis lancer la commande « New Test Case »

Chaque cas de test sera décomposé en étapes se composant d’une action et d’un résultat attendu permettant de valider l’étape. On remarquera la possibilité d’utiliser le format Rich Text pour améliorer la lisibilité
Ci-dessous un exemple de cas de tests

Nous avons vu la simplicité pour la mise en place d’un plan de test. Tout testeur expérimenté sait combien il peut être fastidieux de mettre en place des campagnes de tests. Visual Studio 2013 là encore va apporter  un certain nombre d’outils de productivité permettant de réduire considérablement la charge à dédier à l’écriture des cas de tests avec notamment les fonctionnalités suivantes :
1 - La fonction de clonage des tests 
Souvent les tests se ressemblent et la fonction de clone va permettre d’accélérer considérablement l’écriture des tests par un simple clic droit sur le cas de test et l’appel de la commande « créer une copie et ajouter à la suite ». Il est également possible de cloner des suites entières.

2 - La fonction de Copier-coller à partir d’Excel
Cette fonction permettra une saisie en masse particulièrement performante, ci-dessous 2 cas de tests saisis dans Excel qui sont placés dans le presse papiers
Il suffit d’activer la vue GridView
 
Puis simplement coller le contenu dans la grille et sauvegarder
Ci-dessous le résultat après sauvegarde, les deux cas de tests sont créés. Le mode GridView peut également être utilisé pour effectuer de la saisie au kilomètre de cas de tests.
 
3 - L’utilisation des Shared Steps (Etapes partagées)
Cette fonctionnalité permet de factoriser l’écriture des tests en réutilisant des groupes d’actions récurrentes telle que la connexion à l’application testée par exemple.
L’utilisation est extrêmement simple, il est possible de générer un Shared Steps directement à partir d’un cas de test existant, tout simplement en sélectionnant la séquence d’actions  servant de base à la séquence récurrente puis en appelant contextuellement la commande « Create Shared Steps ».

Il sera alors possible de les consommer à partir de n’importe quel cas de test en utilisant la commande « Insert Shared Steps » à partir de la barre d’outils des actions.

4 - L’utilisation des paramètres
L’entrée des données dans un cas de test peut être variabilisée dans l’outil, ce qui permettra d’une part au testeur de ne pas avoir à saisir les données dans l’interface durant l’exécution des tests mais de les injecter dans les contrôles de l’application , et également d’utiliser le concept de jeux de données de tests, permettant de rejouer le même cas de tests sur plusieurs jeux de données. Par exemple pour éviter au testeur d’écrire les titres des taches à insérer dans notre application exemple, nous pouvons les entrer sous la forme de paramètres dans le cas de test, pour cela, sélectionner l’action ou l’on veut insérer le paramètre, et cliquer sur le bouton « Insert Parameter »  
Enfin  nommer le paramètre (préfixé par le signe @) et renseigner sa valeur au-dessous de la grille :
Une fois le plan de test écrit, les tests sont prêts pour être exécutés via le module Test Runner, soit avec la version Web ou la version Client riche, qui aura plus de fonctionnalité.
On remarquera bien évidemment que le plan de test écrit dans l’interface Web est bien évidemment consultable et modifiable à partir de Test Manager comme montré ci-dessous :
 
Test Runner : Cet outil permet l’exécution des cas tests tout en  assurant en tache de fond la collecte d’artefacts techniques et non techniques qui permettront de joindre facilement des commentaires et des captures d'écran durant la session de test, ces informations seront automatiquement téléchargées dans lors de la création  de bugs, fournissant des informations riches aux développeurs permettant de reproduire et comprendre le bug. De plus, les bugs et les cas de test sont liés automatiquement ce qui permettra de ré exécuter facilement le test pour valider le fix. Les données collectées automatiquement sont :  
·        les étapes du cas de test avec les résultats
·        l’enregistrement vidéo de la session de test
·        les données Intellitrace avec les données d’exception qui permettront aux développeurs de résoudre beaucoup plus rapidement le bug avec également les threads d’exécution,  et la Stack Trace
·        les informations systèmes et les entrées du journal d’évènement
Bien évidemment, le collecteur est configurable via les propriétés du plan de test.
Ci-dessous un exemple de données collectées via Test Runner avec les étapes et les enregistrements vidéos associés, on notera le découpage de la vidéo par action du cas de test :

 
Ci-dessous  un autre exemple du collecteur avec la trace Intellitrace, la liste des thread et les données d’exception, cette information est ouverte à partir de l’onglet All links.
Visual Studio 2013 propose également du reporting permettant de suivre l’activité de test. Ci-dessous le rapport Backlog Overview qui permet d’analyser la progression par exigence ou PBI, ainsi que le nombre de tests écrits et le résultat de l’exécution des tests  ainsi que le nombre de bugs ouverts:
Ci-dessous le module de reporting intégré à MTM qui permet de  voir le statut d’exécution des tests par testeur ou par suite.

Les tests technique,

 Visual Studio 2013 permet l’écriture des tests unitaires avec la possibilité d’utiliser plusieurs Framework de tests qui sont pluggables dans l’IDE et fournit notamment l’ensemble des fonctionnalités de refactoring nécessaires à la mise en œuvre d’une approche TDD  (Test Driven Development), pratique par laquelle le développeur va procéder à l’écriture des tests avant l’écriture du code d’implémentation. Nous allons démontrer à l’aide d’un exemple extrêmement simple basé sur une classe de calcul mathématique cette approche TDD avec Visual Studio 2013
Nous partons d’une solution contenant un projet de type Class Library Math et son projet de Test UnitTestMath. On notera qu’au début, aucun type n’est présent dans le projet Math, tout sera généré par les fonctions de refactoring de Visual Studio 2013 :
 
Le principe TDD consiste à décrire les fonctions avant leur implémentation via les tests, ce qui a pour effet dans un premier temps de ne plus compiler comme montré ci-dessous après avoir écrit le test de la fonction Addition de la classe Operation qui n’existe pas encore, nous allons ensuite générer le type Operation  et la fonction Addition :

A l’aide des fonctions de refactoring, nous allons dans un premier temps générer le type Operation dans le projet Math comme montré dans la capture d’écran ci-dessus. Puis nous allons générer dans ce nouveau Type Operation, la méthode Addition. Les opérations de refactoring sont lancées à partir des SmartTag comme montré ci-dessous
On se retrouve à l’étape ou la méthode est générée sous la forme d’un stub, et le test qui ne passe pas :
Il suffit d’écrire l’implémentation de la méthode Addition et relancer le test pour terminer le cycle TDD, le test passe alors en vert
 Enfin Visual Studio va également permettre d’écrire des tests unitaires « fonctionnels » qui seront joués en tant que tests d’acceptance via Test Manager. Généralement, ces tests appellent des fonctions de haut niveau qui vont combiner l’appel de plusieurs fonctions au travers des différentes couches de l’application, on les appelle parfois des tests « sous cutanés » car ils réalisent des appels juste au-dessous de l’interface utilisateur. Ces tests pouvant s’apparenter à des tests fonctionnels, il est possible de les inclure dans des cas de test. Pour cela, ouvrir le cas de test concerné dans Visual Studio, activer l’onglet « Associated Automation » puis sélectionner le test d’intégration et valider. Ce test pourra être joué de manière automatique dans vos scénarios BDT et également lancés manuellement. L’avantage de cette technique est qu’elle va permettre de limiter l’écriture de « UI Coded Tests » ou tests d’interface automatisés, pouvant être plus complexes et consommateurs de temps en termes de maintenance, le mix des deux est généralement le meilleur scenario.

Enfin les tests d’interfaces automatisés ou UI Coded Tests vont permettre  de créer des tests interactifs avec l’interface utilisateur. L’intérêt de ces tests réside dans  la simplicité de mise en œuvre grâce à un enregistreur d’actions, permettant à tout membre de l’équipe d’en créer y compris des profils fonctionnels. Ils sont maintenables et modifiables car cette technologie génère du code .Net. La maintenance en revanche va requérir des compétences de développement
Note : Il est important de sensibiliser les développeurs au respect des normes de développement pour produire des interfaces testables notamment en  respectant des conventions de nommage des contrôles et la fixation systématique des UI Automation Properties dans les balises XAML en WPF. Les gains apportés en retour par l’automatisation des tests rembourseront largement cet investissement. 



Aucun commentaire: