《SE0801-lecture20 软件测试》由会员分享,可在线阅读,更多相关《SE0801-lecture20 软件测试(76页珍藏版)》请在金锄头文库上搜索。
1、1软件测试的基本概念软件测试的基本概念 一、软件测试的目的和重要性一、软件测试的目的和重要性因为开发工作的前期不可避免地会引入错误,测因为开发工作的前期不可避免地会引入错误,测试的试的目的是为了发现和改正错误目的是为了发现和改正错误,这对于某些涉,这对于某些涉及人的生命安全或重要的军事、经济目标的项目及人的生命安全或重要的军事、经济目标的项目显得尤其重要。显得尤其重要。19631963年美国飞往火星的火箭爆炸,原因是年美国飞往火星的火箭爆炸,原因是FORTRANFORTRAN程序:程序:DO 5 I=1DO 5 I=1,3 3 误写为:误写为:DO 5 I=1. 3 DO 5 I=1. 3 损
2、失损失10001000万美元。万美元。19671967年苏联年苏联“联盟一号联盟一号”宇宙飞船返回时因忽略宇宙飞船返回时因忽略一个小数点,在进入大气层时打不开降落伞而一个小数点,在进入大气层时打不开降落伞而烧毁。烧毁。二、软件测试的二、软件测试的二、软件测试的二、软件测试的二、软件测试的二、软件测试的特点特点特点特点特点特点1、软件测试的开销大、软件测试的开销大按照按照Boehm的统计,软件测试的开销大约占总成的统计,软件测试的开销大约占总成本的本的30%-50%。例如:。例如:APPOLLO登月计划,登月计划,80%的经费用于软件测试。的经费用于软件测试。2、不能进行、不能进行“穷举穷举”测
3、试测试只有将所有可能的情况都测试到,才有可能检查只有将所有可能的情况都测试到,才有可能检查出所有的错误。但这是不可能的:出所有的错误。但这是不可能的:例:程序例:程序P有两个整型输入量有两个整型输入量 X、Y,输出量为输出量为Z,在在32位机上运行。所有的测试数据组(位机上运行。所有的测试数据组(Xi,Yi)的的数目为:数目为: 2 2 = 2 1毫秒执行毫秒执行1次,共需次,共需5亿年。亿年。323264PXYZ二、软件测试的二、软件测试的二、软件测试的二、软件测试的二、软件测试的二、软件测试的特点特点特点特点特点特点 结论结论结论结论结论结论3、软件测试难度大、软件测试难度大根据上述分析,
4、既然不能进行根据上述分析,既然不能进行 “穷举穷举”测试,测试,又要查出尽可能多的错误,软件测试工作的难又要查出尽可能多的错误,软件测试工作的难度大。只有选择度大。只有选择 “高效的测试用例高效的测试用例”什么是什么是“高效的测试用例高效的测试用例”?如何选择如何选择“高效的测试用例高效的测试用例”?这就是本章讨论的主要问题!这就是本章讨论的主要问题!三、软件测试的基本原则三、软件测试的基本原则三、软件测试的基本原则三、软件测试的基本原则3 3、充分注意测试中的群集现象。、充分注意测试中的群集现象。1 1、尽量不由程序设计者进行测试。、尽量不由程序设计者进行测试。2 2、关键是注重测试用例的选
5、择。、关键是注重测试用例的选择。输入数据的组成(输入数据、预期的输出结果)输入数据的组成(输入数据、预期的输出结果)既有合理输入数据,也有不合理的输入数据。既有合理输入数据,也有不合理的输入数据。用例既能检查应完成的任务,也能够检查不应该用例既能检查应完成的任务,也能够检查不应该完成的任务。完成的任务。长期保存测试用例。长期保存测试用例。四、测试的基本步骤四、测试的基本步骤四、测试的基本步骤四、测试的基本步骤模块测试模块测试整体测试整体测试功能测试功能测试预测试预测试系统测试系统测试验收测试验收测试安装测试安装测试概要设计审查概要设计审查详细设计审查详细设计审查代码审查代码审查 测试测试 (单
6、元测试)单元测试)(组装测试)(组装测试)(有效性测试)(有效性测试)(确认测试)(确认测试)2 软件测试方法软件测试方法软件测试方法分为两类:静态分析、动态测试软件测试方法分为两类:静态分析、动态测试一、静态分析方法一、静态分析方法指指以以人人工工的的、非非形形式式化化的的方方法法对对程程序序进进行行分分析析和和测试。测试。桌前检查桌前检查代码会审代码会审步行检查步行检查步行检查时,还常使用以下分析方法:步行检查时,还常使用以下分析方法: 调用图调用图从语义的角度考察程序的控制路线。从语义的角度考察程序的控制路线。 数据流分析图数据流分析图检查分析变量的定义和引用情况。检查分析变量的定义和引
7、用情况。 调用图调用图调用图调用图无论无论Y 为何值,都为何值,都不能够调用子程序不能够调用子程序。READYY0NX:=YX1) AND (B=0) A1) AND (B=0) THEN X:=X/A ; THEN X:=X/A ; IF (A=2) OR (X1) IF (A=2) OR (X1) THEN X:=X+1 THEN X:=X+1END;END;1 1)选择逻辑覆盖标准。)选择逻辑覆盖标准。2 2)按照覆盖标准列出所有情况。)按照覆盖标准列出所有情况。3 3)选择确定测试用例。)选择确定测试用例。4 4)验证分析运行结果与预期结果。)验证分析运行结果与预期结果。白盒法举例白盒
8、法举例白盒法举例白盒法举例Procedure Procedure (VAR A,B,X:REALVAR A,B,X:REAL);); BEGIN BEGIN IF IF(A1) AND (B=0) A1) AND (B=0) THEN X:=X/A ; THEN X:=X/A ; IF (A=2) OR (X1) IF (A=2) OR (X1) THEN X:=X+1 THEN X:=X+1 END; END;A1ANDB=0X:=X/AA=2OR X1X:=X+1YNYN1 1 1、语句覆盖、语句覆盖、语句覆盖、语句覆盖、语句覆盖、语句覆盖使得程序中每个语句至少使得程序中每个语句至少都能被
9、执行一次。都能被执行一次。A1ANDB=0X:=X/AA=2OR X1X:=X+1abcde满足语句覆盖的情况:满足语句覆盖的情况: 执行路径:执行路径:aceace选择用例:选择用例:(2,0,4),(2,0,3)(2,0,4),(2,0,3) 用例格式:用例格式: 输入输入(A,B,X)(A,B,X),输出,输出(A,B,X)(A,B,X)YNYN2 2 2、判定覆盖、判定覆盖、判定覆盖、判定覆盖、判定覆盖、判定覆盖使得程序中每个判定至少为使得程序中每个判定至少为TRUE TRUE 或或FALSEFALSE各一次。各一次。A1ANDB=0X:=X/AA=2OR X1X:=X+1abcde覆
10、盖情况:覆盖情况:应执行路径应执行路径ace abd 或:或: acd abe选择用例选择用例(其一):其一): (2,0,4),(2,0,3) ace (2,0,4),(2,0,3) ace (1,1,1),(1,1,1) abd (1,1,1),(1,1,1) abd (2,1,1),(2,1,2) abe (2,1,1),(2,1,2) abe (3,0,3),(3,1,1) acd (3,0,3),(3,1,1) acdYYNN3 3 3、条件覆盖、条件覆盖、条件覆盖、条件覆盖、条件覆盖、条件覆盖A1ANDB=0X:=X/AA=2OR X1X:=X+1abcde使得判定中的每个条件获使
11、得判定中的每个条件获得各种可能的结果。得各种可能的结果。应满足以下覆盖情况:应满足以下覆盖情况:判定一判定一: A1, A1, B=0, B0判定二判定二: A=2, A2, X1, X1选择用例:选择用例: (2,0,4),(2,0,3) (2,0,4),(2,0,3) (1,1,1),(1,1,1) (1,1,1),(1,1,1) NNYY2 2A1A20 0B=04 4X11 1A1A=21 1B01 1X1注意注意:(1,0,3),(1,0,4):(1,0,3),(1,0,4)(2,1,1),(2,1,2)(2,1,1),(2,1,2)满足条件覆盖,但不满足判断满足条件覆盖,但不满足判
12、断覆盖。覆盖。4 4 4、判定、判定、判定、判定、判定、判定/ / /条件覆盖条件覆盖条件覆盖条件覆盖条件覆盖条件覆盖同时满足判断覆盖和条同时满足判断覆盖和条件覆盖。件覆盖。A1ANDB=0X:=X/AA=2OR X1X:=X+1abcde应满足以下覆盖情况:应满足以下覆盖情况: 条件条件: A1, A1, B=0, B0 A=2, A2, X1, X1 应执行路径应执行路径ace abd 或:或: acd abe选择用例:选择用例: (2,0,4),(2,0,3) (2,0,4),(2,0,3)(ace)ace) (1,1,1),(1,1,1) (abd) (1,1,1),(1,1,1) (
13、abd)YYNN5 5 5、条件组合覆盖、条件组合覆盖、条件组合覆盖、条件组合覆盖、条件组合覆盖、条件组合覆盖使得每个判定中条件的各种使得每个判定中条件的各种可能组合都至少出现一次。可能组合都至少出现一次。A1X:=X/AA=2X:=X+1abcdeB=0X1YNYNYNYN编译系统下的执行情况:编译系统下的执行情况:部分路径未被执行。部分路径未被执行。满足以下覆盖情况:满足以下覆盖情况: 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,0,4),(2,0,3)
14、(2,1,1),(2,1,2) (2,1,1),(2,1,2) (1,0,3),(1,0,4) (1,0,3),(1,0,4) (1,1,1),(1,1,1) (1,1,1),(1,1,1) 二、动态测试方法二、动态测试方法二、动态测试方法二、动态测试方法二、动态测试方法二、动态测试方法(2 2 2 2 2 2)等等价价分分类类法法边边值值分分析析法法错错误误推推测测法法因因果果图图法法(2)(2)黑盒法黑盒法 不考虑程序的内部结构与特性,不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性只根据程序功能或程序的外部特性设计测试用例。设计测试用例。1 1 1、等价分类法、等价分类法、等价
15、分类法、等价分类法、等价分类法、等价分类法基基本本思思想想:根根据据程程序序的的I/O特特性性,将将程程序序的的定定义义域域划划分分为为有有限限个个等等价价区区段段 “等等价价类类”,从从等价类中选择出的用例,具有等价类中选择出的用例,具有“代表性代表性”。等价类分为:等价类分为:有有效效等等价价类类 对对于于程程序序的的规规格格说说明明是是合合理理的的、有意义的输入数据构成的集合。有意义的输入数据构成的集合。无效等价类无效等价类 对于程序的规格说明,是不合理对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。的,是没有意义的输入数据构成的集合。等价分类法步骤等价分类法步骤等价分类
16、法步骤等价分类法步骤 应应按按照照输输入入条条件件(如如输输入入值值的的范范围围,值值的的个个数数,值值的的集集合合,输输入入条件必须如何)划分为有效等价类和无效等价类。条件必须如何)划分为有效等价类和无效等价类。例如:每个学生可选修例如:每个学生可选修1-31-3门课程门课程 可以划分一个有效等价类:选修可以划分一个有效等价类:选修1-31-3门课程。门课程。 可以划分两个无效等价类:未选修课,选修课超过可以划分两个无效等价类:未选修课,选修课超过3 3门。门。又如:标识符的第一个字符必须是字母。又如:标识符的第一个字符必须是字母。 可以划分为一个有效等价类:第一个字符是字母。可以划分为一个
17、有效等价类:第一个字符是字母。 可以划分一个无效等价类:第一个字符不是字母。可以划分一个无效等价类:第一个字符不是字母。 划分划分划分划分“等价类等价类等价类等价类” 显然,关键是显然,关键是如何划分等价类如何划分等价类A A、为每个等价类编号;为每个等价类编号;B B、使一个测试用例尽可能覆盖多个有效等价类使一个测试用例尽可能覆盖多个有效等价类C C、特别要注意的是:一个测试用例只能覆盖一个无效等价类。特别要注意的是:一个测试用例只能覆盖一个无效等价类。 选择测试用例选择测试用例选择测试用例选择测试用例 2 2 2、边值分析法、边值分析法、边值分析法、边值分析法、边值分析法、边值分析法 基基
18、本本思思想想: 选选择择等等价价类类的的边边缘缘值值作作为为测测试试用用例例,让让每每个个等等价价类类的的边边界界都都得得到到测测试试,选选择择测测试试用用例例既考虑既考虑输入输入亦考虑亦考虑输出输出。 分析步骤:分析步骤: A A、先划分等价类。先划分等价类。B B、选择测试用例,测试等价类边界。选择测试用例,测试等价类边界。 边界边界选择原则:选择原则: A A、按照输入值范围的边界。按照输入值范围的边界。B B、按照输入按照输入/ /输出值个数的边界。输出值个数的边界。C C、输出值域的边界。输出值域的边界。D D、输入输入/ /输出有序集的边界。输出有序集的边界。 A A A A、按照
19、输入值范围的边界。按照输入值范围的边界。 例例如如:输输入入值值的的范范围围是是-1.0-1.0至至1.01.0,则则可可选选择择用用例例 1.01.0、1.01.0、-1.001-1.001、1.0011.001。 B B B B、按照输入按照输入/ /输出值个数的边界。输出值个数的边界。 例例如如:输输入入文文件件可可有有1-2551-255个个记记录录,则则 设设计计用用例例:文文件件的记录数为的记录数为 0 0个、个、1 1个、个、255255个、个、256256个。个。 C C C C、输出值域的边界。输出值域的边界。 例例如如:检检索索文文献献摘摘要要,最最多多4 4篇篇。设设计计
20、用用例例:可可检检索索0 0篇篇、1 1篇、篇、4 4篇,和篇,和5 5篇(错误)。篇(错误)。 D D、输入输入/ /输出有序集(输出有序集(如顺序文件、线性表)如顺序文件、线性表)的边界。的边界。 应选择第一个元素和最后一个元素。应选择第一个元素和最后一个元素。边值分析法举例边值分析法举例边值分析法举例边值分析法举例黑盒法应用实例黑盒法应用实例黑盒法应用实例黑盒法应用实例黑盒法应用实例黑盒法应用实例 对对FORTRAN编译系统中的编译系统中的DIMENSION语句进行测试。语句进行测试。语句格式为:语句格式为:DIMENSION ad,ad adad,ad ad为数组描述符,为数组描述符,
21、形式为形式为 n n(d, d, 其中:其中:n n数组名,字母打头的字母数字串,长数组名,字母打头的字母数字串,长6 6。D D为界偶(为界偶(1-71-7个):个): ld:ndld:nd ld ld 和和 ndnd 的值为的值为1-655351-65535, ldld缺省为缺省为1 1。输入条件输入条件合理的等价类合理的等价类不合理的等价类不合理的等价类数组描述的个数数组描述的个数1 1个(个(1 1)、多于)、多于1 1个(个(2 2)没有数组描述(没有数组描述(3 3)数组名的字符数数组名的字符数1616个(个(4 4)0 0(5 5),),66(6 6)数组名数组名有字母(有字母(
22、7 7)有数字()有数字(8 8)有其他字符(有其他字符(9 9)数组名的第数组名的第1 1个字符为字母个字符为字母是(是(1010)不是(不是(1111)维数维数1717(1212)0 0(1313),), 7 7(1414)上界上界常数(常数(1515)数组元素名(数组元素名(161640 个等价类个等价类3 3 3 3 3 3、错误推测法、错误推测法、错误推测法、错误推测法、错误推测法、错误推测法 凭经验或直觉推测可能的错误,列出程序中可凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测能有的错误和容易发生错误的特殊情况,选择测试用例。试用例。把把输输入入
23、条条件件视视为为“因因”,把把输输出出条条件件视视为为“果果”,将将黑黑盒盒看看成成是是从从因因到到果果的的网网络络图图,采采用用逻逻辑辑图图的的形形式式来来表表达达功功能能说说明明书书中中输输入入条条件件的的各各种种组组合合与与输出的关系。根据这种关系可选择高效的测试用例。输出的关系。根据这种关系可选择高效的测试用例。 因果图是一种形式化语言,是一种组合逻辑因果图是一种形式化语言,是一种组合逻辑网络图。网络图。4 4 4 4 4 4、因果图法、因果图法、因果图法、因果图法、因果图法、因果图法4 4 4 4 4 4、因果图法(、因果图法(、因果图法(、因果图法(、因果图法(、因果图法(caus
24、e cause cause cause cause cause effceteffceteffceteffceteffceteffcet graphiceigraphiceigraphiceigraphiceigraphiceigraphicei) 因果图的基本符号因果图的基本符号0 - 0 - 表示表示“不出现不出现”1 - 1 - 表示表示“出现出现” 恒等恒等若若a a为为1 1,则,则b b为为1 1,否则,否则b b为为0 0。 “非非”函数函数 若若a a为为1 1,则,则b b为为0 0,否则,否则b b为为1 1。 “ “或或”函数函数 若若a a或或b b为为1 1,则,则d
25、 d为为1 1,否则,否则d d为为0 0。 “ “与与”函数函数 若若a a与与b b同为同为1 1,则,则d d为为1 1,否则,否则d d为为0 0。abababd dabd d4 4 4 4 4 4、因果图法、因果图法、因果图法、因果图法、因果图法、因果图法(cause cause cause cause cause cause effceteffceteffceteffceteffceteffcet graphiceigraphiceigraphiceigraphiceigraphiceigraphicei)对对“与与”、“或或”函数的限制符号函数的限制符号E E约束(异)约束(异)
26、 排斥排斥即即a a、b b不能同时为不能同时为1 1。I I约束(或)约束(或) 包容包容a a、b b、c c不能同时为不能同时为0 0。O O约束(唯一约束(唯一) 选一选一 a a、b b中仅有一个为中仅有一个为1 1。R R约束(要求约束(要求) 需要需要 a a为为1 1时,时,b b必须为必须为1 1M M约束(强制约束(强制) 屏蔽屏蔽 若若a a为为1 1时,则时,则b b强制为强制为1 1。abEabcIabRabO OabM 因果图法的步骤因果图法的步骤因果图法的步骤因果图法的步骤因果图法的步骤因果图法的步骤分析规范,即将问题分为若干可工作的步骤。分析规范,即将问题分为若
27、干可工作的步骤。标识出规范中的原因与结果。标识出规范中的原因与结果。原因原因输入条件输入条件 结果结果输出或系统变换输出或系统变换将因果图转换为有限项判断表。将因果图转换为有限项判断表。将判断表的每一列,转换为一个测试用例。将判断表的每一列,转换为一个测试用例。分析规范语义、内容,转换为因果图。分析规范语义、内容,转换为因果图。分析规范语义、内容,转换为因果图。分析规范语义、内容,转换为因果图。 因果图法应用举例因果图法应用举例因果图法应用举例因果图法应用举例因果图法应用举例因果图法应用举例规范:文件名第一列字符必须为规范:文件名第一列字符必须为A A或或B B,第二列字第二列字符必须为数字。
28、满足则修改文件。第一字符不正符必须为数字。满足则修改文件。第一字符不正确发出信息确发出信息X X1212,第二个字符不正确发出信息第二个字符不正确发出信息X X1313。、分析规范、分析规范原原 因因 结结 果果1 1 第一列字符为第一列字符为A A 50 50修改文件修改文件2 2 第一列字符为第一列字符为B B 51 51发信息发信息X X12123 3 第二列字符为数字第二列字符为数字 52 52发信息发信息X X1313画出因果图画出因果图画出因果图画出因果图画出因果图画出因果图中间结点中间结点是导出结果的进一步原因。是导出结果的进一步原因。考虑到原因考虑到原因1 1、2 2不可能同时
29、为不可能同时为1 1,加上,加上E E约束。约束。1111515035212E发发 X 12发发 X 13 修改文件修改文件将因果图转换为判断表将因果图转换为判断表将因果图转换为判断表将因果图转换为判断表12345678条条件件原原因因111100001100110010101010111100动动作作结结果果000011101000010101测试用例测试用例A3A8AMA?B5B4BNB!C2X6DYPI115150523 3 软件测试的步骤软件测试的步骤软件测试的步骤软件测试的步骤测试步骤及策略测试步骤及策略 所有测试过程都应采用综合测试策略;即先所有测试过程都应采用综合测试策略;即先作
30、静态分析,再作动态测试。并事先制订测试计作静态分析,再作动态测试。并事先制订测试计划。测试过程通常可分划。测试过程通常可分4 4步进行:步进行:单元单元测试测试单元单元测试测试单元单元测试测试被测被测模块模块被测被测模块模块集成集成测试测试设计设计信息信息已测试已测试的模块的模块确认确认测试测试已集成已集成的模块的模块软件软件需求需求系统系统测试测试已确认已确认的软件的软件可交付可交付的软件的软件系统其系统其他元素他元素一、模块测试一、模块测试一、模块测试一、模块测试一、模块测试一、模块测试(Module TestingModule TestingModule TestingModule Te
31、stingModule TestingModule Testing)1 1、测试内容、测试内容模块模块模块接口测试模块接口测试局部数据结构测试局部数据结构测试重要路径测试重要路径测试错误处理测试错误处理测试边界条件测试边界条件测试I/O I/O 参数值的个数、类参数值的个数、类型、次序、格式是否正型、次序、格式是否正确,确,I/OI/O文件属性、操作文件属性、操作是否正确等。是否正确等。数据说明是否正确、数据说明是否正确、一致,变量及其初一致,变量及其初值定义是否正确等。值定义是否正确等。检查检查“错误处错误处理程序理程序”本身本身的错误。的错误。边界条件常包括循环边边界条件常包括循环边界,最
32、大最小值、控制界,最大最小值、控制流中等于、大于、小于流中等于、大于、小于的比较值等。的比较值等。重要重要路径通常是指完成路径通常是指完成模块功能的主要路径,模块功能的主要路径,一般是控制结构。一般是控制结构。也称单元测试(也称单元测试(unit testingunit testing ) )2 2 2 2 2 2、模块测试步骤、模块测试步骤、模块测试步骤、模块测试步骤、模块测试步骤、模块测试步骤考虑到被测模块与其它模块的联系,因此测试考虑到被测模块与其它模块的联系,因此测试时需要使用两类时需要使用两类辅助模块辅助模块来模拟其他模块。来模拟其他模块。驱动模块驱动模块(driverdriver)
33、 模拟主程模拟主程序功能,用于向被测模块传递数据,序功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。接收、打印从被测模块返回的数据。桩模块桩模块(stubstub) 又称为假模块,又称为假模块,用于模拟那些由被测模块所调用用于模拟那些由被测模块所调用的下属模块功能。的下属模块功能。一般,驱动模块比桩模块容易设计。但都是额外一般,驱动模块比桩模块容易设计。但都是额外开销。测试方法以白盒法为主。开销。测试方法以白盒法为主。被测模块被测模块驱动模块驱动模块桩模块桩模块桩模块桩模块桩模块桩模块二、组装测试二、组装测试二、组装测试二、组装测试(Integration TestingInte
34、gration TestingIntegration TestingIntegration Testing)1 1、组装测试的任务、组装测试的任务确定模块组装方案,将经过测试的模块组装为确定模块组装方案,将经过测试的模块组装为一个完整的系统。组装方案分为一个完整的系统。组装方案分为渐增式渐增式及及非渐非渐增式。增式。测试方法以黑盒法为主,按照组装方案进行测试方法以黑盒法为主,按照组装方案进行测试。测试。也称为也称为联合测试联合测试或或集成测试,集成测试,重点测试模块的接重点测试模块的接口部分,需设计测试过程使用的驱动模块或桩模口部分,需设计测试过程使用的驱动模块或桩模块。块。2 2 2 2 2
35、 2、渐增式组装测试、渐增式组装测试、渐增式组装测试、渐增式组装测试、渐增式组装测试、渐增式组装测试渐增式是先进行模块测试,然后将这些模块逐步渐增式是先进行模块测试,然后将这些模块逐步组装成较大的系统,每连接一个模块进行一次测组装成较大的系统,每连接一个模块进行一次测试试。两种方案:两种方案:设计驱动模块或桩模块,对每一个新组装的子设计驱动模块或桩模块,对每一个新组装的子系统进行测试,对发现问题较多的子系统或模系统进行测试,对发现问题较多的子系统或模块应该用白盒法作回归测试。块应该用白盒法作回归测试。自顶而下增值自顶而下增值自底而上自底而上自底而上自底而上增值增值自顶而下增值自顶而下增值自顶而
36、下增值自顶而下增值M1M4M3M2M6M5程程序序模模块块示示意意图图S5M1S1S1S1S2S2S2S3S3S3第第一一步步,测测试试主主控控模模块块M1设设计计桩桩模模块块S1、S2、S3,模模拟拟被被M1调用的调用的M2、M3、M4。M2M3M4第第二二步步,依依次次用用M2、M3、M4替替代代桩桩模模块块S1、S2、S3,每替代一次进行一次测试。每替代一次进行一次测试。S4S4S4S5S5第第三三步步,对对由由主主控控模模块块M1和和模模块块M2、M3、M4构构成成的的子子系系统统进进行行测测试试,设设计计桩桩模模块块S4、S5。M5M6第第四四步步,依依次次用用模模块块M5和和M6替
37、替代代桩桩模模块块S4、S5,并并同同时时进进行行新新的的测测试试。组组装装测测试试完毕。完毕。自底而上自底而上自底而上自底而上自底而上自底而上增值增值增值增值M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第第四四步步,把把已已测测试试的的子子系系统统按按程程序序结结构构连连接接起起来来完完成程序整体的组装测试。成程序整体的组装测试。D4D4D4D5D5D5M1M4M3M2M6M5程程序序模模块块示示意意图图第第一一步步,对对最最底底层层的的模模块块M3、M5、M6进进行行测测试试,设设计计驱驱动动模模块块D1、D2、D3来模拟调用。来模拟调用。第第三三步步,设设计计驱驱动动模模
38、块块D4、D5 和和D6模模拟拟调调用用,分分别别对对新新子子系系统进行测试。统进行测试。第第二二步步,用用实实际际模模块块M2、M1和和M4替替换换驱驱动动模模块块D1、D2、D3。D6深度优先与宽度优先深度优先与宽度优先深度优先与宽度优先深度优先与宽度优先深度优先与宽度优先深度优先与宽度优先无论是无论是自顶而下增值还是自底而上增值,还可选择自顶而下增值还是自底而上增值,还可选择深度优先深度优先或者或者宽度优先宽度优先增值。增值。举例:按自顶而下增值法,写出下图中分别按照举例:按自顶而下增值法,写出下图中分别按照深度优先深度优先或或者者宽度优先宽度优先增值的模块组装次序。增值的模块组装次序。
39、ABCDHGJEFIKLMN确定集成过程的原则确定集成过程的原则确定集成过程的原则确定集成过程的原则确定集成过程的原则确定集成过程的原则 自顶而下增值自顶而下增值优点:能够尽早发现系统主控方面的问题。优点:能够尽早发现系统主控方面的问题。缺点:无法验证桩模块是否完全模拟了下属模块的功缺点:无法验证桩模块是否完全模拟了下属模块的功能。能。 自底而上自底而上自底而上自底而上增值增值优点:驱动模块较容易编写桩模块,能够尽早查出底优点:驱动模块较容易编写桩模块,能够尽早查出底层涉及较复杂的算法和实际的层涉及较复杂的算法和实际的I/OI/O模块中的错误。模块中的错误。缺点:最后才能发现系统主控方面的问题
40、。缺点:最后才能发现系统主控方面的问题。集成过程的原则集成过程的原则集成过程的原则集成过程的原则 尽早测试关键模块。尽早测试关键模块。尽早测试关键模块。尽早测试关键模块。 尽早测试包含尽早测试包含尽早测试包含尽早测试包含I/OI/OI/OI/O的模块。的模块。的模块。的模块。3 3 3 3 3 3、混合增值、混合增值、混合增值、混合增值、混合增值、混合增值常见的常见的混合增值方案:混合增值方案:衍变的自顶而下衍变的自顶而下先自底而上集成子系统,再自顶而下集成总系统。先自底而上集成子系统,再自顶而下集成总系统。自底而上自底而上自顶而下增值自顶而下增值对含有读操作的子系统采用自底而上。对含有读操作
41、的子系统采用自底而上。对含有写操作的子系统采用自顶而下。对含有写操作的子系统采用自顶而下。 回归测试回归测试 在回归测试中自底而上,对其余部分(尤其是在回归测试中自底而上,对其余部分(尤其是对修改过的子系统)采用自顶而下。对修改过的子系统)采用自顶而下。三、确认测试三、确认测试三、确认测试三、确认测试三、确认测试三、确认测试( ( ( ( ( (validation testingvalidation testingvalidation testingvalidation testingvalidation testingvalidation testing) ) ) ) ) )1 1、任务、
42、任务 又称为有效性测试或功能测试。其任务是验证又称为有效性测试或功能测试。其任务是验证系统的功能、性能等特性是否符合需求规格说明。系统的功能、性能等特性是否符合需求规格说明。选择测试人员选择测试人员选择测试用例选择测试用例实际运行测试实际运行测试软件计划软件计划用户文档用户文档开发文档开发文档源程序文本源程序文本支持环境支持环境有效性有效性测试测试软件软件配置配置审查审查管理管理机构机构裁决裁决专家专家鉴定会鉴定会交用户交用户运行维护运行维护测试报告测试报告软件配置软件配置2 2 2 2 2 2、确认测试步骤、确认测试步骤、确认测试步骤、确认测试步骤、确认测试步骤、确认测试步骤(1 1)有效性
43、测试)有效性测试制定测试计划,运用黑盒法,验证软件特性是制定测试计划,运用黑盒法,验证软件特性是否与需求符合。否与需求符合。(2 2)软件配置复查)软件配置复查软件配置软件配置 指软件工程过程中所产生的所有信指软件工程过程中所产生的所有信息项息项: :文档、报告、程序、表格、数据。随着软文档、报告、程序、表格、数据。随着软件工程过程的进展软件配置项(件工程过程的进展软件配置项(SCI software Configuration Item)快速增加和变化。应复查快速增加和变化。应复查SCI是否齐全。是否齐全。(3 3 3 3) 测试和测试和测试和测试和 测试测试测试测试 测试测试 是在开发机构
44、的监督下,由个别用户在是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价确认测试阶段后期对软件进行测试,目的是评价软件的软件的FLURPSFLURPS(功能、局域化、可使用性、可靠功能、局域化、可使用性、可靠性、性能和支持)性、性能和支持),注重界面和特色。注重界面和特色。 测试测试 由由支持软件预发行支持软件预发行的客户对的客户对FLURPSFLURPSFLURPSFLURPS进行进行测试,主要目的是测试系统的可支持性。测试,主要目的是测试系统的可支持性。F F F Function Testing unction Testing 功能测试功能测试 L L L Lo
45、cal Area Testing ocal Area Testing 局域化测试局域化测试U U U Usability Testing sability Testing 可使用性测试可使用性测试R R R Regression Testing egression Testing 回归测试回归测试P P P Performance Testing erformance Testing 性能测试性能测试S S S Supportability Testing upportability Testing 可支持可支持性测试性测试四、系统测试四、系统测试四、系统测试四、系统测试四、系统测试四、系统测
46、试(system testing system testing system testing system testing system testing system testing )将经过确认测试的软件,与计算机硬件、外设、将经过确认测试的软件,与计算机硬件、外设、支持软件等一起,在实际运行环境下测试。支持软件等一起,在实际运行环境下测试。五、验收测试(五、验收测试(acceptance testingacceptance testing)验收测试是以用户为主的测试。软件工程课程设验收测试是以用户为主的测试。软件工程课程设计的验收测试,计的验收测试,1919周进行。周进行。1 1、步骤为:
47、、步骤为:(1 1)由课题组根据测试用例,自己演示系统所有)由课题组根据测试用例,自己演示系统所有功能。功能。(2 2)由教师进行测试。)由教师进行测试。2 2、软件工程课程设计验收表、软件工程课程设计验收表、软件工程课程设计验收表、软件工程课程设计验收表文文档档文档数量文档数量文档质量文档质量文档与系统文档与系统一致性一致性创新性创新性总体总体(1212分)分)(1515分)分)(5 5分)分)(3 3分)分)(3535分)分)系系统统运运行行系统运行系统运行功能、性能系统结构系统结构总体设计合理性用户界面用户界面操作简便、帮助信息有无创新有无创新系统特色总体总体(2525分)分)(1010
48、分)分)(1010分)分)(5分)分)(50分)分)其其它它个人工作量验个人工作量验收操作收操作独立分析解决独立分析解决问题能力问题能力 团结协作团结协作精精 神神爱护公物遵爱护公物遵守纪律守纪律 总体总体(9 9分)分)(4 4分)分)(1 1分)分)(1 1分)分)(1515分)分)3 3 3 3 3 3、软件测试文档、软件测试文档、软件测试文档、软件测试文档、软件测试文档、软件测试文档模块测试报告模块测试报告至少选择一个典型模块进行测试。至少选择一个典型模块进行测试。A A、综合测试策略(静态分析、白盒法为主,辅以综合测试策略(静态分析、白盒法为主,辅以黑盒法)黑盒法)B B、测试情况(
49、根据覆盖标准列出)测试情况(根据覆盖标准列出)C C、测试用例(保留)测试用例(保留)D D、查错记录(数量、位置)、分析结果。查错记录(数量、位置)、分析结果。组装测试报告组装测试报告A A、组装次序、测试方法(以黑盒法为主)组装次序、测试方法(以黑盒法为主)B B、测试情况测试情况C C、测试用例(保留)测试用例(保留)D D、查错记录(数量、位置)、分析结果。查错记录(数量、位置)、分析结果。功能测试与系统测试功能测试与系统测试与上类似。与上类似。4 4 4 4 面向对象的测试面向对象的测试面向对象的测试面向对象的测试传统的观点认为测试要在编码之后才进行,假设测试传统的观点认为测试要在编
50、码之后才进行,假设测试的对象是程序代码。的对象是程序代码。 需求和设计是代码产生的基础,需要对需求和设计进需求和设计是代码产生的基础,需要对需求和设计进行测试。行测试。 需求或设计的测试通常以两种方式进行需求或设计的测试通常以两种方式进行: 一是在没有代码的情况下进行测试;一是在没有代码的情况下进行测试; 二是在有代码的情况下进行测试。二是在有代码的情况下进行测试。面向对象的测试,既要使用许多传统的成熟的软件测面向对象的测试,既要使用许多传统的成熟的软件测试方法和技术,也有其不同的特点;主要反映在测试对象试方法和技术,也有其不同的特点;主要反映在测试对象和内容的不同。和内容的不同。4.1 4.
51、1 4.1 4.1 分析模型测试的重要性分析模型测试的重要性分析模型测试的重要性分析模型测试的重要性 在在不不同同的的软软件件开开发发过过程程模模型型中中,需需求求、设设计计和和编编码码总总是是有有一一定定的的时时序序特特性性。需需求求模模型型、设设计计模模型型和和实实现现代代码码之之间间还还具具备备解解释释特性,即设计解释了需求,实现代码解释了设计。特性,即设计解释了需求,实现代码解释了设计。 1 1 1 1、需需需需求求求求的的的的质质质质量量量量影影影影响响响响并并并并决决决决定定定定了了了了设设设设计计计计的的的的质质质质量量量量,进进而而影影响响并并决决定定了了代码,直至整个系统的最
52、终质量。代码,直至整个系统的最终质量。必须首先重视需求的质量,而测试是质量保证的重要手段。必须首先重视需求的质量,而测试是质量保证的重要手段。 2 2 2 2、需需需需求求求求测测测测试试试试可可可可以以以以较较较较早早早早地地地地发发发发现现现现需需需需求求求求中中中中不不不不合合合合理理理理的的的的项项项项目目目目、以以及及错错误误地理解了用户需求的项目,避免对于成本和资源的消耗。地理解了用户需求的项目,避免对于成本和资源的消耗。 同时也减少了返工的几率,应尽早发现并解决这些问题。同时也减少了返工的几率,应尽早发现并解决这些问题。3 3 3 3、减减减减少少少少需需需需求求求求的的的的模模
53、模模糊糊糊糊性性性性,用用户户需需求求是是用用户户对对待待实实现现的的系系统统的的要要求求,通通常常以以一一种种非非正正规规的的形形式式给给出出,具具有有一一定定的的模模糊糊性性。这这种种模模糊糊性性带带入入了了设设计计,甚甚至至代代码码中中,将将可可能能引引发发几几倍倍,甚甚至至几几十十倍倍的的错误,这必将极大地消耗系统的资源和成本。错误,这必将极大地消耗系统的资源和成本。4.2 4.2 4.2 4.2 测试方法测试方法测试方法测试方法基于代码基于代码 代码走查(方法同传统测试)代码走查(方法同传统测试)静态静态基于非代码基于非代码 评审评审( (需求和设计规格说明需求和设计规格说明) )动
54、态动态 测试用例驱动代码执行测试用例驱动代码执行测试什么测试什么: 模型测试;模型测试; 系统(子系统)测试;系统(子系统)测试; 类测试;类测试; 接受测试;接受测试; 交互测试;交互测试; 发布发布/ /自我测试;自我测试;也分为静态测试和动态测试两类:也分为静态测试和动态测试两类: 正式正式 承担责任,写出评审报告承担责任,写出评审报告评审评审 非正式非正式 评评审审的的目目的的是是对对具具体体的的工工作作产产品品集集( (如如文文档档、源源代代码码) )进进行行评价,并对管理提供以下信息:评价,并对管理提供以下信息: 是否符合制定的软件规格;是否符合制定的软件规格; 是否按照项目的标准
55、和方法完成;是否按照项目的标准和方法完成; 是否所有的更改都正确地得到完成。是否所有的更改都正确地得到完成。在在UML中,对需求模型的测试:中,对需求模型的测试: 评审;评审; 事务流事务流( (场景场景) )模型等方法测试模型等方法测试( (需结合具体的模型描述需结合具体的模型描述) );测试的目的是发现代码中的错误,测试的关键是确定高测试的目的是发现代码中的错误,测试的关键是确定高效的测试用例。测试的主要步骤有:效的测试用例。测试的主要步骤有:、面向对象的单元测试、面向对象的单元测试测试测试单元单元单元单元为封装的类和对象,但不能孤立地测试单个操为封装的类和对象,但不能孤立地测试单个操作,
56、应把操作作为类的一部分来测试。作,应把操作作为类的一部分来测试。、面向对象的集成测试、面向对象的集成测试集成测试的策略有:集成测试的策略有:基于线程的测试基于线程的测试( (Thread-based testing) )基于使用的测试基于使用的测试( (Use-based testing) ) 3 3、面向对象的确认测试面向对象的确认测试类似传统的确认测试和系统测试,根据动态模型和描述类似传统的确认测试和系统测试,根据动态模型和描述系统行为的脚本来设计测试用例,可用黑盒法。系统行为的脚本来设计测试用例,可用黑盒法。一、评审计划需要列出的项目一、评审计划需要列出的项目( (解决测什么,什么时候测
57、,解决测什么,什么时候测,谁来测谁来测) ): 哪些人将参加评审会,各自的职责是什么;哪些人将参加评审会,各自的职责是什么; 需要准备哪些材料;需要准备哪些材料; 必须满足什么条件;必须满足什么条件; 要完成的检查单或其他的指标;要完成的检查单或其他的指标; 评审会完成所必须满足的条件或准则;评审会完成所必须满足的条件或准则; 评审会结束后需要保留归档的记录和文档。评审会结束后需要保留归档的记录和文档。二、参加评审人员:二、参加评审人员: 用户,软件项目负责人,软件工程师,软件配置管理人用户,软件项目负责人,软件工程师,软件配置管理人员,软件质量保证人员;软件独立验证与确认人员,软件开员,软件
58、质量保证人员;软件独立验证与确认人员,软件开发无关的专家。发无关的专家。评审计划评审计划 测试实际上也是一个项目。测试实际上也是一个项目。 测测试试也也有有需需求求、设设计计和和实实现现,并并且且测测试试本本身身也也会会有有测测试试( (测测试中的测试试中的测试) )。 测试作为项目开发活动中的一部分,在时间上应该有明确测试作为项目开发活动中的一部分,在时间上应该有明确的要求,测试计划对于测试来说也是至关重要的。的要求,测试计划对于测试来说也是至关重要的。 UML分析模型的每个模式,从严格意义上说都应该经过测分析模型的每个模式,从严格意义上说都应该经过测试。实际上,通常对用例模型、类对象模型以
59、及用例中典型场试。实际上,通常对用例模型、类对象模型以及用例中典型场景进行测试。景进行测试。4.3 4.3 4.3 4.3 测试过程测试过程测试过程测试过程 通常测试步骤如下:通常测试步骤如下: 测试用例模型测试用例模型 测试某些用例中的典型场景测试某些用例中的典型场景 类及对象模型类及对象模型 某些类测试其状态模型某些类测试其状态模型 1 1、用例、用例模型测试模型测试 重点是检查用例模型作为整体是否实现了用户需求。相当于重点是检查用例模型作为整体是否实现了用户需求。相当于系统测试。通过系统的用户对系统的功能需求来设计测试用例。系统测试。通过系统的用户对系统的功能需求来设计测试用例。 3、类
60、模型测试、类模型测试 对类模型的测试是分析模型的核心,通常是根据问题域来进对类模型的测试是分析模型的核心,通常是根据问题域来进行测试。行测试。黑盒法黑盒法 2、用例测试用例测试 是对某些用例中的典型场景进行测试,典型场景的测试关心是对某些用例中的典型场景进行测试,典型场景的测试关心的是用例的执行情况。的是用例的执行情况。评审评审 4 4、状态模型测试、状态模型测试 对重要的状态模型进行测试,分析阶段的测试只能采用对重要的状态模型进行测试,分析阶段的测试只能采用评审评审法,法,测试对象的生命期和转移事件的条件。测试对象的生命期和转移事件的条件。分析模型测试内容分析模型测试内容分析模型测试内容分析
61、模型测试内容 用例模型的测试相当于系统测试,测试的主要目标是用用例模型的测试相当于系统测试,测试的主要目标是用例模型对于用户需求的可跟踪性。例模型对于用户需求的可跟踪性。 用例模型的测试可以通过系统的可能用户对系统的功能用例模型的测试可以通过系统的可能用户对系统的功能要求来设计测试用例。要求来设计测试用例。 以系统的用户为主要的出发点设计测试用例,通过模拟以系统的用户为主要的出发点设计测试用例,通过模拟某个系统用户的行为来测试整个系统,对于该用户的服务提某个系统用户的行为来测试整个系统,对于该用户的服务提供情况,从而检查系统功能的完整性,用户需求可跟踪性等供情况,从而检查系统功能的完整性,用户
62、需求可跟踪性等情况。情况。 用例模型的测试从系统用户的角度测试系统的服务,并用例模型的测试从系统用户的角度测试系统的服务,并不关心每个测试用例所实现的功能如何,所以应该是黑盒测不关心每个测试用例所实现的功能如何,所以应该是黑盒测试。试。4.4 4.4 4.4 4.4 用例模型的测试用例模型的测试用例模型的测试用例模型的测试下面以一个订货中心系统的用例模型为例说明测试用例的设计。下面以一个订货中心系统的用例模型为例说明测试用例的设计。 识别五个主要的系统角色识别五个主要的系统角色( (用户用户) ): 管理者管理者( (Manager) )、发货人员发货人员( (Shipper) ) 收款人员收
63、款人员( (Toll collector) )、商务客户商务客户( (Customer) ) 信用卡信用卡( (Creditcard) ) 从各个角色出发通过下边的问题识别用例:从各个角色出发通过下边的问题识别用例: 角色要求系统提供的功能有哪些?系统在提供这些功能的角色要求系统提供的功能有哪些?系统在提供这些功能的时候该角色需要做什么?时候该角色需要做什么? 角色需要创建、阅读、销毁或存储系统的哪些信息?角色需要创建、阅读、销毁或存储系统的哪些信息? 系统中的哪些事件需要通知该角色?系统中的哪些事件需要通知该角色?以管理者为例:以管理者为例:(1)管理者要求系统为他提供什么功能?管理者需要做
64、哪些工作?管理者要求系统为他提供什么功能?管理者需要做哪些工作? 答:管理者要求系统提供答:管理者要求系统提供a.a.接受顾客订货请求并创建订单;接受顾客订货请求并创建订单;b.b.计算订单的价钱;计算订单的价钱;c.c.根据订单信息选择仓库,并将订单发送给仓库;根据订单信息选择仓库,并将订单发送给仓库;d.d.查询订单货物发送情况;查询订单货物发送情况;e.e.查询客户订单付款情况;查询客户订单付款情况;f.f.评价商务结果;评价商务结果;g.g.顾客退货处理;顾客退货处理;h.h.把仓库返回的订单发送到收费处;把仓库返回的订单发送到收费处;i.i.商品价格更新。商品价格更新。 管理者需要做
65、:管理者需要做:生成订单;查询订单时输入订单号。生成订单;查询订单时输入订单号。(2)管理者需要阅读创建、销毁、更新或者存储系统哪些信息?管理者需要阅读创建、销毁、更新或者存储系统哪些信息? 答:信息包括:订单、职员答:信息包括:订单、职员( (仓库人员、收费人员等仓库人员、收费人员等) )信息、信息、顾客信息、物品条目及价格信息、仓库信息和税务信息顾客信息、物品条目及价格信息、仓库信息和税务信息。(3)系统中的事件一定要告诉管理者吗?系统中的事件一定要告诉管理者吗? 答:是。这些事件包括:仓库有关物品短缺以致无法满足答:是。这些事件包括:仓库有关物品短缺以致无法满足某订单;订单数据出现错误;
66、顾客超过期限未付款。某订单;订单数据出现错误;顾客超过期限未付款。 可见,管理者要使用系统的十个功能,因此至少可以设计可见,管理者要使用系统的十个功能,因此至少可以设计出十个测试用例。出十个测试用例。 下面以第三条功能下面以第三条功能“根据订单信息选择仓库,并将订单发根据订单信息选择仓库,并将订单发送给该仓库送给该仓库”为例,为例,显然,不同的订单产生的结果可能是送往显然,不同的订单产生的结果可能是送往不同的仓库来处理。不同的仓库来处理。系统用户考虑分配订单到某仓库的因素:系统用户考虑分配订单到某仓库的因素: (1)(1)首先仓库必须能够满足订单上的货物要求;首先仓库必须能够满足订单上的货物要
67、求; (2)(2)选择地理位置与发货点较近的仓库发货;选择地理位置与发货点较近的仓库发货; (3)(3)信誉满意度越高的客户就越应该以较高的服务质量来回报。信誉满意度越高的客户就越应该以较高的服务质量来回报。三个订单信息如下:三个订单信息如下:订单号订单号送货地点送货地点货物名称及数量货物名称及数量客户信誉客户信誉订单订单1北城某集团公司北城某集团公司G1(200), G5(100), G10(40)95订单订单2 2东城某街道东城某街道 G5(10), G6(5)80订单订单3北城某街道北城某街道 G4(10)85仓库名称仓库名称仓库位置仓库位置存货品名及数量存货品名及数量订单处理订单处理客
68、户信誉度客户信誉度A A东城东城G1(200), G5(100), G6(1000), G10(70), G11(90)85B西城西城G1(1000), G2(100), G5(250), G8(150), G10(98)95C北城北城G1(220), G4(300), G5(350), G7(400), G10(700)80结合考虑上面三个因素,以最少的成本取得最好的收益,结合考虑上面三个因素,以最少的成本取得最好的收益,测试用例测试用例1: 输入:订单输入:订单1 预期结果:选择仓库预期结果:选择仓库B来处理订单来处理订单(三个均可,大宗订单,三个均可,大宗订单,客户信誉度高客户信誉度高)
69、;测试用例测试用例2: 输入:订单输入:订单2 预期结果:选择仓库预期结果:选择仓库A来处理订单来处理订单(个人订单,客户信誉一个人订单,客户信誉一般般);测试用例测试用例3: 输入:订单输入:订单3 预期结果:选择仓库预期结果:选择仓库C来处理订单。来处理订单。 以上测试未触及某个具体用例,体现了用例模型测试和用以上测试未触及某个具体用例,体现了用例模型测试和用例测试的区别。例测试的区别。 类模型是分析模型中的核心,它抽象出了问题域中的对象和类模型是分析模型中的核心,它抽象出了问题域中的对象和实体,以及它们在问题域中的职责。实体,以及它们在问题域中的职责。 为确保类模型的正确性和完整性,只根
70、据问题域测试类模型。为确保类模型的正确性和完整性,只根据问题域测试类模型。测试方法是测试方法是评审会评审会评审会评审会。 类图实际上由类和类之间的关系组成,评审会的检查单可从类图实际上由类和类之间的关系组成,评审会的检查单可从以下两个方面制定。以下两个方面制定。4.5 4.5 类模型的测试类模型的测试 针对每个类提问:针对每个类提问: (1)(1)该类在问题域中对应的实体该类在问题域中对应的实体( (或对象或对象) )是什么?是什么? (2)(2)履行什么职责?履行什么职责? (3)(3)在类图中被赋予了哪些职责?在类图中被赋予了哪些职责? (4)(4)该类在问题域中的职责和在类图中的职责能匹
71、配吗?该类在问题域中的职责和在类图中的职责能匹配吗? (5)(5)该类的每个数据属性都是问题域所关心的吗?该类的每个数据属性都是问题域所关心的吗?针对类图中的类之间的关系提问:针对类图中的类之间的关系提问: (1)(1)这这种种类类关关系系是是反反映映了了问问题题域域本本质质的的关关系系还还是是为为管管理理类类模模型型而而引引入入的的关关系系?( (如如果果类类之之间间的的关关系系并并非非反反映映问问题题域域的的本本质质,那么这个关系的存在就值得怀疑。那么这个关系的存在就值得怀疑。) ) (2)(2)仔仔细细检检查查每每个个继继承承关关系系,到到底底是是聚聚集集关关系系还还是是继继承承关关系系
72、? (3)(3)针针对对关关联联关关系系中中的的关关联联数数目目,提提一一些些问问题题结结合合实实际际场场景景来考察。来考察。 从模型的角度可以关心如下问题:从模型的角度可以关心如下问题: (1)(1)状态模型刻画了对象的生命周期吗?状态模型刻画了对象的生命周期吗? (2)(2)针对每个状态而言,状态转移触发条件是状态转移的充分针对每个状态而言,状态转移触发条件是状态转移的充分条件吗?条件吗? (3)(3)对象在问题域需要响应的所有条件是否在状态模型中都有对象在问题域需要响应的所有条件是否在状态模型中都有响应?响应? (4)(4)关心对象在某些状态中的动作,如果对象需要发送消息给关心对象在某些
73、状态中的动作,如果对象需要发送消息给其它对象,那么此时接收该消息的对象处在其声明周期的什么阶其它对象,那么此时接收该消息的对象处在其声明周期的什么阶段?段? (5)(5)从初始状态开始,每个状态都可以达到吗?从初始状态开始,每个状态都可以达到吗?4.64.6 类状态模型的测试类状态模型的测试 类状态模型描述了一个对象在问题域中的活动历程。类状态模型描述了一个对象在问题域中的活动历程。 在分析阶段,识别的对象还只是停留在较粗的层次上,因在分析阶段,识别的对象还只是停留在较粗的层次上,因此,对象状态模型的测试通常只能采用评审会的办法。只测试此,对象状态模型的测试通常只能采用评审会的办法。只测试在问
74、题域中非常重要的对象,如电梯系统中的电梯对象。在问题域中非常重要的对象,如电梯系统中的电梯对象。 上述五个问题可以作为评审会问题检查单的选择。上述五个问题可以作为评审会问题检查单的选择。对问题对问题(1): 检查状态模型对于对象状态的划分,一旦出现识别的状态检查状态模型对于对象状态的划分,一旦出现识别的状态不足,或者某些状态超出问题域的关心,分析原因,分析员在不足,或者某些状态超出问题域的关心,分析原因,分析员在评审会报告想法和理由。评审会报告想法和理由。对问题对问题(2): 检查状态转移条件,验证当触发条件满足时是否会出现状检查状态转移条件,验证当触发条件满足时是否会出现状态转移,要求触发条
75、件是最简化的态转移,要求触发条件是最简化的(无冗余条件无冗余条件)。对问题对问题(3): 通过一张对照表可以找出答案。通过一张对照表可以找出答案。 对问题对问题(4): 检查较复杂,容易发现分析错误的一个环节。通常,分析员检查较复杂,容易发现分析错误的一个环节。通常,分析员以为进行交互的其它对象都处于以为进行交互的其它对象都处于“良好良好”状态,但这个假设常常状态,但这个假设常常不能成立,因为两个不同的对象可能与相应的事件会有交叉不能成立,因为两个不同的对象可能与相应的事件会有交叉( (如定如定时事件时事件) )。因此,当当前分析的对象发生了状态转移时,其它对象。因此,当当前分析的对象发生了状
76、态转移时,其它对象也发生了状态转移,所以在对象发送消息给其它对象时,也要注也发生了状态转移,所以在对象发送消息给其它对象时,也要注意接收该消息的对象是否处于合适的状态中。意接收该消息的对象是否处于合适的状态中。 对问题对问题(5): 如果某个状态根本就不可达到,那么可以断定分析模型有错如果某个状态根本就不可达到,那么可以断定分析模型有错误。误。 类级别的单元测试中,状态模型可以辅助进行测试用例的模类级别的单元测试中,状态模型可以辅助进行测试用例的模型。型。 顺着不同的状态演变路径来测试对象的动作行为顺着不同的状态演变路径来测试对象的动作行为( (操作序列操作序列) ),如帐号对象的状态图。,如
77、帐号对象的状态图。opensetupdeposit (initial)depositwithdrawbalance countwithdraw (final)close空帐号空帐号帐号设置帐号设置工作帐号工作帐号无效帐号无效帐号当空帐号当空帐号银行帐号共有银行帐号共有5个生命周期状态,设计下面的测试用例:个生命周期状态,设计下面的测试用例:(1)测试用例测试用例1: open, setup, deposit (initial), withdraw (final), close;(2)测试用例测试用例2: open, setup, deposit (initial), deposit, bala
78、nce count, withdraw (final), close;(3)测试用例测试用例3: open, setup, deposit (initial), deposit, withdraw, balance count, withdraw (final), close.上述测试用例覆盖每个状态,并增量测试每个状态的转移。上述测试用例覆盖每个状态,并增量测试每个状态的转移。 该例不涉及复杂对象之间的交互情况,有对象交互的测试该例不涉及复杂对象之间的交互情况,有对象交互的测试用例设计将更加困难。用例设计将更加困难。 如果通过覆盖状态模型中的每个状态和每个状态转移,那如果通过覆盖状态模型中的
79、每个状态和每个状态转移,那么就可以测试到对象之间的各种情况。么就可以测试到对象之间的各种情况。类状态模型的测试类状态模型的测试 典型场景是指系统用户经常使用系统的方式。典型场典型场景是指系统用户经常使用系统的方式。典型场景是用例模型的一个实例。景是用例模型的一个实例。 典型场景测试主要关注用例执行情况,典型场景测试典型场景测试主要关注用例执行情况,典型场景测试可能涉及到不止一个用例,通常测试的是系统的功能。可能涉及到不止一个用例,通常测试的是系统的功能。 测测试试可可以以根根据据需需求求分分析析出出发发列列出出的的一一些些典典型型场场景景( (顺顺序序图图模模型型所所描描述述) )进进行行。如
80、如果果无无典典型型场场景景的的顺顺序序图图模模型型,可可以以把把几几个个不不同同用用例例的的顺顺序序图图模模型型联联合合起起来来,并并选选择择一一条条对对象象交互链作为一个典型场景,这个场景就是测试用例。交互链作为一个典型场景,这个场景就是测试用例。4.7 4.7 典型场景的测试典型场景的测试5 5 软件纠错技术软件纠错技术软件纠错技术软件纠错技术软件测试的目的是发现错误,在发现错误后,软件测试的目的是发现错误,在发现错误后,则应按照一定的技术去纠正它。纠错的关键是则应按照一定的技术去纠正它。纠错的关键是“错误定位错误定位”。一、纠错的原则一、纠错的原则1 1、注意错误的、注意错误的“群集现象
81、群集现象”。2 2、不能只修改错误的征兆、表现。还应该修、不能只修改错误的征兆、表现。还应该修改错误的本质。改错误的本质。3 3、注意在修改一个错误的同时,又引入新的、注意在修改一个错误的同时,又引入新的错误。错误。二、纠错的技术二、纠错的技术二、纠错的技术二、纠错的技术二、纠错的技术二、纠错的技术1 1、硬性纠错、硬性纠错又称为蛮干法,是使用较多,效率较低的方法。又称为蛮干法,是使用较多,效率较低的方法。主存信息转储法主存信息转储法关键部分设置打印语句关键部分设置打印语句使用自动纠错工具使用自动纠错工具2 2、回、回溯法排错溯法排错适用于小程序。发现错误时,人工沿控制流适用于小程序。发现错误
82、时,人工沿控制流追踪源代码程序。追踪源代码程序。3 3 3 3 3 3、归纳法、归纳法、归纳法、归纳法、归纳法、归纳法 从测试结果发现的错误入手,分析它们之间的从测试结果发现的错误入手,分析它们之间的联系查找错误。是一种从特殊推断一般的系统化联系查找错误。是一种从特殊推断一般的系统化思考方法。思考方法。收集收集有关数据有关数据组织数据组织数据研究数据研究数据间的关系间的关系提出假设提出假设证明假设证明假设纠正错误纠正错误能能能能不能不能不能不能列出所有已知列出所有已知的测试用例和的测试用例和程序执行结果程序执行结果常用的构造常用的构造线索的技术线索的技术是是“分类法分类法”分析线索之间分析线索
83、之间的关系,找出的关系,找出矛盾,设计出矛盾,设计出错原因的假设错原因的假设归纳排错法步骤归纳排错法步骤将假设与原始线索将假设与原始线索或数据进行比较,或数据进行比较,能否解释现象,证能否解释现象,证明假设。明假设。yesnoWhatWhenwhereHow4 4 4 4 4 4、演绎法排错、演绎法排错、演绎法排错、演绎法排错、演绎法排错、演绎法排错 演绎法是一种从一般原理出发,经过排除和精演绎法是一种从一般原理出发,经过排除和精化的过程,推导出结论的方法。化的过程,推导出结论的方法。列举可能列举可能的原因的原因排除不适排除不适当的原因当的原因对保留的假对保留的假设继续推断设继续推断证明证明假设假设纠正纠正错误错误收集更多收集更多的数据的数据没有剩余没有剩余不能不能能能有剩余有剩余演绎法排错的步骤演绎法排错的步骤