第六章66.1软件测试的基本概念一、软件测试的目的和重要性因为开发工作的前期不可避免地会引入错误,测试的目的是为了发现和改正错误,这对于某些涉及人的生命安全或重要的军事、经济目标的项目显得尤其重要。1963年美国飞往火星的火箭爆炸,原因是FORTRAN程序:DO5I=1,3误写为:DO5I=1.3损失1000万美元。1967年苏联“联盟一号”宇宙飞船返回时因忽略一个小数点,在进入大气层时打不开降落伞而烧毁。二、软件测试的特点1、软件测试的开销大按照Boehm的统计,软件测试的开销大约占总成本的30%-50%。例如:APPOLLO登月计划,80%的经费用于软件测试。2、不能进行“穷举”测试只有将所有可能的情况都测试到,才有可能检查出所有的错误。但这是不可能的:例:程序P有两个整型输入量X、Y,输出量为Z,在32位机上运行。所有的测试数据组(Xi,Yi)的数目为:22=21毫秒执行1次,共需5亿年。323264PXYZ二、软件测试的特点—结论3、软件测试难度大根据上述分析,既然不能进行“穷举”测试,又要查出尽可能多的错误,软件测试工作的难度大。只有选择—“高效的测试用例”什么是“高效的测试用例”?如何选择“高效的测试用例”?这就是本章讨论的主要问题!!!三、软件测试的基本原则3、充分注意测试中的群集现象。1、尽量不由程序设计者进行测试。2、关键是注重测试用例的选择。输入数据的组成(输入数据、预期的输出结果)既有合理输入数据,也有不合理的输入数据。用例既能检查应完成的任务,也能够检查不应该完成的任务。长期保存测试用例。四、测试的基本步骤模块测试整体测试功能测试预测试系统测试验收测试安装测试概要设计审查详细设计审查代码审查测试(单元测试)(组装测试)(有效性测试)(确认测试){{6.2软件测试方法软件测试方法分为两类:静态分析、动态测试一、静态分析方法指以人工的、非形式化的方法对程序进行分析和测试。桌前检查代码会审步行检查步行检查时,还常使用以下分析方法:①调用图从语义的角度考察程序的控制路线。②数据流分析图检查分析变量的定义和引用情况。①调用图无论Y为何值,都不能够调用子程序。READYY0NX:=YX0YNY调用子程序ABCDE即执行ABC后,是不可能执行路径CDE的。②数据流分析图节点—表示单个语句。有向边—表示控制结构。d—定义r—引用u—未引用R:duuuuuS:uruuurY:uuddruR=0.5W=1/SY=A**WY=E*WZ=X+YC=Z*S123456只定义不用未定义引用连续定义二、动态测试方法(1)通过选择适当的测试用例,执行程序。常用的方法:1、白盒法分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。2、黑盒法不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。白盒法白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖弱强①语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。②判定覆盖:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。③条件覆盖:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。④判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。⑤条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。白盒法常用的覆盖标准白盒法步骤:例:用白盒法测试以下程序段:Procedure(VARA,B,X:REAL);BEGINIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1END;1)选择逻辑覆盖标准。2)按照覆盖标准列出所有情况。3)选择确定测试用例。4)验证分析运行结果与预期结果。逻辑结构白盒法举例Procedure(VARA,B,X:REAL);BEGINIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1END;A1ANDB=0X:=X/AA=2ORX1X:=X+1YNYN逻辑结构1、语句覆盖使得程序中每个语句至少都能被执行一次。A1ANDB=0X:=X/AA=2ORX1X:=X+1abcde满足语句覆盖的情况:执行路径:ace选择用例:[(2,0,4),(2,0,3)]用例格式:[输入(A,B,X),输出(A,B,X)]YNYN2、判定覆盖使得程序中每个判定至少为TRUE或FALSE各一次。A1ANDB=0X:=X/AA=2ORX1X:=X+1abcde覆盖情况:应执行路径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)]acdYYNN3、条件覆盖A1ANDB=0X:=X/AA=2ORX1X:=X+1abcde使得判定中的每个条件获得各种可能的结果。应满足以下覆盖情况:判定一:A1,A≤1,B=0,B≠0判定二:A=2,A≠2,X1,X≤1选择用例:[(2,0,4),(2,0,3)][(1,1,1),(1,1,1)]NNYY2A≤1A≠20B=04X11A1A=21B≠01X≤1注意:[(1,0,3),(1,0,4)][(2,1,1),(2,1,2)]满足条件覆盖,但不满足判断覆盖。4、判定/条件覆盖同时满足判断覆盖和条件覆盖。A1ANDB=0X:=X/AA=2ORX1X:=X+1abcde应满足以下覆盖情况:条件:A1,A≤1,B=0,B≠0A=2,A≠2,X1,X≤1应执行路径ace∧abd或:acd∧abe选择用例:[(2,0,4),(2,0,3)](ace)[(1,1,1),(1,1,1)](abd)YYNN5、条件组合覆盖使得每个判定中条件的各种可能组合都至少出现一次。A1X:=X/AA=2X:=X+1abcdeB=0X1YNYNYNYN编译系统下的执行情况:部分路径未被执行。满足以下覆盖情况:①A1,B=0②A1,B≠0③A≤1,B=0④A≤1,B≠0⑤A=2,X1⑥A=2,X≤1⑦A≠2,X1⑧A≠2,X≤1选择用例:[(2,0,4),(2,0,3)]①⑤[(2,1,1),(2,1,2)]②⑥[(1,0,3),(1,0,4)]③⑦[(1,1,1),(1,1,1)]④⑧二、动态测试方法(2)等价分类法边值分析法错误推测法因果图法(2)黑盒法不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。1.等价分类法基本思想:根据程序的I/O特性,将程序的定义域划分为有限个等价区段—“等价类”,从等价类中选择出的用例,具有“代表性”。等价类分为:有效等价类—对于程序的规格说明,是合理的、有意义的输入数据构成的集合。无效等价类—对于程序的规格说明,是不合理的、没有意义的输入数据构成的集合。等价分类法步骤应按照输入条件(如输入值的范围,值的个数,值的集合,输入条件必须如何)划分为有效等价类和无效等价类。例如:每个学生可选修1-3门课程可以划分一个有效等价类:选修1-3门课程。可以划分两个无效等价类:未选修课,选修课超过3门。①划分“等价类”显然,关键是如何划分等价类A为每个等价类编号;B使一个测试用例尽可能覆盖多个有效等价类C特别要注意:一个测试用例只能覆盖一个无效等价类。②选择测试用例等价分类法步骤2.边值分析法基本思想:选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。分析步骤:A先划分等价类。B选择测试用例,测试等价类边界。边界选择原则:A按照输入值范围的边界。B按照输入/输出值个数的边界。C输出值域的边界。D输入/输出有序集的边界。A按照输入值范围的边界。例如:输入值的范围是-1.0至1.0,则可选择用例:–1.0、1.0、-1.001、1.001。B按照输入/输出值个数的边界。例如:输入文件可有1-255个记录,则设计用例:文件的记录数为0个、1个、255个、256个。C输出值域的边界。例如:检索文献摘要,最多4篇。设计用例:可检索0篇、1篇、4篇,和5篇(错误)。D输入/输出有序集(如顺序文件、线性表)的边界。应选择第一个元素和最后一个元素。边值分析法举例黑盒法应用实例对FORTRAN编译系统中的DIMENSION语句进行测试。语句格式为:DIMENSIONad[,ad]…ad为数组描述符,形式为n(d[,]…其中:n-数组名,字母打头的字母数字串,长6。D为界偶(1-7个):[ld:]ndld和nd的值为1-65535,ld缺省为1。输入条件合理的等价类不合理的等价类数组描述的个数1个(1)、多于1个(2)没有数组描述(3)数组名的字符数1—6个(4)0(5),6(6)数组名有字母(7)有数字(8)有其他字符(9)数组名的第1个字符为字母是(10)不是(11)维数1—7(12)0(13),7(14)上界常数(15)数组元素名(1640个等价类3.错误推测法凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测试用例。把输入条件视为“因”,把输出条件视为“果”,将黑盒看成是从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。根据这种关系可选择高效的测试用例。因果图是一种形式化语言,是一种组合逻辑网络图。4.因果图法4.因果图法(causeeffcetgraphicei)⑴因果图的基本符号0-表示“不出现”1-表示“出现”恒等若a为1,则b为1,否则b为0。“非”函数若a为1,则b为0,否则b为1。“或”函数若a或b为1,则d为1,否则d为0。“与”函数若a与b同为1,则d为1,否则d为0。abababd∨abd∧4.因果图法(causeeffcetgraphicei)对“与”、“或”函数的限制符号E约束(异)—排斥即a、b不能同时为1。I约束(或)—包容a、b、c不能同时为0。O约束(唯一)—选一a、b中仅有一个为1。R约束(要求)—需要a为1时,b必须为1M约束(强制)—屏蔽若a为1时,则b强制为1。abEabcIabRabOabM⑵因果图法的步骤分析规范,即将问题分为若干可工作的步骤。标识出规范中的原因与结果。原因—输入条件结果—输出或系统变换将因果图转换为有限项判断表。将判断表的每一列,转换为一个测试用例。分析规范语义、内容,转换为因果图。⑶因果图法应用举例规范:文件名第一列字符必须为A或B,第二列字符必须为数字。满足则修改文件。第一字符不正确发出信息X12,第二个字符不正确发出信息X13。1.分析规范原因结果1—第一列字符为A50—修改文件2—第一列字符为B51—发信息X123—第二列字符为数字52—发信息X132.画出因果图中间结点是导出结果的进一步原因。考虑到原因1、2不可能同时为1,加上E约束。1111∨5150352∧12E发X12发X13修改文件3.将因果图转换为判断表12345678条件原因①11110000②11001100③10101010111100动作结果000011101000010101测试用例A3A8AMA?B5B4BNB!C2X6DYPI115150528.3软件测试的步骤测试步骤及策略所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试。并事先制订测试计划。测试过程通常可分4步进行:单元测试单元测试单元测试被测模块被测模块集成测试设计信息已测试的模块确认测试已集成的模块软件需求系统测试已确认的软件可交付的软件系统其他元素一、模块测试(ModuleTesting)1.测试内容模块模块接口测试局部数据结构测试重要路径测试错误处理测试边界条件测试I/O参数值的个数、类型、次序、格式是否正确,I/O文件属性、操作是否正确等。数据说明是否正确、一致,变量及其初值定义是否