2. Spécification et tests
Durant la phase de conception d'un programme, on commence par
écrire la spécification du programme (en utilisant des docstrings : chaines de caractères situées en début de programme et juste en dessous des définitions de fonctions, classes,...)
écrire des jeux de tests pour valider le fonctionnement du programme.
La spécification décrit les entrées et sorties du programme, ainsi que leurs types.
Les tests vérifient que les sorties du programme sont conformes à ce que l'on attend.
Exemple :
Voici une fonction avec sa spécification.
def est_pair(n):
"""Indique si un nombre est pair ou non
Paramètres
----------
n: int
Sorties
-------
bool
True si n est pair, False sinon
"""
if n % 2 == 0:
return True
else:
return False
Ou plus succinctement avec les annotations de type:
def est_pair(n: int) -> bool:
"Indique si un nombre est pair ou non"
if n % 2 == 0:
return True
else:
return False
Maintenant un ensemble de tests:
assert est_pair(2) is True
assert est_pair(5) is False
assert est_pair(1381635162) is True
assert est_pair(-3565454165461) is False
# le is True est redondant
assert est_pair(4)
# le is False peut être écrit
assert not est_pair(5)
On peut également ajouter un message en cas d'erreur sur un test en le séparant par une virgule.
assert est_pair(2) is True, "Le nombre deux n'a pas été reconnu comme pair"
Ainsi si la fonction présentait un jour une erreur, le programme s'arrêterait en levant l'exception avec le message d'explication.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Le nombre deux n a pas été reconnu comme pair