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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. 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
    `

    • -1
    • 0
    • 5
    • None
    Voir la réponse

    -1

    remise(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.