• Aucun résultat trouvé

1 Tests automatisés

N/A
N/A
Protected

Academic year: 2022

Partager "1 Tests automatisés"

Copied!
15
0
0

Texte intégral

(1)

Skander Zannad et Judicaël Courant Lycée La Martinière-Monplaisir

2013-12-14

(2)

1 Tests automatisés

1.1 Motivation

Cadre : on veut écrire une fonctionnb_carres(n) calculant le nombre de diviseurs den:

(3)

def diviseurs(n) : d = 1

k = 0

while d∗∗2 < n:

# k : nombre de d i v i s e u r s t r o u v é s i f n % d == 0 :

# d e t n/ d d i v i s e n t n k += 2

d += 1 return k

(4)

Ça a l’air correct mais il convient de tester au moins sur quelques exemples :

>>> diviseurs(21) # d i v i s e u r s : 1 , 3 , 7 e t 21 4

>>> diviseurs( 9 ) # d i v i s e u r s : 1 , 3 e t 9 2

>>> # Oups . . .

Bug : il faut revoir la fonction. . .

(5)

Problèmes :

1. Corriger un bug risque d’en introduire un autre (risque≈ 10%

peut monter à30%pour une correction de correction buguée) 2. Personne n’a le courage de refaire tous les tests après chaque

correction.

3. Ce serait indigne d’un être humain.

(6)

1.2 Tests unitaires automatisés

Module pythonunittest: permet d’automatiser des tests.

Usage :

import unittest

c l a s s MesTests(unittest.TestCase) : def test_diviseurs_21(self) :

self.assertEquals(diviseurs( 2 1 ) , 4) def test_diviseurs_9(self) :

self.assertEquals(diviseurs( 9 ) , 3) unittest.main(exit=False)

(7)

Exécution du programme :

>>> ================================ RESTART ================================

>>>

.F

======================================================================

FAIL: test_diviseurs_9 (__main__.MesTests)

--- Traceback (most recent call last):

File "/home/judicael/Documents/mpsi/ipt/cours/14-python-avance/tests.py", line 8, in test_diviseurs_9 self.assertEquals(diviseurs(9), 3)

AssertionError: 2 != 3

--- Ran 2 tests in 0.007s

(8)

FAILED (failures=1)

1. Résultats possibles pour chaque test :Success,Failure,Error.

2. Résumé 1èreligne : «.» pourSuccess, «F»Failure, «E»Error.

3. Description détaillée des tests en échec ou en erreur.

4. Résultat final :FAILED(suivi du compte) ouOK.

NB :

1. Le nomMesTestsn’a aucune importance.

2. Le nom des méthodes effectuant les tests (test_diviseurs_21, test_diviseurs_9) doit commencer partest.

(9)

1.3 Organisation pratique des tests En général :

– fichier contenant les fonctions à tester :prog.py; – fichier contenant les tests :testeur.py;

– depuis IDLE, on exécutetesteur.pyaprès chaque modification deprog.py.

NB : danstesteur.py, importer les fonctions deprog.py: fromprogimportf,g,h

Sortie lorsque tout va bien :

(10)

...

--- Ran 66 tests in 1.144s

OK

(11)

2 Fonctions de première classe

2.1 Motivation

Calculer la somme des carrés des entiers de[[0, n[[: def somme_carres(n) :

s = 0

f o r i in range(n) : s += i∗∗2

return s

Et si on veut les cubes ? Ou la somme des sinus ? Ou . . .

(12)

2.2 Passer une fonction en argument from math import sin

def somme(f, n) : s = 0

f o r i in range(n) : s += f(i)

return s somme(sin, 10) def cube(n) :

return n∗∗3 somme(cube, 42)

Rem : Devoir introduire la fonctioncubeest un peu pénible.

(13)

2.3 Fonctions anonymes

On n’est pas obligé de donner un nom àn7→n3. Notation :

>>> lambda n: n∗∗3

<function <lambda> at 0x7faa26d992a8>

Exemple :

>>> somme(lambda n: n∗∗3 , 42) 741321

(14)

2.4 Retourner une fonction

«Pourn∈N, on notefn:x7→xnex

f :N→RR.

from math import exp def f(n) :

def g(x) :

return x∗∗n ∗ exp(x) return g

somme(f( 3 ) , 17)

(15)

3 Listes en compréhension

(List comprehensions)

Notation pour définir une liste à partir d’une autre liste :

>>> [ 2 ∗ i f o r i in range( 5 ) ] [ 0 , 2 , 4 , 8]

>>> [ 2 ∗ i f o r i in range(10) i f i % 3 == 0 ] [ 0 , 6 , 12 , 18]

Très pratique. Exemple, calcul de la somme des cubes :

>>> sum( [ i ∗∗ 3 f o r i in range(42) ] ) 741321

Références

Documents relatifs

je peux refaire tous les exercices faits ensemble, je peux refaire les exemples dans le cours, je peux aller sur le site www.jouons-aux-mathematiques, et aller dans la page

Il prétend en effet que les chances que deux enfants d’une famille riche subissent une mort subite du nourrisson sont d’une pour 73 millions (résultat auquel il arrive en se basant

Grâce au théorème de Kolmogorov–Smirnov, on peut facilement mettre en oeuvre un test pour déterminer si un vecteur de données est ou non une réalisation d’un échantillon de

Personne n’a le courage de refaire tous les tests après chaque correction.. Résultats possibles pour chaque test : Success,

Personne n’a le courage de refaire tous les tests après chaque correction.. Ce serait indigne d’un

C’est bien d’avoir un usager repr´ esentatif des vrais usagers du site, mais c’est plus important de tester au d´ ebut et souvent... Ce que Krug

[r]

Pour évaluer le bénéfice de trois thérapies alternatives, on constitue trois groupes de 50 fumeurs chacun. Le groupe A est traité par acupuncture, le groupe B par auriculothérapie et