Прогнозирование покрытия кода без выполнения
Predicting Code Coverage without Execution
July 25, 2023
Авторы: Michele Tufano, Shubham Chandel, Anisha Agarwal, Neel Sundaresan, Colin Clement
cs.AI
Аннотация
Покрытие кода — это широко используемая метрика для количественной оценки степени выполнения элементов программы, таких как операторы или ветви, в процессе тестирования. Вычисление покрытия кода требует значительных ресурсов, включая сборку и выполнение кода с дополнительными накладными расходами на инструментирование. Более того, для вычисления покрытия любого фрагмента кода необходим контекст всей программы. Использование машинного обучения для амортизации этого затратного процесса может снизить стоимость вычисления покрытия кода, требуя только контекста исходного кода, а задача предсказания покрытия кода может стать новым эталоном для оценки способности моделей понимать код. Мы предлагаем новую эталонную задачу под названием "Предсказание покрытия кода для больших языковых моделей (LLM)". Мы формализуем эту задачу для оценки способности LLM понимать выполнение кода, определяя, какие строки метода выполняются при заданном тестовом случае и входных данных. Мы создаем и публикуем набор данных под названием COVERAGEEVAL, выполняя тесты и код из набора данных HumanEval и собирая информацию о покрытии кода. Мы сообщаем о производительности четырех современных LLM, используемых для задач, связанных с кодом, включая GPT-4 и GPT-3.5-Turbo от OpenAI, BARD от Google и Claude от Anthropic, в задаче предсказания покрытия кода. Наконец, мы утверждаем, что покрытие кода как метрика и источник данных для предварительного обучения являются ценными для общей производительности LLM в задачах программной инженерии.
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.