
第06章软件工程的测试教学提纲.ppt
76页软件工程第六章软件项目的测试软件测试基本概念1软件测试计划与测试分析报告5软件测试的方法2软件测试的步骤3程序调试46.1 软件测试基本概念 测试的目的是确保软件的质量,尽量找出软件错误并加以纠正,而不是证明软件没有错v 1963年美国飞往火星的火箭爆炸,原因是FORTRAN程序:v DO 5 I=1,3 误写为:DO 5 I=1. 3 损失1000万美元v 1967年苏联“联盟一号”宇宙飞船返回时因忽略一个小数点,在进入大气层时打不开降落伞而烧毁6.1 软件测试基本概念v二、测试的概念v1、软件测试 软件测试是对软件计划、软件设计、软件编码进行查错和纠错的活动(包括代码执行活动与人工活动)测试的目的是找出软件设计开发全周期中各个阶段的错误,以便分析错误的性质与位置而加以纠正纠正过程可能涉及到改正或者重新设计相关的文档活动找错活动称为测试,纠错活动称为调试6.1 软件测试基本概念v2、程序测试 程序测试是早已流行的概念它是对编码阶段的语法错、语义错、运行错进行查找的编码执行活动找出编码中错误的代码执行活动称程序测试纠正编码中的错误的执行活动称程序调试通过查找编码错与纠正编码错来保证算法的正确实现。
v 软件测试与调试覆盖软件生存周期的整个阶段,而程序测试与调试则仅限于编码阶段,软件测试中的单元测试与程序测试十分相似,不同在于,单元测试还要测试模块间的接口,并要设计与接口相关的模块6.1 软件测试基本概念v3、软件确认与程序确认v软件确认是广义上的软件测试,它是企图证明程序软件在给定的外部环境中的逻辑正确性的一系列活动和过程,指需求说明书的确认,程序的确认程序确认又分成静态确认与动态确认静态确认包括,正确性证明,人工分析,静态分析动态分析包括动态确认与动态测试6.1 软件测试基本概念v 静态分析是不执行程序本身,分析程序正文可能导致错误的异常情况可以人工的进行分析,也可以用测试工具静态分析程序来进行,被测试程序的正文做为输入,经静态分析程序分析得出分析结果静态分析包括结构检查,流图分析,符号执行v 动态分析是执行被测程序,从执行结果分析程序可能出现的错误可以人工设计程序测试用例,也可以由测试工具动态分析程序来做检测与分析动态测试包括功能测试和结构测试动态测试的内容包括:单元测试,也称逻辑测试,模块测试,功能测试组装测试也称集成测试,综合测试,或结构测试,子系统测试系统测试是软硬件或子系统的组装测试。
6.1 软件测试基本概念v4、各种软件错误的出现比例v 功能错,占整个软件错误27,是需求分析设计不完整而引起的v 系统错,占整个软件错误16,是总体设计错误而引起v 数据错,占整个软件错误10,由编码错误引起的v 编码错,占整个软件错误4,程序员编码错误引起的v 其它错,占整个软件错误16,文档错和硬件错所引起6.1 软件测试基本概念n 三、软件测试的目标n测试是为了发现程序中的错误而执行程序的过程;n好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;n成功的测试是发现了至今为止尚未发现的错误的测试6.1 软件测试基本概念v四、软件测试的原则v 1、测试前要认定被测试软件有错,不要认为软件设有错v 2、要预先确定被测试软件的测试结果v 3、要尽量避免测试自己编写的程序v 4、测试要兼顾合理输入与不合理输入数据v 5、测试要以软件需求规格说明书为标准v 6、测试是相对的,不能穷尽所有的测试,要据人力物力安排测试,并选择好测试用例与测试方法v 7、充分注意测试中的群集现象:测试中发现的80%的错误可能来自于20%的程序代码6.1 软件测试基本概念v四、软件测试的原则n8、严格执行测试计划,尽量避免测试的随意性,从工程的角度理解软件测试,它是有组织、有计划、有步骤的活动n9、妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便n10、应当把“尽早地和不断地进行软件测试”作为软件测试人的座右铭6.2 软件测试的方法v6.2.1 软件测试方法的分类v 软件测试方法分为两类:静态分析、动态测试。
v 一、静态分析技术v 不执行被测软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流程分析、符号执行来找出软件错误v 二、动态测试技术v 当把程序作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系6.2 软件测试的方法v动态测试的算法有:选取定义域中的有效值,或定义域外无效值对已选取值决定预期的结果用选取值执行程序观察程序行为,记录执行结果将的结果与的结果相比较,不吻合则程序有错6.2 软件测试的方法v 三、黑盒测试与白盒测试v 动态测试既可以采用白盒法对模块进行逻辑结构的测试,又可以用黑盒法做功能结枸的测试,接口的测试,它们都是以执行程序并分析执行结果来查错的v 1、黑盒测试法v 黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性黑盒测试又称为功能测试6.2 软件测试的方法v 2、白盒测试法v 白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。
这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,白盒测试又称为结构测试 使用白盒测试法,为了做到穷尽测试,程序中每条可能的通路至少都应该执行一次,但即使测试很小的程序,通常也不能做到这一点一段程序对嵌套的语句循环执行20次,而循环体中有5条可能的路径,则在这段程序中共有520条可能的通路,即使每条通路只执行一次,也是不可能的,因此,要注意,不可能进行穷尽测试,也说明,测试不可能发现程序中的所有错误6.2 软件测试的方法6.2 软件测试的方法v6.2.2 测试方案设计v 一、白盒法v 白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖弱强6.2 软件测试的方法 语句覆盖: 选择足够的测试用例,使得程序中每个语句至少都能被执行一次 判定覆盖: 执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值 条件覆盖:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果 判定/条件覆盖: 执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果 条件组合覆盖: 执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。
6.2 软件测试的方法v白盒测试法步骤: 选择逻辑覆盖标准 按照覆盖标准列出所有情况 选择确定测试用例 验证分析运行结果与预期结果v 例:用白盒法测试以下程序段:v Procedure(VAR A,B,X:REAL);v BEGINv IF (A1) AND (B=0) v THEN X:=X/A ;v IF (A=2) OR (X1) v THEN X:=X+1v END;满足语句覆盖的情况:执行路径:ace用例格式:输入(A,B,X),输出(A,B,X)选择用例:(2,0,4),(2,0,3)1、语句覆盖使得程序中每个语句至少都能被执行一次6.2 软件测试的方法A1ANDB=0X=X/AA=2OR X1X=X+1abcdeYNYN覆盖情况:应执行路径ace abd或: acd abe选择用例(其一): (2,0,4),(2,0,3) ace (1,1,1),(1,1,1) abd (2,1,1),(2,1,2) abe (3,0,3),(3,1,1) acd2、判定覆盖使得程序中每个判定至少为TRUE 或FALSE各一次6.2 软件测试的方法A1ANDB=0X=X/AA=2OR X1X=X+1abcdeYNYN 3、条件覆盖 使得判定中的每个条件获得各种可能的结果。
应满足以下覆盖情况:判定一: A1, A1, B=0, B0判定二: A=2, A2, X1, X1选择用例: (2,0,4),(2,0,3) (1,1,1),(1,1,1) 注意:(1,0,3),(1,0,4)(2,1,1),(2,1,2)满足条件覆盖,但不满足判断覆盖6.2 软件测试的方法A1ANDB=0X=X/AA=2OR X1X=X+1abcdeYNYNv 4、判定/条件覆盖v 同时满足判断覆盖和条件覆盖应满足以下覆盖情况: 条件: A1, A1, B=0, B0 A=2, A2, X1, X1 应执行路径ace abd或: acd abe选择用例: (2,0,4),(2,0,3)(ace) (1,1,1),(1,1,1) (abd)6.2 软件测试的方法A1ANDB=0X=X/AA=2OR X1X=X+1abcdeYNYN 5、条件组合覆盖 使得每个判定中条件的各种可能组合都至少出现一次编译系统下的执行情况:部分路径未被执行满足以下覆盖情况: A1, B =0 A1, B0 A1, B =0 A1, B0 A=2, X1 A=2, X1 A2, X1 A2, X1选择用例:(2,0,4),(2,0,3) (2,1,1),(2,1,2) (1,0,3),(1,0,4) (1,1,1),(1,1,1) A1X=X/AA=2X=X+1abcdeB=0X1YNYNYNYN6.2 软件测试的方法 6、路径覆盖 被测程序的每条可能执行到的路径都至少经过一次。
选择用例:(2,0,4),(2,0,3) a、c、e(2,1,1),(2,1,2) a、b、e(3,0,3),(3,0,1) a、c、d(1,1,1),(1,1,1) a、b、d6.2 软件测试的方法A1ANDB=0X=X/AA=2OR X1X=X+1abcdeYNYN6.2 软件测试的方法v二、黑盒法 不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例等价分类法边值分析法错误推测法因果图法v1、等价分类法v 基本思想:根据程序的I/O特性,将程序的定义域划分为有限个等价区段 “等价类”,从等价类中选择出的用例,具有“代表性”v 等价类分为:v 有效等价类 对于程序的规格说明是合理的、有意义的输入数据构成的集合v 无效等价类 对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合6.2 软件测试的方法等价分类法步骤等价分类法步骤 应按照输入条件(如输入值的范围,值的个数,值的集合,输入条件必须如何)划分为有效等价类和无效等价类例如:每个学生可选修1-3门课程 可以划分一个有效等价类:选修1-3门课程 可以划分两个无效等价类:未选修课,选修课超过3门又如:标识符的第一个字符必须是字母。
可以划分为一个有效等价类:第一个字符是字母 可以划分一个无效等价类:第一个字符不是字母vv 划分划分“ “等价类等价类” ” A、为每个等价类编号; B、使一个测试用例尽可能覆盖多个有效等价类 C、特别要注意的是:一个测试用例只能覆盖一个无效等价类 选择测试用例选择测试用例 等价分类法步骤v 2、边值分析法 v 基本思想: 选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出v 分析步骤: vA、先划分等价类vB、选择测试用例,测试等价类边界v 边界选择原则: vA、按照输入值范围的边界vB、按照输入/输出值个数的边界vC、输出值域的边界vD、输入/输出有序集的边界6.2 软件测试的方法边值分析法举例:边值分析法举例: A A、按照输入值范围的边界 例如:输入值的范围是-1.0至1.0,则可选择用例 1.0、1.0、-1.001、1.001 B B、按照输入/输出值个数的边界 例如:输入文件可有1-255个记录,则 设计用例:文件的记录数为 0个、1个、255个、256个 C、输出值域的边界 例如:检索文献摘要,最多4篇。












