Defects4j数据集安装及使用
0、常见问题
1. 所有配置完成后运行defects4j info -p Lang测试出现错误
Can't locate DBI.pm in @INC (you may need to install the DBI module) (@INC contains: /myproject/defects4j/framework/lib /myproject/defects4j/framework /myproject/defects4j/framework/core /myproject/defects4j/framework/core /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /myproject/defects4j/framework/core/DB.pm line 43.
BEGIN failed--compilation aborted at /myproject/defects4j/framework/core/DB.pm line 43.
Compilation failed in require at /myproject/defects4j/framework/core/Mutation.pm line 41.
BEGIN failed--compilation aborted at /myproject/defects4j/framework/core/Mutation.pm line 41.
Compilation failed in require at /myproject/defects4j/framework/core/Project.pm line 103.
BEGIN failed--compilation aborted at /myproject/defects4j/framework/core/Project.pm line 103.
Compilation failed in require at /myproject/defects4j/framework/bin/d4j/d4j-info line 58.
BEGIN failed--compilation aborted at /myproject/defects4j/framework/bin/d4j/d4j-info line 58.
Compilation failed in require at /myproject/defects4j/framework/bin/defects4j line 155.
# 一、Defects4j数据集安装
**`在Ubuntu系统上进行操作`**,具体的在:[Defects4j数据集安装](https://blog.csdn.net/weixin_46439193/article/details/104721218)
解决方法:
sudo apt-get install libdbi-perl
二、Defects4j数据集的使用
1. 常用命令
Getting started
----------------
#### Setting up Defects4J
1. Clone Defects4J:- `git clone https://github.com/rjust/defects4j`2. Initialize Defects4J (download the project repositories and external libraries, which are not included in the git repository for size purposes and to avoid redundancies):- `cd defects4j`- `./init.sh`3. Add Defects4J's executables to your PATH:- `export PATH=$PATH:"path2defects4j"/framework/bin`#### Using Defects4J
4. Check installation and get information for a specific project (commons lang):- `defects4j info -p Lang`- `defects4j info -p Math`5. Get information for a specific bug (commons lang, bug 1):- `defects4j info -p Lang -b 1`6. Checkout a buggy source code version (commons lang, bug 1, buggy version):- `defects4j checkout -p Lang -v 1b -w /tmp/lang_1_buggy`7. Change to the working directory, compile sources and tests, and run tests:- `cd /tmp/lang_1_buggy`- `defects4j compile`- `defects4j test`8. More examples of how to use the framework are available in `framework/test`
2. 框架
defects4j||--- project_repos: The version control repositories of the provided projects.||--- major: The Major mutation framework.||--- framework: Libraries and executables of the database abstraction and| test execution framework.||--- bin: Command line interface to Defects4J.||--- core: The modules of the core framework.||--- lib: Libraries used in the core framework.||--- util: Util scripts used by Defects4J.||--- projects: Project-specific resource files.||--- test: Scripts to test the framework.
首先看一下文件结构,首先是project_repos,指提供的含有故障的项目的版本控制库,之后是major,是主要的变异框架,再framework中存在我们比较需要的各种信息,重点关注projects,里面是各种真实故障的项目。
以Lang为例,讲解一下里面的目录结构
Lang
逻辑是这样的,对每个defects4j项目来有很多测试类,每个测试类里面有很多测试用例,如果全通过了就说明程序没有问题,但有些情况下测试可能不通过,可能只是某一两个测试方法不通过,难道要把所有的程序再重新加载,进行实验吗?西门子故障程序是那么做的,不同版本的故障程序之间只有一两行不一样,所有的测试用例也都是一样的,测试用例对在运行不同版本的故障程序时结果是不同的。这种情况在defects4j上行不通,因为西门子程序太小了,这里动辄上万行的代码。
- trigger tests
每个故障版本都对应个一个trigger test,这个trigger test里面包含了一些引发了程序bug的测试方法。
-
modified classes
既然有了trigger test ,那么就必然有bug,那么文件夹modified_classes里面装的就是将bug修复时,需要改动源程序中的哪些类。
如图,Lang项目的第一个故障版本需要改动NumberUtils类即可修复。 -
loaded classes/relevant classes
虽然bug只和这一个类有关,但程序是一个整体,只有这一个类跑不起来呀,想要跑起来需要很多relevant classes,在项目里是loaded_classes文件夹下,只有将这些类都加载进JVM中,trigger test方法才能跑起来。 -
relevant tests
既然trigger test的运行,说明了程序中存在bug,只是在trigger_test中引发了bug,其他的测试程序中可能也跑了故障代码(modified classes),但是没有引发故障,所以relevent tests里面记录的就是所有的相关测试类。所谓相关测试类就是指当执行测试方法时,JVM中加载了modified classes,这样就保证了所有相关的测试都包含在内。 -
patches
最后就是patches,其中src.patch记录了故障应该怎么修复,比如说,按照github的教程上执行了
defects4j checkout -p Lang -v 1b -w /tmp/lang_1_buggy
这行代码后,实际上就是在/tmp/lang_1_buggy文件夹下将这个Lang 1 版本编译,测试所需要所有类和测试类都写进去了,在src文件夹下,我们再执行
cd /tmp/lang_1_buggy
defects4j compile
defects4j test
注意,这里可以直接在linux中使用命令进行编译和测试,如果想在IDEA中进行运行测试,我这里用的环境是jdk1.7和maven3.8.1,注意:亲测maven3.6不行
这时候我们编译的是含有故障的代码,运行后
它就会显示trigger test中记录的故障代号。
如果我们想要一个没有故障的版本怎么办呢,就对defects4j checkout后,/tmp/lang_1_buggy中的源码进行更改即可,按照src.patch更改源码,其中@@后是代码在NumberUtils.java中的行数,每行代码前面没有符号时,代表代码无需改动,- 代表是新加的正确代码,+ 代表是错误代码,注释掉即可。
更改完代码后,我们再执行defexts4j test 就没有错误了。
这种方法可以帮助我们获取无故障的源码,以及为程序中插入故障提供思路。
三、 Defects4j-FL
相关文章:

Defects4j数据集安装及使用
0、常见问题 1. 所有配置完成后运行defects4j info -p Lang测试出现错误 Cant locate DBI.pm in INC (you may need to install the DBI module) (INC contains: /myproject/defects4j/framework/lib /myproject/defects4j/framework /myproject/defects4j/framework/core /m…...

vant_ CountDown倒计时
语法可以直接在官网查看 需求 后端返回的数据格式如下 [{"id": 1,"btn_text": "1","second": 0},{"id": 2,"btn_text": "1","second": 0}... ]之前约定second最多30s, 因此只需…...
spark集成hive
集群使用ambarihdp方式进行部署,集群的相关版本号如下所示: ambari版本 Version 2.7.4.0 HDP版本 HDP-3.1.4.0 hive版本 3.1.0 spark版本 2.3.0 集群前提条件: 1.Hdp、Spark、Hive都已部署好 2.Hive数据层建好,在Hdfs生成相应各层目录,后面配…...
提升微服务稳定性与性能:深入剖析Netflix Hystrix框架
说到 Netflix Hystrix 框架,一定离不开 com.netflix.hystrix.HystrixCommand,这个类是 Netflix 开源的 Hystrix 框架中的一个关键类,用于实现服务的容错和熔断功能。它主要用于将远程服务调用封装成一个独立的命令对象,以便于进行…...
IT运维管理系统在国有大型企业网络中的应用和可以解决的问题
随着国有大型企业业务的快速发展,网络运维管理面临着诸多挑战。本文将从问题概述、解决方案、监控易优势、实际案例和总结等方面阐述IT运维管理系统在国有大型企业网络中的应用和可以解决的问题。IT运维管理系统:国有大型企业网络的变革者与解决之道 一…...
嵌入式实时操作系统的设计与开发 (线程操作学习)
在aCoral操作系统中,线程退出采用了和Linux一样的方式,线程函数不用死等或显示调用退出相关函数,也就是说用户不用担心函数执行完后的事情。 uc/OS II任务函数与退出 void test(void *ptr){Do_something();while(1); }void test(void *ptr)…...

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…...

【RTOS学习】同步与互斥 | 队列
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 同步与互斥 | 队列 🍉同步与互斥🍦同步🍦互斥 🍉队…...
Python订单生成器+队列+异步提高性能和容错
以下代码实现了一个订单生成器,使用 asyncio 和 aioredis 库实现了高并发地生成订单,并将新增订单异步更新到数据库。具体实现流程如下: 初始化 OrderGenerator 类。传入 Redis 服务器地址和并发数,在初始化函数中设置并发数和一…...
理德名人故事:全球投资之父-约翰.邓普顿
说到约翰‧邓普顿,我们就会想到他的很多标签。比如全球投资之父、史上最成功的基金经理等等。他是邓普顿集团的创始人,一直被誉为全球最具智慧以及最受尊崇的投资者之一。福布斯资本家杂志称他为"全球投资之父"及"历史上最成功的基金经理…...

微前端三:qiankun 协作开发和上线部署
我们先看qiankun怎么上线部署: 我这边用的是yaml 文件在 rancher上部署的: base是基座,这里每个应用都是一个服务,这个还是跟之前一样并没有区别,那如何在一个域名上挂载多个服务呢? 最开始我们主要是在in…...

HTML三叉戟,标签、元素、属性各个的意义是什么?
🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…...

prometheus获取kubelet接口监控数据
一、前言 k8s集群的kubelet服务内部有自带的cadvisor服务用于收集k8s集群的监控数据,所以可以通过调用kubelet的接口就能获取pod的资源监控数据,在新版本的k8s中,kubelet的监控数据获取端口为10250端口,老版本的是10255端口 二、…...

国产主控应用案例:汉王电子血压计-君正开发板
2023春季新品发布会上汉王科技发布柯氏音法电子血压计产品—汉王电子血压计,继嗅觉检测盒之后再次深度布局大健康领域。 不同于当前市面上使用示波法原理的电子血压计,汉王电子血压计采用血压测量金标准中的柯氏音法,由此引领一场电子血压计领…...

万宾科技智能井盖传感器特点介绍
当谈论城市基础设施的管理和安全时,井盖通常不是第一项引人注目的话题。然而,传统井盖和智能井盖传感器之间的差异已经引起了城市规划者和工程师的广泛关注。这两种技术在功能、管理、安全和成本等多个方面存在着显著的差异。 WITBEE万宾智能井盖传感器E…...
YoloV8改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV8
文章目录 摘要论文:《SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型》1、简介2、相关研究3、方法3.1、注意力模块概述3.2、高效的加性注意力3.3、SwiftFormer 架构4、实验4.1、实现细节4.2、基线比较4.3、图像分类4.4、目标检测和实例分割4.5、语义…...
Jupyter Notebook在指定位置打开
1、在Jupyter Notebook设置文件中修改默认路径 anconda prompt输入: jupyter notebook --generate-config 找到配置文件路径:C:\Users\Lenovo.jupyter 打开文件,修改默认路径: ## The directory to use for notebooks and kernel…...

树控件的使用
目录 1、修改树控件的基础属性: 2、准备图标 : (1)、ico后缀的图片放入当前文件路径的rc中 (2)、在Icon中添加资源,导入图片 (3)、准备HICON图标 (4&am…...
C++实现顺序栈类的定义,编写main ()函数验证顺序栈类设计的合理性
C实现顺序栈类的定义,编写main ()函数验证顺序栈类设计的合理性 以下是一个简单的C代码示例,用于实现顺序栈类的定义并编写main()函数来验证其合理性: #include <iostream> using namespace std;const int MAX_SIZE 100; // 定义栈的…...
手机直播助手软件app哪个好用?
手机直播助手软件现在可谓是多如牛毛,从上半年魔棒手机自动直播软件上线以来。几乎全国所有的科技公司都效仿魔棒手机自动直播软件兴起手机直播助手开发热。相对来说,简单的手机直播助手软件没什么技术门槛。但是手机无人直播助手软件要做精做全则很难。…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...