ChatPaper.aiChatPaper

Previsão de Cobertura de Código sem Execução

Predicting Code Coverage without Execution

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

Resumo

A cobertura de código é uma métrica amplamente utilizada para quantificar a extensão em que elementos de um programa, como instruções ou ramificações, são executados durante os testes. O cálculo da cobertura de código é intensivo em recursos, exigindo a construção e execução do código com sobrecarga adicional para a instrumentação. Além disso, o cálculo da cobertura de qualquer trecho de código requer o contexto completo do programa. O uso de Aprendizado de Máquina para amortizar esse processo caro poderia reduzir o custo da cobertura de código, exigindo apenas o contexto do código-fonte, e a tarefa de previsão de cobertura de código pode ser um novo benchmark para avaliar a capacidade dos modelos de entender código. Propomos uma nova tarefa de benchmark chamada Previsão de Cobertura de Código para Modelos de Linguagem de Grande Escala (LLMs). Formalizamos essa tarefa para avaliar a capacidade dos LLMs em entender a execução de código, determinando quais linhas de um método são executadas por um caso de teste e entradas específicos. Curamos e lançamos um conjunto de dados que chamamos de COVERAGEEVAL, executando testes e códigos do conjunto de dados HumanEval e coletando informações de cobertura de código. Relatamos o desempenho de quatro LLMs state-of-the-art usados para tarefas relacionadas a código, incluindo GPT-4 e GPT-3.5-Turbo da OpenAI, BARD da Google e Claude da Anthropic, na tarefa de Previsão de Cobertura de Código. Por fim, argumentamos que a cobertura de código como métrica e fonte de dados de pré-treinamento é valiosa para o desempenho geral dos LLMs em tarefas de engenharia 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.
PDF90December 15, 2024