Defects4j数据集安装及使用

news2024/11/24 14:02:54

一、Defects4j数据集安装

在Ubuntu系统上进行操作,具体的在:Defects4j数据集安装

二、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JOSEF约瑟 可调漏电继电器RT-LB230KS+Q-FL-100 导轨安装 配套零序互感器

一、产品用途及特点 RT-LB230KS漏电继电器(以下简称继电器)适用于交流电压为660V.至1140V电压系统中,频率为50Hz,电流15~4000A线路中做有无中性点漏电保护. 该继电器可与带分励脱扣器或失压脱扣器的断路器、交流接触器、磁力启动器等组成漏电保护装置&…

【ELK 使用指南】ELK + Filebeat 分布式日志管理平台部署

ELK和EFLK 一、前言1.1 日志分析的作用1.2 需要收集的日志1.3 完整日志系统的基本特征 二、ELK概述2.1 ELK简介2.2 为什么要用ELK?2.3 ELK的组件 三、ELK组件详解3.1 Logstash3.1.1 简介3.1.2 Logstash命令常用选项3.1.3 Logstash 的输入和输出流3.1.4 Logstash配置文件 3.2 E…

端到端的机器学习项目(Machine Learning 研习之六)

使用真实数据 当你在研习机器学习时,最好是使用真实世界中的数据,而不是采用人工数据。巧的是,数以千计的数据集可供选择,涵盖了各种领域。 流行的开放数据存储库: OpenML.orgKaggle.compaperswithcode.com UC Irvin…

阿里云服务器不能访问网络之安装mysql 提示连接超时

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 过了一段时间后提示 fail .......time out 链接超时 有可能你的服务器不能访问网络 因为宽带套餐 我购买的时候没有购 重新购买就行了

python爬取boss直聘数据(selenium+xpath)

文章目录 一、主要目标二、开发环境三、selenium安装和驱动下载四、主要思路五、代码展示和说明1、导入相关库2、启动浏览器3、搜索框定位创建csv文件招聘页面数据解析(XPATH)总代码效果展示 六、总结 一、主要目标 以boss直聘为目标网站,主要目的是爬取下图中的所…

【Candence报错】Discrepancy #i in TASK

问题描述 Candence LVS仿真提示网络不匹配 问题解决 检查原理图和Layout 注意:

穿越功耗墙,我们该从哪些方面提升“性能”?

目录 背景 功耗:CPU 的“人体极限” 并行优化,理解阿姆达尔定律 总结延伸 背景 我们知道 CPU 的性能时,我们提到了这样一个公式: 程序的 CPU 执行时间 指令数CPIClock Cycle Time 这么来看,如果要提升计算机的…

tracy 学习

https://github.com/wolfpld/tracy 适用于游戏和其他应用的实时、纳秒分辨率、远程控制、支持采样和帧率检测 Tracy 支持分析 CPU(为 C、C 和 Lua 集成提供直接支持。同时,互联网上存在许多其他语言的第三方绑定,例如 Rust 、Zig、C # 、 OC…

【git】gitlab安装、备份

gitlab官网 官网:官网 中文官网:中文官网 作为一个英文不好的程序员,所以我都去中文网站去看了。下面也是带着大家去走走 安装gitlab 我不想写具体的安装方法,直接去逛网看下面是我的截图。步骤非常详细。 安装文档地址&…

Apacheb Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437) 1 在线漏洞解读: https://vulhub.org/#/environments/shiro/CVE-2016-4437/2 环境搭建 cd /home/kali/vulhub/shiro/CVE-2016-4437启动: sudo docker-compose up -d # 拉取下载并启动sud…

谢邀,ADconf安全大会

儒道易行 道虽远,行则易至;儒虽难,坚为易成 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失&am…

Linux:mongodb数据库源码包安装(4.4.25版本)

环境 系统:centos7 本机ip:192.168.254.1 准备的mongodb包 版本 : 4.4.25 全名称:mongodb-linux-x86_64-rhel70-4.4.25.tgz 下载源码包 Download MongoDB Community Server | MongoDBhttps://www.mongodb.com/try/downloa…

02.机器学习原理(复习)

目录 机器学习的本质机器学习的类型Regression/回归Classification/分类Structured Learning/结构化学习 ML的三板斧设定范围设定标准监督学习半监督学习其他 达成目标小结达成目标设定标准设定范围 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜…

竞赛选题 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习OCR中文识别系统 ** 该项目较为新颖,适合作为竞赛课题方向,…

编译linux的设备树

使用make dtbs命令时 在arch/arm 的目录Makefile文件中有 boot : arch/arm/boot prepare 和scripts是空的 在文件scripts/Kbuild.include中 变量build : -f $(srctree)/scripts/Makefile.build obj 在顶层Makefile中 $(srctree):. 展开后-f ./scripts/Mak…

恢复Windows 11经典右键菜单:一条命令解决显示更多选项问题

恢复Windows 11经典右键菜单:一条命令解决显示更多选项问题 恢复Windows 11经典右键菜单:一条命令解决显示更多选项问题为什么改变?恢复经典右键菜单 我是将军我一直都在,。! 恢复Windows 11经典右键菜单:一…

docker入门加实战—Docker镜像和Dockerfile语法

docker入门加实战—Docker镜像和Dockerfile语法 镜像 镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。 镜像结构 我们要从0部署一个Java应用,大概流程是这样: 准备Linux运行环…

CodeForces每日好题10.14

给你一个字符串 让你删除一些字符让它变成一个相邻的字母不相同的字符串,问你最小的删除次数 以及你可以完成的所有方/案数 求方案数往DP 或者 组合数学推公式上面去想,发现一个有意思的事情 例如1001011110 这个字符串你划分成1 00 1 0 1111 0 每…

论文学习——Class-Conditioned Latent Diffusion Model For DCASE 2023

文章目录 引言正文AbstractIntroductionSystem Overview2.1 Latent Diffusion with sound-class-based conditioning以声音类别为条件的潜在扩散模型2.2 Variational Autoencoder and neural vocoder变分自编码器和神经声码器FAD-oriented Postprocessing filter(专…

JOSEF约瑟 HJY-E1A/4D电压继电器 欠电压动作 整定范围10~242V 二转换

系列型号 HJY-E1A/3D数字式交流电压继电器; HJY-E1A/3J数字式交流电压继电器; HJY-E1B/3D数字式交流电压继电器; HJY-E1B/3J数字式交流电压继电器; HJY-E2A/3D数字式交流电压继电器; HJY-E2A/3J数字式交流电压继…