基于某代码地测试软件静态测试.docx
《基于某代码地测试软件静态测试.docx》由会员分享,可在线阅读,更多相关《基于某代码地测试软件静态测试.docx(11页珍藏版)》请在冰豆网上搜索。
基于某代码地测试软件静态测试
成绩
辽宁工程技术大学上机实验报告
课程名称
软件测试与评估
实验题目
基于代码的测试技术
院系
软件学院
专业
软件工程
班级
软件13-9班
姓名
王朝晖
学号
1320010920
实验日期
2016.5.12
实验
目的
1.初步了解软件测试的基本知识。
2.应用基本知识进行简单的测试。
3.掌握代码测试技术的基本方法。
4.针对案例,能够运用代码测试技术中的具体方法进行测试用例的设计。
实验
准备
1.计算机一台,有c与c++程序设计学习与实验系统的软件。
2.了解至少一门程序设计语言,并能熟练应用。
能够编写并运行有关实验的相关代码。
3.了解程序数据流分析的方法并能应用方法分析程序。
4.了解程序控制流分析的方法并能应用。
实验
进度
本次共有1个练习,完成1个。
实验
内容
1.根据三角形问题进行编程,分为等腰三角形,等边三角形,普通三角形以及不能构成三角形。
2.对程序进行数据流分析。
3.画出程序的控制流图。
计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界;
4.导出基本路径集,确定程序的独立路径;
5.根据独立路径,设计测试用例的输入数据和预期输出。
实验
分析
一.实验步骤
1.打开c与c++程序设计学习与实验系统平台,编写有关三角形问题的相关程序。
2.对程序进行数据流分析。
3.对程序进行程序控制流分析。
4.计算环形复杂度。
5.给出程序的独立路径集合。
6.进行用例设计。
7.总结归纳。
二.程序分析
1.程序代码
1)#include
2)main()
3){
4)intA,B,C;
5)printf("请输入三角形的三条边:
");
6)scanf("%d%d%d",&A,&B,&C);
7)if((A>0&&B>0&&C>0)&&((A+B)>C&&(A+C)>B&&(B+C)>A))
8){
9)if(A==B&&A==C)
10)printf("该三角形是等边三角形!
\n");
11)else
12)if((A==B&&B!
=C)||(B==C&&B!
=A)||(A==C&&A!
=B))
13)printf("该三角形是等腰三角形!
\n");
14)else
15)printf("该三角形是普通三角形!
\n");
16)}
17)else
18){
19)printf("ERROR!
\n");
20)returnmain();
21)}
22)}
2.分析
程序主要是根据三个整数a,b,c,构成一个三角形判定三角形的类型为等边三角形、等腰三角形、普通三角形还是构成不了三角形。
要求输入的三个整数都是正数且a+b>c,a+c>b,b+c>a,才能进行以后的判断。
否则输出“ERROR!
”,返回主程序,重新输入三个整数a,b,c。
然后判断三角形的类型。
如果a=b且a=c,输出“该三角形是等边三角形!
”。
如果a=b,b不等于c,或b=c,b不等于a,或a=c,a不等于b,输出“该三角形是等腰三角形!
”。
如果不是以上这两种情况,输出“该三角形是普通三角形!
”。
3.数据流分析
数据流测试是以静态测试技术来发现缺陷的手段与方法。
数据流测试是关注变量的赋值与使用位置的结构性测试方法。
定义du-path。
如果路径集合中的某个路径,定义两个节点,分别为该路径的起始节点和该路径的终止节点,该路径就为定义-使用路径。
定义dc-path,如果某个定义-使用路径,除了起始节点之外没有其他定义节点,则该路径有定义-清除路径。
数据流覆盖指标层次结构图描述数据“定义-使用”对,找出所有变量的定义-使用路径,考察测试用例对这些路径的覆盖程度,就可作为衡量测试效果的分析参考。
由代码可得出节点4为定义a,b,c。
节点7,9,12为使用a,b,c。
根据数据流测试数据流覆盖指标,拉普斯-韦约克层次结构图来描述程序的数据“定义-使用”对,并找出所有变量的定义-使用路径,可得到程序图G(P),如图1。
使用路径du-path与清除路径dc-path,定义/使用节点和定义/使用路径,如表1,表2。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
图1G(P)
表1定义/使用路径
变量
路径(开始、结束)节点
是定义清除吗
a
4,7
4,9
4,12
否
否
是
b
4,7
4,9
4,12
否
否
是
c
4,7
4,9
4,12
否
否
是
表2定义/使用节点
变量
定义节点
使用1
a
4
7,9,12
b
4
7,9,12
c
4
7,9,12
四.程序控制流分析
1.根据代码得出程序流程图
程序流程图是人们对解决问题的方法、思路或算法的一种描述。
程序流程图有有采用简单规范的符号,画法简单;结构清晰,逻辑性强;便于描述,容易理解的优点。
开始
7
9
12
10
16
19
15
13
20
22
结束
图2程序流程图
2.根据程序流程图,将程序流程图转换为控制流图:
(1)将程序流程图中的每个分支转换为一个独立的节点。
(2)在分支前的顺序块合并入节点。
(3)对所有的节点及程序控制的流向进行编号。
如图3.
9
7
12
15
13
22
10
17
20
图3程序控制图
3.计算环形复杂度V(G)
环形复杂度度量主要用于计算程序的基本独立路径数目,并以此来设计接下来的测试用例。
主要根据程序的控制流图。
(1)V(G)=控制流图中的封闭区域的数量+1=1+3=4
(2)V(G)=流图中边的数量-流图中节点的数量+2=11-9+2=4
(3)V(G)=流图中判定节点的数量+1=3+1=4
故此程序的控制流图的环形复杂度为4
5.独立路径集合
根据上面的计算结果,可导出基本路径集,列出程序的独立路径(用代码给出的语句编号表示),可得出程序段的基本路径集中有四条独立路径,每条独立路径为一个独立的测试用例。
路径如下。
路径1:
7-9-12-15-22
路径2:
7-9-12-13-22
路径3:
7-9-10-22
路径4:
7-17-20
6.设计测试用例
根据第五步的独立路径,设计测试用例输入数据和预期输出。
设计的测试用例如表3所示。
表3测试用例表
用例名称
输入数据
预期输出
测试用例1
A=5,B=6,C=7
该三角形是普通三角形!
测试用例2
A=5,B=5,C=6
该三角形是等腰三角形!
测试用例3
A=5,B=5,C=5
该三角形是等边三角形!
测试用例4
A=3,B=4,C=7
ERROR!
7.测试用例截图
1.测试用例1
输入三边,a=5,b=6,c=7,能构成一个三角形。
且任意两边不相等。
构成一个普通三角形。
输出结果为“该三角形是普通三角形!
”。
如图4。
图4测试用例1
2.测试用例2
输入三边,a=5,b=5,c=6,能构成一个三角形。
且有两边相等。
与第三边不相等。
构成一个等腰三角形。
输出结果为“该三角形是等腰三角形!
”。
如图5。
图5测试用例2
3.测试用例3
输入三边,a=5,b=5,c=5,能构成一个三角形。
且有任意两边相等。
构成一个等边三角形。
输出结果为“该三角形是等腰等边三角形!
”。
如图6。
图6测试用例3
4.测试用例4
输入三边,a=3,b=4,c=7,不能构成一个三角形。
输出结果为“ERROR!
”。
返回主函数,继续输入如图5。
图7测试用例4
心得
体会
本次实验主要是掌握软件静态测试及其用例的设计。
总结来说就是六个步骤。
先是编写有关三角形问题的相关程序。
在这个环节老师给我们一个参考程序。
只要我们在老师给的程序的基础上进行改编。
很快就能调试成功。
这次用的程序相对简单,应用基础知识就能很好地完成。
只要注意一些小细节,比如分号的书写,中括号的书写,变量是否定义。
这一步完成的很顺利。
对程序进行数据流分析。
数据流分析是我的难点。
以前没有接触到,不是很熟悉。
对其中的定义掌握的也不是很熟练。
重点是数据流覆盖指标层次结构图,数据流覆盖指标层次结构图描述数据“定义-使用”对,找出所有变量的定义-使用路径,考察测试用例对这些路径的覆盖程度。
这个地方用了很长时间理解消化。
对程序进行程序控制流分析。
对控制流的知识有一定的了解,应用起来更加熟练。
首先先画程序流程图。
由于都是简单的语句。
得出流程图并不难。
然后根据程序流程图,将程序流程图转换为控制流图:
将程序流程图中的每个分支转换为一个独立的节点。
在分支前的顺序块合并入节点。
对所有的节点及程序控制的流向进行编号。
根据步骤也能较快的完成。
计算环形复杂度。
应用三种方法计算环形复杂度。
得出相同的结果。
证明实验没有出错。
前面的步骤成功。
根据控制流图得出四条独立路径。
最后进行测试用例。
根据四条独立路径,进行相应的测试用例。
观察是否与预期的相同。
这次的实验虽然简单容易,主要是自己的分析总结。
实验可以很快的做完。
但实验后的总结归纳才是最重要的的。
通过这次实验。
我对软件静态测试有了更加深刻的了解。
能够更好的应用这方面的知识。
能够独立自主的完成数据流的分析,画出数据流图。
能够根据程序流程图画出控制流图。
根据控制流图得到独立路径,计算环形复杂度。
并进行测试用例。
在做实验时我也有马虎的时候。
在编写程序时会出现小的语法错误。
能及时的改正。
在画数据流图时,由于对知识点的了解不到位,所以出现了很大的问题。
不知道该怎样画节点和边。
浪费了很长时间。
通过不断的理解,最后得到数据流图。
并能分析出相关内容。
以后的工作就相对简单了许多。
这次的实验能够较好较快的完成。
在以后的学习中,我会更加仔细认真。
避免一些因为马虎的小错误。
在做实验之前,先把应该理解的知识点弄懂弄会,避免在做实验的时候,发现不懂的地方。
这样会浪费时间,影响效率。
希望在下一次的实验中,能够更快更熟练地完成实验。
使实验的目的发挥到最大。