Ubuntu环境下Simfix代码工具的配置与使用

前言

最近正在学习软件修复技术,当然此类工具很多包括Simfix、CapGen等。我选择Simfix在本地实际测试了一遍,虽然配置相对比较繁琐(需要先配置defects4j程序集环境),但是学习总会使我们快乐嘛。这也是我的第一篇博客,以后与大家一起交流、共勉学习。好,开始我们的干货!

1.配置准备

defects4j程序集的需求环境很麻烦,不过作为新人的我肯定会详细的给大家讲解了。

关于JDK的版本,小编在此提醒各位,务必使用jdk1.7!!!(很重要),其他的版本会出某些小问题,到时候费力不讨好。

2.环境安装

1)JDK1.7的配置

由于关于需要配置JDK环境的软件对于JDK最低版本变为1.8。jdk1.7官网下载需要注册Oracle账号,在此我已保存在网盘,直接下载即可。

 链接:https://pan.baidu.com/s/1QOHw9tm8ePRaza_w1gCs6A  提取码:572t 

由于各位大牛们可以操作关于自动修复的技术,相信关于JDK在Ubuntu环境下的配置不用再赘述了,可以参考

https://blog.csdn.net/rflyee/article/details/8989663

2)Git的配置
打开终端,输入以下命令即可:

sudo apt-get update
sudo apt-get install git
git --version

3)SVN的配置

sudo apt-get subversion
svn --version

4)Perl的配置

可先在 http://www.cpan.org/src/5.0 上查找对应的版本 ,以perl-5.26.1.tar.gz为例 
在终端依次运行以下命令 

sudo wget http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz 
tar -xzf perl-5.26.1.tar.gz 
cd perl-5.26.1 
./Configure -des -Dprefix=$HOME/localperl 
make 
make test 
make install 

等几分钟perl就安装好了


3.defects4j的安装

1) Clone Defects4J: 

git clone https://github.com/rjust/defects4j

下载下来以后在电脑的主目录。(E:/home/lizeyu)

2)初始化Defects4J

  cd defects4j
  ./init.sh

3) 将Defects4J的可执行文件添加到路径中:    

sudo gedit /etc/profile
export PATH=$PATH:/home/lizeyu/defects4j-master/framework/bin
export DEFECTS4J_HOME=/home/lizeyu/defects4j-master

具体操作与Java配置时一样。

4)检查安装:

defects4j info -p Lang

5)使用defects4j:

 Example commands
1.  获取特定项目的信息(commons lang)
    - `defects4j info -p Lang`

2.  获取特定bug的信息(commons lang, bug 1)
    - `defects4j info -p Lang -b 1`

3.检出有bug的源代码版本(common lang, bug 1, bug版本)
    - `defects4j checkout -p Lang -v 1b -w /tmp/lang_1_buggy`

4. 更改到工作目录,编译源代码和测试,并运行测试
    - `cd /tmp/lang_1_buggy`
    - `defects4j compile`
    - `defects4j test`
如果在测试过程中出现

Can't locate DBI.pm in @INC (you may need to install the DBI module) (@INC contains: )

错误,不要惊慌,作者遇到过,肯定不会在自己的第一篇博客中忘记告诉大家解决办法

输入命令:

sudo apt-get install libdbi-perl

4.Simfix的使用

是不是很繁琐啊,来到这我们已经快要成功了,接下来终于到了紧张又刺激的时刻,我有点小激动,不知道看着心累的大牛们内心是否泛起波澜,想给小弟一些鼓励呢。

关于Simfix的下载,相信来到这里的大牛们知道SIR。小弟送上本人测试所用的Simfix,下载后解压即可。

链接:https://pan.baidu.com/s/1BuKarFksXDQx0aYRfrGQYA 
提取码:0g57 

下载后大家可以阅读Readme文件了解详细的介绍,小弟在此只叙述一下使用方法。

Simfix有两种运行方式,因为Simfix本身就是eclipse制作的工程文件。所以有强迫症喜欢把大件程序代码放到eclipse上的牛牛们有福了(本人就是,主要是觉得成就感满满,各类文件显示都很到位,对于工具的重做与修订很有感觉),当然是一个工程文件自然有jar包了,最熟悉的终端命令行运行也是可以的。

首先讲解一下Simfix的准备工作

在运行之前

*`unzip(解压)`文件`sbfl / data.zip`到`sbfl / data`:用于故障定位(谨记!谨记!谨记!)

*使用Defects4J提供的命令行检查一个错误版本的基准测试。(在此之前请创建 目录:/home/lizeyu(个人ubuntu系统用户名)/d4j/lang(包括chart、time等),小编在之后不再赘述。

`示例:defects4j checkout -p Lang -v 1b -w  /home/lizeyu/d4j/lang/lang_1_buggy`

** _注意_ **:基准版错误版本的路径必须设置为:

`... / projectName / projectName_id_buggy` =>`示例:/home/lizeyu/d4j/lang/lang_1_buggy`

运行选项

我们的* SimFix *原型需要**三个**输入选项才能运行。

*`--proj_home`:基准测试程序的家。 (例如``$ {/home/lizeyu/d4j}`

*`--proj_name`:基准测试程序的项目名称。 (示例中的`lang`)

*`--bug_id`:有缺陷的程序的标识符。 (示例为“1”)

  *`--bugy_id`选项支持多种格式:

    `single_id`:修复单个bug,例如1`。

    `startId-endId`:修复一系列带有连续标识符的错误,例如1-3。

    `single_id,single_id,single_id`:修复特定程序的任何错误,例如,1,5,9`。

    `all`:修复特定项目的所有错误版本,即`all`。
  示例: --proj_home=/home/lizeyu/d4j --proj_name=lang --bug_id=1
  另一个:--proj_home=/home/lizeyu/d4j --proj_name=lang --bug_id=1,4,8

不同方式运行

方式一:在eclipse上运行

我在使用时遇到两个问题,第一个呢,就是我之前在文中提到的eclipse目前最低要求jdk版本为1.8.所以会出现配置好jdk1.7以后eclipse打开报错。类似说明检测到本地安装的是java 1.7,但软件运行需要至少java1.8(当然旧版本eclipse不会遇到)。很尴尬是不是。不好意思,写到这里相信大家跟我一样入坑了。小弟冥思苦想想到以前刚用eclipse使用1.7后来更换1.8的方法奏效了(也就是本地两个jdk版本)。首先将PATH变量更改为Java 1.8的路径。当我打开eclipse后,高兴的要导入之前移到workspace的Simfix-master的工程包时第二个问题来了,导入不进去,不知道你们有没有,当然这是后话。打开eclipse,随便建一个java project,例如:simfix,建好后将之前的Simfix-master目录下的文件复制到刚建好的在eclipse的workspace目录simfix文件下,遇到文件冲突点替换就好。然后返回eclipse刷新一下就好了,那第一个问题需要jdk1.7自然就是很简单了,右击simfix工程‘build-path’,接下来就不说了。一切OK。不知道是不是话痨上身,废话一阵子。

正题来了:主文件是src.cofix.main.Main,很意外居然跟普通java文件运行一样,就是这么的优秀。然后惊喜的发现一脸懵逼,运行需要的三个选项还没填,而且不知道在哪儿填。嘿嘿,右击Main.java文件:

   `Run As`→`Run Configurations…` →`Arguments` : 在第一栏输入之前讲解的规范输入,Run即可。

.

方式二:终端运行

此方式需要使用已经打包好的simfix.jar文件,在Simfix文件目录的final目录下。将jar包移到主目录(Simfix-master目录下)。

将终端路径cd到Simfix-master目录下

java -jar simfix.jar --proj_home=/home/lizeyu/d4j --proj_name=lang --bug_id=1

结果分析

运行结束后会出现两个文件夹,两种方式都在simfix的home路径下。只有修复成功才会出现patch目录。

*`log`:调试输出,包括已经尝试的错误语句,补丁和参考代码片段,用于正确的补丁生成。

*`patch`:由* SimFix *修复的单个源文件,可以通过测试套件。 在源文件中,您可以找到格式为(Lang_1示例)的修补程序。

5.结尾总结

本人也是一位新人,这也是本人第一篇博客,叙述不够清楚望海涵。在使用过程中遇到问题可以留言或者联系我,我定力所能及的及时帮助,大家共同学习、共同进步。码了这马多,真的是比敲代码还累。希望点个赞、点个关注支持一下。

 

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nan feng

打赏一杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值