Predicción de Cobertura de Código sin Ejecución
Predicting Code Coverage without Execution
July 25, 2023
Autores: Michele Tufano, Shubham Chandel, Anisha Agarwal, Neel Sundaresan, Colin Clement
cs.AI
Resumen
La cobertura de código es una métrica ampliamente utilizada para cuantificar el grado en que los elementos de un programa, como declaraciones o ramas, son ejecutados durante las pruebas. Calcular la cobertura de código es un proceso que consume muchos recursos, ya que requiere la compilación y ejecución del código, además de la sobrecarga adicional asociada a la instrumentación. Además, calcular la cobertura de cualquier fragmento de código exige el contexto completo del programa. Utilizar el Aprendizaje Automático para amortizar este proceso costoso podría reducir el gasto asociado a la cobertura de código al requerir únicamente el contexto del código fuente, y la tarea de predecir la cobertura de código puede ser un nuevo punto de referencia para evaluar la capacidad de los modelos de comprender el código. Proponemos una nueva tarea de referencia llamada Predicción de Cobertura de Código para Modelos de Lenguaje de Gran Escala (LLMs, por sus siglas en inglés). Formalizamos esta tarea para evaluar la capacidad de los LLMs de entender la ejecución del código al determinar qué líneas de un método son ejecutadas por un caso de prueba y entradas dados. Creamos y publicamos un conjunto de datos al que llamamos COVERAGEEVAL, ejecutando pruebas y código del conjunto de datos HumanEval y recopilando información sobre la cobertura de código. Reportamos el rendimiento de cuatro LLMs de última generación utilizados para tareas relacionadas con el código, incluyendo GPT-4 y GPT-3.5-Turbo de OpenAI, BARD de Google y Claude de Anthropic, en la tarea de Predicción de Cobertura de Código. Finalmente, argumentamos que la cobertura de código como métrica y fuente de datos de preentrenamiento es valiosa para el rendimiento general de los LLMs en tareas de ingeniería de 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.