L'étape rouge
En A2, que faisiez-vous d'une étape qui laissait la suite au rouge ?
Coding Week
Tests, seams, reproductibilité · A4, Coding Week 1A
Hermann Agossou
École Centrale Casablanca • 2026 • Casablanca, Maroc
Doctorant, UTER MID@S, ECC / UH2C
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Section
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Deux questions sur le refactoring
En A2, que faisiez-vous d'une étape qui laissait la suite au rouge ?
Qui les avait écrits ? Et comment savait-on qu'ils testaient la bonne chose ?
En A2, la suite de tests vous était fournie et vous ne faisiez que l'exécuter. Aujourd'hui, c'est vous qui l'écrivez et qui devez prouver qu'elle détecte quelque chose.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Qu'est-ce qui vous dit qu'il ne reviendra pas
Left
`parse_amount` transmet directement `"12,50"` à `Decimal`.
Right
Remplacer la virgule par un point avant la conversion.
Le programme marche de nouveau. Qu'est-ce qui vous garantit que quelqu'un ne réintroduira pas ce bug le mois prochain sans que personne ne s'en aperçoive ?
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Le vocabulaire avant l'outillage
Un énoncé exécutable de ce que le code doit faire.
Un endroit où l'on peut changer le comportement sans éditer à cet endroit.
L'endroit où l'on décide lequel des comportements sera utilisé.
Un test qui fige ce que le code fait aujourd'hui, pas ce qu'il devrait faire.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Le test qui échoue vient d'abord
Workflow 01
Écrire un test qui échoue. C'est la preuve qu'il détecte quelque chose.
Workflow 02
Le faire passer de la manière la plus simple, même laide.
Workflow 03
Supprimer la duplication introduite. C'est ici que la conception arrive.
Voir: [1] Beck (2002)
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Ce que le code doit faire, pas ce qu'il fait
Left
Il confirme ce que le code fait déjà.
Right
Il énonce ce que le code doit faire.
Un test est la seule forme d'énoncé qui survit à son auteur, à son langage et à son implémentation.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
Avant de corriger, pas après
Workflow 01
Exiger que `parse_amount("12,50")` vaille `Decimal("12.50")`.
Workflow 02
Échec : obtenu `Decimal(0)`. C'est la preuve rouge.
Workflow 03
Un test passe. C'est la preuve verte.
Exécutez le test sur le code non corrigé et confirmez qu'il échoue pour la raison annoncée, puis réappliquez le correctif et confirmez qu'il passe. Un test déjà vert avant le correctif n'a jamais capturé le défaut.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le test comme preuve
L'assertion est à vous
| Appel | Obtenu avec le défaut | Attendu |
|---|---|---|
| Montant `100`, remise `0.10` | `Decimal("81")` | `Decimal("90")` |
Écrivez l'assertion, exécutez-la sur le code non corrigé, et notez le message d'échec exact. Si votre premier essai est vert, c'est que vous l'avez écrit contre le correctif.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Section
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Et le dilemme que cela crée
Du code legacy est du code sans tests. Ni son âge ni son auteur n'entrent en compte : c'est l'absence de tests qui rend le changement risqué.
Pour changer du code en sécurité, on voudrait des tests. Pour poser des tests, il faut souvent changer le code. C'est ce cercle que le seam ouvre.
Voir: [2] Feathers (2004)
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Et le point d'activation qui décide
Left
`taux_du_jour` choisit lui-même le client HTTP.
Right
`taux_du_jour` reçoit le client comme paramètre.
Substituez un stub à travers le seam et vérifiez que le vrai collaborateur n'est jamais appelé. S'il s'exécute quand même, le seam n'est pas là où vous le croyiez.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Exemple entièrement traité
01
Figer ce que le code fait aujourd'hui, sans juger si c'est correct.
02
Un paramètre, une valeur par défaut : aucun appelant existant ne change.
03
Le test ne dépend plus du réseau.
04
Toujours vert : le comportement a été conservé.
Le test de caractérisation, écrit avant toute modification, doit rester vert après l'introduction du seam. Il vérifie la conservation du comportement couvert par ce test ; il ne prouve rien sur les cas absents.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Sans modifier le comportement
Prenez la fonction distribuée, écrivez son test de caractérisation, introduisez un seam, et mettez-la sous test sans changer son comportement observable.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Écrit pour des scientifiques, pas des ingénieurs logiciel
Voir: [3] Wilson et al. (2017)
Ce n'est pas un idéal d'ingénierie : c'est le seuil en dessous duquel un travail n'est pas rejouable.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Le lecteur suivant est peut-être une machine
Left
« Ça marche chez moi. »
Right
Le projet porte ce dont il a besoin.
Le prochain lecteur de votre projet est peut-être un assistant. Un assistant qui ne sait pas lancer votre projet depuis un clone vierge ne peut pas vous aider dessus.
Voir: [4] Wiggins (2011)
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Chaque commande inventée est un défaut
Workflow 01
Partir d'un répertoire neuf, sans état local implicite.
Workflow 02
Exécuter uniquement les étapes écrites dans le README.
Workflow 03
Chaque commande improvisée devient un défaut à corriger.
Clonez dans un répertoire vide, sur une machine où rien n'est préinstallé, suivez uniquement les étapes écrites et notez chaque commande qu'il a fallu inventer. Chacune est une ligne manquante dans les instructions.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Le code des autres
Trois critères, pas trois outils
Il survit à l'implémentation, au langage et à l'auteur.
Changer le comportement sans éditer sur place.
Un projet qui ne tourne que chez son auteur n'est pas fini.
pytest, les fixtures, les environnements virtuels, la CI. En A5 : quand une contribution arrive plus vite qu'on ne peut la relire, c'est le test qui tient encore le comportement.
Coding Week
1A · Coding Week · A4 Livrer du logiciel robuste · H. Agossou
Appendix