【软件缺陷定位】西门子测试集 Siemens-suite 的使用

实验环境: Linux 、python3

毕业设计是关于软件缺陷定位的方法。该领域的常用数据集是西门子测试集。整体介绍如下:

  • 该测试集共包含 7 个程序,每个程序对应一个正确版本和多个有 Bug 的版本(Bug 位置一般有注释,如果没有,手动用 diff 操作和正确版本比较差异可得。),并包含有若干项 TestCase。
  • 这些程序都是用 C 语言写成,但因为该测试集时代久远,其很多 C 语言语法已经不符合现在的 GCC 编译规范,因此需要手动修改一些代码。

主要参考文章;西门子测试集简介

测试集目录结构

.
├── README.md
├── printtokens2_2.0.tar.gz
├── printtokens_2.0.tar.gz
├── replace_2.1.tar.gz
├── schedule2_2.0.tar.gz
├── schedule_2.0.tar.gz
├── tcas_2.0.tar.gz
└── totinfo_2.0.tar.gz

可以看到共有 7 个程序,用 replace 做例子,其余目录结构基本相同。
其中使用到的目录如下:
【软件缺陷定位】西门子测试集 Siemens-suite 的使用_第1张图片

测试集的处理

如果我们直接 cd 到 source.alt/source.orig/ 目录下,执行 gcc -O2 replace.c -o replace.exe (gcc 编译命令在下一篇中介绍),会发现编译失败(数据集太旧导致的语法标准变化)。因此,我们需要修改 replace.c 文件。

  1. i# include 下插入两行
    # include 
    # include 
    
  2. 修改 # define NULL 0# define NUL 0 ( NULL 为关键字)
  3. 将所有的 getline 替换为 get_line

现在,再次执行 gcc -O2 replace.c -o replace.exe ,发现只有 warinning 信息,但程序可以正常编译成功。

接下来需要到 versions.alt/versions.orig 目录下,对 v1 ~ v32 共 32 个版本的 replace.c 文件做同样更改。(最好用一些脚本做)

测试集的执行

现在的 outputs 和 newoutputs 文件夹中都是空的。现在开始获得程序的输出。

在 scripts 中找到模版脚本 runall,sh 文件。打开后发现共 5542个测试用例,取其中一个解析如下:

echo ">>>>>>>>running test 1"
../source/replace.exe '-?' 'a&'  < ../inputs/temp-test/1.inp.1.1 > ../outputs/t1

其中,../source/replace.exe 是指明执行程序路径,../outputs/t1 指明结果输出路径。
因此,将此脚本中 ../source/replace.exe 替换为 ../source.alt/source.orig/replace.exe,然后执行该脚本,便可生产5542个正确结果到 outputs 文件夹中。(前提是已经编译出 replace.exe)

参照该脚本文件,可以写出各个版本的执行脚本,newoutputs/ 中可以按 v1/ v2/ … 组织结果的存储。(同样建议使用脚本生产)

至此,完成了 Siemens-suite 的一个程序的修改、运行,并生产出相应数据。

下一篇文章中,学习在此基础上,获得每一个程序的运行频谱和结果矩阵。从而可以利用其他种种处理方法实现错误的定位。

你可能感兴趣的:(技术,软件缺陷定位)