Comment tester du code écrit par un assistant ?
Tester du code généré consiste à l’exécuter sur des exemples dont vous connaissez déjà la réponse, avant de l’utiliser. C’est la seule façon de savoir s’il marche, puisque l’assistant ne le lance pas.
Une boutique en ligne offre la livraison dès 30 euros. Si le code oublie le cas de 30 euros pile, des clients paient une livraison qui devait être gratuite.
À la fin de cette leçon
Remarque
Je peux écrire des cas de test, avec leur réponse attendue, pour vérifier un code que je n’ai pas écrit.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Cas de test | une entrée et le résultat attendu pour cette entrée | |
| Valeur limite | une valeur au bord d’une règle | 3000 pour un seuil de 3000 |
| Résultat attendu | la réponse juste, calculée avant de lancer le code | |
| Résultat obtenu | la réponse que le code rend vraiment | |
| Échec | un cas où le résultat obtenu diffère de l’attendu |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrivez la réponse attendue avant de lancer
Calculez d’abord à la main ce que le code doit rendre. Lancez ensuite, et comparez.
Si vous lancez d’abord, le résultat affiché vous influence : on le trouve vite « plausible ». Une réponse écrite avant n’a pas ce défaut.
Des cas pour une règle de livraison
| Total du panier | Attendu | Pourquoi ce cas |
|---|---|---|
| 2999 centimes | Payante | Juste sous le seuil |
| 3000 centimes | Gratuite | Exactement le seuil |
| 3001 centimes | Gratuite | Juste au-dessus du seuil |
| 0 centime | Payante | Un panier vide |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un code généré, essayé sur les cas
def livraison_gratuite(total_centimes):
return total_centimes > 3000
cas = [[2999, False], [3000, True], [3001, True], [0, False]]
for un_cas in cas:
valeur = un_cas[0]
attendu = un_cas[1]
obtenu = livraison_gratuite(valeur)
if obtenu == attendu:
print("ok", valeur)
else:
print("ECHEC", valeur, "attendu", attendu, "obtenu", obtenu)
Le cas du seuil trouve la faute
Le code compare avec > : il oublie le cas du seuil. Seul le cas de 3000 centimes échoue. Les trois autres passent, ce qui montre pourquoi on teste les bords.
Un test sur 5000 centimes seulement aurait passé. La faute serait restée cachée.
Méfiez-vous des tests écrits par l’assistant
Un assistant sait aussi écrire des tests. Mais s’il a mal compris la règle, ses tests partagent sa faute. Ils passent, et ils sont faux.
Écrivez au moins quelques cas vous-même, à partir de la règle que vous connaissez. Lisez aussi ceux de l’assistant : un test sans assertion ne vérifie rien.
Prédire puis lancer, dans le laboratoire
Dans le projet de la boutique, la fonction change rend la monnaie en pence. Pour un paiement de 500 et un flapjack à 120, calculez : 500 moins 120 donne 380.
Écrivez votre réponse, puis lancez la commande. Les deux commandes suivantes appellent total et asPounds : prévoyez 35 et £0.35 de la même façon.
Calculer la monnaie sur 500 avec un flapjack
docker exec -w /home/node/project agent node -e "const s = require('./shop'); console.log(s.change(500, ['flapjack']))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Calculer le total d’une pomme
docker exec -w /home/node/project agent node -e "const s = require('./shop'); console.log(s.total(['apple']))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Afficher 35 pence en livres
docker exec -w /home/node/project agent node -e "const s = require('./shop'); console.log(s.asPounds(35))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Erreur fréquente
Attention
Beaucoup pensent que si les tests de l’assistant passent, le code est juste. Ces tests vérifient ce que l’assistant a compris, pas ce que vous avez voulu. Écrivez vous-même des cas, surtout aux bords, avant de faire confiance.
Construire les cas et trouver ceux qui échouent
Dans le devoir, une règle dit qu’une valeur est acceptée de bas à haut, bornes comprises. Vous construisez la liste des cas de test. Ce sont les valeurs de bas - 1 à bas + 1 et de haut - 1 à haut + 1, sans doublon, de la plus petite à la plus grande.
Chaque cas porte sa réponse attendue. Vous écrivez ensuite une fonction qui rend les valeurs où le code testé se trompe.