Prevedere la Copertura del Codice senza Esecuzione
Predicting Code Coverage without Execution
July 25, 2023
Autori: Michele Tufano, Shubham Chandel, Anisha Agarwal, Neel Sundaresan, Colin Clement
cs.AI
Abstract
La copertura del codice è una metrica ampiamente utilizzata per quantificare l'estensione in cui gli elementi di un programma, come istruzioni o rami, vengono eseguiti durante i test. Il calcolo della copertura del codice è un processo ad alta intensità di risorse, che richiede la compilazione e l'esecuzione del codice con un sovraccarico aggiuntivo per l'strumentazione. Inoltre, il calcolo della copertura di qualsiasi frammento di codice richiede il contesto dell'intero programma. Utilizzare il Machine Learning per ammortizzare questo processo costoso potrebbe ridurre il costo della copertura del codice richiedendo solo il contesto del codice sorgente, e il compito di previsione della copertura del codice può rappresentare un nuovo benchmark per valutare la capacità dei modelli di comprendere il codice. Proponiamo un nuovo compito di benchmark chiamato Previsione della Copertura del Codice per Modelli Linguistici di Grande Dimensione (LLM). Formalizziamo questo compito per valutare la capacità degli LLM di comprendere l'esecuzione del codice determinando quali righe di un metodo vengono eseguite da un dato caso di test e input. Curiamo e rilasciamo un dataset che chiamiamo COVERAGEEVAL eseguendo test e codice dal dataset HumanEval e raccogliendo informazioni sulla copertura del codice. Riportiamo le prestazioni di quattro LLM all'avanguardia utilizzati per compiti legati al codice, inclusi GPT-4 e GPT-3.5-Turbo di OpenAI, BARD di Google e Claude di Anthropic, nel compito di Previsione della Copertura del Codice. Infine, sosteniamo che la copertura del codice come metrica e fonte di dati per il pre-addestramento è preziosa per le prestazioni complessive degli LLM nei compiti di ingegneria del software.
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.