• 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

L’intégralité des patients pris en charge par le SMUR d’Annecy et inclus dans notre étude a bénéficié d’une prise en charge dans l’optique d’être reperfusé,

from random import randint # importation de la fonction randint disponible dans la bibli random n = randint(1,10) # choisi de fa¸ con ´ equiprobable un entier entre 1 et 10. from

Trace une grille de nb_colonnes × nb_lignes carrés contigus de même taille, remplis éventuellement (plein) de la même couleur. On pourra soit utiliser une boucle d'appels

Pour éviter que quelqu’un ne vienne truquer le livre de compte, après chaque transaction on ajoute dans le livre une certification construite à partir d’une preuve de travail..

Lorsqu’une erreur se produit lors de l’exécution d’un programme Python l’utilisateur reçoit un message d’erreur qui commence par Traceback (most recent call last): Pour

Tester la fonction sur chaque sommet s du graphe de la figure 3.2 , et afficher la liste des voisins de s après chaque test pour repérer les sommets marqués et vérifier que ce sont

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

Les performances attendues, lors de la réalisation des tranchées par les entreprises de RTU dans la chaussée municipale, ont été définies conjointement par des municipalités et