Débutant
🧠 Fondamentaux
10 XP
0 personnes ont réussi
Tester les cas limites
Les bugs qui arrivent en production, ce ne sont presque jamais les cas normaux. C'est toujours la liste vide que personne n'a testee, le nombre negatif que personne n'a anticipe, la chaine avec que des espaces. Ce sont les cas limites (edge cases), et c'est la que tu dois concentrer tes efforts de test.
Voici les cas limites les plus frequents en Python :
Pour les listes : une liste vide [], une liste avec un seul élément [42], une tres longue liste. Pour les nombres : zero, les nombres negatifs, de tres grands nombres. Pour les chaines : une chaine vide "", une chaine avec que des espaces " ", None au lieu d'une chaine. Pour les dictionnaires : un dict vide {}, des clés manquantes.
Imagine une fonction qui calcule la moyenne d'une liste de nombres. Le cas normal, c'est [10, 20, 30] qui donne 20. Mais que se passe-t-il avec une liste vide ? Avec un seul élément ? Avec des negatifs ?
Un bon testeur pense comme quelqu'un qui essaie de casser le code. Pas par mechancete, mais parce que si toi tu ne trouves pas les bugs, tes utilisateurs les trouveront.
Écris une fonction tester_trouver_max(func) qui teste une fonction trouver_max(liste) censee renvoyer le plus grand élément d'une liste. Ta fonction doit :
1. Tester le cas normal (plusieurs nombres) 2. Tester avec un seul élément 3. Tester avec des nombres negatifs 4. Tester avec une liste vide (la fonction doit renvoyer None) 5. Tester avec des doublons du max
Renvoie le nombre de tests qui ont passe (un entier).
Exemple :
def bon_max(liste): if not liste: return None return max(liste)
tester_trouver_max(bon_max) renvoie 5
Tests (4/5)
Fonction correcte donne 5
def bon_max(lst):
if not lst: return None
return max(lst)
assert tester_trouver_max(bon_max) == 5, 'Une bonne fonction devrait passer les 5 tests'
Detecte absence de gestion liste vide
def max_sans_vide(lst):
return max(lst)
assert tester_trouver_max(max_sans_vide) < 5, 'Tes tests doivent detecter que cette fonction plante avec une liste vide'
Detecte un bug sur les negatifs
def max_positif_only(lst):
if not lst: return None
m = 0
for x in lst:
if x > m: m = x
return m
assert tester_trouver_max(max_positif_only) < 5, 'Tes tests doivent detecter que cette fonction ne gere pas les negatifs'
Renvoie bien un entier
def dummy(lst):
if not lst: return None
return max(lst)
r = tester_trouver_max(dummy)
assert isinstance(r, int), 'La fonction doit renvoyer un entier (le nombre de tests passes)'