软件测试的方法和技术讲义

上传人:我** 文档编号:114110141 上传时间:2019-11-10 格式:PPT 页数:156 大小:2.92MB
返回 下载 相关 举报
软件测试的方法和技术讲义_第1页
第1页 / 共156页
软件测试的方法和技术讲义_第2页
第2页 / 共156页
软件测试的方法和技术讲义_第3页
第3页 / 共156页
软件测试的方法和技术讲义_第4页
第4页 / 共156页
软件测试的方法和技术讲义_第5页
第5页 / 共156页
点击查看更多>>
资源描述

《软件测试的方法和技术讲义》由会员分享,可在线阅读,更多相关《软件测试的方法和技术讲义(156页珍藏版)》请在金锄头文库上搜索。

1、软件测试的方法和技术,第一部分白盒测试 第二部分黑盒测试 第三部分其他测试类型,第一部分 白盒测试,此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。,白盒测试也称为结构测试或逻辑驱动测试,前提是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能够按预定要求正确工作,而不管产品的功能,主要用于软件验证。,白盒测试方法又可分为静态测试和动态测试。静态测试是一种不通过执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否

2、一致,没有冲突或者没有歧义。它瞄准的是纠正软件系统在描述、表示和规格上的错误,是任何进一步测试的前提。而动态测试需要软件的执行,当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析是动态测试的主要特点。它显示了一个系统在检查状态下是正确还是不正确。,白盒测试的动态测试要根据程序的控制结构设计测试用例,其原则是: (1)保证一个模块中的所有独立路径至少被使用一次; (2)对所有逻辑值均需测试true和false; (3)在上下边界及可操作范围内运行所有循环; (4)检查内部数据结构以确保其有效性。,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小

3、程序的流程图,它包括了一个执行20次的循环。 包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3170年。,下面将介绍几种实用的白盒测试用例设计方法,包括程序插桩、逻辑覆盖、基本路径测试等。,程序插桩,在软件动态测试中,程序插桩是一种基本的测试手段,有着广泛的应用。 1方法简介 程序插桩方法是借助往被测程序中插入操作,来实现测试目的的方法。,如果我们想要了解一个程序在某次运行中所有可执行语句被覆盖的情况,或是每个语句的实际执行次数,最好的办法是利用插桩技术。这里仅以计算整数X和整数Y的最大公约数程序为例,说明插桩方法的要点。

4、,图 插桩后求最大公约数程序的流程图,设计插桩程序时需要考虑的问题包括: 探测哪些信息; 在程序的什么部位设置探测点; 需要设置多少个探测点。,2断言语句(Assert) 在程序中特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实。我们把插入的这些语句称为断言。这一做法是程序正确性证明的基本步骤,尽管算不上严格的证明,但方法本身仍然是很实用的。,思考题,计算两个数的最小公倍数。,逻辑覆盖,逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术,是通过对程序逻辑结构的遍历实现程序的覆盖,它是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的

5、通路测试。这一方法要求测试人员对程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。它属于动态测试。,从覆盖源程序语句的详细程度分析,逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖和修正条件判定覆盖。 为便于理解,使用如下所示的程序及其流程图。,图 参考例子流程图,int function1(bool a,bool b,bool c) int x; x=0; if(a ,1语句覆盖 为了暴露程序中的错误,程序中的每条语句至少应该执行一次。所以,语句覆盖的含义是:选择足够多的测试数据,使被测程序中每条语句至少执行一次。,2判定覆盖 比语句覆盖稍强的覆盖标准是判定覆

6、盖。按判定覆盖准则进行测试是指,设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆盖又称为分支覆盖。,3条件覆盖 在设计程序中,一个判定语句是由多个条件组合而成的复合判定。 条件覆盖的含义是:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。,4条件判定组合覆盖 条件判定组合覆盖的含义是:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。,5多条件覆盖 多条件覆盖也称为条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各

7、种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。,6修正条件判定覆盖 它要求满足两个条件:首先,每一个程序模块的入口和出口点都要考虑至少被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符(and、or)连接的bool条件,每个条件对于判定的结果值是独立的。,7测试覆盖准则 (1)Foster的ESTCA覆盖准则 前面所介绍的逻辑覆盖其出发点似乎是合理的。所谓“覆盖”,就是想要做到全面而无遗漏。但是,事实表明,它并不能真的做到无遗漏。 K.A.Foster从测试工作实践的教训出发,吸收了计算机

8、硬件的测试原理,提出了一种经验型的测试覆盖准则。,(2)Woodward等人的层次LCSAJ覆盖准则 Woodward等人曾经指出结构覆盖的一些准则,如分支覆盖或路径覆盖,都不足以保证测试数据的有效性。为此,他们提出了一种层次LCSAJ覆盖准则。,基本路径测试,上节的例子是个比较简单的程序段,只有两条路径。但在实际问题中,即使一个不太复杂的程序,其路径的组合都是一个庞大的数字。 如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次,就成为基本路径测试。 设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次。,1程序的控制流图 控制流图是描述程序控制流的一种图示方

9、式。其中基本的控制结构对应的图形符号如图所示。在图所示的图形符号中,圆圈称为控制流图的一个结点,它表示一个或多个无分支的语句或源程序语句。,图 控制流图的图形符号,图 程序流程图和对应的控制流图,图(a)所示的是一个程序的流程图,它可以映射成图(b)所示的控制流图。,2计算程序环路复杂性 进行程序的基本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 所谓独立路径,是指包括若干未曾处理的语句或条件的一条路径,基本路径集不是惟一的,对于给定的控制流图,可以得到不同的基本路径集。 通常环路复杂性可用以下3种方法

10、求得。 将环路复杂性定义为控制流图中的区域数。 设E为控制流图的边数,N为图的结点数,则定义环路的复杂性为V(G)=EN+2。 若设P为控制流图中的判定结点数,则有V(G)=P+1。,3基本路径测试法步骤 基本路径测试法适用于模块的详细设计及源程序,其主要步骤如下。 以详细设计或源代码作为基础,导出程序的控制流图。 计算得到的控制流图G的环路复杂性V(G)。 确定线性无关的路径的基本集。 生成测试用例,确保基本路径集中每条路径的执行。,思考题,计算两个数的最小公倍数的程序的基础上,画出流程图,并计算V(G)。 #include int main() int a,b; scanf(“%d %d“

11、,/输出最小公倍数 ,程序的静态测试,1源程序静态分析 在静态结构分析中,测试者通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,可以清晰地标识整个软件系统的组成结构,使其便于阅读与理解,然后可以通过分析这些图表,检查软件有没有存在缺陷或错误。,通常采用以下一些方法进行源程序的静态分析。 (1)生成各种引用表 标号交叉引用表 变量交叉引用表 子程序(宏、函数)引用表 等价表 常数表,(2)错误静态分析 错误静态分析主要用于确定在源程序中是否有某类错误或“危险”结构。

12、 类型和单位分析 引用分析 表达式分析 接口分析,2人工测试 静态分析中进行人工测试的主要方法有桌前检查、代码审查和走查。经验表明,使用这种方法能够有效地发现30%70%的逻辑设计和编码错误。,(1)桌前检查 由程序员自己检查自己编写的程序。程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分析、检验,并补充相关的文档,目的是发现程序中的错误。,(2)代码审查 代码审查是由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。 代码审查分两步。第一步,小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为审查的依据

13、。小组成员在充分阅读这些材料后,进入审查的第二步,召开程序审查会。,(3)走查 走查与代码审查基本相同,其过程分为两步。第一步也把材料先发给走查小组每个成员,让他们认真研究程序,然后再开会。开会的程序与代码审查不同,不是简单地读程序和对照错误检查表进行检查,而是让与会者“充当”计算机,即首先由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论用。,其他白盒测试方法简介,1域测试 域测试是一种基于程序结构的测试方法。 域测试正是在分析输入域的基础上,选择适当的测试点以后进行测试的。,2

14、符号测试 符号测试的基本思想是允许程序的输入不仅仅是具体的数值数据,而且包括符号值,这一方法也因此而得名。,3Z路径覆盖 分析程序中的路径是指检验程序从入口开始,执行过程中经历的各个语句,直到出口。,4程序变异 程序变异方法是一种错误驱动测试。所谓错误驱动测试方法,是指该方法是针对某类特定程序错误的。经过多年的测试理论研究和软件测试的实践,人们逐渐发现要想找出程序中所有的错误几乎是不可能的。比较现实的解决办法是将错误的搜索范围尽可能地缩小,以利于专门测试某类错误是否存在。 错误驱动测试主要有两种,即程序强变异和程序弱变异。,最后,归纳一下白盒测试中各种测试方法的应用策略。 在白盒测试中,可以使

15、用各种测试方法的综合策略如下。 (1)在测试中,应尽量先使用工具进行静态结构分析。 (2)测试中可采取先静态后动态的组合方式:先进行静态结构分析、代码检查,再进行覆盖率测试。,(3)利用静态分析的结果作为导引,通过代码检查和动态测试的方式对静态发现结果进行进一步的确认,使测试工作更为有效。 (4)覆盖率测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准;对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率。,(5)在不同的测试节点,测试的侧重点不同:在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析等;在系统测试阶段,应根据黑盒测试的结果,采取相应的

16、白盒测试。,第二部分 黑盒测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。 黑盒测试又叫做功能测试或数据驱动测试。,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误?,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 但这是不可能的。,假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试: 可能采用的 测试数据组: 232232 264 如果测试一 组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号