Codehacks: A Dataset of Adversarial Tests for Competitive Programming Problems Obtained from Codeforces
作者: Max Hort, Leon Moonen
分类: cs.SE, cs.AI, cs.CL, cs.LG
发布日期: 2025-03-30
备注: Accepted for publication at the 18th IEEE International Conference on Software Testing, Verification and Validation (ICST 2025)
💡 一句话要点
Codehacks:一个来自Codeforces的对抗性测试数据集,用于评估竞争性编程问题
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 竞争性编程 语言模型 数据集 对抗性测试 软件测试 代码漏洞 在线评测
📋 核心要点
- 现有软件测试方法依赖于测试用例,但可能存在未覆盖的边界情况,导致软件存在潜在缺陷。
- Codehacks数据集通过收集Codeforces上的“hacks”,即能够使错误代码通过测试的对抗性用例,来解决这一问题。
- 该数据集包含大量编程问题、错误诱导测试用例和易受攻击的源代码,为评估和改进软件测试技术提供了宝贵资源。
📝 摘要(中文)
软件在日常生活中被广泛应用于关键领域,确保其正确性至关重要。评估正确性的一种常用方法是在测试用例上评估软件。如果测试失败,则表明被测软件存在缺陷;如果所有测试都正确通过,则可以认为该软件是正确的。然而,这些结果的可靠性取决于所考虑的测试套件,并且存在假阴性的风险(即,软件通过了所有可用的测试,但由于某些情况未被测试,因此包含错误)。因此,在评估软件时,考虑能够引发错误的测试用例非常重要。为了支持数据驱动的测试套件创建,特别是对于测试由大型语言模型合成的软件,我们整理了一个包含编程问题和相应错误诱导测试用例(即“hacks”)的数据集(Codehacks)。该数据集来自Codeforces在线评测平台。该数据集包含5,578个编程问题的288,617个hacks,每个问题都有自然语言描述,以及2,196个提交的解决方案的源代码,这些解决方案可以通过相应的hacks来破坏。
🔬 方法详解
问题定义:论文旨在解决软件测试中测试用例覆盖不足的问题,特别是对于由大型语言模型生成的代码。现有测试方法可能无法充分覆盖所有边界情况和潜在错误,导致生成的代码虽然通过了标准测试,但仍然存在缺陷。这些缺陷可能在特定输入下被触发,导致程序崩溃或产生错误结果。
核心思路:论文的核心思路是利用Codeforces等在线编程平台上的“hacks”,即能够使错误代码通过测试的对抗性测试用例,来构建一个高质量的测试数据集。这些hacks能够有效地揭示代码中的潜在缺陷,从而提高软件测试的有效性。
技术框架:论文通过爬取Codeforces平台上的数据构建Codehacks数据集。该数据集包含以下几个主要组成部分:编程问题的自然语言描述、提交的源代码、以及用于破解这些源代码的hacks。数据集的构建流程包括数据收集、数据清洗、数据标注等步骤。具体来说,论文收集了Codeforces上的编程问题及其对应的提交记录,然后筛选出那些被hacks成功破解的提交,并将这些hacks作为错误诱导测试用例。
关键创新:该论文的关键创新在于提出了利用在线编程平台上的对抗性测试用例来构建软件测试数据集的方法。与传统的随机生成或人工设计的测试用例相比,这些对抗性测试用例更具有针对性和有效性,能够更好地揭示代码中的潜在缺陷。此外,该数据集的规模较大,覆盖了多种编程问题和编程语言,为软件测试研究提供了丰富的资源。
关键设计:论文在数据收集过程中,需要解决如何从Codeforces平台上高效地爬取数据的问题。在数据清洗过程中,需要去除重复数据和无效数据。在数据标注过程中,需要对hacks进行分类和标注,以便更好地利用这些数据。此外,论文还考虑了数据集的隐私保护问题,对敏感数据进行了匿名化处理。
🖼️ 关键图片
📊 实验亮点
Codehacks数据集包含5,578个编程问题的288,617个hacks,以及2,196个易受攻击的源代码。该数据集的规模远大于现有的软件测试数据集,并且包含了大量的对抗性测试用例,能够有效地揭示代码中的潜在缺陷。通过使用Codehacks数据集,研究人员可以更好地评估和改进软件测试技术。
🎯 应用场景
Codehacks数据集可用于评估和改进软件测试技术,特别是针对由大型语言模型生成的代码。它可以用于训练和评估测试用例生成模型,提高测试用例的覆盖率和有效性。此外,该数据集还可以用于研究软件缺陷的模式和特征,从而帮助开发人员更好地理解和预防软件缺陷。
📄 摘要(原文)
Software is used in critical applications in our day-to-day life and it is important to ensure its correctness. One popular approach to assess correctness is to evaluate software on tests. If a test fails, it indicates a fault in the software under test; if all tests pass correctly, one may assume that the software is correct. However, the reliability of these results depends on the test suite considered, and there is a risk of false negatives (i.e. software that passes all available tests but contains bugs because some cases are not tested). Therefore, it is important to consider error-inducing test cases when evaluating software. To support data-driven creation of such a test-suite, which is especially of interest for testing software synthesized from large language models, we curate a dataset (Codehacks) of programming problems together with corresponding error-inducing test cases (i.e., "hacks"). This dataset is collected from the wild, in particular, from the Codeforces online judge platform. The dataset comprises 288,617 hacks for 5,578 programming problems, each with a natural language description, as well as the source code for 2,196 submitted solutions to these problems that can be broken with their corresponding hacks. Keywords: competitive programming, language model, dataset