Tester, tout un art

Bien le bonjour. Aujourd’hui, nous allons aborder la partie tests d’une application. Je pensais attaquer directement sur des exemples de tests appliqués à Pibou mais nous allons d’abords discuter  de façon plus générale.

Pourquoi tester ?

L’utilité des tests est un grand sujet de débat. Pour ma part ils servent pour plusieurs choses :

Le design

La réalisation de tests aide à structurer son code. Ceci pour plusieurs raisons :

  • Les tests nécessitent une réflexion sur la façon de découpler son code.
  • Les tests mettent en pratique votre pensée et les concepts que vous voulez implémenter. C’est du « code d’intention », votre design va évoluer au fur et à mesure que vous allez le mettre en pratique dans le contexte d’utilisation.
  • Dans une logique de TDD (voir chapitre suivant), ils vont peu à peu changer votre façon d’aborder le développement.

La validation des fonctionnalités

Les tests sont à la fois l’expression des besoins fonctionnels et celle du comportement de votre code.
Il va permettre de valider ce qu’attend l’utilisateur mais également fixer le comportement, c’est une forme de spécification via des cas d’utilisations.

Le filet de sécurité

Les tests sont également là pour s’assurer de la non régression. Cette sécurité améliore les conditions de développement pour la maintenance, l’évolution et le refactoring du code. Combien de fois avez vous évité une refonte car vous n’étiez pas sûr de ne pas ‘casser’ quelque chose ? 😉

La documentation

Contrairement à une documentation « classique »  (type javadoc, wiki, doc, etc..), votre code se doit d’être à jour pour fonctionner.
L’écriture des tests nous indique comment le code doit se comporter mais également l’approche des personnes qui l’ont écrit. Les cas d’utilisation et les limites.

L’apprentissage

Si vous découvrez une nouvelle API ou un nouveau framework, l’utilisation de tests pour comprendre et découvrir est une excellente approche. Non seulement les tests mettront en évidence le comportement mais ils permettront également de fixer ce que vous attendez. Si le framework ou l’API évoluent, ces tests vous montrerons les changements qui impactent votre utilisation.

Un petit mot sur le TDD

Le Test Driven Development est une approche qui prône pour l’écriture des tests avant le code de production mais pas que. On peut le résumer par un cycle de développement tel que:

  1. Ecrire un test pour valider une fonctionnalité ciblé du code
  2. Faire échouer le test
  3. Ecrire le code de production qui répond à ce test
  4. Faire réussir le test
  5. Refactorer son code chaque fois que nécessaire à partir d’une suite de tests valide
Il s’agit de cycles courts qui doivent cibler des parties spécifiques du code. C’est un développement itératif et incrémental où chaque étape est une  évolution stable du code en fonction des besoins.

Les types de tests

  • Il y a les tests unitaires qui sont des tests en isolation. Il servent à tester spécifiquement des parties du code ‘de façon unitaire’.
  • Les tests d’intégration testent le comportement plus global de l’application. Il vérifient  les liens entre les différentes parties du code.
  • On parle parfois de test d’intégration pour les tests d’interface graphique. Il s’agit dans la plupart des cas de framework qui permettent de simuler des actions utilisateurs (click, changement de pages, remplissage de formulaires)
  • Il y a les tests fonctionnels qui sont la vérification du besoin métier. Ces tests sont plus souvent écrit dans un langage proche du métier et peuvent correspondre à des scénarios d’utilisation.
  • Les tests de performances poussent le code dans ses retranchements (mémoire, rapidité, scalabilité, charge).

Les limites

La rédaction de tests est un fabuleux outils de design, un filet de sécurité et une documentation. Mais pour que ça marche, il faut prendre soin du code de test autant que du code de production. Il doit rester le plus clair possible, à jour et doit évoluer en même temps que le code de production.

Il faut parfois se méfier de l’envie de tester systématiquement chaque méthode, il vaut mieux tester des fonctionnalités. Il faut également garder une cohérence dans le code, le test est là pour mettre en avant les problèmes potentiels, il ne doit pas en créer. Les tests doivent être facilement utilisables et relativement rapides pour tous les développeurs au risque d’être délaissés et donc inutiles.

Références

2 réflexions au sujet de « Tester, tout un art »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *