软件测试白盒测试教案.docx
《软件测试白盒测试教案.docx》由会员分享,可在线阅读,更多相关《软件测试白盒测试教案.docx(15页珍藏版)》请在冰豆网上搜索。
软件测试白盒测试教案
《软件测试基础》教案
第8章动态测试
8.1白盒测试
(1)
授课教师:
XXX
课时:
2课时
●主要目的
⏹介绍动态测试中的“白盒”测试、“黑盒”测试与单元测试、集成测试、确认测试及系统的相关知识和概念
⏹详细讲解传统动态测试的各种测试技术和测试方法
⏹介绍了HP用于支持动态测试的相关工具
●重点
⏹动态测试的相关知识和概念
⏹动态测试的各种技术和方法
⏹HP用于支持动态测试的相关工具
●难点
⏹掌握逻辑覆盖测试方法
⏹逻辑覆盖、路经测试、数据流测试、覆盖率分析及测试覆盖准则
课时1
1.回顾上一章:
[5分钟]
回顾软件静态测试相关知识。
分析动态测试与静态测试的关系,引导出白盒测试。
2.课程知识点讲解:
2.1.具体知识点1:
[5分钟]
导入:
首先解释什么是“白盒”,强调对于程序逻辑结构的可视性。
然后问学生,白盒测试和调试的关系,揭示出白盒测试更强调发现问题,有更加系统科学的方法来支持,进而引申出白盒测试的重要性。
最后给出白盒测试的概念及采用的测试方法:
“白盒”测试又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构设计测试数据并完成测试的一种测试方法。
白盒”测试所采用的测试方法是逻辑覆盖(包括语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖以及路径覆盖)
2.2.具体知识点2:
[5分钟]
导入:
由最简单,最基础的覆盖技术讲起,以程序为示例,强调其对各种逻辑路径的忽视,从而揭示出其弱点。
语句覆盖。
语句覆盖是最起码的测试要求,使得每一条语句至少被执行一次
对程序的逻辑覆盖很少,只关心判定表达式的值,是很弱的逻辑覆盖标准。
2.3.具体知识点3:
[5分钟]
导入:
相比于语句覆盖,更加强调对于判定逻辑的覆盖能力,最后指出其判定粒度依然不够细,对于判定条件的忽视可能会有未发现的缺陷。
判定覆盖
要求设计足够的测试用例,使得程序中的每一个分支至少通过一次即每一条分支语句的“真”值和“假”值都至少执行一次。
2.4.具体知识点4:
[5分钟]
导入:
针对判定覆盖所忽视的判定条件问题引出本知识点,最后要指出其对于条件的各种组合情况的覆盖缺失依然可能会有未发现的缺陷。
条件覆盖
不仅每一个语句至少执行一次,使得判定中的每个条件获得各种可能的结果。
判定覆盖只关心整个判定表达式的结果,条件覆盖关心的则是每个条件各种取值的结果。
2.5.具体知识点5:
[5分钟]
导入:
以或的关系为例,指出“真或假”与“假或真”这两种情况就可以满足基本的条件覆盖,但却无法满足基本的判定覆盖。
然后引出要把这两种覆盖的要求结合起来,形成了判定/条件覆盖。
最后要指出此种覆盖并没有解决条件覆盖中对于条件的各种组合情况的覆盖缺失问题,和由此可能造成有些缺陷依然不能被发现。
判定/条件覆盖
设计足够多的测试用例,使得判定中每个条件的所有可能取值至少能够获取一次,同时每个判断的所有可能的判定结果至少执行一次。
2.6.具体知识点6:
[5分钟]
导入:
针对判定覆盖所忽视的判定条件问题引出本知识点,最后要指出其对于条件的各种组合情况的覆盖缺失依然可能会有未发现的缺陷。
条件组合覆盖
要求设计足够多的测试用例,使得每个判定中条件的各种组合至少出现一次。
满足条件组合覆盖标准的测试用例,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。
2.7.具体知识点7:
[5分钟]
导入:
指出在之前各种覆盖的基础上,最终要实现全部的覆盖就是要达到路径覆盖。
强调路径覆盖对于复杂程序是难以完全实现的。
路径覆盖
要求设计足够多的测试用例,使得程序中所有的路径都至少执行一次。
3.案例讲解:
*范例名称:
逻辑覆盖的示例
*源文件名称:
数据处理流程
*要点:
1.案例示例程序:
func(inta,b,x)
{
if((a>1)&&(b=0))
x=x/a;
if((a=2)||(x>1))
x=x+1;
}
画出流程图如右。
对逻辑覆盖分析:
由这个流程图可以看出,该程序模块有4条不同的路径:
P1:
(a-c-e)P2:
(a-c-d)
P3:
(a-b-e)P4:
(a-b-d)
将里面的判定条件和过程记录如下:
判定条件M={A>1andB=0}
判定条件N={A=2orX>1}
1、语句覆盖
测试用例输入
输出
判定M的取值
判定N的取值
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T
T
P1(a-c-e)
2、判定覆盖
p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。
测试用例输入
输出
判定M的取值
判定N的取值
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T
T
P1:
(a-c-e)
A=1,B=1,X=1
A=1,B=1,X=1
F
F
P4:
(a-b-d)
也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下:
测试用例输入
输出
判定M的取值
判定N的取值
覆盖路径
A=2,B=1,X=1
A=2,B=1,X=2
F
T
P2:
(a-c-d)
A=3,B=0,X=3
A=3,B=1,X=1
T
F
P3:
(a-b-e)
3、条件覆盖
对于M:
A>1取真时T1,取假时F1;
B=0取真时T2,取假时F2;
对于N:
A=2取真时T3,取假时F3;
X>1取真时T4,取假时F4。
条件:
A>1,A<=1,B=0,B!
=0
条件:
A=2,A!
=2,X>1,X<=1
根据条件覆盖的基本思路,和这8个条件取值,组合测试用例如表所示:
测试用例输入
输出
取值条件
具体取值条件
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T1,T2,T3,T4
A>1,B=0,A=2,X>1
P1:
(a-c-e)
A=1,B=1,X=1
A=1,B=1,X=1
F1,F2,F3,F4
A<=1,B!
=0,A!
=2,X<=1
P4:
(a-b-d)
4、判定/条件覆盖
测试用例输入
输出
取值条件
具体取值条件
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T1,T2,T3,T4
A>1,B=0,A=2,X>1
P1:
(a-c-e)
A=1,B=1,X=1
A=1,B=1,X=1
F1,F2,F3,F4
A<=1,B!
=0,A!
=2,X<=1
P4:
(a-b-d)
5、条件组合覆盖
1)A>1,B=02)A>1,B≠0
2)A≤1,B=04)A≤1,B≠0
5)A=2,X>16)A=2,X≤1
7)A≠2,X>18)A≠2,X≤1
测试用例输入
输出
覆盖条件取值
覆盖条件组合
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T1,T2,T3,T4
1,5
P1:
(a-c-e)
A=2,B=1,X=1
A=2,B=1,X=2
T1,F1,T2,F1
2,6
P3:
(a-b-e)
A=1,B=0,X=3
A=1,B=0,X=4
F1,T2,F3,T4
3,7
P3:
(a-b-e)
A=1,B=1,X=1
A=1,B=1,X=1
F1,F2,F3,F4
4,8
P4:
(a-b-d)
6、路径覆盖
测试用例输入
输出
覆盖条件取值
覆盖条件组合
覆盖路径
A=2,B=0,X=4
A=2,B=0,X=3
T1,T2,T3,T4
1,5
P1:
(a-c-e)
A=1,B=0,X=1
A=1,B=0,X=1
T1,F1,T2,F1
2,6
P4:
(a-b-d)
A=2,B=1,X=1
A=2,B=1,X=2
F1,T2,F3,T4
3,7
P3:
(a-b-e)
A=3,B=0,X=1
A=3,B=0,X=2
F1,F2,F3,F4
4,8
P2:
(a-c-d)
4.本节总结[5分钟]
本课学习了“白盒”测试中逻辑覆盖的相关理论和方法。
5.考核点
考核点1:
“白盒”测试的测试方法
考核点2:
逻辑覆盖的种类
6.测试题
测试题1:
“白盒”测试的测试方法
7.扩展部分
扩展部分1:
“白盒”测试和其他测试阶段的关联性
扩展部分2:
“白盒”测试软件的实践
8.学员问题汇总
学员问题1:
学员问题2:
9.作业
习题1:
什么是“白盒”测试?
“白盒”测试采用哪些方法?
我们如何进行“白盒”测试?
习题2:
什么是逻辑覆盖、路径测试?
它们包含哪些内容?
课时2
1.课程知识点讲解:
1.1.具体知识点1:
[5分钟]
导入:
与逻辑覆盖注重对逻辑的考量这一点进行区别,解释路径覆盖是以路径为关注点。
路经测试的概念及采用的测试方法。
•根据程序的逻辑控制所产生的路径进行测试用例设计的方法。
它是从一个程序的入口开始,执行所经历的各个语句的完整过程。
完成路经测试的理想情况是做到路径覆盖。
•主要方法有:
DD路径测试和基本路径测试。
1.2.具体知识点2:
[10分钟]
导入:
以判定(Decision)为切入点,解释DD路径的含义,强调其对于简化程序流程图进而提高测试效率的作用。
在解释这些问题时要确保学生已经知道程序控制流图是什么,链是什么。
如果没有,可以参照ppt中的内容作先导性的介绍。
DD路径测试
DD-路径是控制流图中的一条链,只要满足下列五种情况之一:
1.由一个节点组成,入度=0;
2.由一个节点组成,出度=0;
3.由一个节点组成,入度>=2或者出度>=2;
4.由一个节点组成,入度=1并且出度=1;
5.长度>=1的最大链。
很多质量机构都把DD-路径覆盖作为测试覆盖的最低可接受级别。
E.F.Miller发现,当一组测试用例满足DD-路径覆盖要求时,可以发现全部缺陷中的大约85%(Miller1991)。
1.3.具体知识点3:
[5分钟]
导入:
先回顾McCabe圈复杂度,指出其是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数。
强调其对于判定的覆盖,与逻辑覆盖中的判定覆盖进行关联,随后指出,要按照McCabe圈复杂度来设计测试用例实现全部独立路径的覆盖需要怎么做。
基本路径测试
基本路径测试是McCabe提出的一种“白盒”测试方法
1.计算程序的圈复杂度
2.用该复杂度为指南定义执行路径的基本集合
3.从该基本集合中导出的测试用例可以保证程序中的每条语句被覆盖
4.而且每个条件在执行时都分别取真、假两种值
1.4.具体知识点4:
[15分钟]
导入:
见上一知识点的导入内容。
另外,讲完本知识点的概念部分后要引出案例讲解部分,带着学生依次执行每个步骤。
基本路径测试的步骤
1)根据过程设计结果画出相应的流图
2)计算控制流图的圈复杂度
3)确定线性独立路径的基本集合
4)设计可强制执行基本集合中每条路径的测试用例
1.5.具体知识点5:
[5分钟]
导入:
提出多次循环的问题,并由此引出测试的复杂性,进而再给出解决的办法:
循环路径测试。
循环路径测试
循环路径测试分为
Ø0次循环(检查跳出循环)
Ø1次循环(检查循环初始值)
Ø2次循环(检查多次循环)
Øm次循环(检查某次循环)
Ø最大次数循环、比最大次数多一次、少一次循环,检查循环次数边界
环使路径数量急剧增长,为此我们要对循环过程进行简化。
无论循环的形式和实际执行循环体的次数多少,只考虑循环1次和0次。
2.案例讲解:
*以下代码,由C++语言书写。
把它转化成控制流图,并使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。
1.voidReadPara(CStringtemp)
2.{
3. if(temp==">=")
4. m_oper.SetCurSel(0);
5. else
6. {
7. if(temp==">")
8. m_oper.SetCurSel
(1);
9. else
10. {
11. if(temp=="==")
12. m_oper.SetCurSel
(2);
13. else
14. {
15.if(temp=="<=")
16.m_oper.SetCurSel(3);
17. else
18. {
19. if(temp=="<")
20. m_oper.SetCurSel(4);
21. else
22. m_oper.SetCurSel(5);
23. }
24. }
25. }
26. }
27.return;
28.}
1.控制流图如下图所示
2.根据控制流图,计算环路复杂度
V(G)=22-18+2=6。
3.导出测试用例,列出路径:
Path1:
2-3-4-27-28
Path2:
2-3-7-8-26-27-28
Path3:
2-3-7-11-12-25-26-27-28
Path4:
2-3-7-11-15-16-24-25-26-27-28
Path5:
2-3-7-11-15-19-20-23-24-25-26-27-28
Path6:
2-3-7-11-15-19-22-23-24-25-26-27-28
4.设计测试用例
根据第3步中给出的路径,下面设计测试用例。
传入参数
预期调用
Path1
ReadPara(”>=”)
m_oper.SetCurSel(0)
Path2
ReadPara(”>”)
m_oper.SetCurSel
(1)
Path3
ReadPara(”==”)
m_oper.SetCurSel
(2)
Path4
ReadPara(”<”)
m_oper.SetCurSel(3)
Path5
ReadPara(”<=”)
m_oper.SetCurSel(4)
Path6
ReadPara(”+”)
m_oper.SetCurSel(5)
10.本节总结[5分钟]
本课学习了路经测试中DD路经测试、基本路径测试和循环路径测试的概念和方法。
11.考核点
考核点1:
基本路径测试的方法
12.测试题
测试题1:
如何进行基本路径测试
13.扩展部分
扩展部分1:
无
扩展部分2:
无
14.学员问题汇总
学员问题1:
学员问题2:
15.作业
习题1:
基本路径测试的方法?
习题2:
什么是逻辑覆盖、路径测试?
它们包含哪些内容?
习题3:
什么是信息流测试?
信息流测试包含哪些内容?
习题4:
什么是数据流测试?
我们如何进行数据流测试?
习题5:
条件组合覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足条件组合覆盖级别的测试用例也是满足______级别的逻辑覆盖。