1、第3章 白盒测试,3.1控制流测试,一、基本概念 有向图 路径 完整路径 简单路径 基本路径 子路径 回路 无回路路径 连接 覆盖,路径覆盖关系举例,二、控制流覆盖准则语句覆盖准则 分支覆盖准则 谓词测试 原子谓词覆盖准则 分支谓词覆盖准则 复合谓词覆盖准则 路径覆盖准则,部分覆盖准则间的关系,3.数据流测试,一、基本概念 变量的定义性出现:若一个变量在程序中的某处出现使数据与该变量相绑定,则称该出现是定义性出现。 变量的引用性出现:若一个变量在程序中的某处出现使与该变量相绑定的数据被引用,则称该出现是引用性出现。,二、数据流覆盖准则定义覆盖测试准则 引用覆盖测试准则 定义引用覆盖测试准则,3
2、.程序插装,程序插装技术的研究涉及下列几个问题: (1)探测哪些信息? (2)程序的什么位置设置探测点? (3)需要多少探测点?程序插装类型: 用于测试覆盖率和测试用例有效性度量的程序插装 用于断言检测的程序插装,3.程序变异测试,程序变异测试技术的基本思想是: 对于给定的程序P,先假定程序中存在一些小错误,每假设一个错误, 程序P就变成P,如果假设了n个错误:e1,e2,en,则对应有 n个不同的程序:P1,P2,Pn,这里Pi称为P的变异因子。 存在测试数据Ci,使得P和Pi的输出结果是不同的。因此,根据程序P 和每个变异的程序,可以求得P1,P2,Pn的测试数据集C=C1,C2,Cn。运
3、行C,如果对每一个Ci,P都是正确的,而Pi都是 错误的,这说明P的正确性较高。如果对某个Ci,P是错误的,而Pi是 正确的,这说明P存在错误,而错误就是ei。,程序强变异测试 变异测试的缺点是它需要大量的计算机资源来完成测试充分性分析。 对于一个中等规模的软件,所需的存储空间也是巨大的,运行大量 变异因子也导致了时间上巨大的开销。 程序弱变异测试 弱变异和强变异有很多相似之处。其主要差别在于:弱变异强调的 是变动程序的组成部分,根据弱变异准则,只要事先确定导致C与C 产生不同值的测试数据组,则可将程序在此测试数据组上运行,而 并不实际产生其变异因子。 弱变异测试方法的主要优点是开销较小,效率
4、较高。,3.白盒测试工具,一、静态工具 静态测试工具类型: 1.代码审查 2.一致性检查 3.错误检查 4.接口分析 5.输入/输出规格说明分析检查 6.数据流分析 7.类型分析 8.单元分析 9.复杂度分析,静态工具应用实例 1. Logiscope的软件质量分析工具 Audit应用: Audit是审查程序代码质量的,它通过一个文本文件来定义质量模 型。文件中首先定义了若干个度量元,并为这些度量元设定了数 值范围,接着通过组合若干个度量元形成质量标准,最后又通过 组合质量标准,形成最后的质量因素。这个过程与软件质量模型 中由底层到高层、由细节到概括的结构恰好对应。,(1)在Logiscope
5、 studio中建立Audit项目Logiscope studio环境,点击File|New菜单项, 并根据新建项目向导建立项目:新建项目对话框,新建项目向导,新建项目结束,()查看检测结果 选择 Browse | Quality | Factor Level 菜单项,Logisciop会显示Audit 对所检测源程序质量水平的评价结果,评价结果包括系统的质量、类 的质量、函数的质量。,选择Browse | Quality | Criteria Level 菜单项,Logisciop会显示Audit 对所测源程序的各项质量标准的检测结果,具体包括:系统的质量标 准、类的质量标准、函数的质量标准
6、。,选择 Browse | Quality | Quality Report 菜单项,可生成网页风格的 系统质量评价报告。,选择 Project | Start Viewer 菜单项,启动“Logiscope Viewer”,通过 点击工具条上的按钮,可以查看Audit所提供的对函数的各种分析信息。,. Logiscope的代码规范性检测工具 RuleChecker应用 : 使用RuleChecker来检查代码的规范性分为两个步骤:首先是建立 被检测代码的RuleChecker项目,然后是分析RuleChecker给出的代 码书写规范性检测结果,得出报告。,(1)根据向导建立RuleCheck
7、er项目RuleChecker界面,()查看检测结果 选择 Browse | Rule | Rule Violations 菜单命令,RuleChecker会在 树状视图中列出代码中所有违反编码规范的地方。,点击 Browse | Rule | Rule Violations Report 菜单命令,会生成 RuleChecker的检测报告。,二、动态工具 静态测试工具类型: 1.功能确认与接口测试 测试包括对各模块功能、模块间的接口、局部数据结构、主要执 行路径、错误处理等方面进行的测试。 2.覆盖测试 覆盖分析对所涉及的程序结构元素进行度量,以确定测试执行的 充分性。,动态工具应用实例Ra
8、tional PureCoverage 应用: Rational PureCoverage是面向VC、VB或者Java开发的测 试覆盖程度检测工具,它可以自动检测测试的完整性和 那些无法达到的部分。作为一个质量控制工程,可以使 用PureCoverage在每一个测试阶段产生详尽的测试覆盖 程度报告,PureCoverage 主界面,选择“file”中的run 后,出现对话框Run Program。在Program name中 选择被测对象的路径后,点击Run,运行程序。运行完程序后,会出 现运行后的结果数据。 被测程序的函数覆盖和代码覆盖情况,双击Coverage Browser 窗口中的任何
9、一个文件或函数,或者选择view 的Function List,即可看到相应的程序代码。 其中红色代码表示该测试用例未执行到的语句。,3.6软件缺陷分析,一、软件缺陷的种类 1.输入/输出缺陷 2.逻辑缺陷 3.计算缺陷 4.接口缺陷 5.数据缺陷,二、软件缺陷的产生 1.疏忽造成的错误(Carelessness defect,CD) 2.不理解造成的错误(Misapprehend defect,MD) 3.二义性造成的错误(Ambiguity defect,AD) 4.遗漏造成的错误(Skip defect,SD),三、软件缺陷数目估计 1.撒播模型 (1)程序中固有的缺陷是未知的,每个错误
10、被检测的难易程度 也同样是未知的。 (2)人工置入的缺陷是否和程序中存在缺陷检测的难易程度一 致也是未知的。,Hyman提出另外一种模型:假设软件总的排错时间是X个月, 假设经过排错程序中将不再存在错误。让两个人共同对程序 进行排错,经过足够长(X的一半或更少)的排错时间后,第一 个人发现了n个错误,第二个人发现了m个错误,其中属于两 个人共同发现的错误有m1个,2.静态模型 Akiyama模型: N=486十0018*L。 其中:N是缺陷数;L是可执行的源语句数目。 谓词模型:N=C+J 其中:C是谓词数目;J是子程序数目。 Halstead模型:N=V/3000。 其中:V=xlny,x=
11、x1+x2,y=y1+y2 x1:程序中使用操作符的总次数; x2:程序中使用操作数的总次数; y1:程序中使用操作符的种类; y2:程序中使用操作数的种类;,Lipow模型:N=L*(A0+A1InL+A21n2L)。 Fortran语言:A0=0.0047,A1=0.023,A2=0.000043。 汇编语言:A0=0.0012,A1=0.0001,A2=0.000002。 Gaffnev模型:N=4.2十0.0015L43。 Compton and Withrow模型:N=0.069十0.00156L十0.00000047L2。,3.根据测试覆盖率的预测模型 错误与时间曲线 错误与覆盖率
12、曲线,覆盖率与时间曲线,四、软件缺陷的发现、排除及效率分析 1.软件测试的检测效率分析 软件测试阶段 测试能力非形式化的设计检查 25%40%形式化的设计检查 45%65%非形式化的代码检查 20%35%形式化的代码检查 45%70%单元测试 15%50%新功能测试 20%35%回归测试 15%30%集成测试 25%40% 系统测试 25%55%低强度的测试(1000客户) 60%85%,2.影响软件测试效率的因素 人为因素 不同水平层次的测试人员在发现软件错误的数量和测试效率的 差异。 软件类型 软件类型也是影响测试效率的一个重要因素。 缺陷类型 各种不同的测试方法检测不同错误类型的能力也是不同的。,五、软件缺陷的分布,