17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Évolution des use cases<br />

<strong>Programmation</strong> dirigée par les tests<br />

CHAPITRE 12<br />

Lorsqu’un nouveau bogue ou un fonctionnement non souhaité est découvert, le cheminement<br />

qui l’a provoqué devient un nouveau use case et le test unitaire correspondant<br />

doit être modifié pour en tenir compte.<br />

L’ajout de ce nouveau cas doit faire échouer le test sur l’ancien code. Ce n’est qu’après<br />

avoir validé que le test provoquait bien le problème à corriger que le code est modifié.<br />

Pour notre fonction de moyenne, un cas spécial a été rapporté par un utilisateur : si<br />

aucun paramètre n’est fourni, une erreur de division par zéro est provoquée. L’utilisateur<br />

souhaite que la fonction renvoie None dans ce cas.<br />

Un nouveau test correspondant à ce use case est ajouté.<br />

Ajout d’un use case<br />

#!/usr/bin/python<br />

# -*- coding: utf8 -*-<br />

def moyenne(*nombres):<br />

taille = len(nombres)<br />

somme = 0<br />

for nombre in nombres:<br />

somme += nombre<br />

return somme / taille<br />

# cas simples<br />

assert moyenne(5) == 5<br />

assert moyenne(5, 8, 9) == 7<br />

assert moyenne(5, 8, 9, 78, 43) == 28<br />

# aucun paramètre en entrée<br />

assert moyenne() == None<br />

Le développeur valide dans un premier temps que ce test provoque bien l’erreur indiquée...<br />

Test de la division par zéro<br />

[tziade@Tarek Desktop]$ python tests_unitaires.py<br />

Traceback (most recent call last):<br />

File "tests_unitaires.py", line 15, in ?<br />

assert(moyenne() == None)<br />

File "tests_unitaires.py", line 9, in moyenne<br />

return somme / taille<br />

ZeroDivisionError: integer division or modulo by zero<br />

... puis corrige son implémentation pour que le test passe.<br />

391

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!