• 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

L'utilisation d'un prototype « tous niveaux » incluant un sous ensemble de la fonctionnalité complète touchant tous les niveaux de l'architecture permet de réaliser les

Tests de recette : test de r´ eception du logiciel chez le client final Tests int´ egration syst` eme : test de l’int´ egration du logiciel avec d’autres logiciels.. Tests systeme

Quand tous les sites départementaux des finances seront équipés (vraisemblablement dans le cou- rant de l’année 1997), cela modifiera considéra- blement le panorama de l’EDI, car

Ö on cherche à vérifier que chaque ligne d'un programme est couvert par au moins un test. Ö ne garantît pas

Le temps passe jour après jour dans le monde des grands et des enfants, habitant dans tous les moments une poésie de chaque instant, dans chaque instant une poésie de tous

Si pas de filtre : Après chaque patient Si filtre : Après chaque patient et pour 1 service : Tous les 15 jours. Tous les 6 mois (1 service) / ou non réalisé A redéfinir Modalités

Si pas de filtre : Après chaque patient Si filtre : Après chaque patient et pour 1 service : Tous les 15 jours. Tous les 6 mois (1 service) / ou non réalisé A redéfinir Modalités

Parmi tous les tests essayés (avec ou sans trend, inclusion de la croissance économique ou de variables retardées, modèle de correction d’erreur…), le modèle