版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件测试技术,主讲人:刘 伟,第3章 白盒测试,白盒测试( White Box Testing ) 结构测试( Structured Testing ) 逻辑驱动测试( Logic-Driven Testing ) 基于程序的测试 ( Code-Based Testing ) 基于覆盖的测试,第3章 白盒测试,控制流测试 数据流测试 程序插桩 程序变异测试 白盒测试工具 软件缺陷分析,控制流测试,基本概念 控制流图 有向图 路径、完整路径 可达、简单路径、基本路径、子路径 回路、无回路路径 A连接B 路径A覆盖路径B,控制流覆盖准则,覆盖率:测试的完全程度如何?,覆盖率概念,如:一个程序总代码
2、为100行,使用测试用例运行一次,执行了75行代码,则 代码覆盖率75,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法 语句覆盖 判定覆盖(也称分支覆盖) 条件覆盖(也称谓词覆盖) 判定/条件覆盖 条件组合覆盖 路径覆盖,语句覆盖,设计若干测试用例,使得程序中每条语句至少被执行一次。,设计原则:测试用例尽量少,覆盖率尽量高,举例,测试用例设计:,红色字母代表程序执行路径,测试用例设计:,例3-2,测试用例设计:,语句覆盖,优点: 直观、简单、易自动化 缺点: 发现错误能力很“弱” 对隐藏的条件和可能到达的隐式逻辑分支,无法测试,语句覆盖,例:ifelse结构,如右例所示: 当A=2 B=0 X=
3、3时,满足语句覆盖要求,但abd分支未测试。,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法 语句覆盖 判定覆盖(也称分支覆盖) 条件覆盖(也称谓词覆盖) 判定/条件覆盖 条件组合覆盖 路径覆盖,判定覆盖,设计若干测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,程序中的每个分支至少执行一次,判定覆盖,测试用例设计:,(O),(A),(B),(D),当A=2 B=0 X=3时, 即可满足语句覆盖要求,但abd分支未测试,判定覆盖测试用例设计:,判定覆盖,测试用例设计:,例3-2,测试用例设计:,判定覆盖,优点: 发现错误能力比语句覆盖强 缺点: 对复合条件判断,只判定整个最终结果,而忽
4、略每个条件的取值情况,必然会遗漏部分测试路径。,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法 语句覆盖 判定覆盖(也称分支覆盖) 条件覆盖(也称谓词覆盖) 判定/条件覆盖 条件组合覆盖 路径覆盖,条件覆盖,设计若干测试用例,使得判定中的每个条件的可能取值至少满足一次。,条件覆盖,测试用例设计:,(O),(A),(B),(D),判定覆盖测试用例设计未有B!=0的取值,条件覆盖,条件覆盖测试用例设计:,测试用例设计:,例3-2,测试用例设计:,例3-4,1、列出所有的原子条件: i=0j=0k=0 i+j=ki+k=jj+k=I i=ji=kj=k 2、设计测试用例,使得每个条件取一次真值和一次假
5、值,例3-4,设计测试用例如下表所示,条件覆盖,优点: 发现错误能力比语句覆盖强 缺点: 条件覆盖并不能保证判定覆盖。 对复合条件,条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法 语句覆盖 判定覆盖(也称分支覆盖) 条件覆盖(也称谓词覆盖) 判定/条件覆盖 条件组合覆盖 路径覆盖,判定条件覆盖,设计若干测试用例,使得判定中的每个条件的可能取值至少出现一次,且每个判断本身的判定结果也至少出现一次。,判定条件覆盖,测试用例设计:,(O),(A),(B),(D),判定条件覆盖,条件覆盖测试用例设计也满足判定条件覆盖的要求:,判定覆盖测试
6、用例设计未有B!=0的取值,测试用例设计:,例3-2,测试用例设计:,例3-4,1、列出所有的原子条件: i=0j=0k=0 i+j=ki+k=jj+k=i i=ji=kj=k 2、列出所有的判定 (1)i=0|j=0|k=0|i+j=k|i+k=j|j+k=i (2)i=j b=2; if (b0) a=b*a; else a=a/b;,基本块的划分对代码结构和代码优化有重要意义。,补充:判定路径覆盖,判定覆盖的一个变体 判定路径:起始位置是函数入口或一个判定的开始,结束位置是下一个判定的开始,补充: Z路径覆盖,路径覆盖的一个变体, 简化循环机制,只考虑执行一次和0次的情况,如何使用覆盖率
7、,覆盖率不是目的,只是一种手段 软件测试实践过程: 单元测试和代码审查 集成测试和系统测试,必要时会对核心模块或者bug较多模块与开发人员一起重新做代码审查 在产品比较稳定之后,会采用一些测试工具来做覆盖率测试,可以发现哪些函数没有跑到,进而更新或加入新的测试用例。,如何使用覆盖率,你不可能针对所有的覆盖率指标去进行测试;相反,只考虑一种覆盖率指标也是不恰当的 一般项目的覆盖率不可能100%,一般采取的标准是函数覆盖率90%,语句覆盖率70%.,如何使用覆盖率,不要追求绝对100的覆盖率 对测试人员设计的测试用例通常要求: 语句覆盖率:100% 分支覆盖率:85以上 路径覆盖率:80以上,第3
8、章 白盒测试,控制流测试 数据流测试 程序插桩 程序变异测试 白盒测试工具 软件缺陷分析,数据流测试,基本概念 控制流图和测试覆盖准则一旦给定,即可产生测试用例 数据流测试是根据代码中变量的使用情况进行的测试,面向程序中的数据。 早期的数据流分析常常集中于以下缺陷: 变量被定义,但是从来没有使用(引用); 所使用的变量没有被定义; 变量在使用之前被定义两次或多次(重复定义)。,数据流测试,两个概念 变量的定义性出现:变量定义或被赋值。 节点nG(P)是变量vV的定义节点,记做DEF(v,n),当且仅当变量v的值由对应节点n的语句片段处定义。 输入语句、赋值语句、循环控制语句和过程调用,都是定义
9、节点语句的例子。如果执行对应这种语句的节点,那么该变量关联的存储单元的内容就会改变。,数据流测试,变量的引用性出现:变量数据被引用。 节点nG(P)是变量vV的使用节点,记做USE(v,n),当且仅当变量v的值由对应节点n的语句片段处使用。 计算性引用用于计算新数据(记做C-use) 谓词性引用用于条件控制(记做P-use) 输出语句、赋值语句、条件语句、循环控制语句和过程调用,都是使用节点语句的例子。如果执行对应这种语句的节点,那么该变量关联的存储单元的内容保持不变。,数据流覆盖准则,定义覆盖测试准则 引用覆盖测试准则 定义引用覆盖测试准则,第3章 白盒测试,控制流测试 数据流测试 程序插桩
10、 程序变异测试 白盒测试工具 软件缺陷分析,程序插桩,“插桩”:通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。 如print语句 插桩技术是实现各种覆盖测试的必要手段。,程序插桩举例,例:常用printf语句(c语言) 计算x1+2+3+4+5+10 程序段: x=0; for(int i=0;i=10;i+) x=x+i; printf(“+ %d = %d”,i,x); ,统计可执行 语句的覆盖情况 把插入的语句称为“探测器”,程序插桩,设计时考虑的问题 明确要探测哪些信息? 在程序的什么部位设置探测点? 需要设计多少个探测点?,程序插桩,探测点设置
11、位置 程序块的第一个可执行语句之前 循环语句之后 条件语句之后 在else、else if、endif之后 输入输出语句之后 go to语句之后 ,程序插桩,2、用于断言检测的程序插桩 断言(Assertion):assert 格式:void assert( int expression ),其中,expression为假时,会终止程序运行。一般在debug版本中启用,release版本中禁用 如:文件检索系统UT_TD_002_005 UT_TC_002_005_003_003(): fp2 = fopen(str, rt); _ASSERT(fp2 != NULL);,第3章 白盒测试,控
12、制流测试 数据流测试 程序插桩 程序变异测试 白盒测试工具 软件缺陷分析,程序变异测试-错误驱动测试,遗传算法(Genetic Algorithm,简称GA) 遗传算法几个重要概念 1、染色体(Chronmosome) 个体(individuals)、群体(population) 2、基因(Gene) 3、适应度(Fitness) 适应度函数:对问题中的每一个染色体进行度量的函数。,遗传算法,遗传算法几个操作 选择(复制): 根据各个个体的适应度,按照一定的规则或方法,从第t代群体P(t)中选择出一些优良的个体遗传到下一代群体P(t+1)中; 交叉: 将群体P(t)内的各个个体随机搭配成对,对
13、每一对个体,以某个概率(称为交叉概率)交换它们之间的部分染色体; 变异: 对群体P(t)中的每一个个体,以某一概率(称为变异概率)改变某一个或某一些基因座上的基因值为其他基因值。,遗传算法流程图,遗传算法,遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等方面得到成功的应用; 在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。,程序变异测试-错误驱动测试,程序P的变异因子m(p)也是一个程序,是对P进行微小改动而得到。称m(p)是P的变异因子。,例如,测试代码片段: if (a ,对条件(a,程序强变异测试,若P在D上是正确的,可以
14、找出P的变异因子的某一集合: m=M(P)|m(p)是P的变异因子 1、若m中每一元素在D上存在错误,则可认为程序的正确程度较高。 2、若m中某些元素在D上不存在错误,则可能存在三种情况: 这些变异因子与P在功能上是等价的。 现有的测试数据不足以找出P与其变异因子间的差别。 P可能含有错误,而其某些变异因子却是正确的。,程序强变异测试,使用程序变异方法,最重要的是怎样建立变异因子。 一些常见的变异运算: 常量之间替换、标量与变量互换、数组名替换、 算术/关系/逻辑运算符替换、 插入绝对值符号、插入单面运算符、 语句分解、语句删除、GO TO、 循环终止条件变换,程序强变异测试,【例3-14】
15、ab,a=b,ab,ab,ab 【例3-15】 (1)term=x 变异成 term=0 (2)i=100 (3)i%2=0 变异成 i%2=1,程序强变异测试,优点: 较为有效的测试方法,针对性强,系统性强。 缺点: 1、要运行所有的变异因子,从而成倍地提高了测试的成本; 2、决定程序与其变异因子是否等价是一个递归不可解问题。,程序弱变异测试,弱变异:只对被测程序进行测试的变异方法。 弱变异和强变异有很多相似之处。其主要差别在于:弱变异强调的是变动程序的组成部分,根据弱变异准则,只要事先确定导致C与C产生不同值的测试数据组,则可将程序在此测试数据组上运行,而并不实际产生其变异因子。 弱变异测试方法的主要优点是开销较小,效率较高。,第3章 白盒测试,控制流测试 数据流测试 程序插桩 程序变异测试 白盒测试工具 软件缺陷分析,白盒测试工具,一、静态工具Logiscope 静态测试工
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年度幼儿园教育教学工作计划
- 2026年教师职称英语考试试题及答案
- 4.1 数列的概念 课后练习(含解析)-高中数学人教A版(2019)选择性必修二
- 《稀土化学》教学大纲
- 吉林长春市面向2026年普通高校毕业生开展“强医计划”招聘事业单位人员110人备考题库重点附答案详解
- 2025年石嘴山市教师职称考试(理论知识)在线模拟题库及答案
- 2025年青海卫生职业技术学院教师招聘考试真题及答案
- (2025年)执业药师继续教育考试题库与答案
- 人教版二年级数学寒假作业辅导
- 人教版初中英语八年级下册Unit 1 症状描述与建议给予教学设计
- 医院RCA分析实施指南
- 呼吸道核酸检测课件
- 北斗卫星导航系统科普应用
- DB23∕T 3082-2022 黑龙江省城镇道路设计规程
- 头颅MRI检查常规序列
- 2025年全国高考二卷英语真题【含答案解析】
- 旋挖钻孔灌注桩全护筒跟进施工工艺主要施工方法及技术措施
- 配电第一种工作票(10kV线路投运停电填写样本)
- 胸腔镜下肺叶切除术护理查房
- 《心脏急危重症诊治》课件
- 文旅新媒体运营 课件 第4章 文旅新媒体内容运营
评论
0/150
提交评论