Test et qualité : comment créer des applications robustes

Les tests en informatique ont fait couler beaucoup d'encre, et en feront encore couler beaucoup. Cette page n'a pas vocation à présenter un état de l'art exhaustif du testing, mais plutôt comprendre le besoin et quelques-unes des solutions appropriées (tests unitaires, tests d'intégration…).

L'informatique : domaine d'activité industriel ?

Si les ouvriers construisaient les bâtiments comme les développeurs écrivent leurs programmes, le premier pivert venu aurait détruit toute civilisation.

Gerald Weinberg, Software Test Professionals Luminary Award 2010

Un programme qui « marche » est un programme qui produit les résultats attendus en fonction des données qui lui sont fournies en entrée. Mais comment le vérifier, sachant qu'un programme est en fait constitué de plusieurs programmes, eux-mêmes constitués d'autres programmes, etc. : que doit-on tester, le programme principal ou les sous-programmes ? La réponse à cette question fait débat depuis très longtemps, mais des éléments de réponse se situent dans l'étude des procédés industriels !

Un domaine d'activité industriel…

Au delà du fait d'écrire des lignes de code et d'automatiser des traitements, les principaux acteurs du domaine de l'informatique ont œuvré, depuis des décennies, à en faire un domaine d'activité industriel.

  • Ils en ont repris les objectifs : fournir des produits, à des clients, dans le but de conquérir des marchés.
  • Ils en ont repris les (ou plutôt certaines des) méthodes : MOE/MOA, qualité, architecture, gestion de projets, etc.

Pont de l'île de Ré, testé et approuvé !

Le pont de l'île de Ré, testé et approuvé (avant de faire monter des gens dessus…)

Pensez-vous que les industriels qui ont conçu et réalisé le pont de l'île de Ré, deuxième plus long pont de France, ont construit l'ensemble des pièces, les ont assemblées, et ont ensuite décidé de tester l'ensemble en y faisant circuler des engins ?

Bien entendu, non (heureusement pour les usagers du pont). Chaque pièce importante a été mise à l'épreuve individuellement pour garantir qu'elle remplisse sa propre fonction au sein de l'ouvrage final, sans défaillance.

Le bâtiment c'est le bâtiment, l'informatique, c'est l'informatique. Mais le parallèle est simple !

L'informatique n'est plus (seulement) une science de laboratoire où des chercheurs mettent au point des algorithmes expérimentaux et heuristiques destinés à traiter des problèmes obscurs et complexes… Mais pour en faire un domaine d'activité industriel, il faut se fixer les mêmes objectifs de qualité que les autres domaines. Pour construire un produit fiable (pont, voiture, logiciel…), les ingénieurs doivent d'abord s'assurer que chaque composant du produit est, individuellement, fiable. Ensuite, on teste l'assemblage (bien entendu : d'excellents parpaings très résistants assemblés avec un excellent ciment par de mauvais maçons en état d'ébriété aboutit, aussi, à la construction d'une maison qui s'écroulera peu de temps après…).

Un composant fiable fournit, en fonction d'une sollicitation connue (pression, alimentation en carburant, alimentation en données…), un résultat connu (torsion, production d'énergie, création d'un fichier…) via un comportement connu.

Les bases du testing unitaire

Le test unitaire est un procédé permettant de s'assurer du bon fonctionnement d'une unité de programme. Il s'agit, en fonction de certaines données fournies en entrée d'un module de code, de vérifier que les données qui en sortent ou les actions qui en découlent sont conformes aux spécifications du module. En d'autres termes, il s'agit de vérifier le respect du contrat de service du module. L'unité fonctionnelle testée est généralement nommée le SUT (System Under Test).

En cours de rédaction…