five

CrashJS

收藏
arXiv2024-05-09 更新2024-06-21 收录
下载链接:
https://zenodo.org/doi/10.5281/zenodo.10530514
下载链接
链接失效反馈
官方服务:
资源简介:
CrashJS是由惠灵顿维多利亚大学的研究人员创建的一个基准数据集,专门用于自动化崩溃重现工具的开发和评估。该数据集包含453个Node.js崩溃案例,这些案例来源于多个不同的项目和复杂度级别,包括真实世界和合成测试。CrashJS的创建旨在帮助开发者通过提供崩溃重现的工具来定位程序中的错误。数据集的应用领域主要集中在软件测试和自动化崩溃重现场景,旨在解决软件开发中的调试难题。

CrashJS is a benchmark dataset developed by researchers from Victoria University of Wellington, exclusively for the development and evaluation of automated crash reproduction tools. It encompasses 453 Node.js crash cases derived from diverse projects spanning various complexity levels, including both real-world and synthetic test scenarios. The core purpose of creating CrashJS is to aid developers in locating software bugs by providing reliable crash reproduction tools. The dataset is primarily applied in software testing and automated crash reproduction scenarios, with the goal of resolving debugging difficulties encountered during software development.
提供机构:
惠灵顿维多利亚大学
创建时间:
2024-05-09
搜集汇总
数据集介绍
main_image_url
构建方式
CrashJS的构建融合了四种互补的数据采集策略。首先,从GitHub上广受欢迎的Node.js项目(如Atom、Eslint、Express等)的议题追踪器中手动筛选出包含栈追踪信息的真实崩溃案例,共收集71例。其次,借助BugsJS基准测试框架,通过执行其包含的测试用例并解析生成的JSON错误日志,从中提取出90个可复现的崩溃。第三,针对SecBench.js中的代码注入类安全漏洞,通过修改测试用例以主动抛出错误的方式,获取了17个崩溃样本。最后,采用一种新颖的方法,对Syntest-JavaScript这一测试生成工具进行改造,使其在覆盖率驱动的搜索过程中捕获并保存遇到的错误栈信息,从而从五个项目中采集到275个由工具生成的合成崩溃。所有崩溃均经过严格的去重处理,最终形成了包含453个Node.js崩溃的综合性基准数据集。
特点
CrashJS数据集具有鲜明的多维复杂性特征。在崩溃复杂度方面,其栈帧长度跨度极大,从BugsJS中Eslint项目的仅3帧到Express项目的平均54帧,展现了丰富的难度梯度。程序复杂度方面,通过圈复杂度(CCN)衡量,目标项目的复杂度从Webpack的1.04到Node-extend的近5.2,分布广泛。值得注意的是,来自BugsJS的真实崩溃与来自Syntest-JavaScript的合成崩溃在错误类型上形成鲜明对比:BugsJS以AssertionError为主,反映了单元测试场景下的预期值变更;而Syntest-JavaScript则因动态类型语言的随机输入生成,导致TypeError占比高达93.5%,凸显了隐式类型约束违反的普遍性。这种真实与合成崩溃的混合,以及崩溃与程序复杂度的无相关性(R²=0.012),为评估自动化崩溃复现工具提供了全面且无偏的测试场景。
使用方法
CrashJS的使用方法围绕其标准化的JSON格式崩溃描述文件展开。每个崩溃文件详尽记录了版本号、依赖关系、可选的Node.js版本以及用于复杂环境搭建的setup指令(如从URL下载并解压Atom等独立应用程序)。研究人员可直接利用这些文件驱动其开发的自动化崩溃复现(ACR)工具。数据集的模块化设计允许按来源(GitHub、BugsJS、SecBench.js、Syntest-JavaScript)灵活选用子集,以适应不同研究需求。例如,评估工具基础能力时可优先使用Syntest-JavaScript的合成崩溃,而测试其在真实世界中的鲁棒性则需引入GitHub和BugsJS的案例。此外,SecBench.js和Syntest-JavaScript的崩溃附带了原始触发测试用例,可作为黄金标准,用于评估生成测试用例的有效性和相似度。
背景与挑战
背景概述
软件崩溃现象在当今数字化生态中屡见不鲜,其带来的经济损失极为惊人,据报告仅美国企业每年因软件质量欠佳导致的损失便高达2.08万亿美元。自动化崩溃复现(Automated Crash Reproduction, ACR)旨在通过生成单元测试来复现崩溃现场,为开发者提供辅助调试的有力工具。然而,尽管ACR在C、Java及Python等语言中已有初步探索,针对JavaScript尤其是Node.js环境的ACR工具尚属空白。为填补这一缺口,来自惠灵顿维多利亚大学的Philip Oliver、Jens Dietrich、Craig Anslow与Michael Homer于2024年提出了CrashJS数据集。该数据集收录了453个源自GitHub、BugsJS、SecBench.js及Syntest-JavaScript等多个来源的Node.js崩溃样本,混合了真实世界与合成测试用例,涵盖不同项目与复杂度层次,旨在为JavaScript领域的ACR研究提供首个标准化基准,推动相关工具的开发与公平评估。
当前挑战
CrashJS所应对的核心领域挑战在于,JavaScript作为动态类型语言,其隐式类型转换、宽松的null处理及复杂的依赖关系使得崩溃模式多样且难以预测,现有ACR方法难以直接迁移。数据集构建过程中面临多重困难:首先,从GitHub议题中收集真实崩溃时,需手动交叉验证版本与堆栈帧的匹配性,耗时耗力;其次,从SecBench.js提取崩溃时,仅代码注入类漏洞可产生可用堆栈,路径遍历、原型污染等类别因不产生异常或堆栈无关而被排除;再者,从Syntest-JavaScript提取合成崩溃时,需修改测试生成工具以捕获运行时错误,并解决Babel插桩导致的行号偏移问题;最后,去重过程需逐行比对堆栈帧并手动清理因参数值差异导致的重复条目,工作量巨大。这些挑战共同塑造了CrashJS在规模与多样性上的独特价值。
常用场景
经典使用场景
在软件测试与调试领域,CrashJS作为首个专为JavaScript程序设计的自动化崩溃复现基准数据集,被广泛用于评估和比较不同ACR工具在Node.js环境下的表现。其包含的453个来自真实项目与合成测试的崩溃案例,覆盖了从简单类型错误到复杂断言失败的多样化场景,为研究者提供了标准化的测试平台,以衡量工具在复现堆栈轨迹时的准确率、效率与鲁棒性。
衍生相关工作
CrashJS的提出催生了多项后续研究,包括基于进化算法的JavaScript崩溃复现工具(如借鉴EvoCrash思想的Node.js版本),以及利用其数据集优化测试生成策略的工作。研究者还从中提炼出针对动态类型语言的特有挑战,推动了如YAML输入生成、隐式类型约束建模等子问题的探索。此外,该数据集被用于验证代码注入漏洞的自动化复现能力,间接促进了安全测试领域的基准完善。
数据集最近研究
最新研究方向
在软件工程领域,自动化崩溃复现(ACR)是提升调试效率与软件质量的关键技术,然而长期以来针对动态类型语言JavaScript的ACR工具严重匮乏。CrashJS作为首个专为Node.js设计的ACR基准数据集,填补了这一空白。该数据集包含453个来自真实项目与合成工具的崩溃实例,覆盖多种复杂度与错误类型,为评估和比较不同ACR方法提供了标准化平台。其发布恰逢JavaScript生态系统持续膨胀、依赖关系日益复杂之际,有助于推动面向动态语言的高效崩溃复现研究,并促进ACR工具在工业界的应用落地。
相关研究论文
  • 1
    CrashJS: A NodeJS Benchmark for Automated Crash Reproduction惠灵顿维多利亚大学 · 2024年
以上内容由遇见数据集搜集并总结生成
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作