1、第七章第七章软件测试软件测试 (讲义P126)概论概论在本章中,我们将研究:在本章中,我们将研究:1、错误类型和如何分类错误、错误类型和如何分类错误 2、测试的目的测试的目的3、单元测试、单元测试 4、集成测试策略集成测试策略5、测试计划、测试计划 6、何时停止测试何时停止测试一旦你编好你的程序组件,就是测试它们的时候了。有许多一旦你编好你的程序组件,就是测试它们的时候了。有许多种方法测试,这里将为你介绍几种测试方法,它们能够使种方法测试,这里将为你介绍几种测试方法,它们能够使你为用户发布一个高质量的系统。发现错误的发生并不是你为用户发布一个高质量的系统。发现错误的发生并不是对于测试来说已经不
2、是第一次了;我们已经看到了在开发对于测试来说已经不是第一次了;我们已经看到了在开发过程中怎样在需求和设计的复查中帮助我们探索错误。但过程中怎样在需求和设计的复查中帮助我们探索错误。但是测试是以发现错误为核心是测试是以发现错误为核心,有许多种方法使我们在测试上有许多种方法使我们在测试上下的功夫更有效率更有效果下的功夫更有效率更有效果。概论概论Jones广广泛泛的的研研究究程程序序员员的的生生产产力力,包包括括错错误误的的查查找找和和修修正正的的本本性性。查查阅阅了了历历史史上上一一千千万万行行的的代代码码,他他发发现现代代码码检检查查纠纠除除了了85%多多的的错错误误。Jones研研究究的的其其
3、他他方方法法从从未未如如此此成成功功,实实际际上上,没没有有一一个个能能够够除除去去一一半半以以上上的的错错误误。Jones最最近近更更多多的调查建议典型的准备时间和会议时间,表的调查建议典型的准备时间和会议时间,表8.2显示。显示。表表8。2 典型的准备时间和会议时间(典型的准备时间和会议时间(1991)开发产品开发产品准备时间准备时间 会议时间会议时间需求文档需求文档每小时每小时25页页 每小时每小时12页页功能描述功能描述每小时每小时45页页 每小时每小时15页页逻辑描述逻辑描述每小时每小时50页页 每小时每小时20页页源代码源代码每小时每小时150行代码行代码 每小时每小时75行代码行
4、代码用户手册用户手册每小时每小时35页页 每小时每小时20页页概论概论韦勒韦勒(1993)在公牛信息系统在公牛信息系统3 年检查数据。年检查数据。来自几乎来自几乎7,000 个个检查会议的尺度包括大约检查会议的尺度包括大约11557 个错误信息和个错误信息和14677 页的设计页的设计文献。他发现,一个文献。他发现,一个3人低准备率测试小组和一个人低准备率测试小组和一个4人高准备率人高准备率小组工作效率一样;他提出准备率,并非小组大小,确定测试小组工作效率一样;他提出准备率,并非小组大小,确定测试效率。效率。他也发现小组的有效性和效率取决于他们对产品的熟悉:他也发现小组的有效性和效率取决于他们
5、对产品的熟悉:越熟悉,越好。越熟悉,越好。另一方面,韦勒发现好代码检查结果能建立错误的信任。在一项另一方面,韦勒发现好代码检查结果能建立错误的信任。在一项12000 行行C语言的工程上,需求和设计没被复查;语言的工程上,需求和设计没被复查;检查从代码检查从代码开始。开始。比较代码检查数据和测试数据,韦勒发现代码检查鉴定比较代码检查数据和测试数据,韦勒发现代码检查鉴定主要编码或者低水平设计错误,但是测试主要发现需求和结构主要编码或者低水平设计错误,但是测试主要发现需求和结构的错误。因此,代码检查不在系统里处理源代码的变化性,它的错误。因此,代码检查不在系统里处理源代码的变化性,它的结果没代表真实
6、的系统质量。的结果没代表真实的系统质量。表表8。3发现活动中发现的错误(发现活动中发现的错误(Jones 1991)发现活动发现活动每千行代码发现的错误每千行代码发现的错误 需求复查需求复查2.5设计复查设计复查5.0 代码检查代码检查10.0集成测试集成测试3.0 接受性测试接受性测试 2.0概论概论Grady在惠普解释到,为代码检查做计划一般需要在惠普解释到,为代码检查做计划一般需要2个小时,个小时,接着接着30分钟的小组会议。然后个人准备分钟的小组会议。然后个人准备2个小时发现错误和个小时发现错误和90分钟汇报错误。小组花费分钟汇报错误。小组花费30分钟集体讨论错误的发现并分钟集体讨论错
7、误的发现并推荐采取的措施。当错误修正后,代码检查会议的主持人推荐采取的措施。当错误修正后,代码检查会议的主持人在花费半个小时书写和发布摘要文档。在花费半个小时书写和发布摘要文档。Jones总结了他的工程信息的数据,画了一个不同的图,比较总结了他的工程信息的数据,画了一个不同的图,比较复查,检查和其他发现方法的不同。因为产品在尺寸上变复查,检查和其他发现方法的不同。因为产品在尺寸上变化广泛,然而,研究员继续研究那些形式的行为比其它的化广泛,然而,研究员继续研究那些形式的行为比其它的更容易发现不同类的错误。例如,代码检查善于发现代码更容易发现不同类的错误。例如,代码检查善于发现代码错误,但是原型系
8、统更容易鉴别需求的错误。错误,但是原型系统更容易鉴别需求的错误。Fagan在在IBM发布检查代码的方针后,许多其它的组织机构,发布检查代码的方针后,许多其它的组织机构,包括惠普,包括惠普,ITT和和AT&T都采纳了代码检测作为推荐或标准都采纳了代码检测作为推荐或标准实施。代码检测的成功应用继续在文献中出现,一些在网实施。代码检测的成功应用继续在文献中出现,一些在网站上有参考文献站上有参考文献。概论概论证明代码正确假想你已经编完你的组件,自己检查完证明代码正确假想你已经编完你的组件,自己检查完毕,小组复查完毕。下一步测试是,以更加结构化毕,小组复查完毕。下一步测试是,以更加结构化的方式详细审查确
9、保它的正确性。为了单元测试,的方式详细审查确保它的正确性。为了单元测试,一个程序是正确的,当它正确实现设计中说明的功一个程序是正确的,当它正确实现设计中说明的功能和数据和它与其它组件正确接口。能和数据和它与其它组件正确接口。一种研究程序的正确性方式是把代码看成语句的逻辑一种研究程序的正确性方式是把代码看成语句的逻辑流。如果我们能够用正式的逻辑系统(诸如一系列流。如果我们能够用正式的逻辑系统(诸如一系列关于数据的语句和暗示)复写程序,我们就能测试关于数据的语句和暗示)复写程序,我们就能测试新的语句的正确性。我们在设计的方面解释正确性,新的语句的正确性。我们在设计的方面解释正确性,我们希望我们的表
10、达遵循数学逻辑的规则。我们希望我们的表达遵循数学逻辑的规则。公式证明技巧。让我们看看公式证明是怎么工作的。公式证明技巧。让我们看看公式证明是怎么工作的。我们按照一系列步骤转换代码为逻辑副本:我们按照一系列步骤转换代码为逻辑副本:概论概论首先,我们写断言来描述组件的输入和输出条件。这些语句首先,我们写断言来描述组件的输入和输出条件。这些语句由逻辑变量组合(每个要么是由逻辑变量组合(每个要么是true要么是要么是false),),由表由表8.4列出的逻辑连接符号连接。列出的逻辑连接符号连接。表表8.4 逻辑连接逻辑连接连接连接 例子例子 意义意义联合联合 X&Y X and Y分离分离 X v Y
11、 X or Y取反取反 -X Not X蕴含式蕴含式 X-YIf x then y相等相等 X=yX equals y通用通用 V x P(x)对于所有对于所有x,条件条件P(x)是真是真存在存在 E x P(x)至少有一个至少有一个x,P(x)是真是真7.1 7.1 基本概念基本概念软件产品最大的成本是检测软件产品最大的成本是检测软件错误、修正软件错误软件错误、修正软件错误的成本的成本。在整个软件开发中在整个软件开发中:测试工作量测试工作量50%50%软件质量问题软件质量问题以软件测试为中心的软件质量保障技术以软件测试为中心的软件质量保障技术软件软件 静态测试技术静态测试技术质量质量 软件度
12、量技术软件度量技术控制控制 动态测试技术动态测试技术技术技术 配置管理技术配置管理技术 修改控制与管理技术修改控制与管理技术软件测试是保证软件质量软件测试是保证软件质量,提高提高软件可靠性的关键软件可靠性的关键软件测试的目标软件测试的目标 (1)预防错误预防错误:几乎不可实现几乎不可实现(2)发现错误发现错误:软件测试目的软件测试目的找错7.1.1 测试的目的与地位测试的目的与地位nG.J.Myers在在中中认为认为:n“程序测试是为了发现错误而程序测试是为了发现错误而 执行程序的过程执行程序的过程.”E.W.E.W.Dijkstra Dijkstra 指出指出:“程序测试能证明错误的存在程序
13、测试能证明错误的存在,但不能证明错误不存在但不能证明错误不存在.”.”测试的目的是发现程序中测试的目的是发现程序中的错误的错误,是为了是为了证明程序有错证明程序有错,而不是证明程序无错而不是证明程序无错.把把证证明明程程序序无无错错当当作作测测试试目目的的不不仅仅是是不不正正确确的的,完完全全做做不不到到的的,而而且且对对做做好好测测试试没没有有任任何何益益处处,甚甚至至是是十十分有害分有害的的.软件测试要设法使软件发生故障软件测试要设法使软件发生故障,暴露软件错误暴露软件错误 测试的测试的“成功成功”与与“失败失败”能够发现错误的测试是成功的能够发现错误的测试是成功的测试,否则是失败的测试。
14、测试,否则是失败的测试。“测测试试的的目目的的是是说说明明程程序序正正确确地地执执行行它应有的功能它应有的功能”也是也是错误错误的的.例例:程程序序TriangleTriangle,输输入入三三个个整整数数,表表示示一一个个三三角角形形的的三三个个边边长长,该该程程序序产产生生一一个个结结果果,指指出出该该三三角角形形是是等等边边三三角角形形、等等腰腰三三角角形形还还是不等边三角形。是不等边三角形。为为说说明明其其能能正正确确执执行行它它的的功功能能,可可使使用用“测试用例测试用例”(3,4,5),(5,5,6),(6,6,6),(3,4,5),(5,5,6),(6,6,6),程程序序都都能能
15、给给出出正正确确结结果果,是是否否就就可可认认为为程程序序是正确的?是正确的?测试测试(test)test)调试调试(debug)debug)以已知条件开始以已知条件开始,使用预先定义的程序使用预先定义的程序,有预知的结果有预知的结果以不可知内部条件以不可知内部条件开始开始,结果一般不可结果一般不可预见预见有计划有计划被动的被动的由独立的测试组,在由独立的测试组,在不了解软件设计的条不了解软件设计的条件下完成件下完成由程序作者进行由程序作者进行发现错误发现错误找出错误位置,排除找出错误位置,排除测试与调试测试与调试(排错排错)程序中的问题根源程序中的问题根源可能可能在开发前期的各阶段解决、在开
16、发前期的各阶段解决、纠正错误也必须追溯到前期纠正错误也必须追溯到前期工作工作。测测试试与与开开发发前前期期工工作作的的关关系系决定软件与系统的配合关系决定软件与系统的配合关系需求分析需求分析概要设计概要设计详细设计详细设计 编编 码码单元测试单元测试集成测试集成测试确认测试确认测试系统测试系统测试测试阶段工作步骤测试阶段工作步骤F单元测试单元测试:检验每个模块能否单独检验每个模块能否单独 工作工作.F集成测试集成测试:检验概要设计中模块接检验概要设计中模块接 口设计问题口设计问题F确认测试确认测试:以需求规格说明书为检以需求规格说明书为检 验尺度验尺度F系统测试系统测试:综合检验综合检验测试可
17、视为分析、设计、编码三个阶测试可视为分析、设计、编码三个阶段的最终复审段的最终复审,以保证软件质量以保证软件质量.开发前期出现错误的扩展开发前期出现错误的扩展计划计划需求需求分析分析设设计计编编码码测测试试A A AB B软件生存期各阶段间需保持的正确性软件生存期各阶段间需保持的正确性用户要求用户要求用户用户:我要什么我要什么?运行结果运行结果计算机计算机:程序运行得程序运行得到的结果到的结果源程序源程序程序员程序员:我要让计算我要让计算机什么做机什么做?设计说明书设计说明书设计员设计员:我要让软件我要让软件做什么做什么?需求说明书需求说明书分析员分析员:我可以提我可以提供什么供什么?1234
18、5理解正确性理解正确性表达正确性表达正确性理解正确性理解正确性设计正确性设计正确性表达正确性表达正确性理解正确性理解正确性编码正确性编码正确性运行正确性运行正确性输入正确性输入正确性相符吗相符吗?软件测试的对象软件测试的对象 软件测试不等于程序测试软件测试不等于程序测试 软件测试应贯穿于软件定义与开发软件测试应贯穿于软件定义与开发的整个期间;的整个期间;据美国一家公司统计,查出的软件错误据美国一家公司统计,查出的软件错误中,属于中,属于需求分析和软件设计的错误需求分析和软件设计的错误约占约占 64%64%,属于程序编写的错误仅占,属于程序编写的错误仅占 36%36%。程序编写的许多错误是。程序
19、编写的许多错误是“先天的先天的”。7.1.2 7.1.2 测试的基本原则测试的基本原则 “测试用例测试用例”要求要求 测试用的一组输入数据、环测试用的一组输入数据、环境平台和运行条件境平台和运行条件。测试的基本原则测试的基本原则(1)(1)开发和测试队伍分别建立开发和测试队伍分别建立(2)(2)测试用例应由输入数据和预期的输测试用例应由输入数据和预期的输 出结果两部分组成出结果两部分组成.(3)(3)兼顾合理的输入和不合理的输入数据兼顾合理的输入和不合理的输入数据(4)(4)应检查程序是否作了不该做的事应检查程序是否作了不该做的事(5)(5)程序修改后要回归测试程序修改后要回归测试(6)(6)
20、应长期保留测试用例,直至系统废弃。应长期保留测试用例,直至系统废弃。程序测试举例程序测试举例例:程序例:程序 TriangleTriangle,输入三个整输入三个整 数,表示一个三角形的三个边数,表示一个三角形的三个边 长,该程序产生一个结果,指长,该程序产生一个结果,指 出该三角形是等边三角形、等出该三角形是等边三角形、等 腰三角形还是不等边三角形。腰三角形还是不等边三角形。判断三角型的测试用例设计判断三角型的测试用例设计:输入数据输入数据 预期结果预期结果(1)6;6;6 (1)6;6;6 等边等边(2)8;8;4 (2)8;8;4 等腰等腰(3)4;5;6 (3)4;5;6 一般一般 还
21、应输入还应输入非法数据非法数据:0;7;90;7;9 -7;3;5 -7;3;5 a;2;7a;2;7 等等软件错误分类软件错误分类F 功能错功能错(需求分析错误需求分析错误)F 软件结构错软件结构错F 数据错数据错F 编码错编码错F 软件集成错软件集成错F 测试定义与测试执行错误测试定义与测试执行错误 7.1.37.1.3 软件测试信息流软件测试信息流测试过程需要三类输入:测试过程需要三类输入:软件配置软件配置:需求规格说明书需求规格说明书 软件设计说明书软件设计说明书 被测源程序被测源程序测试配置测试配置:测试计划测试计划 测试用例测试用例(测试数据测试数据)测试驱动程序测试驱动程序测试工
22、具测试工具:7.1.37.1.3 软件测试信息流软件测试信息流软件软件配置配置测试测试测试测试配置配置测试测试工具工具结果结果分析分析排错排错可靠性可靠性 分析分析测试测试结果结果错误错误预期预期结果结果出错率出错率 改正改正的软件的软件预测预测的可的可靠性靠性7.1.4 7.1.4 测试的方法与技术测试的方法与技术软件测试的软件测试的策略和方法策略和方法静态测静态测试方法试方法动态测动态测试方法试方法人工测试方法人工测试方法计算机辅助静计算机辅助静态分析方法态分析方法白盒测试方法白盒测试方法黑盒测试方法黑盒测试方法穷举测试方法穷举测试方法静态测试:静态测试:基本特征是在对软件进行基本特征是在
23、对软件进行 分析、检查和测试是不实分析、检查和测试是不实 际运行被测试的软件。际运行被测试的软件。静静态态测测试试约约可可找找出出303070%70%的的逻逻辑辑设设计错误计错误.对对需求规格说明书需求规格说明书、软件设计说明软件设计说明书书、源程序源程序做结构分析、流程图分析、做结构分析、流程图分析、符号执行来找错符号执行来找错.动态测试:动态测试:通过运行软件来检验软通过运行软件来检验软件的动态行为和运行结果的正确性件的动态行为和运行结果的正确性动态测试的两个基本要素:动态测试的两个基本要素:u 被测试程序被测试程序u 测试数据(测试用例)测试数据(测试用例)动态测试方法动态测试方法(1)
24、1)选取定义域有效值选取定义域有效值,或定义域或定义域 外无效值外无效值.(2)(2)对已选取值决定对已选取值决定预期的结果预期的结果(3)(3)用选取值执行程序用选取值执行程序(4)(4)执行结果执行结果 与与(2)(2)结果相比结果相比,不吻和程序有错不吻和程序有错.7.2 7.2 两种类型的测试两种类型的测试7.2.1 7.2.1 黑盒测试黑盒测试 又称又称:功能测试功能测试 数据驱动测试数据驱动测试 基于规格说明书的测试基于规格说明书的测试7.2.2 7.2.2 白盒测试白盒测试 又称又称:结构测试结构测试 玻璃盒测试玻璃盒测试 基于覆盖的测试基于覆盖的测试.根据被测程序的逻辑结构设
25、计根据被测程序的逻辑结构设计 测试用例测试用例;力求提高测试覆盖率力求提高测试覆盖率;黑盒测试与白盒测试比较黑盒测试与白盒测试比较 黑盒测试黑盒测试是从用户观点,按是从用户观点,按规格说明书要求的输入数据与输规格说明书要求的输入数据与输出数据的对应关系设计测试用例出数据的对应关系设计测试用例,是根据程序是根据程序外部特征外部特征进行测试。进行测试。白盒测试白盒测试是根据程序是根据程序内部逻辑内部逻辑结构结构进行测试。进行测试。7.2.3 7.2.3 穷举测试穷举测试例例:输入输入 三条边长三条边长 黑盒测试黑盒测试可采用的测试用例数可采用的测试用例数(设字长设字长1616位位)执行时间执行时间
26、设测试一次需设测试一次需1 1msms 共需一万年共需一万年.=2=2 X2 X2 3X10X2 X2 3X1016161616161614147.2.3 7.2.3 穷举测试穷举测试 白盒测试白盒测试例例:含含4 4个分支个分支,循环次数循环次数20,20,从从A A到到B B的可能的可能路径路径执行时间执行时间:设测试一次需设测试一次需2 2msms 穷举测试需穷举测试需5 5亿年亿年.=5+5+.+5+5=5+5+.+5+5 101020201 12 219191414A AB B 不论黑盒还是白盒测试都不论黑盒还是白盒测试都不能不能进行穷尽测试进行穷尽测试,所以软件测试不可所以软件测
27、试不可能发现程序中存在的所有错误能发现程序中存在的所有错误,因因此需精心设计测试方案此需精心设计测试方案,力争尽可力争尽可能少的次数能少的次数,测出尽可能多的错误测出尽可能多的错误.黑盒测试与白盒测试能发现的错误黑盒测试与白盒测试能发现的错误C CB BA AD D-只能用黑盒测试发现的错误只能用黑盒测试发现的错误A-只能用白盒测试发现的错误只能用白盒测试发现的错误-两种方法都能发现的错误两种方法都能发现的错误-两种方法都不能发现的错误两种方法都不能发现的错误BCD7.37.3白盒测试的测试用例设计白盒测试的测试用例设计7.3.1 7.3.1 逻辑覆盖法逻辑覆盖法例例:PROCEDURE SA
28、MPAL (A,B:REAL;VAR X:REAL);BEGIN IF(A1)AND(B=0)THEN X:=X/A IF(A=2)OR(X1)THEN X:=X+1 END;逻辑覆盖准则逻辑覆盖准则:(1)(1)语句覆盖语句覆盖(2)(2)判定覆盖判定覆盖(3)(3)条件覆盖条件覆盖(4)(4)判定判定/条件覆盖条件覆盖(5)(5)条件组合覆盖条件组合覆盖(6)(6)路径覆盖路径覆盖(7)(7)点覆盖点覆盖(8)(8)边覆盖边覆盖1 1语句覆盖语句覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce使程序中每个语使程序中每个语句至少执行一次
29、句至少执行一次只需设计一个测试用例只需设计一个测试用例:输入数据:输入数据:A=2,B=0,X=4即达到了语句覆盖即达到了语句覆盖;语句覆盖是语句覆盖是最弱最弱的逻辑覆盖的逻辑覆盖2判定覆盖判定覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce使每个判定的真假分支都使每个判定的真假分支都使每个判定的真假分支都使每个判定的真假分支都至少执行一次至少执行一次至少执行一次至少执行一次例例:可设计两组测试用例可设计两组测试用例:A=3,B=0,X=3 可覆盖可覆盖c、d分支分支 A=2,B=1,X=1 可覆盖可覆盖b、e分支分支 两组测试用例可覆盖
30、所有判定的真假两组测试用例可覆盖所有判定的真假分支分支语句覆盖仍是语句覆盖仍是弱弱的逻辑覆盖的逻辑覆盖(3)(3)条件覆盖条件覆盖 使每个判定的每个条件的可能取使每个判定的每个条件的可能取值至少执行一次值至少执行一次第一判定表达式:设条件 A1 取真 记为 T1 假 T1 条件 B=1 取真 记为 T2 假 T2第二判定表达式:设条件 A=2 取真 记为 T3 假 T3 条件 X1 取真 记为 T4 假 T4条件覆盖条件覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T4测试用例
31、测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支1 0 3 abe T1,T2,T3,T4 b,e2 1 1 abe T1,T2,T3,T4 b,e 两个测试用例覆盖了四个条件八种可能两个测试用例覆盖了四个条件八种可能取值。取值。未覆盖未覆盖c c、d d分支,不满足判定覆盖的要分支,不满足判定覆盖的要求求.条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖判定覆盖也不一定包含条件覆盖(4)(4)判定判定/条件覆盖条件覆盖 选选取取足足够够多多的的测测试试用用例例,使使判判断断中中的的每每个个条条件件的的所所有有可可能能取取值值至
32、至少少执执行行一一次次,同同时时每每个个判判断断本本身身的的所所有有可可能能判判断断结结果果至至少少执执行一次行一次.判定判定/条件条件 覆盖覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T4测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支2 0 4 2 0 4 aceace T1,T2,T3,T4 c,e T1,T2,T3,T4 c,e2 1 12 1 1 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d
33、能同时满足判定、条件两种覆盖标准。能同时满足判定、条件两种覆盖标准。取值。取值。测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X A B X 路径路径 条件条件 分支分支2 0 3 2 0 3 ace T1,T2,T3,T4 c,eace T1,T2,T3,T4 c,e2 1 12 1 1 abe abe T1,T2,T3,T4T1,T2,T3,T4 b,e b,e1 0 31 0 3 abe abe T1,T2,T3,T4 b,eT1,T2,T3,T4 b,e1 1 11 1 1 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d (5)(5)条件组合覆
34、盖条件组合覆盖 所有可能的条件取值组合至少所有可能的条件取值组合至少执行一次执行一次 A1,B=0 A1,B0 A 1,B=0 A 1,B0 A=2,X1 A=2,X 1 A2,X1 A2,X 1测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支2 0 3 2 0 3 ace T1,T2,T3,T4 c,eace T1,T2,T3,T4 c,e2 1 12 1 1 abe abe T1,T2,T3,T4T1,T2,T3,T4 b,e b,e0 0 10 0 1 abe abe T1,T2,T3,T4 b,eT1,T2,T3,T4 b,e0 1 00 1
35、0 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d2 0 2 ace T1,T2,T3,T4 c,e2 0 2 ace T1,T2,T3,T4 c,e2 1 12 1 1 abe abe T1,T2,T3,T4T1,T2,T3,T4 b,e b,e3 2 23 2 2 abe abe T1,T2,T3,T4 b,eT1,T2,T3,T4 b,e3 3 13 3 1 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支2 0 4 2 0 4 ace T1
36、T2,T3,T4 c,eace T1,T2,T3,T4 c,e2 1 12 1 1 abe abe T1,T2,T3,T4T1,T2,T3,T4 b,e b,e1 0 21 0 2 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d1 1 11 1 1 abd abd T1,T2,T3,T4 b,dT1,T2,T3,T4 b,d (6)(6)路径覆盖路径覆盖 覆盖每一个可能的路径覆盖每一个可能的路径测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支1 1 1 1 1 1 abd abd T1,T2,T3,T4 b,dT1,T2
37、T3,T4 b,d1 1 21 1 2 abe abe T1,T2,T3,T4T1,T2,T3,T4 b,e b,e3 0 13 0 1 acd acd T1,T2,T3,T4 c,dT1,T2,T3,T4 c,d2 0 4 ace2 0 4 ace T1,T2,T3,T4 c,e T1,T2,T3,T4 c,e 路径测试法路径测试法借助程序控制流图设计测试借助程序控制流图设计测试用例的白盒测试法用例的白盒测试法.u 点覆盖点覆盖u 边覆盖边覆盖(7)(7)点覆盖点覆盖 测试路径至少经过程序控制流图测试路径至少经过程序控制流图中每个节点一次中每个节点一次执行路径执行路径:abdghiabdghi和和aceghiaceghi满足点覆盖满足点覆盖S S1 12 23 34 45 56 6E Eacbdfe eghi(8)(8)边覆盖边覆盖 测试路径至少经过程序控制流图测试路径至少经过程序控制流图中每条边一次中每条边一次.执行路径执行路径:abdfiabdfi和和aceghiaceghi满足边覆盖满足边覆盖S S1 12 23 34 45 56 6E Ea ac cb bd df fe eg gh hi i