Dernière modification : Dec 08 , 2024

Concevoir un code testable

Qu'est ce que la testabilité

C'est le coût et la relative facilité à révéler les bugs logiciels.

D'après un cours d'électronique lien, c'est :

  • Améliorer l'accessibilité entre chaque module
  • La capacité à contrôler : capacité à manipuler les interfaces des modules en générant des entrées
  • L'observabilité : capacité à déterminer les valeurs internes d'un module en contrôlant les entrées et observant les sorties

Adaptation of Software Testability Concept for Test Suite Generation

Limiter l'utilisation de variables d'états

Les études montrent que l'utilisation d'états globaux (statiques) ou locaux (thread local etc) nuisent à l'observabilité de l'application. La programmation fonctionnelle , au contraire met en avant les entrées et sorties des composants.

La séparation des préoccupations

Créer des API claires

Des approches comme TDD force le développeur à réfléchir sur comment utiliser son propre code. Il en découle la création d'interfaces et d'API testables.

MSC Thesis Emmanuel Mulo

Implémenter la traçabilité

Pour implémenter la tracabilité, nous sommes intéressés par découvrir quel module, quel composant, implémente quelle spécification. Sans cette information, il est pratiquement impossible de développer des plans de tests précis.

Ajouter du monitoring interne

Même si nous réalisons des tests boite noire de l'application, chaque module doit venir avec les éléments nécessaires pour :

  • logging
  • monitoring
  • tracing, capture / replay
  • audit trail...

Design for Testability in Object Oriented Systems

Le code doit être auto-documenté

La documentation périme mais le code reste. Plus le code est facile à lire et les concepts de l'application faciles à extraire, plus l'application sera facilement testable.

Choisir la composition plutôt que l'héritage

L'héritage s'il semble pratique au premier abord complexifie la tâche du testeur car il n'est pas possible de substituer une implémentation par un stub. La composition offre

Eviter tout ce qui est statique et singleton

Créer un composant d'initialisation de votre application et utiliser l'injection de dépendance.

Isoler les dépendances.

Créer des "murs" entre les modules via une API de programmation claire et facile d'utilisation

Injecter les dépendances

Exposer clairement les dépendances des composants si possible via constructeur ou méthodes de construction (factory methods).

Concevoir un code testable

Created by Sylvain Leroy