Exercices Architecture & Patterns Couverture de code
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Couverture de code

Ton manager te demande : "On a 80% de couverture de code, c'est bien ?" Ca veut dire que 20% du code n'est execute par aucun test. Et c'est souvent la que se cachent les bugs. La couverture mesure quel pourcentage de ton code est effectivement traverse par tes tests. Si une fonction a 5 branches (if/elif/elif/elif/else), un test qui ne passe que par le premier if ne couvre que 20%.

Imagine cette fonction :

def categorie_age(age):
if age < 0:
return "invalide"
elif age < 13:
return "enfant"
elif age < 18:
return "adolescent"
elif age < 65:
return "adulte"
else:
return "senior"

Si tu ne testes que catégorie_age(25), tu ne couvres qu'une seule branche sur cinq. Les bugs dans les autres branches restent invisibles.

Pour atteindre 100% de couverture, il faut au moins un test par branche :
- age negatif (branche "invalide")
- age entre 0 et 12 (branche "enfant")
- age entre 13 et 17 (branche "adolescent")
- age entre 18 et 64 (branche "adulte")
- age de 65 ou plus (branche "senior")

Et idealement, tu testes aussi les valeurs limites : 0, 12, 13, 17, 18, 64, 65.

Écris une fonction tester_categorie_complete(func) qui prend une fonction de categorisation par age et la teste de maniere a couvrir TOUTES les branches. La fonction doit :

1. Tester chaque catégorie (invalide, enfant, adolescent, adulte, senior)
2. Tester les valeurs limites (0, 12, 13, 17, 18, 64, 65)
3. Renvoyer un dict {"branches_testees": nombre, "total_branches": 5, "couverture": pourcentage}

Le pourcentage doit etre un entier (100, pas 100.0).

Exemple :

tester_categorie_complete(catégorie_age)
renvoie {"branches_testees": 5, "total_branches": 5, "couverture": 100}

Tests (4/5)

Couverture 100%
r = tester_categorie_complete(catégorie_age)
assert r['couverture'] == 100, f'La couverture devrait etre 100%, on a {r["couverture"]}%'
5 branches testees
r = tester_categorie_complete(catégorie_age)
assert r['branches_testees'] == 5, f'Tu devrais tester 5 branches, tu en testes {r["branches_testees"]}'
Format du retour
r = tester_categorie_complete(catégorie_age)
assert 'branches_testees' in r and 'total_branches' in r and 'couverture' in r
Teste les valeurs limites
appels = []
def tracking_func(age):
    appels.append(age)
    return catégorie_age(age)
tester_categorie_complete(tracking_func)
assert 0 in appels, 'Tu devrais tester age=0 (limite enfant)'
assert 65 in appels or 66 in appels, 'Tu devrais tester la limite senior (65)'

+ 0 tests cachés

Indices (3 disponibles)

solution.py