Tests

Signaler

Plutôt que de prouver la justesse d’un programme, on se contente souvent de tester le code en vérifiant qu’il se comporte correctement sur des entrées pour lesquelles le résultat est connu.

I. Tests unitaires

De l’écriture des spécifications à la validation d’un logiciel, chaque étape du développement est idéalement accompagnée d’une phase de tests. Nous nous intéressons ici aux tests unitaires dont l’objectif est de tester indépendamment chaque fonction.

Ces tests peuvent être conçus avant ou après la fonction à tester, éventuellement par une personne différente. Ils sont généralement exécutés aussi souvent que possible pour éviter les problèmes de régression.

Mot-clé

Régression : ajout de bugs lors de modification du code.

Les tests unitaires doivent être les plus couvrants possible, c’est-à-dire envisager le plus de cas possibles (simples ou à problème). Chaque branche du code doit idéalement être testée.

II. Outils de test

Il existe plusieurs outils permettant de réaliser des tests unitaires : les assertions, les doctests, le module tiers pytest…

Les exemples suivants concernent une fonction fibo(n) qui calcule le terme n de la suite de Fibonacci (suite définie par F0=0, F1=1 et, pour n>1, Fn=Fn−1+Fn−2).

1) Assertions

Une assertion échoue si l’expression booléenne qui suit le mot clé assert est fausse. Si elle est vraie, l’exécution continue sans erreur. Une assertion permet donc de vérifier, par exemple, le retour d’une fonction. Dès qu’une assertion est fausse, l’exécution s’arrête (exception AssertionError).

Exemple :

96a38a4c-320f-418e-8a76-08f5fefe3953

2) Module doctest

Le module doctest permet d’intégrer des tests dans la docstring des fonctions. Les doctests sont repérées par la chaîne >>>. Écrire des doctests permet à la fois de réaliser des tests unitaires, mais aussi de documenter efficacement la fonction.

Exemple :

4497051e-51d9-4d52-8bc7-05bb3f0aae4e

Les tests peuvent être validés depuis l’interpréteur Python (ici, un des tests a échoué) :

f1827109-ba9a-448d-8b7e-f1b2d662189b

3) Module pytest

pytest permet de faire des tests plus complets (vérification qu’une exception est levée par exemple) et propose des diagnostics plus complets et plus explicites que les autres outils.

On peut démarrer l’utilisation de pytest par l’écriture de fonctions préfixées par test_ contenant chacune une assertion.

Exemple :

758ff5b4-0b34-414b-8d67-a54310aa78ba

L’exécution des tests réalisés avec pytest montre un diagnostic plus précis des problèmes (non reproduit ici).

eef17a28-b704-45f9-aca8-c5ce4179f047