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.

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

Des erreurs logiques : certaines fonctions s’exécutent un nombre anormal de fois,<br />

pas assez ou trop souvent.<br />

Des bottlenecks restés inaperçus : une fonction a priori anodine apparaît comme<br />

une source de ralentissements importants, soit par sa lenteur, soit par un nombre<br />

énorme d’appels.<br />

Des erreurs de conception : les statistiques remontées par le profiler offrent une<br />

vision particulière du programme, et peuvent parfois attirer l’attention sur des<br />

problèmes de conception.<br />

Méthodes de profiling<br />

Il existe plusieurs méthodes pour profiler le code. L’approche la plus courante consiste<br />

à mesurer le temps passé dans chacune des méthodes et fonctions traversées.<br />

C’est une méthode déterministe qui se base sur les mêmes techniques que le coverage<br />

vu dans le chapitre précédent. On dresse un tableau du code appelé, avec des informations<br />

annexes comme :<br />

le nombre d’appels ;<br />

la liste des appelants, c’est-à-dire les fonctions qui utilisent le code en cours ;<br />

la liste des appelés, c’est-à-dire les fonctions appelées par le code en cours.<br />

Une autre méthode beaucoup plus abstraite et moins facile à mettre en œuvre, consiste<br />

à récupérer des échantillons aléatoires d’instructions exécutées et à en déduire où<br />

l’interpréteur passe le plus de temps.<br />

Nous l’avons vu pour le coverage, Python fournit tous les points d’entrée nécessaires<br />

pour mettre en place facilement une solution déterministe. C’est cette approche qui<br />

est implémentée par plusieurs modules de la bibliothèque standard. L’utilisation d’un<br />

tel outillage allonge les temps d’exécution, mais ne remet généralement pas en cause<br />

l’interprétation des résultats, car ce ralentissement est ridicule par rapport à la durée<br />

d’exécution de n’importe quelle fonction.<br />

Outils de profiling<br />

Il existe différents outils de profiling dans la bibliothèque standard. Le plus connu est<br />

profile.<br />

Le module profile<br />

profile peut être directement utilisé en ligne de commande pour tester un programme<br />

Python.<br />

433

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

Saved successfully!

Ooh no, something went wrong!