Tester un code hérité
Poser des tests sur un code qui n'en a pas avant de le modifier : test de caractérisation, points de jonction, dépendances à casser, méthode germe, d'après Feathers.
- 23 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Code hérité : de quoi s'agit-il ?
Voir la réponse
Code sans test, qu'on hésite à modifier de peur de casser ce qui marche. Chez Feathers, l'ancienneté importe peu : c'est l'absence de tests qui le définit.
Une fonction écrite hier sans test est déjà du code hérité : sans filet, chaque modification est un pari.
Pour ce code hérité, quelle valeur attendue un test de caractérisation de
remise(0)doit-il figer ?
```python
def remise(montant):
if montant > 100:
return montant // 10
if montant > 0:
return 5
return -1`-105None
Voir la réponse
-1remise(0)rend vraiment -1, valeur sans doute inattendue : c'est elle qu'on fige. Si on « corrige » à 0 dans le test, on modifie le comportement au lieu de le décrire. On corrigera ensuite, en connaissance de cause.Un test de caractérisation vérifie ce que le code …, et non ce qu'il ….
Voir la réponse
Un test de caractérisation vérifie ce que le code fait réellement, et non ce qu'il devrait faire.
Le but n'est pas de prouver que le code est correct, mais de savoir immédiatement si une modification a changé son comportement.
Test de caractérisation : de quoi s'agit-il ?
Voir la réponse
Test qui fige ce que le code fait réellement aujourd'hui, bizarreries comprises, pour détecter toute modification involontaire de son comportement.
On écrit l'appel, on lit la valeur rendue, puis on la recopie comme valeur attendue. Le test ne dit pas que le code est juste, seulement qu'il n'a pas bougé.
On doit ajouter à une méthode de 200 lignes, sans test et impossible à tester pour l'instant, un calcul de frais de port. Quelle approche limite le risque ?
- Écrire le calcul dans une méthode germe testée à part, et l'appeler par une seule ligne
- Insérer le calcul au bon endroit de la méthode, puis tester l'ensemble de la méthode à la main
- Réécrire d'abord toute la méthode proprement en une fois, puis y ajouter ensuite le calcul demandé
- Reporter l'ajout jusqu'à ce que toute la méthode soit enfin couverte de tests unitaires
Voir la réponse
Écrire le calcul dans une méthode germe testée à part, et l'appeler par une seule ligne
La méthode germe donne du code nouveau avec ses tests sans toucher à l'ancien, qui reste intact. Réécrire d'abord sans filet est le pari que la démarche cherche à éviter.