版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、白盒测试基础,白盒测试技术之一,目录,白盒测试技术概述,白盒测试用例设计技术,白盒测试工具,实例,1、白盒测试技术概述,1.1 白盒测试概念 1.2 白盒测试与黑盒测试比较 1.3 白盒测试的分类 1.4 白盒测试的合适程度,1、白盒测试技术概述,1.1 白盒测试概念 白盒测试(white-box testing),又称结构测试或者逻辑驱动测试,其按照程序内部的结构进行测试。 白盒测试方法就是把测试对象看做一个透明的盒子,测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过测试证明每种内部操作是否符合设计规格说明。,1、白盒测试技术概述,1.1 白盒测
2、试概念,对程序模块的所有独立的执行路径至少测试一遍。,在循环的边界和运行的界限内执行循环体。,白盒测试主要是想对程序模块进行如下检查:,对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。,测试内部数据结构的有效性等。,1、白盒测试技术概述,1.2 白盒测试与黑盒测试比较 白盒测试和黑盒测试都是软件测试的手段之一,在测试过程中两者互为补充,共同验证软件的质量。其中,黑盒测试主要用在系统测试阶段;而白盒测试则把测试深入到“盒子内部”,关注软件的结构和逻辑细节,主要用在单元测试和集成测试阶段。,1、白盒测试技术概述,1.2 白盒测试与黑盒测试比较,表1.1 黑盒测试与白盒测试比较,1、白
3、盒测试技术概述,1.3 白盒测试的分类 根据是否运行源代码,白盒测试分为静态分析和动态测试。 静态分析:不实际运行程序,只是静态的分析程序的代码是否符合相应的编码规范或是检查程序里面的逻辑错误。 静态分析可分为:代码走查、代码审查及技术评审等。 静态分析需借助白盒测试工具(Logiscope、C+ Test)来自动检测。,1、白盒测试技术概述,1.3 白盒测试的分类 表1.2 静态分析方法比较,1、白盒测试技术概述,1.3 白盒测试的分类 动态测试,即实际运行被测软件来测试。动态测试是白盒测试的重点,常用的测试技术有逻辑驱动覆盖、路径图法、边界值等。,1、白盒测试技术概述,1.4 白盒测试的合
4、适程度 一般而言,白盒测试做多做少与产品形态有关,如果产品更多的具备软件平台特性,白盒测试应占总测试的80%以上,甚至接近100%,而如果产品具备复杂的业务操作,有大量GUI界面,黑盒测试的份量应该更重些。 根据经验,对于大多数嵌入式产品,白盒测试方式展开测试(包括代码走读)应占总测试投入的一半以上,白盒测试发现的问题数也应超过总问题数的一半。,2、白盒测试用例设计,2.1 逻辑驱动覆盖技术 2.2 基本路径覆盖技术 2.3 循环覆盖技术 2.4 边界值测试,2、白盒测试用例设计,2.1 逻辑驱动覆盖技术 逻辑覆盖测试:主要是针对程序的内部逻辑结构设计测试用例的技术,它通过运行测试用例达到逻辑
5、覆盖的目的。主要包括以下6种类型的逻辑覆盖: 语句覆盖SC 判断覆盖(分支DC) 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖,2、白盒测试用例设计技术,2.1 逻辑驱动覆盖技术 方法步骤: 1)分析程序中的可执行语句,把可执行语句分块,并进行标记。 2)画出程序流程图,在流程图中使用语句块表示各个顺序执行的语句。 3) a、设计测试用例,使模块中的可执行语句都被覆盖,即语句覆盖率 达到100%。 b、设计测试用例,使模块中每个分支都被执行,即分支覆盖了达到 85%以上。 c、。 4)为了使模块能够运行,需要写驱动函数和桩函数。,2、白盒测试用例设计,2.1 逻辑驱动覆盖技术 例1: fun
6、c(int a,b,x) if(a1) 逻辑覆盖用例 表2.1,2、白盒测试用例设计,2.1 逻辑驱动覆盖技术 实际项目中,程序内部的逻辑存在着不确定性和无穷性,因此不能穷举所有的逻辑路径。任何一种方法也不能完全覆盖所有的测试用例,因此,在实际的测试用例设计过程中,可以将不同的设计方法组合起来,交叉使用,以达到最高的覆盖率。 通常语句覆盖、分支覆盖和路径覆盖用的比较多。 一般情况下,对设计的测试用例有以下要求: 语句覆盖率:100%。 分支覆盖率:85%以上。 路径覆盖率:85%以上。,2、白盒测试用例设计,2.2 基本路径覆盖技术 基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环
7、路复杂度,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证被测程序的每个可执行语句至少被执行一次。,2、白盒测试用例设计,2.2 基本路径覆盖技术 基本路径覆盖是一种简化的逻辑覆盖测试的方法。通过绘制控制流图得到一个基本路径集,再根据要执行的路径设计测试用例。,2、白盒测试用例设计,2.2 基本路径覆盖技术 方法步骤: 1)程序流程控制图。 2)可用三种方法计算圈复杂度V(G)。 a 、控制流图中区域的数量对应于环型的圈复杂度,注意也要计 算图形外的区域。 b 、边-结点+2。 c 、若没有switch的语句,可采用判断结点数量加1的方法得到 圈复杂度。 3)根据圈复杂度
8、,可以确定基本路径数,从而设计基本路径集的 测试用例。,2、白盒测试用例设计,2.2 基本路径覆盖技术 怎么得到程序的控制流图呢? 例1: func(int a,b,x) 1 if(a1) 5 控制流图2.1,2、白盒测试用例设计,基本路径为三条: 1)1-2-3-4-5 2)1-2-3-5 3)1-3-5,2.2 基本路径覆盖技术,2、白盒测试用例设计,2.2 基本路径覆盖技术 例1: 另外一种方法:根据复合条件画控制流图。 func(int a,b,x) 1 7 控制流图2.2,2、白盒测试用例设计,计算得到五条基本路径: 1)1-2-3-4-6-7 2)1-2-3-4-5-7 3)1-2
9、-3-4-5-6-7 4)1-2-4-5-7 5)1-4-5-7 这五条路径覆盖MC/DC路径?。,2.2 基本路径覆盖技术,2、白盒测试用例设计,2.3 循环覆盖技术 程序的结构主要有三种:顺序结构、分支结构、循环结构。而前面所讲的逻辑覆盖测试方法主要是针对分支结构来使用的,那么循环结构要如何测试呢? 测试循环是一种特殊的路径测试,一般把循环分为以下几种: 2.3.1 简单循环; 2.3.2 嵌套循环; 2.3.3 串接循环; 2.3.4 不规则循环。,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.1 简单循环:使模块中的循环语句不执行(整个跳过循环)、执行一次、执行两次、m次通过循环
10、,其中mn、执行n-1次和执行n次,即保证循环测试的充分性。,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.1 简单循环 例2: viod main() int i=0; int sum=0; while(i=10) sum=sum+i; i+; Printf(“%dn”,sum); 简单循环测试 表2.2,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.1 简单循环,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.2 嵌套循环 重点测试以下几个方面: 1) 当外循环变量为最小值,内循环变量也为最小值时, 运算的结果。 2) 当外循环变量为最小值,内循环变量为最大值时, 运算的结
11、果。 3) 当外循环变量为最大值,内循环变量为最小值时, 运算的结果。 4) 当外循环变量为最大值,内循环变量也为最大值时, 运算的结果。 5) 循环变量的增量是否正确。 6) 何时退出内循环。 7) 何时退出外循环。,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.2 嵌套循环 例3: void main() int i=0,j=0; int a55; for(i=0;i5;i+) for(j=0;j5;j+) aij=i+j; printf(“%dn”,aij); 嵌套循环语句测试 表2.3,2、白盒测试用例设计,2、白盒测试用例设计,2.3 循环覆盖技术 2.3.3 串接循环 如果串
12、接循环的循环体彼此独立,可以使用简单循环的测试方法。但是如果两个循环串接起来,并且第一次循环是第二个循环的初值,则采用嵌套循环的方法。 2.3.4 不规则循环 此循环不能测试,需重新设计成结构化的程序后再进行测试。,2、白盒测试用例设计,2.4 边界值测试 边界值测试就是根据输入数据的范围来找到边界值,然后测试边界值和正好超出边界值的数据。 在白盒测试中,需要重点测试以下几点: 2.4.1 测试数据类型的边界值,如整数的范围; 2.4.2 测试数组的边界值; 2.4.3 测试分支判断语句的边界值,如if(a=0)中的 a=0。,2、白盒测试用例设计,2.4 边界值测试 2.4.1 数据类型的边
13、界值 任何数据类型在内存中都有一定的存储空间,那么存储空间的范围就是测试的边界值,如下表2.1。 表2.1 C语言数据类型范围(Windows平台),2、白盒测试用例设计,2.4 边界值测试 2.4.1 数据类型的边界值 例4: #include Main() int a=32765; int b=3; int c; c=a+b; Printf(“%d”,c); 假设该程序是在DOS环境下开发的,则输出为-1,而不是32768。,2、白盒测试用例设计,2.4 边界值测试 2.4.2 数组的边界值 测试数组时要重点测试其边界值,防止产生数组越界问题。 例5: #include Main() in
14、t a5; int i=0; for(i=0;i=5;i+) 第一个for循环:数据越界,易内存溢出。 scanf(“%d”,a); for(i=1;i5;i+) 第二个for循环:漏掉a0这一数组元素。 printf(“%d”,ai); ,2、白盒测试用例设计,2.4 边界值测试 2.4.3 分支判断语句的边界值 边界值的另外一个重要应用就是分支判断语句的测试。 如if(a=0),else if(b=1),那么需要测试a=0,b=1时是否成立。,3、白盒测试工具,白盒测试工具是指测试软件的源代码的工具,可以实现代码的静态分析、动态测试、评审等功能,主要用于单元测试。 主要讲以下三种种工具:
15、3.1 IBM的Logiscope 3.2 Parasoft公司的C+ Test 3.3 嵌入式测试工具CodeTest 3.4 C#单元测试工具NUnit(开源) 3.5 Parasoft .TEST(商业),3、白盒测试工具,3.1 IBM的Logiscope Logiscope是IBM公司的一款白盒测试工具,为了评估和提高软件的质量等级,其采用国际间的标准度量方法(如Halstead、McCabe等)的质量模型对软件进行分析,从软件的编码规则,静态特征等多个方面定义质量模型,并检查、评估软件质量。,3、白盒测试工具,3.2 Parasoft公司的C+ Test C+ Test是法国Par
16、asoft公司开发的一款面向C/C+的单元测试工具,自动测试任何C/C+类、函数,而不需要编写测试用例、测试驱动程序或桩调用。 C+Test能够自动测试代码构造(白盒测试)、测试代码的功能性(黑盒测试)和维护代码的完整性(回归测试)。 C+Test的主要功能: 1)对代码进行自动的静态测试,检查其是否符合相应的语法规范; 2)对代码进行自动的动态测试,包括自动创建测试桩函数和测试用例, 也可以手动添加自定义的测试用例; 3)对代码进行自动的回归测试和各种覆盖率统计。,3、白盒测试工具,3.3 嵌入式测试工具CodeTest CodeTest是一台专为嵌入式系统软件测试而设计的工具套件,Code
17、Test为追踪嵌入式应用程序,分析软件性能,测试软件的覆盖率以及存储体的动态分配等提供了一个实时在线的高效率解决方案。 基本的CodeTest 系统包括以下四个模块: 1) 测试覆盖分析 2) 性能分析 3) 内存分析 4) 执行追踪分析(TRACE),4、实例,例1:模块源代码 /*ateo:把科学计数法表示的数转换为实数 1.45E+3 *参数:char s,为被转换的用字符串表示的数 *返回值:double类型 */ double atoe(char s) double val=0. ,power=.0; int i=0; int sign=0; int e=0; char c; 1 i
18、f(0=decision(s) ,4、实例,2 printf(输入的数据不正确!n); return 0.0; sign=1; 3 if(si=+|si=-) 4 sign=(si+=+)?1:-1; /判断数据的正负 5 for(val=0;si=0 ,4、实例,10 if(si=e|si=E) /判断字符串中的e或E i+; 11 if(si=+|si=-) /判断指数的正负 12 c=si; i+; 13 for(e=0;si=0 ,程序流程图4.1,程序流程图4.1,4、实例,测试策略: 1)理解设计,通过阅读需求文档和设计文档,了解程序的背景知识。 2)阅读源代码。 3)设计测试用例
19、。根据测试重点不同,可以把测试用例分组为功能点测 试、基本路径测试、逻辑覆盖测试等。为了辅助设计用例,可以画 出流程图或控制流图。 4)搭建测试环境,即写桩函数和驱动函数。为了采集结果,可以用以下 两种方法: 1)修改被测函数,使其返回验证的预期结果。 2)添加一个全局变量,在程序中把验证的值赋值给该全局变量。 5)执行测试用例,可以借助于工具Logiscope和C+ Test。,根据流程图,画出控制流图4.2,4、实例,根据控制流图,我们知道,该实例的圈复杂度为12,那么基本路径为12条。在走这12条路径的时候,遇到循环语句,采用循环覆盖方法(即循环0次,1次,中间次,n-1次,n次以及最大
20、次是否跳出循环),其中case语句类似于判断语句。,4、实例,驱动函数: void main() char s100; while(1) printf(“请输入一个科学计数法表示的数据:n”); scanf(“%s”,s); fflush(stdin); /清空输入缓冲区,通常是为了不影响后面的数据读取(例如在读完一个 /一个字符串后紧接着又要地区一个字符串,此时应先执行fflush(stdin)) if(0=strcmp(“exit”,s) return; printf(“对应的实数是:%fnn”,aeto(s); 桩函数 int decision(char s) return 1; /re
21、turn 0; /如果设置转换失败,则返还0 ,附1:关于桩函数和驱动函数? 概念:驱动函数:被测函数(模块)的主函数(模块),主要完成以下事情:接受测试数据,将数据传给被测单元(模块);对预期输出和实际输出进行比较;接收被测单元执行结果,得到测试结果;将测试结果输出。而桩函数:用以代替被测函数(模块)调用的子单元。 函数可能实现的功能,修改局部变量的值、修改全局变量的值、修改一组数据的值、返回一个值。那么写驱动函数,修改局部变量的值,可以通过设置一个全局变量等于该局部变量来输出(监控)。,附2:什么是MC/DC覆盖? 有两种覆盖。一种是对需求的覆盖,另外一种是对代码的覆盖。对代码的覆盖包括语
22、句(SC)覆盖、分支(DC/判定)覆盖、条件覆盖、分支条件覆盖、条件组合覆盖、LSACJ覆盖、MC/DC覆盖(修改的条件/判定覆盖)、路径覆盖等。 MC/DC(修订的条件/判定覆盖)(Modified Condition Decision Coverage)准则是一种实用的软件结构覆盖率测试准则,已被广泛地应用于软件验证和测试过程中。修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。,例如: if A
23、or B and C then Statement1; else Statement2; A,B,C都是一个条件,而(A or B and C)叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次就能达到,即为 0 1 1、 0 1 0。如果是MC/DC的话就得四个case。 定义: 在每个判定中的每个条件都曾独立的影响判定的结果至少一次,(独立影响意思是在其他的条件不变的情况下,改变一个条件)。 总结一句:每个条件对结果都独立起作用。 比如A对结果起作用的话, B 必须为 false, C必须为 true - 1 0 1
24、和 0 0 1,这样结果就独立受A的值影响。 同理如果B对结果独立起作用的话,A必须为false,C必须为 true,两种情况B为true,false各一. 即为 0 1 1 和 0 0 1。 而C独立对结果起作用的话就是让(A or B) 为 true,为了减少case,上面的case 已经含有这样的case了,我们就取A为false,B为true,这样c独体起作用的case为: 0 1 1 和 0 1 0。 可以看出每个条件各走了一次true和false, 这样三个变量条件就会有六个case,可以看出case 2 和case 4重复, case 3 和case5 重复,这样去掉两个 剩四个case,从而判定里面的条件数为N个,那么这个判定就需要N+1个case。,附3:什么是DO-178B标准? 飞机和汽车都是重要的交通工具,但从它们的安全性要求来说,有着很大的不同。汽车发生碰撞和故障时,人存活的概率比较大;一旦飞机发生碰撞和故障,存活的概率则几乎是零。因此,飞机的研制过程中对安全性的要求比汽车高得多。 飞机分成二类:军用飞机与民用飞机。每个国家对军用飞机的研制都有自己的标准和质量监督体系;但对于民用飞机说,由于一个国家研制的飞机会飞到其它国
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术项目验收及问题反馈模板
- 软件工程师与技术支持作业指导书
- 传统手工艺品精工品质保证承诺书范文8篇
- 人力资源管理系统员工培训预案
- 影视制作纪录片拍摄技巧指南
- 重症癫痫的跨学科协作治疗
- 骨牵引病人护理效果评价
- 合作伙伴商务纠纷调解函(4篇)范文
- 虹膜睫状体炎的健康教育
- 客户关系管理CRM模板化销售漏斗
- 隧道工程施工日常安全检查清单
- PLC流水线产品检测与分选控制课程设计(文末附梯形图)
- GB/T 5073-2005耐火材料压蠕变试验方法
- FZ/T 61009-2015纤维素纤维绒毯
- CB/T 3768-1996方形导缆孔
- 三年级上册英语试题-starter A阶段测试 新概念英语青少版 无答案
- 煤炭资源地质勘探抽水试验规程
- 材料力学教学课件第2章-轴向拉伸与压缩
- 中国企业海外上市全程操作ppt课件
- 高中语文新教材(人教版)目录
- 《建筑设计服务计费指导》
评论
0/150
提交评论