Niveau 08 — Tests et bonnes pratiques

Objectif du niveau

À la fin de ce niveau, tu sais écrire des tests automatisés avec pytest : installer l'outil, écrire des fonctions test_* avec assert, couvrir les cas limites, et lancer la suite après chaque modification. Tu sais aussi rendre un projet présentable et maintenable : structure de dossiers propre, noms explicites, fonctions courtes, docstrings, un README utile, et des commentaires qui expliquent le pourquoi plutôt que de paraphraser le code. Tu sais enfin refactorer : améliorer du code existant sans changer son comportement — les tests servant de filet.

Prérequis

Durée indicative et avertissement honnête

2 à 3 semaines à raison de 30–60 min par jour.

Techniquement, ce niveau est l'un des plus abordables : assert resultat == attendu n'a rien de sorcier, et pytest s'installe en une commande. La vraie difficulté est ailleurs : elle est culturelle. Écrire des tests semble d'abord une perte de temps (« mon code marche, je l'ai essayé »), et refactorer du code qui fonctionne semble du zèle. Le déclic arrive la première fois qu'un test attrape une régression que tu n'aurais jamais vue — le niveau est construit pour provoquer ce moment tôt. Autre friction honnête : tester du code qui fait input() et print() partout est pénible ; tu vas devoir restructurer tes projets du niveau 07 pour séparer calcul et affichage, et c'est un vrai travail.

Leçons prévues

Chaque leçon suivra le template 17 sections (lessons/TEMPLATE_LECON.md).

TitreNotions couvertesStatut
08-1Structure propre et nommageArborescence type d'un petit projet, noms de variables/fonctions/modules explicites (conventions PEP 8 essentielles), fonctions courtes à responsabilité unique, séparer calcul et affichage (préparer la testabilité)✅ Disponible
08-2pytest — premiers testsInstaller pytest (pip install), fichiers test_*.py, fonctions test_*, assert, lancer pytest et lire son rapport (le point vert, le F, le diff d'assertion), tester une fonction pure✅ Disponible
08-3Cas limites et tests d'exceptionsChoisir ses cas de test (nominal, limites, entrées vides, valeurs extrêmes), pytest.raises pour tester qu'une exception est levée, organiser plusieurs tests par fonction, le réflexe « bug trouvé = test ajouté »✅ Disponible
08-4Refactoring, docstrings et READMERefactorer sous protection des tests (renommer, extraire une fonction, supprimer un doublon), docstrings utiles (quoi/paramètres/retour), commentaires pourquoi vs bruit, écrire le README d'un projet (installation, usage, exemple)✅ Disponible

Pièges et erreurs emblématiques du niveau

Mini-projets du niveau

Fiches détaillées dans /projects.

Critères de sortie

Commit de fin de niveau

git add lessons/level-08-tests-bonnes-pratiques
git commit -m "exercises: complete level 08 (testing and good practices)"