《软件白盒测试幻灯片.ppt》由会员分享,可在线阅读,更多相关《软件白盒测试幻灯片.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件白盒测试第1页,共94页,编辑于2022年,星期三概览在本章中,我们将学习:结构性白盒测试概述 程序结构分析 逻辑覆盖 结构性测试案例 第2页,共94页,编辑于2022年,星期三目标完成此课程之后,学员将具备以下能力:了解结构性测试的含义进行程序结构分析使用逻辑覆盖的方法进行白盒测试 了解Devpartner进行白盒测试第3页,共94页,编辑于2022年,星期三课程目录结构测试结构测试概述概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具第4页,共94页,编辑于2022年,星期三结构测试定义 把测试对象看做一个透明的盒子白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测
2、试方法白盒测试或逻辑驱动测试基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件第5页,共94页,编辑于2022年,星期三结构测试特点可以构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获得较多工具支持通常只用于单元测试第6页,共94页,编辑于2022年,星期三结构测试的方法静态测试方法:程序结构分析代码走查代码审查控制流分析数据流分析信息流分析动态测试方法:逻辑覆盖语句覆盖分支覆盖条件覆盖分支-条件覆盖路径覆盖第7页,共94页,编辑于2022年,星期三代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度最彻底的白盒法是覆盖程序中的每一条路径,但这往
3、往无法实现采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些第8页,共94页,编辑于2022年,星期三课程目录结构测试概述 程序结构分析程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具使用第9页,共94页,编辑于2022年,星期三程序结构分析代码走查代码审查控制流分析数据流分析信息流分析第10页,共94页,编辑于2022年,星期三代码走查含义代码走查是由一组程序和错误检查技术组成,并以代码审查组方式进行人员组长(有威信的资深程序员担任):负责分配资料、安排计划、主持会议、记录并保存被发现的错误资深程序员测试人员程序开发员(可做会议主持)重点探讨代码编写思路:比如算法,基于对象的编程
4、,类设计。但是代码走查非常枯燥,现在变成了关注于强制代码标准第11页,共94页,编辑于2022年,星期三代码审查内容检查代码和设计的一致性检查代码对标准的遵循、可读性检查代码的逻辑表达的正确性检查代码结构的合理性形成公司积累变成容易出错的checklist第12页,共94页,编辑于2022年,星期三代码审查步骤准备程序阅读审查会跟踪及报告第13页,共94页,编辑于2022年,星期三控制流分析 非结构化程序会给测试、排错、和程序的维护带来许多困难要求写出的程序结构良好检查程序的控制结构成为十分有意义的工作第14页,共94页,编辑于2022年,星期三程序流程图 1325第15页,共94页,编辑于2
5、022年,星期三控制流图12435abcdef第16页,共94页,编辑于2022年,星期三控制流图节点标有编号的圆圈 程序流程图中矩形框所表示的处理 菱形表示的两个甚至多个出口判断 多条流线相交的汇合点 第17页,共94页,编辑于2022年,星期三控制流图控制流线或弧 箭头 与程序流程图中的流线一致,表明了控制的顺序 控制流线通常标有名字第18页,共94页,编辑于2022年,星期三控制流图矩阵 acbdef1234512345第19页,共94页,编辑于2022年,星期三控制流图矩阵便于机器表示和处理控制流图 连接弧的节点的号码决定了矩阵中元素的位置注意控制流的方向(行-列)两个节点没有弧线,所
6、对应的位置也就没有元素第20页,共94页,编辑于2022年,星期三程序结构的基本要求 写出的程序不应包含:转向并不存在的标号 没有用的语句标号 从程序入口进入后无法达到的语句 不能达到停机语句的语句 目前对这四种情况的检测主要通过编译器和程序分析工具来实现。可以利用控制流图分析出来,是否存在以上情况。例如:1-2-3、4-4-5(结束)第21页,共94页,编辑于2022年,星期三数据流分析 查找引用未定义变量等程序错误 查找对以前未曾使用的变量再次赋值等数据流异常的情况 常见的错误表现形式错拼名字名字混淆语句丢失第22页,共94页,编辑于2022年,星期三数据流如果程序中某一语句执行时能改变某
7、程序变量V的值,则称V被该语句定义如果一语句的执行引用了内存中变量V的值,则称V被该语句引用例如:X=Y+Z;-X被定义,Y和Z被引用if YZ then return;-Y和Z被引用第23页,共94页,编辑于2022年,星期三控制流图与数据流表1234106758911节点被定义变量被引用变量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10ZZ11ZZ的值被送给外部环境例如:假定某个变量的值在使用以前被错误的改写了(对输出没有任何作用),这个语句就会被发现第24页,共94页,编辑于2022年,星期三信息流分析通过对输入数据、输出数据、语句之间的关系的分析来检查
8、程序错误信息流分析用来分析,是否存在无用的语句。整除算法例子输入:in_m是被除数,in_n是除数输出:out_q是商,out_r是余数第25页,共94页,编辑于2022年,星期三整除算法例子1out_q=0;2out_r=in_m;3While(out_r=in_n)4 out_q+;5 out_r=out_r in_n;第26页,共94页,编辑于2022年,星期三信息流关系图in_min_n12345out_qout_r12345out_qout_rin_mIn_n(1)输入变量影响语句(2)语句影响到输出变量(3)输入影响到输出第27页,共94页,编辑于2022年,星期三信息流分析能够列
9、出对输入变量的所有可能的引用在程序的任何指定点检查其执行可能影响某一输出变量值的语句输入输出关系提供一种检查,看每个输出值是否由相关的输入值,而不是其他值导出第28页,共94页,编辑于2022年,星期三课程目录白盒测试概述 程序结构分析 逻辑覆盖逻辑覆盖 结构测试案例分析结构测试工具使用第29页,共94页,编辑于2022年,星期三覆盖准则 测试到什么地步可以结束测试?覆盖准则第30页,共94页,编辑于2022年,星期三被测小程序 if(A 1&B=0)X=X/A;if(A=2|X 1)X=X+1;第31页,共94页,编辑于2022年,星期三被测程序段流程图A 1&B=0aA=2|X 1X=X/
10、AFTbcX=X+1TeFd第32页,共94页,编辑于2022年,星期三逻辑覆盖测试方法 语句覆盖 分支覆盖 条件覆盖 分支-条件覆盖 路径覆盖 第33页,共94页,编辑于2022年,星期三语句覆盖 原理:如果语句中有错误,仅靠观察不执行可能发现不了在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次 若干个-尽量少 语句覆盖、程序段覆盖、程序块覆盖第34页,共94页,编辑于2022年,星期三语句覆盖率语句覆盖率已执行的可执行语句占程序中可执行语句总数的百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好第35页,共94页,编辑于2022年,星期三语句
11、覆盖测试用例 达到语句覆盖100%的测试用例(路径ace)A=2 B=0 X=3未达到语句覆盖100%的测试用例(路径abe)A=2 B=1 X=3第36页,共94页,编辑于2022年,星期三语句覆盖的优点检查所有语句结构简单的代码的测试效果较好容易实现自动测试代码覆盖率高 如果是程序块覆盖,则不涉及程序块中的源代码 第37页,共94页,编辑于2022年,星期三语句覆盖不能检查出的错误条件语句错误“A 1&B=0”-“A 0&B=0”逻辑运算(&、|)错误“A 1&B=0”-“A 1|B=0”“U=A2”-“U=A1”第38页,共94页,编辑于2022年,星期三语句覆盖不能检查出的错误循环语句
12、错误循环次数错误跳出循环条件错误第39页,共94页,编辑于2022年,星期三语句覆盖不能检查出的错误循环语句例子for(i=0;i3)statement;for(i=0;i=10;i+)for(i=0;i3&x3&x 1,记为T1 A 1,记为T4 X 1,B=0,记为T1,T2(2)A 1,B!=0,记为T1,F2(3)A=1,B=0,记为F1,T2(4)A 1,记为T3,T4(6)A=2,X 1,记为F3,T4(8)A!=2,X 0)5 6 If(iType=0)7x=y+2;8 else9 If(iType=1)10 x=y+10;11 else12 x=y+20;13 14 第60页,
13、共94页,编辑于2022年,星期三基本路径测试方法(续)画出控制流图:如右图所示计算环形复杂度:10(条边)-8(个节点)+2=4导出独立路径(用语句编号表示)路径1:414 路径2:46714 路径3:4691013414 路径4:4691213414467910121314第61页,共94页,编辑于2022年,星期三路径覆盖的利弊实现了所有路径的测试,发现错误能力强某些条件错误可能无法发现路径数庞大,不可能覆盖所有路径用例数量的增加第62页,共94页,编辑于2022年,星期三循环测试路径覆盖0次循环检查跳出循环 1次循环检查循环初始值 2次循环检查多次循环 m次循环检查某次循环 最大次数循
14、环、比最大次数多一次、少一次循环检查循环次数边界 第63页,共94页,编辑于2022年,星期三简化循环路径循环使路径数量急剧增长简化无论循环的形式和实际执行循环体的次数多少,只考虑循环一次和0次两种情况进入循环体一次跳出循环体第64页,共94页,编辑于2022年,星期三循环程序流程图CBCB(1)(2)第65页,共94页,编辑于2022年,星期三简化循环路径图(1)和(2)都可简化为(3)CB第66页,共94页,编辑于2022年,星期三最少测试用例数计算对于具体的程序,至少要设计多少测试用例?估算最少测试用例数帮助执行测试有助于估算测试的时间第67页,共94页,编辑于2022年,星期三结构化程
15、序与N-S图结构化程序是由3种基本控制结构组成顺序型选择型(条件分支)重复型(循环)测试时考虑的结构顺序型选择型(条件分支)第68页,共94页,编辑于2022年,星期三程序结构与测试用例数并行串行第69页,共94页,编辑于2022年,星期三程序结构与测试用例数当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径第70页,共94页,编辑于2022年,星期三最少测试用例数计算实例计算最少测试用例数第71页,共94页,编辑于2022年,
16、星期三最少测试用例数计算实例第72页,共94页,编辑于2022年,星期三最少测试用例数计算实例第73页,共94页,编辑于2022年,星期三测试覆盖准则Foster的ESTCA覆盖准则错误敏感测试用例分析(Error Sensitive Test Cases Analysis)问题第74页,共94页,编辑于2022年,星期三ESTCA覆盖准则对于分支A(,=,=,=)B,测试时应选择AB的情况分别测试一次对于分支A(,C时,选择A=C小正数当AC时,选择A=C小正数对于测试用例取值,在每个测试用例中尽量不同的值或符号第75页,共94页,编辑于2022年,星期三覆盖率要求对单元测试来说,语句覆盖和
17、分支覆盖是最基本的要求由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖对质量要求高的软件单元,可根据情况提出条件覆盖、分支-条件覆盖以及路径覆盖要求第76页,共94页,编辑于2022年,星期三课程目录结构测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试案例分析结构测试工具使用第77页,共94页,编辑于2022年,星期三结构测试案例求最小值 求数组中的最小值 k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;第78页,共94页,编辑于2022年,星期三程序流程图 k=i;j=i+1j=n?Aj 1)&(B=0)X=X/A;if(A=2)|(X1)X=X+1;第92页,共94页,编辑于2022年,星期三课后习题第三题:计算下列程序片段的环形复杂度,使用逻辑覆盖测试方法测试。Void DoWork(int x,int y,int z)int k=0,j=0;if(x3)&(z5)j=x*y+10;j=j%3;第93页,共94页,编辑于2022年,星期三Thanks!第94页,共94页,编辑于2022年,星期三