Vorhersage der Code-Abdeckung ohne Ausführung
Predicting Code Coverage without Execution
July 25, 2023
Autoren: Michele Tufano, Shubham Chandel, Anisha Agarwal, Neel Sundaresan, Colin Clement
cs.AI
Zusammenfassung
Code Coverage ist eine weit verbreitete Metrik, um das Ausmaß zu quantifizieren, in dem Programmelemente wie Anweisungen oder Verzweigungen während des Testens ausgeführt werden. Die Berechnung der Code-Abdeckung ist ressourcenintensiv, da sie das Erstellen und Ausführen von Code mit zusätzlichem Aufwand für die Instrumentierung erfordert. Darüber hinaus erfordert die Berechnung der Abdeckung eines beliebigen Codeausschnitts den gesamten Programmkontext. Der Einsatz von maschinellem Lernen, um diesen aufwendigen Prozess zu amortisieren, könnte die Kosten der Code-Abdeckung senken, indem nur der Quellcode-Kontext benötigt wird, und die Aufgabe der Code-Abdeckungsvorhersage könnte ein neuartiger Benchmark sein, um die Fähigkeit von Modellen, Code zu verstehen, zu bewerten. Wir schlagen eine neuartige Benchmark-Aufgabe namens Code Coverage Prediction für Large Language Models (LLMs) vor. Wir formalisieren diese Aufgabe, um die Fähigkeit von LLMs, die Code-Ausführung zu verstehen, zu bewerten, indem wir bestimmen, welche Zeilen einer Methode durch einen gegebenen Testfall und Eingaben ausgeführt werden. Wir erstellen und veröffentlichen einen Datensatz, den wir COVERAGEEVAL nennen, indem wir Tests und Code aus dem HumanEval-Datensatz ausführen und Informationen zur Code-Abdeckung sammeln. Wir berichten über die Leistung von vier state-of-the-art LLMs, die für codebezogene Aufgaben verwendet werden, darunter OpenAI's GPT-4 und GPT-3.5-Turbo, Google's BARD und Anthropic's Claude, bei der Aufgabe der Code-Abdeckungsvorhersage. Schließlich argumentieren wir, dass Code-Abdeckung als Metrik und als Quelle für Vorab-Trainingsdaten wertvoll für die Gesamtleistung von LLMs bei Software-Engineering-Aufgaben ist.
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.