




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四讲第四讲 白盒测试白盒测试1 1关于考研的思考 调查显示,“就业前景好”(34%)为毕业生读研的首要理由,其次是“想去更好的大学”(26%);而“职业发展需要”和“想做学术研究”分别占19%;另外,值得注意的是,“随大流”者占4%。对此,专家提醒考研族,继续深造并不一定能带来更光辉的前程,是否选择读研究生关键在于是否符合自己的职业职业理想和规划理想和规划。2 2测试用例设计概述测试用例设计概述软件测试的目标:如何以最少的人力、资源投入,在最短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,则是软件公司探索和追求的目标。测试用例的重要性:测试用例是测试工作的指导,是软件测试的必须遵
2、守的准则,更是软件测试质量稳定的根本保障。 3 3什么是测试用例什么是测试用例?测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 测试用例目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。4 4为什么需要测试用例为什么需要测试用例?在开始实施测试之前设计好测试用例,避免盲目测试并提高测试效率,减少测试的不完全性;测试用例的使用令软件测试的实施重点突出、目的明确;根
3、据测试用例的多少和执行难度,估算测试工作量,便于测试项目的时间和资源管理与跟踪;减少回归测试的复杂程度;在软件版本更新后只需修正少量的测试用例便可展开测试工作,降低工作强度、缩短项目周期;5 5为什么需要测试用例为什么需要测试用例? (续)(续)功能模块的测试用例的通用化和复用化则会使软件测试易于开功能模块的测试用例的通用化和复用化则会使软件测试易于开展,并随着测试用例的不断细化其效率也不断攀升;展,并随着测试用例的不断细化其效率也不断攀升;根据测试用例的操作步骤和执行结果,可以方便地书写软件测根据测试用例的操作步骤和执行结果,可以方便地书写软件测试缺陷报告;试缺陷报告;可以根据测试用例的执行
4、等级,实施不同级别的测试;可以根据测试用例的执行等级,实施不同级别的测试;为分析软件缺陷和程序模块质量提供依据;为分析软件缺陷和程序模块质量提供依据;便于大型软件测试项目外包测试指导基础;便于大型软件测试项目外包测试指导基础;总结:总结:软件测试是有组织性、步骤性和计划性的,为了能将软件软件测试是有组织性、步骤性和计划性的,为了能将软件测试的行为转换为可管理的、具体量化的模式,需要创建和维测试的行为转换为可管理的、具体量化的模式,需要创建和维护测试用例。护测试用例。6 6良好测试用例的特征良好测试用例的特征可以最大程度地找出软件隐藏的缺陷可以最高效率的找出软件缺陷可以最大程度地满足测试覆盖要求
5、既不过分复杂、也不能过分简单使软件缺陷的表现可以清楚的判定测试用例包含期望的正确的结果待查的输出结果或文件必须尽量简单明了不包含重复的测试用例测试用例内容清晰、格式一致、分类组织7 7 测试用例设计书写标准测试用例设计书写标准 在在ANSI/IEEE829-1983ANSI/IEEE829-1983标准中列出了和测试设计相关标准中列出了和测试设计相关的测试用例编写规范和模板。标准模板中主要元素如下:的测试用例编写规范和模板。标准模板中主要元素如下:标识符标识符惟一标识每一个测试用例惟一标识每一个测试用例测试项测试项准确的描述所需要测试的项及其特征准确的描述所需要测试的项及其特征测试环境要求测试
6、环境要求表征执行该测试用例需要的测试环境表征执行该测试用例需要的测试环境输入标准输入标准执行测试用例的输入需求(这些输入可能包执行测试用例的输入需求(这些输入可能包括数据、文件或者操作)括数据、文件或者操作)输出标准输出标准按照指定的环境和输入标准得到的期望输出按照指定的环境和输入标准得到的期望输出结果结果测试用例之间的关联测试用例之间的关联标识该测试用例与其它的测试标识该测试用例与其它的测试(或其它测试用例)之间的依赖关系(或其它测试用例)之间的依赖关系8 8测试用例的组成测试用例的组成字段名称字段名称类型类型注释注释标识符整型唯一标识该测试用例的值,自动生成测试项字符型测试的对象,可以从软
7、件配置库中选择测试目标字符型从固定列表中选择一个测试环境要求字符型可从列表中选择,如果没有,则直接输入新增内容前提字符型事先设定、条件限制,如已登录、某个选项已选上输入数据字符型输入要求说明、或数据列举操作步骤字符型按1., 2., 操作步骤的顺序,准确详细地描述。9 9测试用例的组成(续)测试用例的组成(续)字段名称字段名称类型类型注释注释期望输出字符型所属模块整型 模块标识符优先级整型1,2,3 (1优先级最高)层次整型0,1,2,3 ( 0 最高层) 关联的测试用例整型上层(父)用例的标识符。执行时间实型分钟自动化标识布尔型T,F 关联的缺陷枚举型 缺陷标识符列表1010测试用例设计考虑
8、因素测试用例设计考虑因素测试用例必须具有测试用例必须具有代表性、典型性代表性、典型性。测试用例设计时,要测试用例设计时,要浓缩浓缩系统设计。系统设计。1111 软件测试用例设计的基本原则软件测试用例设计的基本原则 尽量避免尽量避免含糊含糊的测试用例的测试用例尽量将具有相类似功能的测试用例尽量将具有相类似功能的测试用例抽象抽象并并归类归类尽量避免尽量避免冗长和复杂冗长和复杂的测试用例的测试用例1212 白盒测试白盒测试 不论是每个功能或每个逻辑控制通路,如果对不论是每个功能或每个逻辑控制通路,如果对所有的情况都进行测试,这样的测试成为穷尽测试。所有的情况都进行测试,这样的测试成为穷尽测试。穷尽测
9、试在一般情况下是实际不可行的。穷尽测试在一般情况下是实际不可行的。循环循环20次次各种组合,各种组合,约约5 52020种种白盒测试白盒测试白盒测试方法白盒测试方法白盒测试也称白盒测试也称结构测试结构测试或或逻辑驱动逻辑驱动测试,是针对被测单元测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。测试,是一种穷举路径的测试方法。但但
10、即使每条路径都测即使每条路径都测试过了,仍然可能存在错误。因为:试过了,仍然可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。即程序是否是一个错误的程序。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试发现不了一些与数据相关的错误。穷举路径测试发现不了一些与数据相关的错误。1414白盒测试用例设计原则白盒测试用例设计原则对程序模块的所有独立的执行路径至少要测试一次;对程序模块的所有独立的执行路径至少要测试一次;对所有的逻辑判定,取对所有的逻辑
11、判定,取“真真”与取与取“ 假假 ” 的两种情况都的两种情况都至少测试一次;至少测试一次; 在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性。测试内部数据结构的有效性。 1515白盒测试用例注意事项白盒测试用例注意事项1616n由于测试路径可能非常多,基于时间和资源问题,选出足够多的路径测试。n由于深入到程序编码,通常开发人员协助测试人员书写白盒测试用例。为什么要进行白盒测试?为什么要进行白盒测试?如果所有软件错误的根源都可以追溯到某个唯一原因,那如果所有软件错误的根源都可以追溯到某个唯一原因,那么问题就简单了。然而,事实上一个么问题就简单了。然
12、而,事实上一个bug bug 常常是由多个因常常是由多个因素共同导致的,如下图所示。素共同导致的,如下图所示。假设此时开发工作已结束,程序送交到测试组,没有人知道代码中有一个潜在的被 0 除的错误。若测试组采用的测试用例的执行路径没有同时经过x=0和y=5/x进行测试,显然测试工作似乎非常完善,测试用例覆盖了所有执行语句,也没有被 0 除的错误发生。1717白盒测试用例的两种设计方法白盒测试用例的两种设计方法逻辑覆盖:逻辑覆盖:以程序的内部以程序的内部逻辑结构为基础,分为语句覆盖、逻辑结构为基础,分为语句覆盖、判定覆盖、判定判定覆盖、判定- -条件覆盖、条件条件覆盖、条件组合覆盖和路径覆盖。组
13、合覆盖和路径覆盖。基本路径测试:基本路径测试:在程在程序控制流程的基础上,分析控制序控制流程的基础上,分析控制构造的环路复杂性,导出基本可构造的环路复杂性,导出基本可执行路径集合,从而设计测试用执行路径集合,从而设计测试用例。例。1818覆盖测试覆盖测试p测试覆盖率测试覆盖率p逻辑覆盖法逻辑覆盖法p测试覆盖准则测试覆盖准则1919测试覆盖率测试覆盖率测试覆盖率测试覆盖率:用于确定测试所执行到的覆盖项的百分比。:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。语句、分支、条件等。测试覆盖
14、率可以表示出测试的充分性,在测试分析报告中测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。但可以作为量化指标的依据,测试覆盖率越高效果越好。但覆盖率不是目标,只是一种手段。覆盖率不是目标,只是一种手段。 测试覆盖率包括功能点覆盖率和结构覆盖率:测试覆盖率包括功能点覆盖率和结构覆盖率:功能点覆盖率功能点覆盖率大致用于表示软件已经实现的功能与软件需大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。要实现的功能之间的比例关系。结构覆盖率结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率
15、等等。路径覆盖率等等。2020白盒测试白盒测试1 1:逻辑覆盖法:逻辑覆盖法根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定覆盖、条件覆盖、判定覆盖、条件覆盖、判定/ /条件覆盖、组合覆盖和路径覆盖。条件覆盖、组合覆盖和路径覆盖。语句覆盖语句覆盖:选择足够多的测试用例,使得程序中的每个可:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。执行语句至少执行一次。判定覆盖:判定覆盖:通过执行足够的测试用例,使得程序中的每个通过执行足够的测试用例,使得程序中的每个判定至少都获得一次判定至少都获得一次“真真”值和值和“假假”值,值, 也就
16、是使程序也就是使程序中的每个取中的每个取“真真”分支和取分支和取“假假”分支至少均经历一次,分支至少均经历一次,也称为也称为“分支覆盖分支覆盖” ”。条件覆盖:条件覆盖:设计足够多的测试用例,使得程序中每个判定设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真包含的每个条件的可能取值(真/ /假)都至少满足一次。假)都至少满足一次。2121逻辑覆盖法逻辑覆盖法(续)(续)判定判定/ /条件覆盖:条件覆盖:设计足够多的测试用例,使得程序中每个判设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真定包含的每个条件的所有情况(真/ /假)至少出现一次,并且假)至少出
17、现一次,并且每个判定本身的判定结果(真每个判定本身的判定结果(真/ /假)也至少出现一次。假)也至少出现一次。 满足判定满足判定/ /条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。条件覆盖。组合覆盖:组合覆盖:通过执行足够的测试用例,使得程序中每个判定通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。的所有可能的条件取值组合都至少出现一次。 满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定和判定/ /条件覆盖。条件覆盖。路径覆盖:路径覆盖:设计足够多的测试用例,要求
18、覆盖程序中所有可设计足够多的测试用例,要求覆盖程序中所有可能的路径。能的路径。 2222逻辑覆盖法逻辑覆盖法(续)(续)组合覆盖判定/条件覆盖判定覆盖条件覆盖语句覆盖2323逻辑覆盖法的例子逻辑覆盖法的例子void DoWork (int x,int y,int z)void DoWork (int x,int y,int z) int k=0,j=0; int k=0,j=0; if ( (x3)&(z3)&(z5) ) if ( (x=4)|(y5) ) j=x j=x* *y+10; y+10; / /语句块语句块2 2 j=j%3; /j=j%3; /语句块语句块3 3 2424逻辑覆
19、盖法的例子逻辑覆盖法的例子X3 & z5执行语句块执行语句块3FFTabdceT2525逻辑覆盖法的例子:语句覆盖逻辑覆盖法的例子:语句覆盖1 1要实现要实现DoWorkDoWork函数的语句覆盖,只需设计一个测试用例函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的所有可执行语句。就可以覆盖程序中的所有可执行语句。测试用例输入为:测试用例输入为: x=4x=4、y=5y=5、z=5 z=5 程序执行的路径是:程序执行的路径是:abdabd分析:分析: 语句覆盖可以保证程序中的每个语句都得到执行,但语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中发现不了判定中逻辑运算的错误逻辑
20、运算的错误,即它并不是一种充分的,即它并不是一种充分的检验方法。例如在第一个判定检验方法。例如在第一个判定(x3)&(z3)&(z3 & z5执行语句块执行语句块3FFTabdceT2828逻辑覆盖法的例子:判定覆盖逻辑覆盖法的例子:判定覆盖2 2要实现要实现DoWorkDoWork函数的判定覆盖,需要设计两个测试用例。函数的判定覆盖,需要设计两个测试用例。测试用例的输入为:测试用例的输入为: x=4x=4、y=5y=5、z=5z=5;x=2x=2、y=5y=5、z=5z=5程序执行的路径分别是:程序执行的路径分别是:abdabd;aceace分析:分析: 上述两个测试用例不仅满足了判定覆盖,
21、同时还做到上述两个测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误。例如把第二个判定但仍然无法确定判定内部条件的错误。例如把第二个判定中的条件中的条件y5y5错误写为错误写为y5y3)&(z3)&(z3 x3 取真值记为取真值记为T1T1,取假值记为取假值记为- -T1T1 条件条件z10 z5) )( (x=4)|(y5) ): 条件条件x=4 x=4 取真值记为取真值记为T3T3,取假值记为取假值记为- -T3 T3 条件条件y5 y5 取真值记为取真值记为T4T4,取
22、假值记为取假值记为- -T4T43232逻辑覆盖法的例子:条件覆盖逻辑覆盖法的例子:条件覆盖(续)(续)根据条件覆盖的基本思想,要使上述根据条件覆盖的基本思想,要使上述4 4个条件可能产生的个条件可能产生的8 8种情况至少满足一次,设计测试用例如下:种情况至少满足一次,设计测试用例如下: 测试用例 执行路径 覆盖条件 覆盖分支 x=4、y=6、z=5 abd T1、T2、T3、T4 bd x=2、y=5、 z=15 ace -T1、-T2、 -T3、-T4 cen分析:上面这组测试用例不但覆盖了4个条件的全部8种情况,而且将两个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条件覆盖和判
23、定覆盖。3333逻辑覆盖法的例子逻辑覆盖法的例子X3 & z5执行语句块执行语句块3FFTabdceT3434逻辑覆盖法的例子:条件覆盖逻辑覆盖法的例子:条件覆盖(续)(续)说明:虽然前面的一组测试用例同时达到了条件覆盖和判说明:虽然前面的一组测试用例同时达到了条件覆盖和判定覆盖,但是,定覆盖,但是,并不是说满足条件覆盖就一定能满足判定并不是说满足条件覆盖就一定能满足判定覆盖覆盖。如果设计了下表中的这组测试用例,则虽然满足了。如果设计了下表中的这组测试用例,则虽然满足了条件覆盖,但只是覆盖了程序中第一个判定的取假分支条件覆盖,但只是覆盖了程序中第一个判定的取假分支c c 和第二个判定的取真分支
24、和第二个判定的取真分支d d,不满足判定覆盖的要求。,不满足判定覆盖的要求。 测试用例 执行路径 覆盖条件覆盖分支x=2、y=6、z=5 acd-T1、T2、 -T3、T4 cdx=4、y=5、z=15 acdT1、-T2、 T3、-T4 cd3535条件覆盖的优缺点条件覆盖的优缺点优点:优点:显然条件覆盖比判定覆盖,增加了对符合判显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。定情况的测试,增加了测试路径。缺点:缺点:要达到条件覆盖,需要足够多的测试用例,要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保但条件覆盖并不能保证判定覆盖。条件覆
25、盖只能保证每个条件至少有一次为真,而不考虑所有的判定证每个条件至少有一次为真,而不考虑所有的判定结果。结果。3636判定覆盖与条件覆盖的区别判定覆盖与条件覆盖的区别u前者把判定看成一个整体,后者则着眼于其中的一前者把判定看成一个整体,后者则着眼于其中的一个条件。当一个判定只含一个条件时,判定覆盖也就是个条件。当一个判定只含一个条件时,判定覆盖也就是条件覆盖。条件覆盖。u但如果一个判定含有一个以上的条件(复合条件),但如果一个判定含有一个以上的条件(复合条件),采用判定覆盖又可能出现如下所述的漏洞,即判定中有采用判定覆盖又可能出现如下所述的漏洞,即判定中有些条件得到测试,另一些条件却被忽略,从而
26、掩盖程序些条件得到测试,另一些条件却被忽略,从而掩盖程序的错误。的错误。3737逻辑覆盖法的例子:判定逻辑覆盖法的例子:判定/ /条件覆盖条件覆盖4 4判定判定/ /条件覆盖实际上是将判定覆盖和条件覆盖结合起来的条件覆盖实际上是将判定覆盖和条件覆盖结合起来的一种方法,即:设计足够的测试用例,使得判定中每个条一种方法,即:设计足够的测试用例,使得判定中每个条件的所有可能取值至少满足一次,同时每个判定的可能结件的所有可能取值至少满足一次,同时每个判定的可能结果也至少出现一次。果也至少出现一次。根据判定根据判定/ /条件覆盖的基本思想,只需设计以下两个测试用条件覆盖的基本思想,只需设计以下两个测试用
27、例便可以覆盖例便可以覆盖4 4个条件的个条件的8 8种取值以及种取值以及4 4个判定分支。个判定分支。 测试用例 执行路径 覆盖条件覆盖分支x=4、y=6、z=5 abdT1、T2、 T3、T4 bdx=2、y=5、z=15ace-T1、-T2、 -T3、-T4 ce3838逻辑覆盖法的例子:判定逻辑覆盖法的例子:判定/ /条件覆盖条件覆盖 (续)(续)分析:从表面上看,判定分析:从表面上看,判定/ /条件覆盖测试了各个判定中的所条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件的有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会
28、被其它条件所逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,判定掩盖。因此,判定/ /条件覆盖也不一定能够完全检查出条件覆盖也不一定能够完全检查出逻辑逻辑表达式中的错误表达式中的错误。 例如:对于第一个判定例如:对于第一个判定( (x3)&(z3)&(z3x3和和z10z3x3为假,则编译器将不再检查为假,则编译器将不再检查z10z5)(x=4)|(y5)来说,若条件来说,若条件x=4x=4满足,就认为该判定为真,这时将不会满足,就认为该判定为真,这时将不会再检查再检查y5y5,那么同样也无法发现这个条件中的错误。,那么同样也无法发现这个条件中的错误。3939判定判定/ /条件覆
29、盖的优缺点条件覆盖的优缺点优点:优点:判定判定/ /条件覆盖满足判定覆盖准则和条件覆盖条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。准则,弥补了二者的不足。缺点:缺点:判定判定/ /条件覆盖准则的缺点是未考虑条件的组条件覆盖准则的缺点是未考虑条件的组合情况。合情况。4040逻辑覆盖法的例子:组合覆盖逻辑覆盖法的例子:组合覆盖5 5组合覆盖的目的是要使设计的测试用例能覆盖每一个判定组合覆盖的目的是要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。的所有可能的条件取值组合。对对DoWorkDoWork函数中的各个判定的条件取值组合加以标记:函数中的各个判定的条件取值组合加以标
30、记: 1 1、x3, z3, z3, z=10 x3, z=10 记做记做T1 -T2T1 -T2,第一个判定的取假分支第一个判定的取假分支 3 3、x=3, z10 x=3, z10 记做记做- -T1 T2T1 T2,第一个判定的取假分支第一个判定的取假分支 4 4、x=10 x=10 记做记做- -T1 -T2T1 -T2,第一个判定的取假分支第一个判定的取假分支 5 5、x=4, y5 x=4, y5 记做记做T3 T4T3 T4,第二个判定的取真分支第二个判定的取真分支 6 6、x=4, y=5 x=4, y5 x!=4, y5 记做记做- -T3 T4T3 T4,第二个判定的取真分
31、支第二个判定的取真分支 8 8、x!=4, y=5 x!=4, y3 & z5执行语句块执行语句块3FFTabdceT4444逻辑覆盖法的例子:路径覆盖逻辑覆盖法的例子:路径覆盖6 6前面提到的前面提到的5 5种逻辑覆盖都未涉及到路径的覆盖。事实上,种逻辑覆盖都未涉及到路径的覆盖。事实上,只有当程序中的每一条路径都受到了检验,才能使程序受到只有当程序中的每一条路径都受到了检验,才能使程序受到全面检验。路径覆盖的目的就是要使设计的测试用例能覆盖全面检验。路径覆盖的目的就是要使设计的测试用例能覆盖被测程序中被测程序中所有可能的路径所有可能的路径。根据路径覆盖的基本思想,在满足组合覆盖的测试用例中修
32、根据路径覆盖的基本思想,在满足组合覆盖的测试用例中修改其中一个测试用例,则可以实现路径覆盖:改其中一个测试用例,则可以实现路径覆盖:测试用例 执行路径 覆盖条件 x=4、y=6、z=5 abdT1、T2、T3、T4 x=4、y=5、z=15 acdT1、-T2、T3、-T4 x=2、y=5、z=15 ace-T1、-T2、-T3、-T4 x=5、y=5、z=5 abeT1、T2、-T3、-T4 4545逻辑覆盖法的例子:路径覆盖逻辑覆盖法的例子:路径覆盖(续)(续)分析:分析:虽然前面一组测试用例满足了路径覆盖,但并没有虽然前面一组测试用例满足了路径覆盖,但并没有覆盖程序中所有的条件组合(覆盖
33、程序中所有的条件组合(丢失了组合丢失了组合3 3和和7 7),即满足),即满足路径覆盖的测试用例并不一定满足组合覆盖。路径覆盖的测试用例并不一定满足组合覆盖。说明:说明:对于比较简单的小程序,实现路径覆盖是可能做到的。但对于比较简单的小程序,实现路径覆盖是可能做到的。但如果程序中出现较多判断和较多循环,可能的路径数目将如果程序中出现较多判断和较多循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。会急剧增长,要在测试中覆盖所有的路径是无法实现的。为了解决这个难题,只有把覆盖路径数量压缩到一定的限为了解决这个难题,只有把覆盖路径数量压缩到一定的限度内,如程序中的循环体只执行一
34、次。度内,如程序中的循环体只执行一次。在实际测试中,即使对于路径数很有限的程序已经做到路在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法进行补充。其他测试方法进行补充。4646习题习题为以下流程图所示的程序段设计一组测试用例,要求分别为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定满足语句覆盖、判定覆盖、条件覆盖、判定/ /条件覆盖、组条件覆盖、组合覆盖和路径覆盖。合覆盖和路径覆盖。X8 AND Y5X0 OR Y0执行语句块执行语句块1执行
35、语句块执行语句块2NYNYX16 OR Y10执行语句块执行语句块3NY4747Q & AQ & A4848白盒测试白盒测试2 2:基本路径测试法:基本路径测试法路径测试就是从一个程序的入口开始,执行所经历的各个路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。从广义的角度讲,任何有关路径分析的语句的完整过程。从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。测试都可以被称为路径测试。完成路径测试的理想情况是做到路径覆盖,但对于复杂性完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是大的程序要做到所有路径覆盖(测试所有
36、可执行路径)是不可能的。不可能的。在不能做到所有路径覆盖的前提下,如果某一程序的每一在不能做到所有路径覆盖的前提下,如果某一程序的每一个个独立路径独立路径都被测试过,那么可以认为程序中的每个语句都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。通常所说的基本路径测试方法。 4949基本路径测试法基本路径测试法基本路径测试法是在基本路径测试法是在程序控制流图程序控制流图的基础上,通过分析控制构的基础上,通过分析控制构造的造的环路复杂性环路复杂性,导出基本可执行路径集合,从而设计测
37、试用,导出基本可执行路径集合,从而设计测试用例的方法。例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。执行一次。5050基本路径测试方法的基本路径测试方法的4 4个步骤个步骤(1 1)画出程序的控制流图。)画出程序的控制流图。(2 2)计算程序的环形复杂度,导出程序基本路径集中的独立)计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。所必须的测试用例数目的上界。(3 3)导出基本路径集,确定
38、程序的独立路径。)导出基本路径集,确定程序的独立路径。(4 4)根据()根据(3 3)中的独立路径,设计测试用例的输入数据和)中的独立路径,设计测试用例的输入数据和预期输出。预期输出。5151控制流图控制流图控制流图(简称流图)是对程序流程图进行简化后得到的,控制流图(简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。它可以更加突出的表示程序控制流的结构。控制流图中包括两种图形符号:节点和控制流线。控制流图中包括两种图形符号:节点和控制流线。节点节点由带标号的圆圈表示,可代表一个或多个语句、一个处由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判
39、定框(假设不包含复合条件)。理框序列和一个条件判定框(假设不包含复合条件)。控制流线控制流线由带箭头的弧或线表示,可称为边。它代表程序中由带箭头的弧或线表示,可称为边。它代表程序中的控制流。的控制流。对于对于复合条件复合条件,则可将其分解为多个单个条件,并映射成控,则可将其分解为多个单个条件,并映射成控制流图。制流图。5252常见结构的控制流图常见结构的控制流图顺序结构IF选择结构WHILE重复结构UNTIL重复结构CASE多分支结构其中,包含条件的节点被称为判定节点判定节点(也叫谓词节点),由判定节点发出的边必须终止于某一个节点,由边和节点所限定的范围被称为区域区域。5353MCCABE软件
40、质量度量方法创始人Thomas J McCabe先生是始创于1977年的美国McCabe公司的创始人,他同时也是一位数学家。McCabe先生在业界第一个提出了软件度量方法,在如何持续改进软件质量方面提出了处于领导地位的方法论,从而享誉世界。McCabe先生及他的团队先后成功的为美国国防部、NASA、波音等核心部门完成了超过25亿行关键软件代码的测试,是软件质量度量、版本控制和测试管理的业界权威。5454环形复杂度环形复杂度环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。提供定量尺度的软件度量。环形复杂度的应用环形复杂度
41、的应用可以将环形复杂度用于基本路径方可以将环形复杂度用于基本路径方法,它可以提供:程序基本集的独立路径数量;确保所有法,它可以提供:程序基本集的独立路径数量;确保所有语句至少执行一次的测试数量的上界。语句至少执行一次的测试数量的上界。独立路径独立路径是指程序中至少引入了一个新的处理语句集合或是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。采用流图的术语,即独立路径必一个新条件的程序通路。采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的须至少包含一条在本次定义路径之前不曾用过的边边。测试可以被设计为基本路径集的执行过程,但基本路径集测试可以被设计为基本路径集
42、的执行过程,但基本路径集通常并不唯一。通常并不唯一。 5555计算环形复杂度的方法计算环形复杂度的方法环形复杂度以图论为基础,为我们提供了非常有用的软件环形复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环形复杂度:度量。可用如下三种方法之一来计算环形复杂度:1.1.控制流图中控制流图中区域的数量区域的数量对应于环形复杂度。对应于环形复杂度。2.2.给定控制流图给定控制流图G G的环形复杂度的环形复杂度V(G)V(G),定义为定义为 V(G) = E-N+2 V(G) = E-N+2 其中,其中,E E是控制流图中边的数量,是控制流图中边的数量,NN是控制流图中的
43、节点是控制流图中的节点数量。数量。3.3.给定控制流图给定控制流图G G的环形复杂度的环形复杂度V(G)V(G),也可定义为也可定义为 V(G) = P+1 V(G) = P+1 其中,其中,P P是控制流图是控制流图G G中判定节点的数量。中判定节点的数量。5656图矩阵图矩阵导出控制流图和决定基本测试路径的过程均需要机械化,导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为为了开发辅助基本路径测试的软件工具,称为图形矩阵图形矩阵(graph matrix)(graph matrix)的数据结构很有用。的数据结构很有用。图矩阵是控制流图的矩阵表示形式。
44、图图矩阵是控制流图的矩阵表示形式。图矩阵是一个方形矩矩阵是一个方形矩阵,阵,其维数等于控制流图的节点数。其维数等于控制流图的节点数。矩阵中的矩阵中的每列和每行每列和每行都对应于标识的节点,矩阵元素对应于节点间的边。都对应于标识的节点,矩阵元素对应于节点间的边。通常,控制流图中的结点用数字标识,边则用字母标识。通常,控制流图中的结点用数字标识,边则用字母标识。如果在控制流图中从第如果在控制流图中从第 i i 个结点到第个结点到第 j j 个结点有一个标识个结点有一个标识为为 x x 的边相连接,则在对应图矩阵的第的边相连接,则在对应图矩阵的第 i i 行第行第 j j 列有一个列有一个非空的元素
45、非空的元素 x x 。5757图矩阵的连接权值图矩阵的连接权值对每个矩阵项加入连接权值对每个矩阵项加入连接权值(link weight)(link weight),图矩阵就可以用于在测试中评估程序的控制结图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是简单情况下,连接权值是 1(1(存在连接存在连接) )或或0(0(不存不存在连接在连接) ),但是,连接权值可以赋予更有趣的属,但是,连接权值可以赋予更有趣的属性:性:执行连接执行连接( (边边) )的概率。的概率。穿越连接的处理时间。穿越连接的处理时间
46、。穿越连接时所需的内存。穿越连接时所需的内存。穿越连接时所需的穿越连接时所需的资源资源。5858基本路径测试方法的例子基本路径测试方法的例子1 1void Sort ( int iRecordNum, int iType )void Sort ( int iRecordNum, int iType )1 1 2 int x=0;2 int x=0;3 int y=0;3 int y=0;4 while ( iRecordNum- 0 )4 while ( iRecordNum- 0 )5 5 6 6 If ( iType=0 ) If ( iType=0 )7 7x=y+2;x=y+2;8 e
47、lse8 else9 9 If ( iType=1 ) If ( iType=1 )10 x=y+10;10 x=y+10;11 else11 else12 x=y+20;12 x=y+20;13 13 14 14 5959基本路径测试方法的例子基本路径测试方法的例子1 1(续)(续)画出控制流图:画出控制流图: 如右图所示如右图所示计算环形复杂度:计算环形复杂度: 1010(条边)(条边)- 8- 8(个节点)(个节点)+ 2 = 4+ 2 = 4导出独立路径(用语句编号表示)导出独立路径(用语句编号表示) 路径路径1 1:414414 路径路径2 2:4671446714 路径路径3 3:
48、46910134144691013414 路径路径4 4:469121341446912134144679101213146060基本路径测试方法的例子基本路径测试方法的例子1 1:设计测试用例设计测试用例输入数据预期输出测试用例1irecordnum = 0itype = 0 x = 0y = 0测试用例2irecordnum = 1itype = 0 x = 2y = 0测试用例3irecordnum = 1itype = 1x = 10y = 0测试用例4irecordnum = 1itype = 2x = 20y = 06161基本路径测试方法的例子基本路径测试方法的例子1 1:图矩阵图矩阵6262连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。复合逻辑复合逻辑例如:例如:1 if a or b1 if a or b2 x2 x3 else3 else4 y4 y6363如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 度森林资源使用权转让合同
- 装修工程劳动合同合同样本
- 区域合作分销合同协议
- 合同履行完毕确认声明书
- 黄山风景区国内旅游合同
- 私人借款合同样本及还款细则
- 境外就业派遣合同
- 商业综合体停车位租赁合同范本
- 商标纠纷和解合同细则
- 木材加工企业的品牌形象宣传与公关活动考核试卷
- 国际商法 吴建斌课件 思考题答案
- 高等仪器分析第1章-绪论课件
- 怎样听课、评课课件
- 国家开放大学《现代汉语专题》章节自测参考答案
- 药事管理与法规考试题库及答案(可下载)
- 污水深度处理及中水回用工程施工方案
- 群体伤应急预案及抢救流程
- 2021年熔化焊与热切割基础知识课件
- 秒的认识 完整版PPT
- 创新药产业链研究培训框架
- (完整PPT)半导体物理与器件物理课件
评论
0/150
提交评论