ChatPaper.aiChatPaper

Prédiction de la couverture de code sans exécution

Predicting Code Coverage without Execution

July 25, 2023
Auteurs: Michele Tufano, Shubham Chandel, Anisha Agarwal, Neel Sundaresan, Colin Clement
cs.AI

Résumé

La couverture de code est une métrique largement utilisée pour quantifier l'étendue à laquelle les éléments d'un programme, tels que les instructions ou les branches, sont exécutés lors des tests. Le calcul de la couverture de code est gourmand en ressources, nécessitant la compilation et l'exécution du code avec un surcoût supplémentaire pour l'instrumentation. De plus, le calcul de la couverture pour n'importe quel extrait de code nécessite le contexte complet du programme. L'utilisation de l'apprentissage automatique pour amortir ce processus coûteux pourrait réduire le coût de la couverture de code en ne nécessitant que le contexte du code source, et la tâche de prédiction de la couverture de code pourrait constituer un nouveau benchmark pour évaluer la capacité des modèles à comprendre le code. Nous proposons une nouvelle tâche de benchmark appelée Prédiction de Couverture de Code pour les Modèles de Langage à Grande Échelle (LLMs). Nous formalisons cette tâche pour évaluer la capacité des LLMs à comprendre l'exécution du code en déterminant quelles lignes d'une méthode sont exécutées par un cas de test et des entrées donnés. Nous constituons et publions un ensemble de données que nous appelons COVERAGEEVAL en exécutant des tests et du code issus du dataset HumanEval et en collectant les informations de couverture de code. Nous rapportons les performances de quatre LLMs de pointe utilisés pour des tâches liées au code, incluant GPT-4 et GPT-3.5-Turbo d'OpenAI, BARD de Google, et Claude d'Anthropic, sur la tâche de Prédiction de Couverture de Code. Enfin, nous argumentons que la couverture de code en tant que métrique et source de données de pré-entraînement est précieuse pour la performance globale des LLMs sur les tâches d'ingénierie logicielle.
English
Code coverage is a widely used metric for quantifying the extent to which program elements, such as statements or branches, are executed during testing. Calculating code coverage is resource-intensive, requiring code building and execution with additional overhead for the instrumentation. Furthermore, computing coverage of any snippet of code requires the whole program context. Using Machine Learning to amortize this expensive process could lower the cost of code coverage by requiring only the source code context, and the task of code coverage prediction can be a novel benchmark for judging the ability of models to understand code. We propose a novel benchmark task called Code Coverage Prediction for Large Language Models (LLMs). We formalize this task to evaluate the capability of LLMs in understanding code execution by determining which lines of a method are executed by a given test case and inputs. We curate and release a dataset we call COVERAGEEVAL by executing tests and code from the HumanEval dataset and collecting code coverage information. We report the performance of four state-of-the-art LLMs used for code-related tasks, including OpenAI's GPT-4 and GPT-3.5-Turbo, Google's BARD, and Anthropic's Claude, on the Code Coverage Prediction task. Finally, we argue that code coverage as a metric and pre-training data source are valuable for overall LLM performance on software engineering tasks.
PDF90December 15, 2024