软件测试课程设计——tcas的测试脚本
背景参考
首先,选择tcas作为测试项目,下载地址:
SIR内的tcas文件
tcas的内部文件中version.alt包含了不同错误版本的待测文件,source为待执行代码存放的文件夹,outputs为执行后的结果文件夹,script为各类脚本所在文件,建议按照tcas本来的存放格式保存各种输出结果,不要随意存放,这既是为了美观,也为了减少错误。
具体tcas的内容参考:
https://blog.csdn.net/mangoer_ys/article/details/25974067
阅读作用很大,我最先也按照文中编写测试脚本,因为无法满足读取每个语句被某个版本的多少用例执行这一数据,所以决定自己编写脚本。建议先阅读这篇文章。
收集对单个版本所有用例的测试数据
如果只想收集所有用例累加的测试数据(这里的累加解释一下,t1对一个语句执行2次,t2对这个语句执行1次,那么采用如下方法只会记录3次,而项目要求是,因为有2个用例执行这语句,所以应记为2次。)如果你希望得到累加数据,采用以下语句:
gcc -fprofile-arcs -ftest-coverage -o tcas.exe tcas.c #生成文件.exe .gcno
./runall #运行脚本,生成.gcda
gcov -b tcas.c #分支覆盖,生成.gcov
lcov -d . -c -o r1.info #收集信息到一个文件
genhtml -o results r1.info #获取HTML输出,看到语句覆盖 函数覆盖
在version.alt的每个版本内命令行执行第一句,将编译好的tcas.exe复制到source,执行tcas自带的script的runall.sh即第二句,再执行后三句,可以获得绝大部分信息,如语句覆盖率,分支覆盖率,函数覆盖率,每个语句的累加测试次数等,并以html文件展示。但与项目要求相比缺少三点:
1.测试数据矩阵
2.单个语句的非累加次数
3.正确,错误的用例个数(这简单用diff语句对输出文件进行循环判断即可)
因此,需要自己编写脚本。
使用diff判断的python3文件:
import os
VER_NUM = 3
CASE_NUM = 1608
TIMES_TRUE = 0
TIMES_FALSE = 0
for i in range(1, VER_NUM+1):
for j in range(1, CASE_NUM +1):
tmp = os.system("diff /home/qjm/tcas/outputs/v0/t" + str(j)+ /home/qjm/tcas/outputs/v" + str(i) + "/t" + str(j) + ">/dev/null")
if tmp != 0:
TIMES_FALSE = TIMES_FALSE + 1
else:
TIMES_TRUE = TIMES_TRUE + 1
print("Version",i," True: ",TIMES_TRUE,"False: ",TIMES_FALSE)
TIMES_FALSE = 0
TIMES_TRUE = 0
1.Linux命令及shell语言脚本
sh语言我也是第一次使用,大概好处是可以直接运行linux命令。
原有脚本(runall.sh):
echo script type: R
echo ">>>>>>>>running test 1"
../source/tcas.exe 958 1 1 2597 574 4253 0 399 400 0 0 1 > ../outputs/t1
echo ">>>>>>>>running test 2"
../source/tcas.exe 627 0 0 621 216 382 1 400 641 1 1 0 > ../outputs/t2
echo ">>>>>>>>running test 3"
../source/tcas.exe 549 1 1 4398 133 1445 1 641 639 0 0 1 > ../outputs/t3
echo ">>>>>>>>running test 4"
../source/tcas.exe 576 0 1 3469 183 381 2 641 501 1 0 1 > ../outputs/t4
echo ">>>>>>>>running test 5"
../source/tcas.exe 992 1 0 3342 23 4657 1 640 741 0 0 0 > ../outputs/t5
echo ">>>>>>>>running test 6"
../source/tcas.exe 548 0 1 34 542 3514 2 499 401 1 1 1 > ../outputs/t6
echo ">>>>>>>>running test 7"
../source/tcas.exe 710 0 0 127 403 4616 3 500 400 0 0 0 > ../outputs/t7
(未完整摘录,共1608个测试用例)
runall.sh内容为将测试用例输入source文件中的tcas.exe,输出结果则存放到outputs中。
运行方式:
进入script,进入终端,输入:
./runall.sh
使用gcov工具完成单个用例的分析
背景博客已经做过介绍,不再重复。为了实现单个用例的数据收集,需要为每个用例生成gcov文件。这里由于脚本在script文件夹运行,收集数据的gcov文件会存放在script中,需要删除。
gcc -fprofile-arcs -ftest-coverage -o ../versions.alt/versions.orig/v5/tcas.exe ../versions.alt/versions.orig/v5/tcas.c
cp ../versions.alt/versions.orig/v5/tcas.exe ../source
mv ../scripts/tcas.gcno ../versions.alt/versions.orig/v5