《白盒测试基础.ppt》由会员分享,可在线阅读,更多相关《白盒测试基础.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、白盒测试基础白盒测试技术之一目录白盒测试技术概述白盒测试用例设计技术白盒测试工具实例1、白盒测试技术概述1.1 白盒测试概念1.2 白盒测试与黑盒测试比较1.3 白盒测试的分类1.4 白盒测试的合适程度 1、白盒测试技术概述1.1 白盒测试概念 白盒测试(white-box testing),又称结构测试或者逻辑驱动测试,其按照程序内部的结构进行测试。白盒测试方法就是把测试对象看做一个透明的盒子,测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过测试证明每种内部操作是否符合设计规格说明。?X=2y=4y=2xX=2y=4黑盒测试 白盒测试图1.1 黑
2、盒测试与白盒测试 1、白盒测试技术概述1.1 白盒测试概念 对程序模块的所有独立的执行路径至少测试一遍。在循环的边界和运行的界限内执行循环体。白盒测试主要是想对程序模块进行如下检查:对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。测试内部数据结构的有效性等。1、白盒测试技术概述1.2 白盒测试与黑盒测试比较 白盒测试和黑盒测试都是软件测试的手段之一,在测试过程中两者互为补充,共同验证软件的质量。其中,黑盒测试主要用在系统测试阶段;而白盒测试则把测试深入到“盒子内部”,关注软件的结构和逻辑细节,主要用在单元测试和集成测试阶段。1、白盒测试技术概述 1.2 白盒测试与黑盒测试比较表1
3、.1 黑盒测试与白盒测试比较1、白盒测试技术概述1.3 白盒测试的分类 根据是否运行源代码,白盒测试分为静态分析和动态测试。静态分析:不实际运行程序,只是静态的分析程序的代码是否符合相应的编码规范或是检查程序里面的逻辑错误。静态分析可分为:代码走查、代码审查及技术评审等。静态分析需借助白盒测试工具(Logiscope、C+Test)来自动检测。1、白盒测试技术概述1.3 白盒测试的分类 表1.2 静态分析方法比较参与人参与人员是否有是否有计划和划和报告告正式程度正式程度代码走查(Walk Through)开发组内部 无 低代码审查(Inspection)开发组内部 有 中技术评审(Review
4、)开发组、测试组和相关人员 有 高1、白盒测试技术概述1.3 白盒测试的分类 动态测试,即实际运行被测软件来测试。动态测试是白盒测试的重点,常用的测试技术有逻辑驱动覆盖、路径图法、边界值等。1、白盒测试技术概述1.4 白盒测试的合适程度 一般而言,白盒测试做多做少与产品形态有关,如果产品更多的具备软件平台特性,白盒测试应占总测试的80%以上,甚至接近100%,而如果产品具备复杂的业务操作,有大量GUI界面,黑盒测试的份量应该更重些。根据经验,对于大多数嵌入式产品,白盒测试方式展开测试(包括代码走读)应占总测试投入的一半以上,白盒测试发现的问题数也应超过总问题数的一半。2、白盒测试用例设计2.1
5、 逻辑驱动覆盖技术2.2 基本路径覆盖技术2.3 循环覆盖技术2.4 边界值测试2、白盒测试用例设计2.1 逻辑驱动覆盖技术 逻辑覆盖测试:主要是针对程序的内部逻辑结构设计测试用例的技术,它通过运行测试用例达到逻辑覆盖的目的。主要包括以下6种类型的逻辑覆盖:语句覆盖SC判断覆盖(分支DC)条件覆盖判定条件覆盖条件组合覆盖路径覆盖2、白盒测试用例设计技术2.1 逻辑驱动覆盖技术方法步骤:1)分析程序中的可执行语句,把可执行语句分块,并进行标记。2)画出程序流程图,在流程图中使用语句块表示各个顺序执行的语句。3)a、设计测试用例,使模块中的可执行语句都被覆盖,即语句覆盖率 达到100%。b、设计测
6、试用例,使模块中每个分支都被执行,即分支覆盖了达到 85%以上。c、。4)为了使模块能够运行,需要写驱动函数和桩函数。2、白盒测试用例设计2.1 逻辑驱动覆盖技术例1:func(int a,b,x)if(a1)&(b=0)1 x=x/a;if(a=2)|(x1)2 x=x+1;逻辑覆盖用例 表2.1逻辑覆盖类型含义测试用例(a,b,x)说明SC语句覆盖使得每一条语句至少被执行一次。2,0,3语句覆盖对于多分支的逻辑运算无法全面反映。DC分支覆盖使得程序中每一个分支至少被执行一次,即每一条分支语句的“真”值和“假”值都至少执行一次。3,0,12,1,3具有比语句覆盖更强的测试,但忽略每个条件的取
7、值情况。条件覆盖不仅每一个语句至少执行一次,而且使得判定中每个条件获得各种可能的结果。两个用例2,0,4、1,1,1或者2,0,1、1,1,2第一组用例满足分支覆盖,但第二组用例不满足分支覆盖。判定条件覆盖使得判定中每个条件的所有可能取值至少能够获取一次,同时每个判断的所有可能的判定结果至少执行一次。2,0,41,1,1判定条件覆盖未考虑条件的组合情况。条件组合覆盖使得每个判定中条件的各种组合至少出现一次。四个用例即覆盖:1,0,21,1,12,0,42,1,18种组合:(1)a1,b=0(2)a1,b!=0(3)a=1,b=0(4)a1(6)a=2,x1(8)a!=2,x1)&(b=0)2
8、x=x/a;3 if(a=2)|(x1)4 x=x+1;5 控制流图2.12、白盒测试用例设计基本路径为三条:1)1-2-3-4-5 2)1-2-3-5 3)1-3-52.2 基本路径覆盖技术2、白盒测试用例设计2.2 基本路径覆盖技术 例1:另外一种方法:根据复合条件画控制流图。func(inta,b,x)1&2if(a1)&(b=0)3x=x/a;4|5if(a=2)|(x1)6x=x+1;7控制流图2.22、白盒测试用例设计计算得到五条基本路径:1)1-2-3-4-6-72)1-2-3-4-5-73)1-2-3-4-5-6-74)1-2-4-5-75)1-4-5-7这五条路径覆盖MC/D
9、C路径?。2.2 基本路径覆盖技术2、白盒测试用例设计2.3 循环覆盖技术 程序的结构主要有三种:顺序结构、分支结构、循环结构。而前面所讲的逻辑覆盖测试方法主要是针对分支结构来使用的,那么循环结构要如何测试呢?测试循环是一种特殊的路径测试,一般把循环分为以下几种:2.3.1 简单循环;2.3.2 嵌套循环;2.3.3 串接循环;2.3.4 不规则循环。2、白盒测试用例设计2.3 循环覆盖技术2.3.1 简单循环:使模块中的循环语句不执行(整个跳过循环)、执行一次、执行两次、m次通过循环,其中mn、执行n-1次和执行n次,即保证循环测试的充分性。2、白盒测试用例设计2.3 循环覆盖技术2.3.1
10、 简单循环 例2:viod main()int i=0;int sum=0;while(i=10)sum=sum+i;i+;Printf(“%dn”,sum);简单循环测试 表2.22、白盒测试用例设计测试项预期结果循环变量的初值(最小值)、初值+10、1循环变量的最大值,最大值-110,9循环变量的增量(中间值)i+何时退出循环当循环变量i达到最大值10时退出循环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;j=0)中的 a=0。2、白盒测试用例设计2.4 边界值测试2.4.1 数据类型的边界值 任何数据类型在内存中都有一定的存储空间,那么存储空间的范围就是测试的边界值,如下表2.1。表2.1 C语言数据类型范围(Windo
12、ws平台)数据数据类型型 长 度度 范范 围短整型(short)2B-3276832767整型(int)4B-21474856482147485647长整型(long)4B-21474856482147485647字符型(char)1B256单精度型(float)4B-214748564821474856472、白盒测试用例设计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
13、边界值测试2.4.2 数组的边界值 测试数组时要重点测试其边界值,防止产生数组越界问题。例5:#include Main()int a5;int i=0;for(i=0;i=5;i+)第一个for循环:数据越界,易内存溢出。scanf(“%d”,a);for(i=1;i=0),else if(b=0&si=0&si=0&si0;i-)17val*=10;else18for(i=e;i0;i-)19val/=10;20returnval*sign;程序流程图4.1程序流程图4.14、实例测试策略:1)理解设计,通过阅读需求文档和设计文档,了解程序的背景知识。2)阅读源代码。3)设计测试用例。根据
14、测试重点不同,可以把测试用例分组为功能点测 试、基本路径测试、逻辑覆盖测试等。为了辅助设计用例,可以画 出流程图或控制流图。4)搭建测试环境,即写桩函数和驱动函数。为了采集结果,可以用以下 两种方法:1)修改被测函数,使其返回验证的预期结果。2)添加一个全局变量,在程序中把验证的值赋值给该全局变量。5)执行测试用例,可以借助于工具Logiscope和C+Test。根据流程图,画出控制流图4.24、实例 根据控制流图,我们知道,该实例的圈复杂度为12,那么基本路径为12条。在走这12条路径的时候,遇到循环语句,采用循环覆盖方法(即循环0次,1次,中间次,n-1次,n次以及最大次是否跳出循环),其
15、中case语句类似于判断语句。序号测试目的测试数据预期结果1设计一个正常而简单的测试用例,使程序能够运行。1.05E+2105.0000002测试第一个分支为假的情况。字符串中有除e或E之外的其它字母。使用一组测试数据:例如,有Tab键、空格、或回车键,E1.45、1D.785、+3.f123、-5.5fes、1.34.2等程序报错“输入的数据不正确”,退出。3测试第一个分支为“真”的情况。测试第二个分支为“真”或者“假”的情况,即数据为正/负或者为正时省略。使 用 三 组 数 据:+1.78e2、-3.45e3、3.43e2结果为:178.000000、-345.000000、343.000
16、0004测试第三个分支为“假”的情况,即无小数点的情况。使用两组数据:1e-2、1e+2结果为:0.010000、100.0000005测试第一个for循环。测试为小数点前面有1/2/5/10位数等数据的转换。使用下面的测试数据:1.23e2、20.32e+2、12342.23e2、2344555342.45e-3结果为:123.000000、2032.000000、1234223.000000、2344555.342456测试字符串中有无e和E字母。测试无两种情况。使用两组测试数据:10.0、1.00456结果为:10.000000、1.0045607判断指数为正和为负的两种情况。因为为正的
17、已经测试过,此时只考虑为正时,是否省略。使用下面的测试数据:12.8e2、3423.23e4结果为:1280.000000、34232300.0000008测试处理e后面数字的循环。可测试0、1、2、5、10位的情况。使用下面的测试数据:1.0e、1.03e2、1.4239考虑一些特殊的情况4、实例驱动函数:voidmain()chars100;while(1)printf(“请输入一个科学计数法表示的数据:n”);scanf(“%s”,s);fflush(stdin);/清空输入缓冲区,通常是为了不影响后面的数据读取(例如在读完一个/一个字符串后紧接着又要地区一个字符串,此时应先执行fflu
18、sh(stdin))if(0=strcmp(“exit”,s)return;printf(“对应的实数是:%fnn”,aeto(s);桩函数intdecision(chars)return1;/return0;/如果设置转换失败,则返还0附1:关于桩函数和驱动函数?概念:驱动函数:被测函数(模块)的主函数(模块),主要完成以下事情:接受测试数据,将数据传给被测单元(模块);对预期输出和实际输出进行比较;接收被测单元执行结果,得到测试结果;将测试结果输出。而桩函数:用以代替被测函数(模块)调用的子单元。函数可能实现的功能,修改局部变量的值、修改全局变量的值、修改一组数据的值、返回一个值。那么写驱
19、动函数,修改局部变量的值,可以通过设置一个全局变量等于该局部变量来输出(监控)。附2:什么是MC/DC覆盖?有两种覆盖。一种是对需求的覆盖,另外一种是对代码的覆盖。对代码的覆盖包括语句(SC)覆盖、分支(DC/判定)覆盖、条件覆盖、分支条件覆盖、条件组合覆盖、LSACJ覆盖、MC/DC覆盖(修改的条件/判定覆盖)、路径覆盖等。MC/DC(修 订 的 条 件/判 定 覆 盖)(Modified Condition DecisionCoverage)准则是一种实用的软件结构覆盖率测试准则,已被广泛地应用于软件验证和测试过程中。修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序
20、中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。例如:ifAorBandCthenStatement1;elseStatement2;A,B,C都是一个条件,而(AorBandC)叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次就能达到,即为011、010。如果是MC/DC的话就得四个case。定义:在每个判定中的每个条件都曾独立的影响判定的结果至少一次,(独立影响意思是在其他的条件不变的情况下,改
21、变一个条件)。总结一句:每个条件对结果都独立起作用。比如A对结果起作用的话,B必须为false,C必须为true-101和001,这样结果就独立受A的值影响。同理如果B对结果独立起作用的话,A必须为false,C必须为true,两种情况B为true,false各一.即为011和001。而C独立对结果起作用的话就是让(AorB)为true,为了减少case,上面的case已经含有这样的case了,我们就取A为false,B为true,这样c独体起作用的case为:011和010。可以看出每个条件各走了一次true和false,这样三个变量条件就会有六个case,可以看出case2和case4重复
22、,case3和case5重复,这样去掉两个剩四个case,从而判定里面的条件数为N个,那么这个判定就需要N+1个case。哪个条件起作用?Case序号ABC结果A1101120010B3011140010C5011160100附3:什么是DO-178B标准?飞机和汽车都是重要的交通工具,但从它们的安全性要求来说,有着很大的不同。汽车发生碰撞和故障时,人存活的概率比较大;一旦飞机发生碰撞和故障,存活的概率则几乎是零。因此,飞机的研制过程中对安全性的要求比汽车高得多。飞机分成二类:军用飞机与民用飞机。每个国家对军用飞机的研制都有自己的标准和质量监督体系;但对于民用飞机说,由于一个国家研制的飞机会飞
23、到其它国家去,这就要求有一个能够被国际普遍认可的标准和质量体系来保证飞机的安全。具体地说,飞机通常需要通过四个认证以后才可真正投入运营:也即定型认证(Type Certificate)、生产认证(Production Certificate)、适航认证(Airworthiness Certificate)、运营认证(Operational Certificate)。这四个质量认证涉及的标准有很多,构成一整套标准体系,而DO-178B标准则是对机载软件进行适航认证时适用的标准,是整个民航标准体系的比较重要的一个标准。执行DO-178B标准质量认证的权威机构在不同的国家和地区不尽相同。在欧洲,该质
24、量认证由EASA(European Aviation Safety Agency)来执行;在美国由FAA(Federal Aviation Administration联邦航空管理局)执行;在加拿大则由Transport Canada来执行。通常,被一个机构认证通过的飞机在一定条件下也会被另外一个机构默认通过。DO-178B定义了语句覆盖、分支覆盖和修正条件/分支覆盖。附4:什么是质量模型?LOGISCOPE 获取ISO/IEC9126 定义的“Quality Characteristics”。采用的是包括软件质量标准化组织制定的ISO9126模型在内的质量模型。质量模型描述了从Halstend、McCabe的质量方法学引入的质量因素、质量准则和质量度量元。即本模型是一个三层的结构组织:a 质量因素Factor b 质量准则Criteria c 质量度量元Metrics 质量因素是从用户角度出发,对软件的质量特性进行总体评估;质量准则从软件设计者角度出发,设计为保障质量因素所必须遵循的法则;质量度量元从软件测试者角度出发,验证是否遵循质量准则。一个质量因素由一组质量准则来评估;一个质量准则由一组质量度量元来验证。Thanks