软件缺陷定位☞西门子数据集介绍

时间: 2023-07-18 admin IT培训

软件缺陷定位☞西门子数据集介绍

软件缺陷定位☞西门子数据集介绍

本文主要介绍Siemens suite下载和使用。

1、About:

Siemens suite是软件缺陷定位领域研究中最常用的测试套件,可从SIR(software infrastructure
repository)下载,这个测试套件被很多有关软件缺陷定位的文献中使用。

2、Siemens suite下载:

进入SIR网址,如下图:

 此时需要注册经审核后才可以登录下载,点即Get Access进入登录注册界面:

点击Register进入注册界面,注册需要填写自己所在机构或公司(我填的是学校名称),还有关于自己研究方向的简短描述,填完基本信息后,经过审核就可以登录进行下载了。

 登录后,可以点击Download Objects进行下载:

这里我把Siemens suite包含的7个测试集都下载好了,链接如下:

链接:

3、Siemens suite使用:

首先看下Siemens suite包含的7个测试集主要信息:

这几个测试集的文件组织结构和使用方法基本雷同,只要掌握一个,其他也是一样的方法。接下来主要以replace测试集为例介绍下该套件的目录组织结构:

1)首先建立一个存放测试集的文件夹fl,将下载的replace测试集放在fl文件夹下,在此目录下解压:

tar zxvf replace_2.1.tar.gz

2)解压完成后,会在解压目录下生成replace文件夹,打开文件夹可以看到其目录组织结构:

3) 在这些目录中,我们需要用到的有inputs、newoutputs、outputs、scripts、source.alt、versions.alt,这里面source和versions文件夹是空的,可以忽略;

4)先看source.alt / source.orig里面有replace.c这个被测程序的代码文件,在执行测试程序以前,需要将其提前编译为replace.exe 的二进制文件以供测试程序调用。进入source.alt / source.orig目录下,利用Linux平台上GCC编译器编译被测代码,使用命令:                    

gcc -O2 replace.c -o replace.exe

 注意:”-O2”中是大写字母”O”而不是数字”0”,表示使用2级优化,而后面的”-o”中是小写字母”o”,表示指定输出文件名。执行命令后可以看到:

             

 可以看到编译器弹出警告,这是由于Siemens Suite 套件中,代码大多完成于90年代,而我们使用的GCC 编译器的版本较新。在此期间,C语言的国际标准发生了很大变化,在replace中,如果想要编译器编译通过,需要修改replace.c代码文件:

主要修改的还是将一些库函数加入到include中,把内置函数和关键字重命名

- 首先将 ctype.h 和 stdlib.h 头文件加入到include中;
- 将函数名为getline的全部替换为get_line(因为getline函数在stdio.h中已经定义,重命名即可);
- 将# define NULL 0 修改为 define NUL 0(因为NULL是关键字,提示重复定义);

此时,修改完毕,再继续编译,即可通过,会在同目录下生成replace.exe;

这里放上我修改后的replace.c代码文件链接:

链接:    提取码:upkh 

在编译其他测试套件代码文件时也会弹出警告,甚至报出错误无法编译,需要按照相应的提示修改代码文件

5)versions.alt / versions.orig 目录中保存了该被测程序的每个错误版本(在正确的程序之中,随机植入若干错误,产生的错误代码供大家测试),打开versions.alt / versions.orig 目录可以看到replace的32个错误版本文件夹(里面的replace.c里有植入错误,同理按照上面的步骤修改使其编译通过):

在这32个错误版本中,错误产生的地方在代码文件中有注释标明

6)inputs / input 目录里保存了所有的测试用例的输入;

7)outputs 目录用于保存被测程序的正确原型(即source.alt / source.orig 目录中的replace.c代码)对于每个测试用例给出的预期输出,在测试含有错误的版本时用于比较相同测试用例得到的执行结果是否相同。在未执行任何测试程序之前,outputs 目录暂时为空;

8)newoutputs 目录用于保存被测程序的每个错误版本对于每个测试用例得到的实际输出,在测试含有错误的版本时用于比较相同测试用例得到的执行结果是否相同。在未执行任何测试程序之前,newoutputs 目录暂时为空;

9)scripts 目录中保存了子测试套件给出的测试脚本范例,打开scripts 目录后可以看到该目录下有一个名为runall.sh 的shell 脚本文件,该脚本文件用于运行source.alt / source.orig目录中被测程序正确原型,将测试用例输入到被测程序正确原型中后,将执行结果输出到replace 中outputs 目录下,按每个测试用例组织文件,runall.sh 中共定义了5542 个测试用例(replace 子套件共有5542 个测试用例),在scripts 目录中输入命令 source ./runall.sh 即可运行该脚本文件,在运行该脚本之前,需要先将source.alt / source.orig 中的replace.c代码文件编译并且修改runall.sh脚本文件replace.exe存放的路径。因为现在新版的套件replace.c程序文件在source.alt / source.orig目录下而非source目录下,将脚本文件中所有的 ../source 替换为 ../source.alt/source.orig;

这里给出我修改后的runall.sh脚本文件链接:

链接:     提取码:6tan 

10)当运行完runall.sh脚本后,在outputs目录下可以看到这5542个测试用例执行后的结果文件,下图是部分截图:

至此,西门子测试集的子套件目录结构介绍完毕。

参考博文: