NSI (terminale) · Chapitre 10 · Application directe du cours
Problème — Module de validation et tests unitaires
Modularité, mise au point et tests · niveau 2
Énoncé
Problème — Module de validation et tests unitaires.
Concevoir un petit module validation.py regroupant des fonctions de contrôle de saisie : est_email(s) (vérifie la présence d'un seul @ et d'un point après), est_age_valide(n) (entier entre 0 et 120). Documenter chaque fonction et écrire une fonction de tests unitaires regroupant tous les cas.
Corrigé
# fichier validation.py
def est_email(s):
"""Renvoie True si s ressemble a une adresse email simple.
Critere : exactement un '@' et au moins un '.' apres le '@'.
"""
if s.count("@") != 1:
return False
partie_locale, domaine = s.split("@")
return len(partie_locale) > 0 and "." in domaine
def est_age_valide(n):
"""Renvoie True si n est un age plausible (entier de 0 a 120)."""
return isinstance(n, int) and 0 <= n <= 120
def test_validation():
# Tests de est_email
assert est_email("alice@exemple.fr") == True
assert est_email("bob@site.com") == True
assert est_email("pasdarobase.fr") == False # pas de @
assert est_email("a@@b.fr") == False # deux @
assert est_email("a@sansdomaine") == False # pas de point
assert est_email("@exemple.fr") == False # partie locale vide
# Tests de est_age_valide
assert est_age_valide(0) == True # borne basse
assert est_age_valide(120) == True # borne haute
assert est_age_valide(25) == True
assert est_age_valide(-1) == False
assert est_age_valide(121) == False
assert est_age_valide("30") == False # mauvais type
print("test_validation : tous les tests passent.")
test_validation()
Ce module illustre la démarche complète : spécification par docstring, fonctions courtes et indépendantes, et jeu de tests couvrant cas généraux, cas limites et cas d'erreur.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.