第9章 路径测试_第1页
第9章 路径测试_第2页
第9章 路径测试_第3页
第9章 路径测试_第4页
第9章 路径测试_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三部分结构性测试结构性测试又称白盒测试、逻辑驱动测试或基于程序的测试。基于被测程序的源代码,根据程序实现来设计测试用例,支持严格定义、数学分析和精确度量。通过在程序的不同点检查程序的状态,确定实际的状态是否与预期的状态一致。白盒测试白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。白盒测试白盒测试要求对被测程序的结构特性做到一定程度的覆盖,并以软件中某类成分是否都已经得到测试为准则来判断软件测试的充分性,也称为基于覆盖的测试技术。白盒测试主要检查内容:对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;检查内部数据结构以确保其有效性。白盒测试白盒测试的实施步骤:1.测试计划阶段:根据需求说明书,制定测试进度。2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。3.测试执行阶段:输入测试用例,得到测试结果。4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。白盒测试白盒测试的方法:总体上分为静态方法和动态方法两大类。静态分析:是一种不通过执行程序,有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。审查审查是正式、严格、具有深度的技术评审,以便尽可能准确地确定问题之所在。审查过程的目的:在软件开发过程中尽可能早地发现问题。确保对重要部分达成一致意见。审查的角色一次审查一般需要5人至7人,这些角色是:主审员:协调本次审查并主持讨论。责任人:负责被审查的产品。讲解员:在审查会上讲解被审查的产品。审查员:审查产品。记录员:记录在审查会议上讨论的问题。经理:责任人的管理者。审查对象选择要审查的代码模块的准则:对于正确操作产品起关键作用的模块。复杂度较高的模块。与过去发生错误率较高的模块功能类似的模块。相对较新的或缺乏经验的软件程序师编写的模块。审查标准大多数计算机语言和信息技术的国家和国际标准可以通过以下途径获得:国际工程协议(IEC):国际标准化组织(ISO):www.iso.ch信息技术标准国家委员会(NCITS):计算机械联合会(ACM):电子电气工程学会(IEEE):通用代码审查清单数据引用错误;数据声明错误;计算错误;比较错误;控制流程错误;子程序参数错误;输入/输出错误;其他检查。数据引用错误是否引用了未初始化的变量?数组和字符串的下标是整数值吗?是否在应该使用常量的地方使用了变量?变量是否被赋予不同类型的值?为引用的指针分配内存了吗?一个数据结构是否在多个函数或者子程序中引用,在每一个引用中明确定义结构了吗?数据声明错误所有变量都赋予正确的长度和类型了吗?变量是否在声明的同时进行了初始化?存在声明过、但从未引用或者只引用过一次的变量吗?在特定模块中所有变量都显示声明了吗?计算错误计算中是否使用了不同数据类型的变量?计算中是否了解和考虑到编译器对类型或长度不一致的变量的转换规则?在数值计算过程中是否可能出现溢出?除数/模是否可能为零?变量的值是否超过有意义的范围?对于包含多个操作数的表达式,求值的次序是否混乱,运算优先级对吗?比较错误比较得正确吗?存在分数或者浮点值之间的比较吗?如果有,精确问题会影响比较吗?每一个逻辑表达式都正确表达了吗?逻辑计算如期进行了吗?求值次序有疑问吗?逻辑表达式的操作是逻辑值吗?控制流程错误如果程序包含begin…end和do…while等语句组,end是否对应?程序、模块、子程序和循环能否终止?可能存在永远不停的循环吗?循环可能从不执行吗?子程序参数错误子程序接受的参数类型和大小与调用代码发送的匹配吗?如果子程序有多个入口点,引用的参数是否与当前入口点没有关联?常量是否当作形参传递,意外在子程序中改动?输入/输出错误软件是否严格遵守外部设备读写数据的专用格式?文件或者外部不存在或者未准备好的错误情况有处理吗?软件是否处理外部设备未连接、不可用,或者读写过程中存储空间占满等情况?白盒测试动态分析:主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。白盒测试白盒测试的优缺点优点迫使测试人员去仔细思考软件的实现

可以检测代码中的每条分支和路径

揭示隐藏在代码中的错误

对代码的测试比较彻底

最优化缺点昂贵

无法检测代码中遗漏的路径和数据敏感性错误

不验证规格的正确性结构性测试结构性测试的主要方法:路径测试(逻辑覆盖/控制流测试)数据流测试逻辑覆盖逻辑覆盖六种覆盖测试方法语句覆盖判定覆盖条件覆盖判定/条件覆盖组合覆盖路径覆盖语句覆盖(面)语句覆盖:是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。语句覆盖用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)

X

Y

路径

1

50

50

OBDE

2

90

70

OBCE语句覆盖缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。判定覆盖(线)主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。判定覆盖用例设计

X

Y

路径

1

90

90

OAE

2

50

50

OBDE

3

90

70

OBCE判定覆盖优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。条件覆盖(点)又叫原子谓词覆盖主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。用例设计?条件覆盖优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。判定/条件覆盖(点线结合)又叫分支-条件覆盖或分支-谓词覆盖主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。判定/条件覆盖

用例设计:

X

Y

路径

1

90

90

OAE

2

50

50

OBDE

3

90

70

OBCE

4

70

90

OBCE判定/条件覆盖优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。缺点:未考虑条件的组合情况。尽管看上去所有条件的所有结果似乎都执行到了,但由于某些特定的条件会屏蔽掉其他的条件,通常并不能全部都执行到。例如:该准则并不一定会发现逻辑表达式中的错误(与、或)。

组合覆盖(点线组合)又叫条件组合覆盖或复合谓词覆盖主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。组合覆盖用例设计:

X

Y

路径

1

90

90

OAE

2

90

70

OBCE

3

90

30

OBDE

4

70

90

OBCE

5

30

90

OBDE

6

70

70

OBDE

7

50

50

OBDE组合覆盖优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。缺点:线性地增加了测试用例的数量。路径覆盖主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。路径覆盖用例设计:XY路径19090OAE25050OBDE39070OBCE47090OBCE路径覆盖优点:这种测试方法可以对程序进行彻底的测试,是上面所给出的测试技术的强化。路径覆盖准则包含了判定覆盖准则,但与条件覆盖、判定/条件覆盖和组合覆盖之间没有包含关系。缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:

If(!A)B++;

If(!C)D--;这两个语句实际只包括了2条执行路径,即A和C为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。练习1求解一元二次方程程序如下:main(){floata,b,c,x1,x2,mid;scanf(“%f,%f,%f”,&a,&b,&c);if(a!=0){mid=b*b-4*a*c;if(mid>0){x1=(-b+sqrt(mid))/(2*a);x2=(-b-sqrt(mid))/(2*a);printf(“tworealroots\n”);}else{if(mid==0){x1=-b/2*a;printf(“onerealroot\n”);}else{x1=-b/(2*a);x2=sqrt(-mid)/(2*a);printf(“twocomplexroots\n”);}}printf(“x1=%f,x2=%f\n”,x1,x2);}}1、用语句覆盖准则对该程序设计测试用例;2、用分支覆盖准则对该程序设计测试用例;练习2程序如下:

main(){inti,j,k,match;scanf(“%d%d%d,&i,&j,&k);if(i<=0‖j<=0‖k<=0‖i+j<=k‖i+k<=j‖j+k<=i)match=4;elseif(i==j&&i==k&&j==k)match=1;elseif(i==j‖i==k‖j==k)match=2;elsematch=3;printf(“match=%d\n”,match);}练习2(续)用条件覆盖准则对该程序设计测试用例;用分支-条件覆盖准则对该程序设计测试用例;用组合覆盖准则对该程序设计测试用例;第9章路径测试DD-路径测试基路径测试程序图定义:有向图,图中节点表示语句片段,边表示控制流。(主要是命令式程序设计语言程序;语句片段可以是整个语句,也可以是语句的一部分。)如果i和j是程序图中的节点,从节点i到节点j存在一条边,当且仅当对应节点j的语句片段可以在对应节点i的语句片段之后立即执行。程序图程序和程序图的对应对于给定程序,可以使用多种不同的程序图,所有这些程序图都可以简化为惟一的DD-路径图。程序的执行对应于程序图中源节点到汇节点的路径。图9-1DD-路径定义:DD-路径是程序图中的一条链,使得满足以下五种情况:由一个节点组成,内度=0;由一个节点组成,外度=0;由一个节点组成,内度>=2或外度>=2;由一个节点组成,内度=1且外度=1;长度>=1的最大链。DD-路径图定义:是有向图,其中节点表示程序图的DD-路径,边表示连续DD-路径之间的控制流。测试覆盖指标是度量测试用例覆盖(或执行)某个程序扩展的工具。告诉我们要测试什么。表9-2基于指标的测试语句与判断测试:找出一组测试用例,使得程序图中的所有节点至少覆盖一次。DD-路径测试:每条DD-路径都被覆盖。DD-路径的依赖对偶:数据流测试(考虑DD-路径对偶间的依赖关系)多条件覆盖:判断中有多个条件的情况,条件的组合出现结果覆盖。循环覆盖:测试两种分支可能。测试覆盖分析器测试覆盖工具对单元测试具有重要的意义。存在不同类型的覆盖度量,但是绝大多数的工具会关注行覆盖,也叫做语句覆盖。此外,有些工具会报告分支覆盖。通过用一个测试工具执行代码库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论