Présentation de DyPyBench : Un nouvel outil de benchmark Python
DyPyBench propose un ensemble varié de projets pour l'analyse dynamique en Python.
― 8 min lire
Table des matières
- C'est quoi DyPyBench ?
- Pourquoi un benchmark est important ?
- Choisir les projets pour le benchmark
- Rendre les projets prêts à exécuter
- Analyse dynamique avec DynaPyt
- Applications réelles de DyPyBench
- 1. Comparer des Graphes d'appels dynamiques et statiques
- 2. Données d’entraînement pour les modèles d'apprentissage automatique
- 3. Extraction de spécifications à partir de traces d'exécution
- La structure de DyPyBench
- Résultats des cas de test
- Propriétés d'exécution
- Interaction avec l'utilisateur
- Travaux futurs
- Conclusion
- Source originale
- Liens de référence
Python est devenu super populaire au fil des ans. On l’utilise dans plein de domaines, comme l'apprentissage automatique, l'analyse de données et les applications web. Cette popularité vient de sa facilité d'utilisation, de sa flexibilité et de ses nombreuses bibliothèques. Cependant, analyser les programmes Python peut être compliqué à cause de sa nature dynamique. Contrairement à d'autres langages de programmation qui ont des tests de référence standard pour évaluer les performances et analyser le code, Python n’a pas un ensemble complet d'exemples pouvant être utilisés à ces fins. Pour répondre à ce problème, on vous présente DyPyBench, un nouvel outil qui sert de référence pour les Projets Python.
C'est quoi DyPyBench ?
DyPyBench est une collection de 50 projets Python exécutables avec un total de 681 000 lignes de code. Il a été conçu pour être diversifié, prêt à tourner et prêt à être analysé. Ça veut dire que les utilisateurs peuvent facilement le mettre en place sans se soucier de configurations compliquées ou de dépendances. De plus, il s’intègre avec un cadre d’Analyse Dynamique appelé DynaPyt, qui permet aux utilisateurs de réaliser leurs propres analyses dynamiques sur ces projets.
Pourquoi un benchmark est important ?
Un benchmark est essentiel parce qu'il offre une manière standard de tester et de comparer différentes techniques. Dans le cas de Python, l'absence d'un benchmark bien défini a rendu difficile pour les chercheurs et les développeurs d'évaluer leurs méthodes efficacement. DyPyBench vise à combler ce vide en fournissant un ensemble large et varié de projets pouvant être utilisés pour l'analyse dynamique, les tests et d'autres fins de recherche.
Choisir les projets pour le benchmark
Pour sélectionner les projets inclus dans DyPyBench, on a utilisé une liste populaire appelée Awesome Python, qui contient plein de bibliothèques et d'applications Python bien connues et largement utilisées. On a établi trois critères de sélection :
Popularité : On a ciblé des projets qui ont au moins 500 étoiles sur GitHub. C'est un bon indicateur de l'utilité et du soutien d'un projet au sein de la communauté.
Diversité : On a inclus des projets de différentes catégories pour couvrir divers domaines d'application, comme le développement web, l'apprentissage automatique et le traitement des données.
Suites de tests : On a veillé à ce que les projets choisis aient des suites de tests pouvant être exécutées avec pytest, un cadre de test courant pour Python. Les suites de tests sont importantes parce qu'elles permettent de vérifier la justesse du code.
Rendre les projets prêts à exécuter
Assurer que les projets puissent être exécutés sans trop d'effort était un objectif clé dans la création de DyPyBench. On a utilisé deux stratégies principales pour cela :
Image Docker : On a emballé tout le benchmark dans une image Docker. Cette méthode encapsule toutes les dépendances nécessaires, ce qui rend facile de l'exécuter sur n'importe quelle machine qui supporte Docker.
Installation automatisée : Pour ceux qui ne veulent pas utiliser Docker, on a fourni une interface en ligne de commande qui automatise l'installation et la configuration du benchmark. Cette interface clone les projets, installe les dépendances requises et configure les suites de tests.
Le processus d'installation automatisé permet aux utilisateurs de démarrer rapidement et de se concentrer sur leurs analyses sans perdre de temps sur les configurations des projets.
Analyse dynamique avec DynaPyt
Une fonction clé de DyPyBench est son intégration avec DynaPyt. Ce cadre permet aux utilisateurs d'effectuer diverses formes d'analyse dynamique, qui consistent à examiner comment le code se comporte pendant son exécution. DynaPyt peut collecter des données sur les appels de fonction, la création d'objets et d'autres événements d'exécution en utilisant des techniques d'instrumentation spéciales.
Les utilisateurs peuvent facilement effectuer des analyses dynamiques sur les projets inclus en utilisant des commandes simples. Cette capacité ouvre un large éventail de possibilités pour les chercheurs et les développeurs qui cherchent à étudier le comportement du code Python.
Applications réelles de DyPyBench
DyPyBench peut être utilisé pour divers scénarios de recherche. Ici, on met en avant trois applications importantes :
Graphes d'appels dynamiques et statiques
1. Comparer desLes graphes d'appels sont des outils précieux en analyse de programmes. Ils représentent les relations entre les fonctions d'un programme. DyPyBench permet aux utilisateurs de comparer les graphes d'appels générés par analyse statique avec ceux obtenus par analyse dynamique.
Par exemple, on peut utiliser un outil d'analyse statique appelé PyCG pour générer un graphe d'appels basé sur le code source. Ensuite, on peut utiliser DynaPyt pour créer un graphe d'appels dynamique à travers l'exécution instrumentée des projets. En comparant ces deux graphes, on peut obtenir des informations sur les limites des techniques existantes et améliorer les analyses futures.
2. Données d’entraînement pour les modèles d'apprentissage automatique
Une autre application de DyPyBench est la formation de modèles d'apprentissage automatique. Par exemple, le projet LExecutor utilise des réseaux de neurones pour prédire les valeurs manquantes lors de l'exécution du programme. En exécutant les projets dans DyPyBench et en recueillant des données pendant l'exécution, les chercheurs peuvent produire un grand ensemble de données d'événements d'utilisation de valeurs. Cet ensemble de données peut ensuite être utilisé pour entraîner des modèles plus précis.
3. Extraction de spécifications à partir de traces d'exécution
DyPyBench peut aussi être utilisé pour extraire des spécifications à partir de traces d'exécution. L'extraction de spécifications consiste à extraire des informations utiles sur le comportement logiciel à partir des données d'exécution. En analysant les séquences d'appels de fonction recueillies des projets de benchmark, les chercheurs peuvent identifier des motifs communs et des informations qui peuvent améliorer le code et les pratiques existants.
La structure de DyPyBench
Le benchmark consiste en 50 projets Python, couvrant une variété de domaines d'application. Chaque projet est inclus sur la base des critères mentionnés plus tôt : popularité, diversité et présence de suites de tests. Le nombre total de cas de test à travers ces projets est impressionnant, avec plus de 29 000 tests disponibles pour vérifier la justesse du code.
Résultats des cas de test
Parmi tous les cas de test, un pourcentage significatif réussit avec succès, démontrant que le benchmark se compose de code fiable. Certains tests peuvent échouer en raison d'incompatibilités avec des exigences matérielles ou logicielles spécifiques, mais dans l'ensemble, le taux de réussite élevé indique une bonne couverture des tests et une validité d'exécution.
Propriétés d'exécution
Pour évaluer les propriétés d'exécution de DyPyBench, on examine le temps d'exécution de ses suites de tests. Les temps d'exécution peuvent varier énormément, permettant aux utilisateurs d'interagir avec des projets de différentes tailles et caractéristiques selon leurs besoins spécifiques. Cette diversité aide non seulement à analyser les performances mais offre aussi un moyen d'étudier le comportement d'exécution de divers projets Python.
Interaction avec l'utilisateur
DyPyBench est livré avec une interface en ligne de commande conviviale. Les utilisateurs peuvent effectuer diverses opérations, comme exécuter des projets spécifiques, instrumenter le code et appliquer des analyses dynamiques. Cette facilité d'utilisation améliore l'accessibilité du benchmark, le rendant une ressource précieuse pour les chercheurs et les développeurs.
Travaux futurs
DyPyBench fournit une base solide pour les futurs travaux en analyse dynamique. Il peut être étendu en ajoutant de nouveaux projets ou en mettant à jour les existants, assurant qu'il reste pertinent alors que l'écosystème Python évolue. De plus, les chercheurs peuvent utiliser DyPyBench pour explorer de nouvelles analyses ou améliorer des techniques existantes dans divers domaines.
Conclusion
En résumé, DyPyBench répond à un besoin significatif d'un benchmark complet de projets Python exécutables. En offrant une collection de projets à grande échelle, diversifiée et prête à être analysée, il permet aux utilisateurs de réaliser des analyses dynamiques avec facilité. Le benchmark a aussi des applications pratiques, comme l'ont montré trois scénarios d'utilisation importants : comparer des graphes d'appels, générer des données d'entraînement pour l'apprentissage automatique et extraire des spécifications.
Alors que Python continue de gagner en popularité, DyPyBench fournit un outil essentiel pour les chercheurs et les développeurs cherchant à étudier le code Python et améliorer leurs analyses.
Titre: DyPyBench: A Benchmark of Executable Python Software
Résumé: Python has emerged as one of the most popular programming languages, extensively utilized in domains such as machine learning, data analysis, and web applications. Python's dynamic nature and extensive usage make it an attractive candidate for dynamic program analysis. However, unlike for other popular languages, there currently is no comprehensive benchmark suite of executable Python projects, which hinders the development of dynamic analyses. This work addresses this gap by presenting DyPyBench, the first benchmark of Python projects that is large scale, diverse, ready to run (i.e., with fully configured and prepared test suites), and ready to analyze (by integrating with the DynaPyt dynamic analysis framework). The benchmark encompasses 50 popular opensource projects from various application domains, with a total of 681k lines of Python code, and 30k test cases. DyPyBench enables various applications in testing and dynamic analysis, of which we explore three in this work: (i) Gathering dynamic call graphs and empirically comparing them to statically computed call graphs, which exposes and quantifies limitations of existing call graph construction techniques for Python. (ii) Using DyPyBench to build a training data set for LExecutor, a neural model that learns to predict values that otherwise would be missing at runtime. (iii) Using dynamically gathered execution traces to mine API usage specifications, which establishes a baseline for future work on specification mining for Python. We envision DyPyBench to provide a basis for other dynamic analyses and for studying the runtime behavior of Python code.
Auteurs: Islem Bouzenia, Bajaj Piyush Krishan, Michael Pradel
Dernière mise à jour: 2024-03-01 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2403.00539
Source PDF: https://arxiv.org/pdf/2403.00539
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://dl.acm.org/ccs.cfm
- https://octoverse.github.com/2022/top-programming-languages
- https://github.com/vinta/awesome-python
- https://github.com/chuanconggao/PrefixSpan-py
- https://zenodo.org/doi/10.5281/zenodo.10683759
- https://hub.docker.com/r/islemdockerdev/dypybench
- https://github.com/sola-st/DyPyBench