• Aucun résultat trouvé

Tests & Documentation - Les bonnes pratiques de la programmation avec Python

N/A
N/A
Protected

Academic year: 2021

Partager "Tests & Documentation - Les bonnes pratiques de la programmation avec Python"

Copied!
17
0
0

Texte intégral

(1)

HAL Id: cel-02182414

https://hal.archives-ouvertes.fr/cel-02182414

Submitted on 12 Jul 2019

HAL is a multi-disciplinary open access

archive for the deposit and dissemination of

sci-entific research documents, whether they are

pub-lished or not. The documents may come from

teaching and research institutions in France or

abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est

destinée au dépôt et à la diffusion de documents

scientifiques de niveau recherche, publiés ou non,

émanant des établissements d’enseignement et de

recherche français ou étrangers, des laboratoires

publics ou privés.

Tests & Documentation - Les bonnes pratiques de la

programmation avec Python

Stéphane Guinard

To cite this version:

Stéphane Guinard. Tests & Documentation - Les bonnes pratiques de la programmation avec Python.

École d’ingénieur. France. 2018. �cel-02182414�

(2)

HAL Id: cel-02182414

https://hal.archives-ouvertes.fr/cel-02182414

Submitted on 12 Jul 2019

HAL is a multi-disciplinary open access

archive for the deposit and dissemination of

sci-entific research documents, whether they are

pub-lished or not. The documents may come from

teaching and research institutions in France or

abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est

destinée au dépôt et à la diffusion de documents

scientifiques de niveau recherche, publiés ou non,

émanant des établissements d’enseignement et de

recherche français ou étrangers, des laboratoires

publics ou privés.

Tests

Documentation - Les bonnes pratiques de la

programmation avec Python

Stéphane Guinard

To cite this version:

Stéphane Guinard. Tests

Documentation - Les bonnes pratiques de la programmation avec Python. École d’ingénieur. France.

2018. �cel-02182414�

(3)

Tests & Documentation

Les bonnes pratiques de la programmation avec Python

Division des enseignements en informatique

(4)
(5)

Pourquoi documenter son code

• Expliquer ce que font les fonctions, classes, modules...

• Indispensable pour rendre le code exploitable par d’autres

def m a _ f o n c t i o n ( a , b ) : """ L i g n e g ´e n ´e r a l e de d e s c r i p t i o n D e s c r i p t i o n p l u s d ´e t a i l l ´e e , si besoin , p o u r e x p l i q u e r c o m m e n t la f o n c t i o n f a i t ce qu ’ e l l e fait , de ce qu ’ e l l e u t i l i s e ... : p a r a m a : d e s c r i p t i o n de ce que c o n t i e n t a : t y p e a : t y p e de la v a l e u r a t t e n d u e d a n s a : p a r a m b : d e s c r i p t i o n de ce que c o n t i e n t b : t y p e b : t y p e de la v a l e u r a t t e n d u e d a n s b : r e t u r n : d e s c r i p t i o n de ce que r e t o u r n e la f o n c t i o n : r e t u r n t y p e : t y p e de la v a l e u r r e t o u r n ´e e par la f o n c t i o n """ Documentation 2

(6)

Doctrings vs Commentaires

Les commentaires sont compl`

etement ignor´

es par l’interpr´

eteur Python

tandis que les docstrings sont charg´

ees et gard´

ees en m´

emoire.

Docstrings :

""" D o c s t r i n g s """ ’ ’ ’ D o c s t r i n g s ’ ’ ’

Commentaires :

# C o m m e n t a i r e Documentation 3

(7)

R`

egles d’usage et convention

Apr`

es le prototype de la fonction :

""" R ´e sum ´e sur un s e u l e l i g n e . C o n t e n u d ´e t a i l l ´e sur p l u s i e u r s l i g n e s . """

Les balises :

""" : p a r a m a r g 1 : d e s c r i p t i o n de l ’ a r g u m e n t 1 : t y p e a r g 1 : t y p e de l ’ a r g u m e n t 1 : p a r a m a r g 2 : d e s c r i p t i o n de l ’ a r g u m e n t 2 : t y p e a r g 1 : t y p e de l ’ a r g u m e n t 2 : r e t u r n : d e s c r i p t i o n de la v a l e u r de r e t o u r : r t y p e : t y p e de la v a l e u r de r e t o u r """ Documentation 4

(8)

Exemple

def a d d i t i o n ( a , b ) : """ A d d i t i o n de d e u x n o m b r e s . C e t t e f o n c t i o n p e r m e t d ’ a d d i t i o n n e r d e u x n o m b r e s r ´e els et r e t o u r n e ´e g a l e m e n t un n o m b r e r ´e el . E l l e est ´e q u i v a l e n t e `a l ’ op ´e r a t e u r ’+ ’. : p a r a m a : p r e m i e r n o m b r e `a a d d i t i o n n e r : t y p e a : f l o a t : p a r a m b : d e u x i `e me n o m b r e `a a d d i t i o n n e r : t y p e b : f l o a t : r e t u r n : r ´e s u l t a t de l ’ a d d i t i o n : r t y p e : f l o a t """ r e t u r n a + b Documentation 5

(9)

Acc`

es `

a la documentation

• La fonction help :

> > > h e l p( m a t h . cos ) H e l p on built -in f u n c t i o n cos in m o d u l e m a t h : cos ( . . . ) cos ( x ) R e t u r n the c o s i n e of x ( m e a s u r e d in r a d i a n s ) .

• L’attribut " doc " :

> > > m a t h . cos . _ _ d o c _ _ ’ cos ( x ) \ n \ n R e t u r n the c o s i n e of x ( m e a s u r e d in r a d i a n s ) . ’ Documentation 6

(10)
(11)

Les tests en programmation

C’est une pratique courante en programmation :

• Les tests unitaires permettent de tester de petites portions de code

(une fonction, une classe, un module) ind´

ependamment du reste du

programme.

• Les tests fonctionnels permettent de valider les fonctionnalit´

es

d’une application d’un point de vue utilisateur. Ils permettent de

valider l’enchaˆınement des briques ´

el´

ementaires.

• Les tests de performances sont constitu´

es de tout un ensemble de

tests li´

es `

a la performance de l’application : test de charge, tests de

performance en temps de r´

eponse, tests aux limites...

(12)

Tests unitaires

Nous nous int´

eresserons dans ce cours uniquement `

a la mise en œuvre de

tests unitaires.

Concr`

etement

Un test unitaire est un morceau de code permettant d’en soumettre un

autre et d’analyser le r´

esultat obtenu.

Pourquoi faire des tests unitaires :

• s’assurer que l’application fonctionne

• tester les cas limites

• apr`es modification/ajout de code, s’assurer que l’application

fonctionne toujours

(13)

Comment ´

ecrire ses tests

Les bonnes pratiques :

• tester la r´eussite, l’´

echec et la coh´

erence

• rechercher la difficult´e, proscrire les tests triviaux

• ´

ecrire des tests d´

eterministes

• s´

eparer le code des tests du code de l’application

N’h´

esitez pas `

a ´

ecrire plusieurs tests par fonction !!

(14)

Exemple 1

def f a c t o r i e l l e ( n ) : if t y p e( n ) != t y p e(int) : p r i n t(" E r r o r : n d o i t e t r e un e n t i e r ") r e t u r n F a l s e if n < 0: p r i n t(" E r r o r : n d o i t e t r e >= 0 ") r e t u r n F a l s e if n > 1 0 0 0 0 : p r i n t(" E r r o r : n est t r o p g r a n d ") r e t u r n F a l s e if n == 1 or n == 0: r e t u r n 1 e l s e: r e t u r n n * f a c t o r i e l l e ( n -1) # T e s t s > > > [ f a c t o r i e l l e ( n ) for n in r a n g e(6) ] [1 , 1 , 2 , 6 , 24 , 1 2 0 ] > > > f a c t o r i e l l e ( -1) E r r o r : n d o i t e t r e >= 0 > > > f a c t o r i e l l e ( 1 . 5 ) E r r o r : n d o i t e t r e un e n t i e r > > > f a c t o r i e l l e (1 e 1 0 0 ) E r r o r : n est t r o p g r a n d Tests 10

(15)

Exemple 2

Si l’on est pas sur de la pr´

esentation du r´

esultat.

def d i v i s e _ p a r _ u n ( n ) : """ R e t o u r n e la d i v i s i o n d ’ un n o m b r e e n t i e r par 1. """ if t y p e( n ) != t y p e(int) : p r i n t(" E r r e u r : n d o i t e t r e un e n t i e r ") r e t u r n F a l s e r e t u r n n / 1 # T e s t s > > > d i v i s e _ p a r _ u n (4) 4.0 # On s ’ a t t e n d a i t a "4" : -( > > > d i v i s e _ p a r _ u n (4) == 4 T r u e # On s ’ a t t e n d a i t a T r u e : -) > > > d i v i s e _ p a r _ u n ( 1 . 5 ) E r r e u r : n d o i t e t r e un e n t i e r

(16)

Doctest

Il existe des modules permettant de faciliter la mise en œuvre de tests

unitaires : doctest. C

¸ a nous permet notamment d’´

ecrire les tests

directement dans la documentation des fonctions.

(17)

Doctest

A l’ex´

ecution, ¸

ca ressembla `

a ¸ca :

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * F i l e " _ _ m a i n _ _ " , l i n e 4 , in _ _ m a i n _ _ . a d d i t i o n F a i l e d e x a m p l e : a d d i t i o n (0 , 1) E x p e c t e d : 0 Got : 1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 i t e m s had f a i l u r e s : 1 of 2 in _ _ m a i n _ _ . a d d i t i o n *** T e s t F a i l e d *** 1 f a i l u r e s . T e s t R e s u l t s ( f a i l e d =1 , a t t e m p t e d =2) Tests 13

Références

Documents relatifs

9 En mode TEST permet de mettre un état sur chaque sortie et de lire un état sur chaque entrée.... Le Le Test Test Boundary Scan Boundary Scan ( ( 2 2

Pour l’option « Cours collectifs », le (la) candidat(e) doit participer à une épreuve pratique « Fitness » de 15 minutes : Le (la) candidat(e) doit démontrer ses connaissances

[r]

5 Pour les besoins du présent rapport, la principale mesure de l’efficacité est le « score de dépistage en série », 6 le pourcentage d’échantillons palustres du panel

On calcule les distances entre couples de points à partir des variables centrées et réduites pour faire jouer le même rôle aux deux variables (en réalité on calcule

o Remplacez chaque donnée de la première variable par son rang (en utilisant la fonction rang ou à la main) puis chaque donnée de la deuxième variable par son rang également.

Quelques problèmes avec les tests tels que vous les avez pratiqués : Vous pensez qu’il n’y a pas de problèmes, alors que vous avez simplement oublié de lancer certains tests ;?. =

[r]