lundi 31 mars 2014

Tests, Qualité et Agilité avec Visual Studio 2013 pour une approche Dev-Tests Partie 1 : L'activité de Tests

Dans cet article nous allons  montrer la puissance et la facilité de Visual Studio 2013 pour le développement d’applications d’un haut niveau de qualité au travers d’un large panel d’outils méthodologiques, d’écriture de code, de productivité, de tests, et d’industrialisation des développements, formant un tout cohésif permettant la mise en œuvre d’une véritable démarche Dev-Tests.
Pour cela nous définirons quels sont les processus et outils nécessaires à une activité de Tests, puis nous verrons dans quel cadre cela nous permet de mettre en place une stratégie qualité, le tout en s’appuyant sur le paradigme Agile et plus spécifiquement SCRUM. Enfin nous établirons les bases d’une approche Dev Tests en s’appuyant sur l’offre Visual Studio 2013.

Activité de Tests

Pourquoi et comment tester ?
Longtemps, l’activité de test est resté le parent pauvre des projets informatiques, tant sur le plan des outils que des compétences des testeurs. Pourtant de nombreux exemples sont là pour nous rappeler l’importance de cette activité. De nos jours, beaucoup d’agilistes commencent à penser que l’écriture des tests est plus importante que l’écriture du code production, car en effet du code non testé n’a pas de valeur et peut engendrer des situations particulièrement catastrophiques comme celle décrite ci-dessous avec le vol inaugural d’Ariane 5 en 1997,  illustrant  le bug le plus couteux de l’histoire de l’informatique

La réutilisation de code du programme Ariane 4 non retesté a entrainé une trajectoire différente du fait d’un design diffèrent du Booster. La Conversion d’un float 64 bit en int 16 bits a causé une erreur de type overflow exception engendrant la destruction de la fusée, le cout du Bug : plus de 370 millions de dollars (1996). La morale de cette histoire est que l’activité de test doit faire partie intégrante du cycle de développement et de la stratégie qualité. Comme nous le verrons tout au long de l’article, Visual Studio 2013 d’une part et les approches Agiles, et plus particulièrement SCRUM vont apporter l’ensemble des ingrédients tant aux niveaux des pratiques d’ingénieries que méthodologiques permettant l’implémentation et la livraison d’applications d’un haut niveau de qualité et de ce fait, obtenir la satisfaction du client, qui reste de loin le critère numéro 1 de réussite d’un projet.
La phase de planification et d’écriture des tests est une activité de premier plan pour tout  type de projet, nous allons avant tout définir les types de tests nécessaires à la mise en place d’une stratégie qualité digne de ce nom.
On distingue généralement trois catégories de tests :

Les tests techniques

Incluant : les tests unitaires, tests d’intégration et tests d’interface automatisés : Ces tests vont permettre de travailler sur la non régression technique et fournir une métrique clé : la couverture de code. Les tests unitaires sont généralement mockés (stubs ou shims) et donc joués en isolation et testent les méthodes unitairement, contrairement aux tests d’intégration qui vont tester des méthodes de plus haut niveau et qui ne sont pas mockés afin de tester le système complet. Enfin les tests d’interface automatisés (UI coded tests) permettent de valider des scénarios en manipulant l’interface utilisateur de manière interactive avec la capacité de valider un résultat attendu, tel que la valeur dans un champ par exemple. L’ensemble de ces tests pourront être consommés dans le cadre d’un workflow BDT (Build Deploy Test) si l’on a investi dans un Lab Management. Nous reviendrons plus loin dans cet article sur ce point.

Les tests fonctionnels

Incluant les tests manuels ou semi automatisés, tests d’intégration fonctionnels, tests d’interface automatisés et tests exploratoires) : Ces tests ont pour objectif de valider la conformité métier des fonctionnalités développées et feront l’objet d’un plan de tests et relierons des cas de tests aux fonctionnalités testées. Pour des raisons de productivité, le plus souvent ces tests feront l’objet d’une automatisation partielle ou totale afin de garantir des campagnes de tests de non régression et surtout augmenter la productivité des équipes de tests. Les tests d’intégration fonctionnels permettent d’appeler des fonctions métiers  de haut niveau exposées par  la couche métier sans passer par l’interface utilisateur (mode FitNesse). Enfin, les tests exploratoires sont au cœur des pratiques agiles de tests et vont permettre aux testeurs de jouer des tests avec plus de créativité et également trouver plus rapidement des bugs ou dysfonctionnements. Cette activité est à mettre en balance avec l’écriture de scripts de tests.

Les tests de performance et tests de charge

La performance reste un point clé de réussite de tout projet, les tests de performance coté client et coté serveurs doivent faire partie impérativement de la stratégie qualité et donc des plans de tests afin de détecter au plus tôt les potentiels goulots d’étranglement.
Bien évidemment Visual Studio 2013 propose une gamme complète d’outils permettant de créer et exécuter l’intégralité des tests précités. Le diagramme ci-dessous fait le mapping de ces différents types de tests avec les technologies de la plateforme Visual Studio 2013 :
 
Dans la deuxième partie de cet article nous allons mettre un focus particulier sur l'outillage apporté par la suite Visual Studio / TFS 2013 pour la mise en place d'une activité de Tests

Aucun commentaire: