《09第九章软件测试软件工程教案海南大学(共15章)》由会员分享,可在线阅读,更多相关《09第九章软件测试软件工程教案海南大学(共15章)(180页珍藏版)》请在金锄头文库上搜索。
1、 软件工程(第二版) 齐治昌、谭庆平、宁洪 编著 高等教育出版社主讲:陈明锐主讲:陈明锐教授教授省省级级精精品品课课程程第九章第九章软件测试软件测试 所谓软件测试是通过检查和提供客所谓软件测试是通过检查和提供客观证据表明软件已经满足规定的需求。观证据表明软件已经满足规定的需求。软件测试是确保软件质量和降低软件成软件测试是确保软件质量和降低软件成本的重要手段,是软件开发时期的最后本的重要手段,是软件开发时期的最后一个阶段,也是软件质量保证中至关重一个阶段,也是软件质量保证中至关重要的一个环节。本章将重点讨论测试的要的一个环节。本章将重点讨论测试的策略与技术,纠错的策略与技术,以及策略与技术,纠错
2、的策略与技术,以及多模块软件的多模块软件的 软件测试内容与方法。软件测试内容与方法。第九章第九章软件测试软件测试测试的基本概念测试的基本概念 黑盒测试黑盒测试 白盒测试白盒测试 测试用例设计测试用例设计 软件纠错软件纠错多模块程序的测试策略多模块程序的测试策略 面向对象系统的测试面向对象系统的测试 测试的基本概念测试的基本概念 测试(测试(testingtesting)的目的与任务的目的与任务 目的:发现程序的错误目的:发现程序的错误 任务:通过执行程序,暴露潜在的错误任务:通过执行程序,暴露潜在的错误 纠错(纠错(debuggingdebugging)的目的与任务的目的与任务 目的:定位和纠
3、正错误目的:定位和纠正错误 任务:消除软件故障,保证程序的可靠任务:消除软件故障,保证程序的可靠 运行运行 大程序大程序设立独立的测试小组设立独立的测试小组调试调试测试的特性测试的特性 挑剔性挑剔性 抱着为证明程序有错的目的去测试抱着为证明程序有错的目的去测试 复杂性复杂性 设计合适的测试用例设计合适的测试用例 不彻底性不彻底性 DijkstraDijkstra 一句名言:一句名言:“程序测试只能程序测试只能证明错误的存在,但不能证明错误不存证明错误的存在,但不能证明错误不存在在” 经济性经济性 进行有限的测试进行有限的测试有关测试的思考题有关测试的思考题 软件测试是一门非常重要的学科,主要软
4、件测试是一门非常重要的学科,主要研究内容是什么?研究内容是什么? 软件测试需要什么样的专业基础?软件测试需要什么样的专业基础? 软件质量到底是什么?软件质量到底是什么? 测试的目标是什么?测试的目标是什么? 开发一个测试系统之前你是否明白开发一个测试系统之前你是否明白: : 可以可以测试什么?测试什么? 应该应该测试什么?测试什么? 最终最终能够能够测试什么?测试什么? 测试的目标是什么?测试的目标是什么? 软件产品最大的成本是检测软软件产品最大的成本是检测软 件错误、修正软件件错误、修正软件错误的成本错误的成本。 软件在需求分析和设计阶段占用的工作软件在需求分析和设计阶段占用的工作量达到总工
5、作量的量达到总工作量的40405050,说明软件开,说明软件开发前期的活动多么重要。当然这也包括分阶发前期的活动多么重要。当然这也包括分阶段开发原型的开销。大家熟悉的编码工作只段开发原型的开销。大家熟悉的编码工作只占全部工作量的占全部工作量的10102020,而软件测试和,而软件测试和调试的工作量占到总工作量的调试的工作量占到总工作量的30304040,甚至甚至50%50%。 在人命关天的软件在人命关天的软件( (如飞机控制、核反应堆等)测如飞机控制、核反应堆等)测试所花费的时间往往是其它软件工程活动时间之和的试所花费的时间往往是其它软件工程活动时间之和的三到五倍。三到五倍。有关测试的思考题有
6、关测试的思考题软件测试背景软件测试背景软件是人编的所以不完美实例实例:1994-1995,迪斯尼的狮子王系统不支持问题迪斯尼的狮子王系统不支持问题Intel的的pentium处理器处理器1994年年浮点除法缺陷浮点除法缺陷2000年年8月月28日,日,1.13MHZ处理器一个可能导处理器一个可能导致运行程序被挂起的执行指令问题致运行程序被挂起的执行指令问题1999年年12月月3日日,美国航天局火星极地登陆飞船失美国航天局火星极地登陆飞船失踪踪1991年爱国者导弹防御系统系统时钟错误积累造年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度成跟踪系统失去精确度千年虫千年虫,世界各地解决世界
7、各地解决2000年错误超过数亿美元年错误超过数亿美元软件测试的认识的发展软件测试的认识的发展人们对软件测试认识的五个阶段:人们对软件测试认识的五个阶段:阶段阶段1 测试测试=调试调试阶段阶段2 测试是证明软件正确测试是证明软件正确阶段阶段3 测试是发现软件中错误测试是发现软件中错误阶段阶段4 测试是减小软件不工作的风险测试是减小软件不工作的风险 (是度量软件质量要素的过程)(是度量软件质量要素的过程)阶段阶段5 测试可产生低风险的软件的一测试可产生低风险的软件的一 种认识上的训练种认识上的训练 三个盲人和一头大象:你能够为质量三个盲人和一头大象:你能够为质量 下定义吗?下定义吗?质量管理领域权
8、威人物质量管理领域权威人物J.M.Juran将将质量质量定义为定义为“决定产品性能和决定产品性能和满意程度满意程度的的特征特征”, , 测试注重于产品的满意度。测试注重于产品的满意度。 测试应针对这样一种情况:测试应针对这样一种情况: 软件产品在一些特定的范围内不能满足客户的合理要软件产品在一些特定的范围内不能满足客户的合理要求。求。 通过通过测试测试过程可以评定过程可以评定质量风险(可能的错误)质量风险(可能的错误),了解被测试系统中存在的了解被测试系统中存在的错误模式(观察到的错错误模式(观察到的错误症状)。误症状)。质量控制技术质量控制活动分类质量控制活动分类开发方法学开发方法学配置管理
9、配置管理验证技术验证技术评评 审审正确性验证正确性验证性能调试性能调试组件测试组件测试集成测试集成测试系统测试系统测试原子事务原子事务模块冗余性模块冗余性检检 错错质量控制质量控制避免错误避免错误容容 错错调调 试试测测 试试软件质量问题以软件测试为中心的软件质量保障技术以软件测试为中心的软件质量保障技术软件软件 静态测试技术静态测试技术质量质量 软件度量技术软件度量技术控制控制 动态测试技术动态测试技术技术技术 配置管理技术配置管理技术 修改控制与管理技术修改控制与管理技术 软件测试是保证软件质量软件测试是保证软件质量, ,提高提高软件可靠性的关键软件可靠性的关键软件测试的目标(1)预防错误
10、预防错误: 几乎不可实现几乎不可实现(2)发现错误发现错误测试的地位测试的地位 G.J.MyersG.J.Myers在在 中认为中认为: :1 1. .测试是为了测试是为了寻找寻找错误而错误而运行运行程序的过程程序的过程。2 2. .一个好的一个好的测试测试用例是指很可能找到迄今为止尚未发现的错用例是指很可能找到迄今为止尚未发现的错误的测试。误的测试。3.3.一个成功的测试一个成功的测试是是揭示了迄今为止尚未发现的错误的测试。揭示了迄今为止尚未发现的错误的测试。 E.W.DijkstraE.W.Dijkstra 指出指出: :“程序测试能证明错误的存在程序测试能证明错误的存在, ,但但不能证明
11、错误不存在不能证明错误不存在.”.” 测试的目的是发现程序中测试的目的是发现程序中的错误的错误, ,是为了是为了证明程序有错证明程序有错, ,而不是证明程序无错而不是证明程序无错. . 把把证证明明程程序序无无错错当当作作测测试试目目的的不不仅仅是是不不正正确确的的, , 完完全全做做不不到到的的,而而且且对对做做好好测测试试没没有任何益处,甚至是有任何益处,甚至是十分有害十分有害的的. . 软件测试要设法使软件发生故障软件测试要设法使软件发生故障, ,暴露软件错误暴露软件错误 测试的测试的“成功成功”与与“失败失败” 能够发现错误的测试是成功的能够发现错误的测试是成功的测试,否则是失败的测试
12、。测试,否则是失败的测试。 “测测试试的的目目的的是是说说明明程程序序正正确确地地执执行行它它应有的功能应有的功能” 这种说法正确吗?这种说法正确吗?例例:程程序序TriangleTriangle,输输入入三三个个整整数数,表表示示一一个个三三角角形形的的三三个个边边长长,该该程程序序产产生生一一个个结结果果,指指出出该该三三角角形形是是等等边边三三角角形形、等等腰腰三三角角形形还还是不等边三角形。是不等边三角形。 为为说说明明其其能能正正确确执执行行它它的的功功能能,可可使使用用“测试用例测试用例”(3,4,5),(5,5,6),(6,6,6), (3,4,5),(5,5,6),(6,6,6
13、), 程程序序都都能能给给出出正正确确结结果果,是是否否就就可可认认为为程程序序是正确的?是正确的?难以说清的软件缺陷难以说清的软件缺陷古谚:古谚: “一片树叶飘落在森林中没有人听见,一片树叶飘落在森林中没有人听见, 谁能说它发出了声音?谁能说它发出了声音?” 由于不能报告没有看见的问题,因此,由于不能报告没有看见的问题,因此,没有看见就不能说存在软件缺陷没有看见就不能说存在软件缺陷 如果软件中的问题没有人发现,那如果软件中的问题没有人发现,那么它算不算软件缺陷?么它算不算软件缺陷?” 只有看到了,才能断言软件缺陷,尚未只有看到了,才能断言软件缺陷,尚未发现的软件缺陷只能说是未知软件缺陷。发现
14、的软件缺陷只能说是未知软件缺陷。眼见为实测试原则测试原则(1)(1)所有的测试都应追溯到用户需求所有的测试都应追溯到用户需求 最严重的错误最严重的错误( (从用户角度从用户角度) )是那些导是那些导致软件无法满足需求的错误。致软件无法满足需求的错误。 程序中的问题根源程序中的问题根源可能在开发可能在开发 前前期的各阶段解决、纠正错误也必须追溯到期的各阶段解决、纠正错误也必须追溯到前期工作前期工作。测试与开发前期工作的关系决定软件与系统的配合关系决定软件与系统的配合关系需求分析需求分析概要设计概要设计详细设计详细设计 编编 码码单元测试单元测试集成测试集成测试确认测试确认测试系统测试系统测试测试
15、与开发个阶段的对应关系软件开发与测试的对应关系,如下图所示:软件开发与测试的对应关系,如下图所示:开发前期出现错误的扩展开发前期出现错误的扩展计划计划需求需求分析分析设设计计编编码码测测试试A A AB B软件生存期各阶段间需保持的正确性用户要求用户要求用户用户: :我要什么我要什么? ?运行结果运行结果计算机计算机: :程序运行得程序运行得到的结果到的结果源程序源程序程序员程序员: :我要让计算我要让计算机什么做机什么做? ?设计说明书设计说明书设计员设计员: :我要让软件我要让软件做什么做什么? ?需求说明书需求说明书分析员分析员: :我可以提我可以提供什么供什么? ?12345理解正确性
16、理解正确性表达正确性表达正确性理解正确性理解正确性设计正确性设计正确性表达正确性表达正确性理解正确性理解正确性编码正确性编码正确性运行正确性运行正确性输入正确性输入正确性相符吗相符吗? ? (2)(2)概要设计时应完成测试计划,概要设计时应完成测试计划, 详细的测试用例定义可在设计详细的测试用例定义可在设计 模型确定后开始,所有测试可模型确定后开始,所有测试可 在任何代码被产生之前进行计在任何代码被产生之前进行计 划和设计。划和设计。 测试原则测试原则 软件测试不等于程序测试软件测试不等于程序测试 软件测试应贯穿于软件定义与开发的软件测试应贯穿于软件定义与开发的整个期间;整个期间; 据美国一家
17、公司统计,查出的软件错误中,据美国一家公司统计,查出的软件错误中,属于属于需求分析和软件设计的错误需求分析和软件设计的错误约占约占 64%64%,属于程序编写的错误仅占,属于程序编写的错误仅占 36%36%。程序编。程序编写的许多错误是写的许多错误是“先天的先天的”。单元测试单元测试: : 检验每个模块能否单独检验每个模块能否单独 工作工作. .集成测试集成测试: : 检验概要设计中模块接检验概要设计中模块接 口设计问题口设计问题确认测试确认测试: : 以需求规格说明书为检以需求规格说明书为检 验尺度验尺度系统测试系统测试: : 综合检验综合检验测试可视为分析、设计、编码三个阶测试可视为分析、
18、设计、编码三个阶段的最终复审段的最终复审, ,以保证软件质量以保证软件质量。测试阶段工作步骤测试阶段工作步骤 (3)pareto(3)pareto原则:测试发现的错误中原则:测试发现的错误中80%80%很可很可能起源于能起源于20%20%的模块中。应孤立这些疑点模的模块中。应孤立这些疑点模块重点测试。块重点测试。(4)(4)穷举测试是不可能的。穷举测试是不可能的。(5)(5)应由独立的底三方来构造测试。应由独立的底三方来构造测试。 (开发和测试队伍分别建立开发和测试队伍分别建立)测试原则测试原则测试原则例例: :测试计算器程序测试计算器程序加法测试加法测试1+0=1+0=1+999999999
19、99999999999999999999999=1+99999999999999999999999999999999=2+0=2+0=2+99999999999999999999999999999999=2+99999999999999999999999999999999=99999999999999999999999999999999+9999999999999999999999999999999999999999999999999999999999999999+99999999999999999999999999999999= =1.0+0.1=1.0+0.1=1.0+0.2=1.0+0.
20、2=减法测试减法测试乘法测试乘法测试除法测试除法测试求平方根求平方根百分数百分数倒数倒数(6)(6)测试用例应由输入数据和预期的输测试用例应由输入数据和预期的输 出结果两部分组成出结果两部分组成. . (7) (7)兼顾合理的输入和不合理的输入数据兼顾合理的输入和不合理的输入数据 (8)(8)程序修改后要回归测试程序修改后要回归测试 (9)(9)应长期保留测试用例,直至系统废弃。应长期保留测试用例,直至系统废弃。测试原则测试原则测试原则:软件测试是有风险的行为数数量量遗漏软件遗漏软件缺陷数目缺陷数目测试费用测试费用测试中测试中测试后测试后软件测试工作量测试工作量每一个软件项目都有一个最优的测量
21、量每一个软件项目都有一个最优的测量量最优测量量最优测量量可可测试测试性性 可测试软件的特征:可测试软件的特征:可操作性可操作性可观察性可观察性可控制性可控制性可分解性可分解性简单性简单性稳定性稳定性易理解性易理解性 “好好”测试的属性:测试的属性: 发现错误的可能性高发现错误的可能性高不冗余不冗余在目的相似的测试中,应使用最可能在目的相似的测试中,应使用最可能找到错误的测试找到错误的测试每一个测试应独立执行每一个测试应独立执行错误错误(fault)、误差误差(error)和故障和故障(failure)出轨出轨( (出故障出故障)?)?图中不表示故障,因为既没有指定期望行为也没有任何观察的行为,
22、它也不表示误差,因为这不意味着系统正处在进一步处理将导致故障的状态.错误错误(fault)、误差误差(error)和故障和故障(failure)用例名称用例名称 DriveTrainDriveTrain参与执行者参与执行者 火车司机火车司机入口条件入口条件 司机按下控制面板上的司机按下控制面板上的StrartTrainStrartTrain事件流事件流 1.1.列车开始在轨道列车开始在轨道1 1上运行上运行 2.2.列车平移到轨道列车平移到轨道2 2退出条件退出条件 列车运行在轨道列车运行在轨道2 2上上特殊条件特殊条件 没有没有用例用例DriveTrainDriveTrain指定了列车的期望
23、行为指定了列车的期望行为: :错误(fault)、误差(error)和故障(failure)测试用例标识符测试用例标识符 DriveTrainDriveTrain测试位置测试位置 http:/www12.in.tum.de/http:/www12.in.tum.de/要测试的特征要测试的特征 引擎连续运行引擎连续运行5s5s特征合格特征合格/ /不合格标准不合格标准 如果列车连续前进如果列车连续前进5s,5s,并且至少并且至少 通过两个轨道的长度通过两个轨道的长度, ,则测试通过则测试通过控制方法控制方法 驱动程序驱动程序StrartTrainStrartTrain调用调用StrartTrai
24、nStrartTrain() () 方法方法数据数据 从输入文件从输入文件http:/www12.in.tum.de/http:/www12.in.tum.de/中中 得到运行方向和持续时间得到运行方向和持续时间 用例用例DriveTrainDriveTrain的测试用例的测试用例DriveTrainDriveTrain : :执行这个测试用例时,可以证明系统是包含有错误的软件测试有关概念术语和定义 软件测试要精度还是准确度很大程度上取决软件测试要精度还是准确度很大程度上取决于产品是什么,最终取决于开发小组的目标。于产品是什么,最终取决于开发小组的目标。既不准确又不精确精确但不准确准确但不精确
25、既准确又精确精确和准确精确和准确软件测试有关概念术语和定义验证和合法性检查验证和合法性检查验证是检查软件符合产品说明书的过程验证是检查软件符合产品说明书的过程合法性检查是保证软件满足用户要求的过程合法性检查是保证软件满足用户要求的过程质量和可靠性质量和可靠性 可靠性只是质量的一个方面可靠性只是质量的一个方面测试和质量评判(测试和质量评判(QA)软件测试员的目标是找出软件缺陷软件测试员的目标是找出软件缺陷软件质量评判人员的主要职责是创建和加强软件质量评判人员的主要职责是创建和加强 促进软件开发并防止软件缺陷的标准和方法促进软件开发并防止软件缺陷的标准和方法 测试 (test) 调试 (debug
26、)以已知条件开始以已知条件开始, ,使用预先定义的程序使用预先定义的程序, ,有预知的结果有预知的结果以不可知内部条件以不可知内部条件开始开始, ,结果一般不可结果一般不可预见预见有计划有计划被动的被动的由独立的测试组,在由独立的测试组,在不了解软件设计的条不了解软件设计的条件下完成件下完成由程序作者进行由程序作者进行发现错误发现错误找出错误位置,排除找出错误位置,排除测试与调试测试与调试( (排错排错) )软件错误分类软件错误分类 功能错功能错( (需求分析错误需求分析错误) ) 软件结构错软件结构错 数据错数据错 编码错编码错 软件集成错软件集成错 测试定义与测试执行错误测试定义与测试执行
27、错误 测试用例测试用例设计设计 选择测试用例是软件测试员最重要选择测试用例是软件测试员最重要 的一项工作。的一项工作。测试用测试用例例的的属性属性: :属性属性 描述描述name name 测试用例的名称测试用例的名称 location location 可执行的完全路径名可执行的完全路径名 input input 输入数据或命令输入数据或命令oracle oracle 与测试输入相比较的期待测试结果与测试输入相比较的期待测试结果log log 测试生产的输出测试生产的输出程序测试举例程序测试举例例:程序例:程序 TriangleTriangle, 输入三个整输入三个整 数,表示一个三角形的三
28、个边数,表示一个三角形的三个边 长,该程序产生一个结果,指长,该程序产生一个结果,指 出该三角形是等边三角形、等出该三角形是等边三角形、等 腰三角形还是不等边三角形。腰三角形还是不等边三角形。判断三角型的测试用例设计判断三角型的测试用例设计: : 输入数据输入数据 预期结果预期结果(1) 6;6;6 (1) 6;6;6 等边等边(2) 8;8;4 (2) 8;8;4 等腰等腰(3) 4;5;6 (3) 4;5;6 一般一般 还应输入还应输入非法数据非法数据: 0; 7; 90; 7; 9 -7;3; 5 -7;3; 5 a; 2; 7 a; 2; 7 等等软件测试信息流软件测试信息流软件软件配
29、置配置测试测试测试测试配置配置测试测试工具工具结果结果分析分析排错排错可靠性可靠性 分析分析测试测试结果结果错误错误预期预期结果结果出错率出错率 改正改正的软件的软件预测预测的可的可靠性靠性需求规格说明书需求规格说明书软件设计说明书软件设计说明书 被测源程序被测源程序 测试计划测试计划 测试用例测试用例( (测试数据测试数据) )测试驱动程序测试驱动程序测试设计中需要考虑的22种测试类型黑盒黑盒测试测试白盒测试白盒测试单元测试单元测试累计综合测试累计综合测试集成测试集成测试功能测试功能测试系统测试系统测试端到端测试端到端测试健全测试健全测试衰竭测试衰竭测试接受测试接受测试负载测试负载测试强迫测
30、试强迫测试性能测试性能测试可用性测试可用性测试安装安装/卸载测试卸载测试恢复测试恢复测试兼容测试兼容测试安全测试安全测试比较测试比较测试Alpha测试测试Beta测试测试静态静态和动态和动态测试测试汽车的检查过程汽车的检查过程: :踩油门踩油门看车漆看车漆打开前盖检查打开前盖检查发动汽车发动汽车听听发动机声音听听发动机声音上路行使上路行使静态测试静态测试动态动态测试测试静态测试:静态测试:基本特征是在对软件进行基本特征是在对软件进行 分析、检查和分析、检查和审阅,审阅,不实不实 际运行被测试的软件。际运行被测试的软件。 静态测试约可找出静态测试约可找出303070%70%的逻辑设计错误的逻辑设
31、计错误. . 对对需求规格说明书需求规格说明书、软件设计说明书软件设计说明书、源程序源程序做检查和做检查和审阅审阅,包括:包括:是否符合标准和规范;是否符合标准和规范;通过通过结构分析、流图分析、符号执行结构分析、流图分析、符号执行指出软件指出软件 缺陷缺陷; 动态测试:动态测试:通过运行软件来检验软通过运行软件来检验软件的动态行为和运行结果的正确性件的动态行为和运行结果的正确性动态测试的两个基本要素:动态测试的两个基本要素:u 被测试程序被测试程序u 测试数据(测试用例)测试数据(测试用例)动态测试方法动态测试方法(1)(1)选取定义域有效值选取定义域有效值, ,或定义域或定义域 外无效值外
32、无效值. .(2)(2)对已选取值决定对已选取值决定预期的结果预期的结果(3)(3)用选取值执行程序用选取值执行程序(4)(4)执行结果执行结果 与与(2)(2)结果相比结果相比, , 不吻不吻合合程序有错程序有错. .动态黑盒测试动态黑盒测试 闭着眼睛测试软件闭着眼睛测试软件软件输入输入 不深入代码细节的测试方法称为动态黑盒测试。不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。软件测试员充当客户来使用它。输出输出动态白盒测试动态白盒测试 带上带上X光眼镜测试软件光眼镜测试软件? ?3581322.293419985680302829734315250*(1+0.015)
33、*(1+0.015)360-1)/0.015250*(1+0.015)*(1+0.015)360-1)/0.015 假如知道一个盒子包含一台计算机假如知道一个盒子包含一台计算机, ,而另一个而另一个盒子是人用纸笔计算盒子是人用纸笔计算, ,就会选择不同的测试用例就会选择不同的测试用例了解软件的运作方式会影响测试手段了解软件的运作方式会影响测试手段测试的种类测试的种类 静态分析静态分析(不执行程序)(不执行程序)动态分析动态分析(执行程序)(执行程序)静态分析器静态分析器(自动方式)(自动方式)黑盒测试(测试程序功能)黑盒测试(测试程序功能)白盒测试(测试程序结构)白盒测试(测试程序结构)代码复
34、审代码复审程序程序测试测试(自动方式)(自动方式)代码会审代码会审走走查查办公桌检查办公桌检查软件测试的软件测试的自动方式自动方式 另一类软件测试工具,可以自动执行测试用例、查找软件缺陷、分析并记录测试结果。测试工作台(下游CASE工具)源代码源代码预测器预测器测试管理器测试管理器测试预估测试预估模拟器模拟器文件比较器文件比较器报告生成器报告生成器动态分析器动态分析器被测试被测试的程序的程序测试数据测试数据测试结果测试结果测试结测试结果报告果报告执行报告执行报告测试数据生成器测试数据生成器规约规约随机测试自动化工具:猴子测试员一个想法一个想法: : “如果让如果让一百万只猴一百万只猴子在一百万
35、子在一百万只键盘上敲只键盘上敲一百万年一百万年, ,它们最终就它们最终就可能写出莎可能写出莎士比亚话剧士比亚话剧等巨著等巨著”. .只要不停电只要不停电, ,偶尔能够得到香蕉偶尔能够得到香蕉, ,猴子就会永远猴子就会永远测试测试下去下去猴子的进步笨猴子笨猴子: :一点也不懂测试软件一点也不懂测试软件, , 只是随机地单击或按键只是随机地单击或按键, , 直至发生两件事情之一直至发生两件事情之一: :完成循环或系统崩溃完成循环或系统崩溃. .不太笨的猴子不太笨的猴子: : 具有崩溃辨认能力具有崩溃辨认能力, , 能够重新启动系统开始测试能够重新启动系统开始测试聪明猴子聪明猴子: :能够从它的笨兄
36、弟那里获得随机测试的结果能够从它的笨兄弟那里获得随机测试的结果, , 增加了对环境的认知能力增加了对环境的认知能力, , 有目的地敲键盘有目的地敲键盘, , 不仅限于查找崩溃缺陷不仅限于查找崩溃缺陷, ,同时查看数据同时查看数据, ,检查检查 操作结果操作结果, ,找出与预期结果的差别找出与预期结果的差别自动化测试工具实例 美国国际软件自动化(美国国际软件自动化(ISA)公司公司的的PanoramaforC/C+,j、Java和和VB产品,自动化功能包括:产品,自动化功能包括:软件结构分析与逻辑框图的自动化软件结构分析与逻辑框图的自动化软件静态分析软件静态分析数据分析数据分析复杂性分析与分析结
37、果列表的自动化复杂性分析与分析结果列表的自动化软件质量分析软件质量分析动态性能分析动态性能分析软件代码分支或条件覆盖率分析软件代码分支或条件覆盖率分析软件测试用例有效性分析与测试用例最小集的自动选取软件测试用例有效性分析与测试用例最小集的自动选取软件界面手工操作过程的自动记录与自动再执行软件界面手工操作过程的自动记录与自动再执行测试的文档测试的文档 测试计划测试计划 测试项目的名称测试项目的名称各项测试的目的、步骤和进度各项测试的目的、步骤和进度测试用例的设计测试用例的设计 测试报告测试报告测试项目名称测试项目名称实测结果与期望结果的比较实测结果与期望结果的比较发现的问题发现的问题测试达到的效
38、果测试达到的效果 测试中产生的文档测试中产生的文档黑盒测试黑盒测试 被测对象是功能独立的模块或构件,注重测试软件的被测对象是功能独立的模块或构件,注重测试软件的功能需求。试图发现以下几类错误:功能需求。试图发现以下几类错误: 不正确或遗漏的功能;不正确或遗漏的功能; 接口错误;接口错误; 数据结构或外部数据库访问错误;数据结构或外部数据库访问错误; 性能错误;性能错误; 初始化和终止条件错误。初始化和终止条件错误。 几种具体的方法:几种具体的方法: (1 1)等价类划分)等价类划分 主要思想:根据被测对象的功能说明和输入域,主要思想:根据被测对象的功能说明和输入域,按合理的或不合理划分为若干等
39、价类,为每个等价类按合理的或不合理划分为若干等价类,为每个等价类设计一个测试用例,这样大大减少测试次数,提高测设计一个测试用例,这样大大减少测试次数,提高测试效率。试效率。 该方法步骤如下:该方法步骤如下:划分等价类划分等价类 对被测程序功能说明的输入域划分等价类。对被测程序功能说明的输入域划分等价类。 以下是一些原则或经验:以下是一些原则或经验: 当规定了输入范围时可划分:当规定了输入范围时可划分: 无效类无效类 有效类有效类 无效类无效类 当当规规定定了了输输入入的的一一组组值值,且且对对不不同同值值做做不不同同处处理理时时, 每每个个允允许许的的输输入入值值是是一一个个合合理理的的等等价
40、价类类,另另有有一一个个不不合合理理的等价类(任何一个不允许的输入值)。的等价类(任何一个不允许的输入值)。 当规定了输入数据必须遵循的规则时,可确定一个合理当规定了输入数据必须遵循的规则时,可确定一个合理等价类(符合规则)和若干不合理等价类(从各种角度违等价类(符合规则)和若干不合理等价类(从各种角度违反规则)。反规则)。 为便于设计用例,每个等价类可划分为更小的等价类。为便于设计用例,每个等价类可划分为更小的等价类。 以上经验也适用于对输出数据的划分。以上经验也适用于对输出数据的划分。设计测试用例设计测试用例 为每个等价类编号。为每个等价类编号。 设计一个测试用例,使其尽可能多地覆盖尚未被
41、覆盖的设计一个测试用例,使其尽可能多地覆盖尚未被覆盖的合理等价类,重复这一步直到所有合理等价类都被覆盖。合理等价类,重复这一步直到所有合理等价类都被覆盖。 设计一个测试用例,使其只覆盖一个尚未被覆盖的不合设计一个测试用例,使其只覆盖一个尚未被覆盖的不合理等价类,重复这一步直到所有不合理等价类都被覆盖。理等价类,重复这一步直到所有不合理等价类都被覆盖。黑盒测试黑盒测试 例:某工厂公开招工,规定报名者年龄例:某工厂公开招工,规定报名者年龄应在应在16周岁至周岁至35周岁之间周岁之间(到到2002年年3月月30日止日止)即出生年月不在上述范围内,将即出生年月不在上述范围内,将拒绝接受,并显示拒绝接受
42、,并显示“年龄不合格年龄不合格”等出错等出错信息。信息。 划分等价类如下:划分等价类如下:“出生年月出生年月”的等价分类的等价分类 输入数据输入数据有效等价类有效等价类无效等价类无效等价类出生年月出生年月6位数字字符位数字字符有非数字字符有非数字字符少于少于6个数字符个数字符多于多于6个数字符个数字符对应数值对应数值在在196702198603之之间间198603月份对应数月份对应数值值在在112之间之间等于等于“0”12设计测试用例:设计测试用例:P192-193黑盒测试黑盒测试边界值分析法边界值分析法(boundary value analysis)(boundary value anal
43、ysis) 使被测程序在边界值及其附近运行,使被测程序在边界值及其附近运行,从而更有效地暴露从而更有效地暴露程序中潜藏的错误。程序中潜藏的错误。例:例:P193例例2黑盒测试黑盒测试错误猜猜测法法(error guessing)(error guessing) 猜测被测程序在哪些地方容易出错猜测被测程序在哪些地方容易出错 针对可能的薄弱环节来设计测试用例针对可能的薄弱环节来设计测试用例 如:输入、输出数据为零的情况;输入表格为空、输入表格只有一行的情况或输入表格超过一页不满两页等。使用判定表使用判定表 如果功能说明中含有多个输入条件的逻辑组合,可以建立判定表,判定表的每一列对应一个测试用例。
44、在实际测试中,综合使用这些方法,以达到最有效的测试。白盒测试白盒测试 被测对象基本上是源程序,以程序的内部逻辑结构为被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用例。原则是:基础设计测试用例。原则是: 保证被测程序中每一条独立的路径至少执行一次。保证被测程序中每一条独立的路径至少执行一次。 保证所有判断的每一分支至少执行一次。保证所有判断的每一分支至少执行一次。 保证每一循环都在边界条件和一般条件下至少各执行一保证每一循环都在边界条件和一般条件下至少各执行一次。次。 验证所有各内部数据结构的有效性。验证所有各内部数据结构的有效性。白盒测试白盒测试 (1 1)逻辑复盖测试法)逻辑复
45、盖测试法(logic coverage testing)(logic coverage testing) 用流程图来设计测试用例用流程图来设计测试用例 逻辑覆盖测试的逻辑覆盖测试的5 5种标准(种标准(示例表示例表9.5P1989.5P198)条件组合条件组合覆盖覆盖求求出出判判定定中中所所有有条条件件的的各各种种可可能能组组合合值值,每一可能的条件组合至少执行一次每一可能的条件组合至少执行一次发发现现错错误误的的能能力力弱弱强强语句覆盖语句覆盖每条语句至少执行一次每条语句至少执行一次判定覆盖判定覆盖每一判定的每个分支至少执行一次每一判定的每个分支至少执行一次条件覆盖条件覆盖每每一一判判定定中
46、中的的每每个个条条件件,分分别别按按“真真”、“假假”至少各执行一次至少各执行一次判定判定/条件条件覆盖覆盖同时满足判定覆盖和条件覆盖的要求同时满足判定覆盖和条件覆盖的要求主要用于测试选择结构。主要用于测试选择结构。 语句覆盖:语句覆盖: 每个语句每个语句 至少执行一次。至少执行一次。 Test case : Test case : A=2 , B=0 , X=4. A=2 , B=0 , X=4. 问题:若问题:若ANDAND错错 写为写为OROR,或,或X1X1 错写为错写为X1,X1ANDB=0TA=2ORX1TX=X/AX=X+1返回返回FF(1)逻辑覆盖)逻辑覆盖 每个判定的每个分支
47、至少每个判定的每个分支至少执行一次执行一次 Test cases: Test cases: A=3 , B=0 , X=3A=3 , B=0 , X=3 A=2 , B=1 , X=1A=2 , B=1 , X=1 问题:若问题:若X1X1错写为错写为X1,X1ANDB=0TA=2ORX1TX=X/AX=X+1返回返回FF判定覆盖:判定覆盖:条件覆盖条件覆盖 使每个判定的每个条件的可使每个判定的每个条件的可能取值至少执行一次能取值至少执行一次:第一判定表达式第一判定表达式: :设设条件条件 A1A1 取真取真 记为记为 T1T1 假假 T1T1 条件条件 B=1B=1 取真取真 记为记为 T2
48、T2 假假 T2T2第二判定表达式第二判定表达式: :设设条件条件 A=2A=2 取真取真 记为记为 T3T3 假假 T3T3 条件条件 X1X1 取真取真 记为记为 T4T4 假假 T4T4满足条件满足条件:T1,T1,T2,T2T3,T3T4,T4问:条件覆盖问:条件覆盖 ? 判定覆盖判定覆盖 答答: : 不一定。不一定。 反例反例: : A=2, B=0, X=1A=2, B=0, X=1 A=1, B=1, X=2 A=1, B=1, X=2 判定判定/ /条件覆盖:条件覆盖:即判定覆盖即判定覆盖 条件覆盖条件覆盖入口入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回返回F
49、F条件覆盖条件覆盖测试用例测试用例通过通过满足的满足的覆盖覆盖ABX路径路径条件条件分支分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,eabcde两个测试用例两个测试用例覆盖了四个覆盖了四个条件八种可能取值条件八种可能取值。未覆盖未覆盖c、d分支分支,不满足,不满足判定覆盖的要求判定覆盖的要求.判定判定/条件条件 覆盖覆盖满足条件满足条件: T1,T1, T2,T2 T3,T3 T4,T4开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce选取足够多选取足够多的测试用例,的测试用例,使判断中的每使判断中的每个条
50、件的所有个条件的所有可能取值至少可能取值至少执行一次,同执行一次,同时每个判断本时每个判断本身的所有可能身的所有可能判断结果至少判断结果至少执行一次执行一次.判定判定/条件条件 覆盖覆盖测试用例测试用例 通过通过 满足的满足的 覆盖覆盖ABX 路径路径 条件条件 分支分支2 0 4 ace2 0 4 ace T1,T2,T3,T4 T1,T2,T3,T4 c c, ,e e2 1 1 2 1 1 abdabd T1,T2,T3,T4 T1,T2,T3,T4 b b, ,d d 能同时满足判定、条件两种覆盖标准。能同时满足判定、条件两种覆盖标准。取值。取值。判定判定/条件条件 覆盖覆盖测试用例测
51、试用例 通过通过 满足的满足的 覆盖覆盖A B X A B X 路径路径 条件条件 分支分支2 0 3 ace T1,T2,T3,T4 2 0 3 ace T1,T2,T3,T4 c,ec,e2 1 1 2 1 1 abeabe T1,T2,T3,T4 T1,T2,T3,T4 b,eb,e1 0 3 1 0 3 abeabe T1,T2,T3,T4 T1,T2,T3,T4 b,eb,e1 1 1 1 1 1 abdabd T1,T2,T3,T4 T1,T2,T3,T4 b,db,d每个判定表达式中条件的各种可能每个判定表达式中条件的各种可能组合都至少出现一次。组合都至少出现一次。 全部可能的条
52、件组合为全部可能的条件组合为: 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 Test cases: A=2, B=0, X=4 (T T) A=2 , B=1, X=1 (F T) A=1, B=0, X=2 (F T) A=1, B=1, X=1 (F F) 问题:没有测试到(问题:没有测试到(T FT F)的路径的路径入口入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回返回FF条件组合覆盖:条件组合覆盖:白盒测试白盒测试路径测试法路径测试法(path testing)(path test
53、ing)着眼于程序执行路径的测试方法 程序图(program graph) 点覆盖边覆盖路径覆盖 以详细设计或源程序为基础导出程序的控制流图,简称为以详细设计或源程序为基础导出程序的控制流图,简称为流图(流图(flow graphflow graph), ,它是反映控制流程的有向图。其中小圆它是反映控制流程的有向图。其中小圆圈圈为控制流图的一个结点,表示一个或多个无分支的为控制流图的一个结点,表示一个或多个无分支的PDLPDL语语句或源程序语句,表示控制流的箭头称为边或路径。句或源程序语句,表示控制流的箭头称为边或路径。流程图对应的程序图流程图对应的程序图注意:注意:结点结点2、3和和4、5还
54、有还有9和和10转换时注意: 一条边必须终止于一个结点,在选择结构中分支汇聚处即使无语句也应有一个汇聚结点。 如果判断中的条件 表达式是复合条件, 则需改为一系列只有 单个条件的嵌套判断。 如右图所示: A BTPFQABQQPA=B例:用基本路径测试方法对以下的程序(伪码描述) 设计用例。Sort for (i=1; i=n-1; i+) k=i; for (j=i+1; jaj) k=j endfor if ( k!=i ) swap(ai,ak) endfor endSort Path1: 1-7 Path2: 1-2-5-1-7 Path3: 1-2-5-6-1-7 Path4: 1-
55、2-3-2-5-1-7 Path5: 1-2-3-4-2-5-6-1-7设计用例: 输入 预期输出结果 通过路径 n=1 排序表中只有一个数 Path1 n2且输入表 已排序的输出表 Path4 中已排序 n2且输入表 已排序的输出表 Path5 中未排序 Path2和Path3无法单独测试,但已包含在Path4和Path5中 测试过了。测试用例设计黑盒测试用例设计黑盒测试用例设计三角形分类程序三角形分类程序见教材见教材p205p205先看下面的例子:先看下面的例子:黑盒测试的测试用例设计黑盒测试的测试用例设计等价类划分法等价类划分法 把所有可能的输入数据把所有可能的输入数据( (有效的有效的
56、和无效的和无效的) )划分成若干个等价的子集划分成若干个等价的子集( (称为等价类称为等价类) ), 使得每个子集中的使得每个子集中的一个典型值在测试中的作用与这一一个典型值在测试中的作用与这一子集中所有其它值的作用相同子集中所有其它值的作用相同. . 可可从从每每个个子子集集中中选选取取一一组组数数据据来来测测试程序试程序例例: :某报表处理系统要求用户输入处理某报表处理系统要求用户输入处理 报表的日期,日期限制在报表的日期,日期限制在20012001年年1 1 月至月至20052005年年1212月,即系统只能对该月,即系统只能对该 段期间内的报表进行处理,如日期段期间内的报表进行处理,如
57、日期 不在此范围内,则显示输入错误信不在此范围内,则显示输入错误信 息。息。 系统日期规定由年、月的系统日期规定由年、月的6 6位数字位数字 字符组成,前四位代表年,后两位字符组成,前四位代表年,后两位 代表月。代表月。 如何用等价类划分法设计测试用例如何用等价类划分法设计测试用例, , 来测试程序的日期检查功能?来测试程序的日期检查功能?如何划分等价类?如何划分等价类?有效等价类有效等价类( (合理等价类合理等价类) )无效等价类无效等价类( (不合理等价类不合理等价类) ) 划分等价类的标准:划分等价类的标准:覆盖覆盖不相交不相交代表性代表性划分等价类的规则划分等价类的规则 (1)(1)如
58、果如果输入输入条件规定了取值条件规定了取值范围范围, 可定义可定义一个有效等价类和两个无一个有效等价类和两个无 效等价类。效等价类。例例 输入输入值是学生成绩,范围是值是学生成绩,范围是0 01001000 1000 100 有效有效等价类等价类11成绩成绩100100无效等价类无效等价类 成绩成绩100100 无效等价类无效等价类 成绩成绩00划分等价类的规则:划分等价类的规则:(2)(2)如果如果输入输入条件代表条件代表集合集合的某的某 个元素个元素,则可,则可定义定义一个有效一个有效 等价类和一个无效等价类。等价类和一个无效等价类。划分等价类的规则:划分等价类的规则:(3)(3)如规定了
59、输入数据的一组值,且如规定了输入数据的一组值,且 程序对不同输入值做不同处理,程序对不同输入值做不同处理, 则每个允许的输入值是一个有则每个允许的输入值是一个有 效等价类,并有一个无效等价类效等价类,并有一个无效等价类 ( (所有不允许的输入值的集合所有不允许的输入值的集合) )。例:输入条件说明学历可为例:输入条件说明学历可为: :专科、本科、专科、本科、 硕士、博士硕士、博士四种之一,则分别取这四四种之一,则分别取这四 种这四个值作为种这四个值作为四个有效等价类四个有效等价类,另,另 外把四种学历之外的任何学历作为无外把四种学历之外的任何学历作为无 效等价类效等价类划分等价类的规则:划分等
60、价类的规则:(4)(4)如果规定了如果规定了输入输入数据数据必须遵必须遵循循的规的规 则,可则,可确定确定一个有效等价类一个有效等价类(符合符合 规则规则)和若干个无效等价类和若干个无效等价类(从不从不 同角度违反规则同角度违反规则) )。(5)(5)如已划分的等价类各元素在程序中如已划分的等价类各元素在程序中 的处理方式不同,则应将此等价的处理方式不同,则应将此等价 类进一步划分成更小的等价类。类进一步划分成更小的等价类。用等价类划分法设计测试用例步骤:用等价类划分法设计测试用例步骤:(1)(1)形成等价类表,每一等价类规定形成等价类表,每一等价类规定 一个唯一的编号;一个唯一的编号;(2)
61、(2)设计一测试用例,使其尽可能多设计一测试用例,使其尽可能多 地覆盖尚未覆盖的有效等价类,地覆盖尚未覆盖的有效等价类, 重复这一步骤,直到所有有效等重复这一步骤,直到所有有效等 价类均被测试用例所覆盖;价类均被测试用例所覆盖;(3)(3)设计一新测试用例,使其只覆盖设计一新测试用例,使其只覆盖 一个无效等价类,重复这一步骤一个无效等价类,重复这一步骤 直到所有无效等价类均被覆盖;直到所有无效等价类均被覆盖;第一步:等价类划分第一步:等价类划分输入输入等价类等价类 有效等价类有效等价类 无效等价类无效等价类 报表日期的报表日期的类型及长度类型及长度3 3位数字位数字字符字符(1)(1)有非数字
62、字符有非数字字符 (4)(4)少于少于6 6个个数字数字字符字符 (5)(5)多于多于6 6个个数字数字字符字符 (6)(6)年份范围年份范围在在2001200120052005之间之间 (2)(2)小于小于20012001 (7) (7)大于大于2005 2005 (8)(8)月份范围月份范围在在1 11212之间之间(3)(3)“报表日期报表日期”输入条件的等价类表输入条件的等价类表小于小于1 1 (9) (9)大于大于12 12 (10)(10) 第二步:第二步:为有效等价类设计为有效等价类设计测试用例测试用例 对表中对表中编号为编号为1,2,31,2,3的的3 3个有效等价类个有效等价
63、类 用用一一个测试用例个测试用例覆盖覆盖: 测试数据 期望结果 覆盖范围200105200105等价类等价类(1)(2)(3)(1)(2)(3)输入输入有效有效 第第三三步:步:为每一个无效等价类设至少为每一个无效等价类设至少 计一个计一个测试用例测试用例 测试数据 期望结果 覆盖范围001001MAYMAY等价类等价类(4)(4)输入无输入无效效2001520015等价类等价类(5)(5)输入无输入无效效20010052001005等价类等价类(6)(6)输入无输入无效效200020000505等价类等价类(7)(7)输入无输入无效效200820080505等价类等价类(8)(8)输入无输入
64、无效效200120010000等价类等价类(9)(9)输入无输入无效效200120011313等价类等价类(10)(10)输入无输入无效效不能出现相同不能出现相同的测试用例的测试用例本例的本例的1010个等价类至个等价类至少需要少需要8 8个测试用例个测试用例例例: :对招干考试系统对招干考试系统“输入学生成绩输入学生成绩” 子模块设计测试用例子模块设计测试用例 招干考试分三个专业招干考试分三个专业, ,准考证号第一位准考证号第一位 为专业代号为专业代号, ,如如: 1-: 1-行政专业行政专业, , 2- 2-法律专业法律专业, , 3- 3-财经专业财经专业. . 行政专业准考证号码为行政
65、专业准考证号码为:110001:110001111215111215法律专业准考证号码为法律专业准考证号码为:210001:210001212006212006财经专业准考证号码为财经专业准考证号码为:310001:310001314015314015 例例: :准考证号码的等价类准考证号码的等价类划分划分 有效等价类有效等价类: : (1) 110001 (1) 110001 111215111215 (2) 210001 (2) 210001 212006212006 (3) 310001 (3) 310001 314015314015 无效等价类无效等价类: : (4) - (4) -
66、110000110000 (5) 111216 (5) 111216 210000210000 (6) 212007 (6) 212007 3100031000 (7) 314016 (7) 314016 + + 等价类划分等价类划分即把即把输入空间分解输入空间分解成一系列子域成一系列子域,软件在一个子域内,软件在一个子域内的行为应是等价的的行为应是等价的。 软件错误分为两类:软件错误分为两类:计算错误计算错误 域错误域错误u针对针对计算错误的测试方法计算错误的测试方法u针对针对域错误域错误的测试方法的测试方法: :测试测试域边界域边界 划定的正确性划定的正确性边界值分析法边界值分析法边界值分
67、析法与等价类划分法区别边界值分析法与等价类划分法区别(1)(1)边界值分析不是从某等价类中边界值分析不是从某等价类中 随便挑一个作为代表,而是使随便挑一个作为代表,而是使 这个等价类的每个边界都要作这个等价类的每个边界都要作 为测试条件。为测试条件。(2)(2)边界值分析不仅考虑输入条件,边界值分析不仅考虑输入条件, 还要考虑输出空间产生的测试还要考虑输出空间产生的测试 情况情况被测试被测试子子 域域测试内点测试内点测试外点测试外点软件边界与悬崖很类似边界边界条件类型条件类型 如果软件测试问题如果软件测试问题包含确定的边界包含确定的边界, ,那那么数据类型可能是么数据类型可能是: :数值数值字
68、符字符位置位置数量数量速度速度地址地址尺寸尺寸还要考虑数据类型还要考虑数据类型的特征的特征: :第一个第一个/ /最后一个最后一个最小值最小值/ /最大值最大值开始开始/ /完成完成空空/ /满满最慢最慢/ /最快最快相邻相邻/ /最远最远超过超过/ /在内在内测试测试边界边界线线测试临近边界的合法数据测试临近边界的合法数据, ,以及刚超过边界以及刚超过边界的非法数据的非法数据. .越界测试通常简单地加越界测试通常简单地加1 1或很小的数或很小的数 ( (对于最大值对于最大值) )和减和减1 1或很小的数或很小的数( (对于最小对于最小值值).). 输入输入条件条件报表日报表日期的类期的类型及
69、长型及长度度1 1个个数字数字字符字符5 5个个数字数字字符字符7 7个个数字数字字符字符有有1 1个个非数字字符非数字字符全部是全部是非数字字符非数字字符6 6个个数字数字字符字符显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错输入有效输入有效日期日期范围范围月份月份范围范围“报表日期报表日期”边界值分析法测试用边界值分析法测试用例例测试用例说明测试用例说明测试数据测试数据 期望结果期望结果选取理由选取理由5 52001520015200100520010052001.52001.5MAY-MAY-200105200105月份为月份为1 1月月月份为月份为12
70、12月月月份月份11212200101200101200112200112200100200100200113200113200101200101200512200512200100200100200513200513输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错在有效范围在有效范围边界上选取边界上选取数据数据仅有仅有1 1个合法字符个合法字符比有效长度少比有效长度少1 1比有效长度多比有效长度多1 1只有只有1 1个非法字符个非法字符6 6个非法字符个非法字符类型及长度均有效类型及长度均有效最小日期最小日期最大
71、日期最大日期刚好小于最小日期刚好小于最小日期刚好大于最大日期刚好大于最大日期最小月份最小月份最大月份最大月份刚好小于最小月份刚好小于最小月份刚好大于最大月份刚好大于最大月份测试用例设计白盒测试用例设计白盒测试用例设计学生成绩查询程序学生成绩查询程序见教材见教材p208p208软件的纠错软件的纠错纠错的策略纠错的策略试凑法试凑法设置可疑区,边试边瞧设置可疑区,边试边瞧跟踪法跟踪法分步执行分步执行,跟踪纠错语句跟踪纠错语句推理法推理法归纳、演绎(归纳、演绎(图下来的两张幻灯片图下来的两张幻灯片)常用的纠错技术常用的纠错技术插入打印语句插入打印语句设置断点设置断点掩蔽部分程序掩蔽部分程序蛮力纠错技术
72、蛮力纠错技术归纳法 从测试结果发现的错误入手,分析它们之从测试结果发现的错误入手,分析它们之间的联系查找错误。是一种从特殊推断一般的间的联系查找错误。是一种从特殊推断一般的系统化思考方法。系统化思考方法。收集收集有关数据有关数据组织数据组织数据研究数据研究数据间的关系间的关系纠正错误纠正错误能能能能不能不能不能不能列出所有已知列出所有已知的测试用例和的测试用例和程序执行结果程序执行结果常用的构造常用的构造线索的技术线索的技术是是“分类法分类法”分析线索之间分析线索之间的关系,找出的关系,找出矛盾,设计出矛盾,设计出错原因的假设错原因的假设归纳排错法步骤归纳排错法步骤将假设与原始线索将假设与原始
73、线索或数据进行比较,或数据进行比较,能否解释现象,证能否解释现象,证明假设。明假设。提出假设提出假设证明假设证明假设演绎法 演绎法是一种从一般原理出发,经过排除演绎法是一种从一般原理出发,经过排除和精化的过程,推导出结论的方法。和精化的过程,推导出结论的方法。列举可能列举可能的原因的原因排除不适排除不适当的原因当的原因对保留的假对保留的假设继续推断设继续推断证明证明假设假设纠正纠正错误错误收集更多收集更多的数据的数据没有剩余没有剩余不能不能能能有剩余有剩余演绎法排错的步骤演绎法排错的步骤有余有余多模块程序的测试策略多模块程序的测试策略J软件测试策略主要考虑,如何把设计测试用例的技术组软件测试策
74、略主要考虑,如何把设计测试用例的技术组织成一个系统的、有计划的测试步骤织成一个系统的、有计划的测试步骤。J从模块测试开始从模块测试开始, ,一级一级向外扩展一级一级向外扩展, ,直至整个系统测试直至整个系统测试完毕。完毕。J在测试的各个阶段应选择适宜的白盒测试和黑盒测试方在测试的各个阶段应选择适宜的白盒测试和黑盒测试方法法, ,由软件开发人员和一个独立的测试小组由软件开发人员和一个独立的测试小组( (对大项目而对大项目而言言) )共同完成测试任务。共同完成测试任务。J测试策略应包含测试规划、测试用例设计、测试实施和测试策略应包含测试规划、测试用例设计、测试实施和测试结果收集评估等。其中测试规划
75、包括:测试的步骤、测试结果收集评估等。其中测试规划包括:测试的步骤、工作量、进度和资源等。工作量、进度和资源等。多模块程序的测试策略多模块程序的测试策略 测试的层次性测试的层次性 单元单元( (模块模块) )测试(测试(unit testingunit testing)综合综合( (集成集成) )测试测试(integration testingintegration testing)确认测试(确认测试(validation testingvalidation testing)系统测试(系统测试(system testingsystem testing)程序错误的类型程序错误的类型 语法错误语法
76、错误 结构性错误结构性错误 功能性错误功能性错误 接口错误接口错误 层次测试的信息流层次测试的信息流单元单元测试测试单元单元测试测试单元单元测试测试被测被测模块模块被测被测模块模块集成集成测试测试设计设计信息信息已测试已测试的模块的模块确认确认测试测试已集成已集成的模块的模块软件软件需求需求系统系统测试测试已确认已确认的软件的软件可交付可交付的软件的软件系统其系统其他元素他元素测试步骤及策略测试步骤及策略 所有测试过程都应采用综合测试策略;即先作静态所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试。并事先制订测试计划。测试分析,再作动态测试。并事先制订测试计划。测试过程通常可分过
77、程通常可分4步进行:步进行:编码编码测试测试验收验收 单元测试单元测试 目的目的 通过模块测试,使其代码达到模块说明书的需求通过模块测试,使其代码达到模块说明书的需求 任务任务 (1) (1) 对模块代码进行编译,发现并纠正其语法错误;对模块代码进行编译,发现并纠正其语法错误;(2) (2) 进进行行静静态态分分析析,验验证证模模块块结结构构及及其其内内部部调调用用序序列是否正确;列是否正确;(3) (3) 确确定定模模块块的的测测试试策策略略,并并据据此此设设计计一一组组测测试试用用例和必要的测试软件;例和必要的测试软件;(4) (4) 用用选选定定的的测测试试用用例例对对模模块块进进行行测
78、测试试,直直至至满满足足测试终止标准为止;测试终止标准为止;(5) (5) 编制单元测试报告。编制单元测试报告。 单元测试的技术单元测试的技术 单元测试的对象是软件设计的最小单位模块。 单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。 单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。单元测试的内容单元测试内容包括单元测试内容包括:1)模块接口测试模块接口测试;2)模块局部数据结构测试模块局部数据结构测试;3)模块边界条件测试模块边界条件测试;4)模块中所有独立执行通路测试模块中所有独立执行通路测试;5)模块的各条错误处理通路
79、测试。模块的各条错误处理通路测试。 模块接口测试是单元测试的基础。只有在数据能正模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下确流入、流出模块的前提下,其他测试才有意义。其他测试才有意义。测试接口考虑的因素输入的实际参数与形式参数的个数是否相同输入的实际参数与形式参数的个数是否相同; ;输入的实际参数与形式参数的属性是否匹配输入的实际参数与形式参数的属性是否匹配; ;输入的实际参数与形式参数的量纲是否一致输入的实际参数与形式参数的量纲是否一致; ;调用其他模块时所给实际参数的个数是否与被调模块的形参个调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同数相同; ;
80、调用其他模块时所给实际参数的属性是否与被调模块的形参属调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配性匹配; ;调用其他模块时所给实际参数的量纲是否与被调模块的形参量调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致纲一致; ;调用预定义函数时所用参数的个数、属性和次序是否正确调用预定义函数时所用参数的个数、属性和次序是否正确; ;是否存在与当前入口点无关的参数引用是否存在与当前入口点无关的参数引用; ;是否修改了只读型参数是否修改了只读型参数; ;对全程变量的定义各模块是否一致对全程变量的定义各模块是否一致; ; 是否把某些约束作为参数传递。是否把某些约束作为参数传递
81、。11测试接口考虑的因素(续) 如果模块内包括外部输入输出如果模块内包括外部输入输出, ,还应该考虑下列因素还应该考虑下列因素: :文件属性是否正确文件属性是否正确; ;OPEN/CLOSEOPEN/CLOSE语句是否正确语句是否正确; ;格式说明与输入输出语句是否匹配格式说明与输入输出语句是否匹配; ;缓冲区大小与记录长度是否匹配缓冲区大小与记录长度是否匹配; ;文件使用前是否已经打开文件使用前是否已经打开; ;是否处理了文件尾是否处理了文件尾; ;是否处理了输入是否处理了输入/ /输出错误输出错误; ;输出信息中是否有文字性的错误。输出信息中是否有文字性的错误。单元测试的内容(续)单元测试
82、的内容(续) 局部数据结构往往是错误的根源局部数据结构往往是错误的根源, ,应仔应仔细设计测试用例细设计测试用例, ,力求发现下面几类错误力求发现下面几类错误: : 不合适或不相容的类型说明不合适或不相容的类型说明; ; 变量无初值变量无初值; ;变量初始化或省缺值有错变量初始化或省缺值有错; ;不正确的变量名不正确的变量名( (拚错或不正确地拚错或不正确地截断截断); ); 出现上溢、下溢和地址异常。出现上溢、下溢和地址异常。单元测试的内容内容(续) 在模块中应对每一条独立执行路径在模块中应对每一条独立执行路径进行测试进行测试, ,单元测试的基本任务是保证单元测试的基本任务是保证模块中每条语
83、句至少执行一次。模块中每条语句至少执行一次。 此时设计测试用例是为了发现因错此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制误计算、不正确的比较和不适当的控制流造成的错误。流造成的错误。 此时基本路径测试和循环测试是最此时基本路径测试和循环测试是最常用且最有效的测试技术。常用且最有效的测试技术。单元测试的内容内容(续)计算中常见的错误包括计算中常见的错误包括: :误解或用错了算符优先级误解或用错了算符优先级; ;混合类型运算混合类型运算; ;变量初值错变量初值错; ;精度不够精度不够; ;表达式符号错。表达式符号错。单元测试的内容内容(续) 比较判断与控制流常常紧密相关比较判断
84、与控制流常常紧密相关, ,测试测试用例还应致力于发现下列错误用例还应致力于发现下列错误: :不同数据类型的对象之间进行比较不同数据类型的对象之间进行比较; ;错误地使用逻辑运算符或优先级错误地使用逻辑运算符或优先级; ;因计算机表示的局限性,期望理论因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等上相等而实际上不相等的两个量相等; ;比较运算或变量出错比较运算或变量出错; ;循环终止条件不合适或不可能出现循环终止条件不合适或不可能出现; ;迭代发散时不能退出迭代发散时不能退出; ;错误地修改了循环变量。错误地修改了循环变量。单元测试的内容内容(续) 一个好的设计应能预见各种出错条
85、一个好的设计应能预见各种出错条件件, ,并预设各种错误处理通路并预设各种错误处理通路, ,错误处理通错误处理通路同样需要认真测试路同样需要认真测试, ,测试应着重检查下列测试应着重检查下列问题问题: :输出的错误信息难以理解输出的错误信息难以理解; ;记录的错误与实际遇到的错误不相符记录的错误与实际遇到的错误不相符; ;在程序自定义的错误处理段运行之前在程序自定义的错误处理段运行之前, ,系统已介入系统已介入; ;异常处理不当异常处理不当; ;错误陈述中未能提供足够的定位错误信错误陈述中未能提供足够的定位错误信息。息。单元测试实施步骤实施步骤1、编译2、静态分析器检查3、代码评审4、动态测试测
86、试驱动模块测试桩模块 在确定测试用例的同时,应给出对应的期望结果。 应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub)。辅助模块概念辅助模块概念考虑到被测模块与其它模块的联系,因此测试时需要使考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块来模拟其他模块。用两类辅助模块来模拟其他模块。驱动模块驱动模块(driverdriver) 模拟主程序功能,模拟主程序功能,用于向被测模块传递数据,接收、打印从用于向被测模块传递数据,接收、打印从被测模块返回的数据。被测模块返回的数据。桩模块桩模块(stubstub) 又称为假模块,用于又称为假模块,用于模拟那些由被测
87、模块所调用的下属模块模拟那些由被测模块所调用的下属模块功能。功能。一般,驱动模块比桩模块容易设计。但都是额外开销。测一般,驱动模块比桩模块容易设计。但都是额外开销。测试方法以白盒法为主。试方法以白盒法为主。被测模块被测模块驱动模块驱动模块桩模块桩模块桩模块桩模块桩模块桩模块集成(组装)测试集成(组装)测试 目的目的 将经过单元测试的模块逐步组装成具有良将经过单元测试的模块逐步组装成具有良好一致性的完整的程序好一致性的完整的程序 任务任务 制订集成测试实施策略制订集成测试实施策略 确定集成测试的实施步骤,设计测试用例确定集成测试的实施步骤,设计测试用例 逐一地添加模块,进行测试逐一地添加模块,进
88、行测试集成(组装)测试步骤集成(组装)测试步骤 自顶向下测试自顶向下测试 先广后深实施步骤先广后深实施步骤 先深后广实施步骤先深后广实施步骤 由底向上测试由底向上测试 混合方式测试(混合方式测试(sandwich testingsandwich testing) 对上层模块采取自顶向下测试对上层模块采取自顶向下测试 对关键模块或子系统采取由底向上测试对关键模块或子系统采取由底向上测试 自顶而下增值自顶而下增值M1M4M3M2M6M5程程序序模模块块示示意意图图S5M1S1S1S1S2S2S2S3S3S3第第一一步步,测测试试主主控控模模块块M1设设计计桩桩模模块块S1、S2、S3,模模拟拟被被
89、M1调用的调用的M2、M3、M4。M2M3M4第第二二步步,依依次次用用M2、M3、M4替替代代桩桩模模块块S1、S2、S3,每替代一次进行一次测试。每替代一次进行一次测试。S4S4S4S5S5第第三三步步,对对由由主主控控模模块块M1和和模模块块M2、M3、M4构构成成的的子子系系统统进进行行测测试试,设设计计桩桩模模块块S4、S5。M5M6第第四四步步,依依次次用用模模块块M5和和M6替替代代桩桩模模块块S4、S5,并并同同时时进进行行新新的的测测试试。组组装装测测试试完毕。完毕。自底而上自底而上增值增值M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第第四四步步,把把已已测测
90、试试的的子子系系统统按按程程序序结结构构连连接接起起来来完完成程序整体的组装测试。成程序整体的组装测试。D4D4D4D5D6M1M4M3M2M6M5程程序序模模块块示示意意图图第第一一步步,对对最最底底层层的的模模块块M3、M5、M6进进行行测测试试,设设计计驱驱动动模模块块D1、D2、D3来模拟调用。来模拟调用。第第三三步步,设设计计驱驱动动模模块块D4、D5和和D6模模拟拟调调用用,分分别别对对新新子子系系统进行测试。统进行测试。第第二二步步,用用实实际际模模块块M2、M1和和M4替替换换驱驱动动模模块块D1、D2、D3。D4自顶向下集成自顶向下集成与单元测试结合与单元测试结合起来的 自顶
91、向下测试:自底向上集成自底向上集成 三明治式集成三明治式集成深度优先与宽度优先深度优先与宽度优先无论是自顶而下增值还是自底而上增值,都可选择深度优先或无论是自顶而下增值还是自底而上增值,都可选择深度优先或者宽度优先增值。者宽度优先增值。举例:按自顶而下增值法,写出下图中分别按照举例:按自顶而下增值法,写出下图中分别按照深度优先深度优先或者或者宽宽度优先度优先增值的模块组装次序。增值的模块组装次序。ABCDHGJEFIKLMN问问 题题(1)自顶而下增值与自底而上增值各)自顶而下增值与自底而上增值各有何优、缺点?有何优、缺点?(2)为什么在实际的组装测试中,都)为什么在实际的组装测试中,都应该采
92、用混合增值的方法?应该采用混合增值的方法?(3)请自己设计)请自己设计 2-3个混合增值的测个混合增值的测试方法。试方法。确定集成过程的原则 自顶而下增值自顶而下增值优点:优点:能够尽早发现系统主控方面的问题。能够尽早发现系统主控方面的问题。缺点:缺点:无法验证桩模块是否完全模拟了下属模块的功能。无法验证桩模块是否完全模拟了下属模块的功能。 自底而上增值自底而上增值优点:优点:驱动模块较容易编写桩模块,能够尽早查出底层涉驱动模块较容易编写桩模块,能够尽早查出底层涉及较复杂的算法和实际的及较复杂的算法和实际的I/O模块中的错误。模块中的错误。缺点:缺点:最后才能发现系统主控方面的问题。最后才能发
93、现系统主控方面的问题。集成过程的原则:集成过程的原则: 尽早测试关键模块。尽早测试关键模块。 尽早测试包含尽早测试包含I/O的模块。的模块。混合增值常见的常见的混合增值方案:混合增值方案:衍变的自顶而下衍变的自顶而下先自底而上集成子系统,再自顶而下集成总先自底而上集成子系统,再自顶而下集成总系统。系统。自底而上自底而上自顶而下增值自顶而下增值对含有读操作的子系统采用自底而上。对含有读操作的子系统采用自底而上。对含有写操作的子系统采用自顶而下。对含有写操作的子系统采用自顶而下。回归测试回归测试 在回归测试中自底而上,对其余部分(尤在回归测试中自底而上,对其余部分(尤其是对修改过的子系统)采用自顶
94、而下。其是对修改过的子系统)采用自顶而下。集成策略的比较(Myers 1979)自底向上自顶向下改进的自顶向下一次性集成三明治式改进的三明治式集成早早早晚早早能产生基本运行程序的时间晚早早晚早早需要驱动程序是否是是是是需要桩程序否是是是是是工作的并行性中等低中等高中等高测试特殊路径能力容易难容易容易中等容易计划和控制顺序能力容易难难容易难难确认测试确认测试 目的目的 确认组装好的程序是否满足(确认组装好的程序是否满足(SRS)的要求的要求任务任务有效性测试(黑盒测试)有效性测试(黑盒测试)配置复审(配置复审(confingurationreview)验收测试验收测试专用专用 alpha与与be
95、ta测试测试通用通用确认测试确认测试确认测试确认测试( (validation testingvalidation testing) )1 1、任务、任务 又称为有效性测试或功能测试。其任务是验证系统的功又称为有效性测试或功能测试。其任务是验证系统的功能、性能等特性是否符合需求规格说明。能、性能等特性是否符合需求规格说明。选择测试人员选择测试人员选择测试用例选择测试用例实际运行测试实际运行测试软件计划软件计划用户文档用户文档开发文档开发文档源程序文本源程序文本支持环境支持环境有效性有效性测试测试软件软件配置配置审查审查管理管理机构机构裁决裁决专家专家鉴定会鉴定会交用户交用户运行维护运行维护测试
96、报告测试报告软件配置软件配置2 2、确认测试步骤、确认测试步骤(1 1)有效性测试)有效性测试制定测试计划,运用黑盒法,验证软件特性是否与需求制定测试计划,运用黑盒法,验证软件特性是否与需求符合。符合。(2 2)软件配置复查)软件配置复查软件配置软件配置 指软件工程过程中所产生的所有信指软件工程过程中所产生的所有信息项息项: :文档、报告、程序、表格、数据。随着软文档、报告、程序、表格、数据。随着软件工程过程的进展软件配置项(件工程过程的进展软件配置项(SCIsoftwareConfigurationItem)快速增加和变化。应复查快速增加和变化。应复查SCI是否齐全。是否齐全。(3 3 3
97、3) 测试和测试和测试和测试和 测试测试测试测试 测试测试 是在开发机构的监督下,由个别用户在是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价确认测试阶段后期对软件进行测试,目的是评价软件的软件的FLURPSFLURPS(功能、局域化、可使用性、可靠功能、局域化、可使用性、可靠性、性能和支持)性、性能和支持),注重界面和特色。注重界面和特色。 测试测试 由由支持软件预发行支持软件预发行的客户对的客户对FLURPSFLURPSFLURPSFLURPS进行进行测试,主要目的是测试系统的可支持性。测试,主要目的是测试系统的可支持性。F F F Function Testi
98、ng unction Testing 功能测试功能测试 L L L Local 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 可支持可支持性测试性测
99、试系统测试系统测试 目的目的 软件安装到系统中以后,能否与系统的其余部分协调运行 任务任务测试是否与硬件协调运行测试是否和原来就有的其它软件协调运行 测试是否完成SRS对它的要求 系统测试 计算机软件是基于计算机系统的一个重要组成部分计算机软件是基于计算机系统的一个重要组成部分, ,软件开发完毕后应与系统中其他成份集成在一起软件开发完毕后应与系统中其他成份集成在一起, ,此时需此时需要进行一系列系统集成和确认测试。要进行一系列系统集成和确认测试。在系统测试之前,软件工程师应完成下列工作在系统测试之前,软件工程师应完成下列工作: : 1) 1)为测试软件系统的输入信息,设计错误处理通路为测试软件
100、系统的输入信息,设计错误处理通路; ;2)2)设计测试用例设计测试用例, ,模拟错误数据和软件界面可能发模拟错误数据和软件界面可能发生的错误生的错误, ,记录测试结果记录测试结果, ,为系统测试提供经验和为系统测试提供经验和帮助;帮助;3)3)参与系统测试的规划和设计参与系统测试的规划和设计, ,保证软件测试的合保证软件测试的合理性。理性。1. 恢复测试 恢复测试主要检查系统的容错能力。当恢复测试主要检查系统的容错能力。当系统出错时,能否在指定的时间间隔内系统出错时,能否在指定的时间间隔内修正错误并重新启动系统。修正错误并重新启动系统。 恢复测试首先要采用各种办法强迫系恢复测试首先要采用各种办
101、法强迫系统失败,然后验证系统是否能尽快恢复。统失败,然后验证系统是否能尽快恢复。 对于自动恢复系统,需验证重新初始对于自动恢复系统,需验证重新初始化化、检查点检查点、数据恢复和重新启动等机数据恢复和重新启动等机制的正确性;对于人工干予的恢复系统,制的正确性;对于人工干予的恢复系统,还需估测平均修复时间,确定其是否在还需估测平均修复时间,确定其是否在可接受的范围内。可接受的范围内。2. 安全测试 安全测试检查系统对非法侵入的防范能力。安安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。办法试图突破防线
102、。 例如,例如,(1)(1)想方设法截取或破译口令;想方设法截取或破译口令;(2)(2)专门专门定做软件破坏系统的保护机制;定做软件破坏系统的保护机制;(3)(3)故意导致系统故意导致系统失败,企图趁恢复之机非法进入;失败,企图趁恢复之机非法进入;(4)(4)试图通过浏试图通过浏览非保密数据,推导所需信息等等。览非保密数据,推导所需信息等等。 理论上讲,只要有足够的时间和资源,没有不理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵法侵入的代价超过被保护信息的价值。此时非法
103、侵入者已无利可图。入者已无利可图。3. 强度测试 强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如:(1)当中断的正常频率为每秒一至两个时,运当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;行每秒产生十个中断的测试用例;(2)定量地增长数据输入率,检查输入子功能定量地增长数据输入率,检查输入子功能的反映能力;的反映能力;(3)运行需要最大存储空间运行需要最大存储空间(或其他资源或其他资源)的测的测试用例;试用例;(4)运行可能导致虚存操作系统崩溃或磁盘数运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例;等等。据剧烈抖动的测试用例;
104、等等。验收测试(验收测试(acceptance testing)验收测试是以用户为主的测试。软件验收测试是以用户为主的测试。软件工程课程设计的验收测试,工程课程设计的验收测试,1919周进行。周进行。1 1、步骤为:、步骤为:(1 1)由课题组根据测试用例,自己演)由课题组根据测试用例,自己演示系统所有功能。示系统所有功能。(2 2)由教师进行测试。)由教师进行测试。2、软件工程课程设计验收表文文档档文档数量文档数量文档质量文档质量文档与系统文档与系统一致性一致性创新性创新性总体总体(1212分)分)(1515分)分)(5 5分)分)(3 3分)分)(3535分)分)系系统统运运行行系统运行系
105、统运行功能、性能功能、性能系统结构系统结构总体设计总体设计合理性合理性用户界面用户界面操作简便、操作简便、帮助信息帮助信息有无创新有无创新系统特色系统特色总体总体(2525分)分)(1010分)分)(1010分)分)(5分)分)(50分)分)其其它它个人工作量个人工作量验收操作验收操作独立分析解决独立分析解决问题能力问题能力 团结协作团结协作精精 神神爱护公物爱护公物遵守纪律遵守纪律 总体总体(9 9分)分)(4 4分)分)(1 1分)分)(1 1分)分)(1515分)分)3、软件测试文档模块测试报告模块测试报告至少选择一个典型模块进行测试。至少选择一个典型模块进行测试。A A、综合测试策略(
106、静态分析、白盒法为主,综合测试策略(静态分析、白盒法为主,辅以黑盒法)辅以黑盒法)B B、测试情况(根据覆盖标准列出)测试情况(根据覆盖标准列出)C C、测试用例(保留)测试用例(保留)D D、查错记录(数量、位置)、分析结果。查错记录(数量、位置)、分析结果。组装测试报告组装测试报告A A、组装次序、测试方法(以黑盒法为主)组装次序、测试方法(以黑盒法为主)B B、测试情况测试情况C C、测试用例(保留)测试用例(保留)D D、查错记录(数量、位置)、分析结果。查错记录(数量、位置)、分析结果。功能测试与系统测试功能测试与系统测试与上类似。与上类似。终止测试的标准规定测试策略和应达标准规定至
107、少要查出的错误数量P230第第7 7节节 面向对象测试面向对象测试 面向对象测试的特点面向对象测试的特点面向对象的测试策略面向对象的测试策略面向对象软件的测试用例设计面向对象软件的测试用例设计RUPRUP的测试活动的测试活动面向对象测试的特点面向对象测试的特点 面向对象测试的整体目标(以最小的工作量发现最大面向对象测试的整体目标(以最小的工作量发现最大数量的错误)与传统软件测试的目标是一致的。但是数量的错误)与传统软件测试的目标是一致的。但是OO程程序的性质改变了测试策略与战术。序的性质改变了测试策略与战术。 1、传统测试主要是基于程序运行过程的,即选择一组输、传统测试主要是基于程序运行过程的
108、,即选择一组输入数据运行被测程序,通过比较实际结果与预期结果从而判入数据运行被测程序,通过比较实际结果与预期结果从而判断程序是否有错。而断程序是否有错。而OO程序中的对象通过发送消息启动相程序中的对象通过发送消息启动相应的操作,并且通过修改对象的状态达到转化系统运行状态应的操作,并且通过修改对象的状态达到转化系统运行状态的目的,同时,在系统中还可能存在并发活动的对象。应此的目的,同时,在系统中还可能存在并发活动的对象。应此传统的测试方法不再适应。传统的测试方法不再适应。 2、传统程序的复用以调用公共模块为主,运行环境是连、传统程序的复用以调用公共模块为主,运行环境是连续的。而面向对象复用很多是
109、用继承实现的,子类继承过来续的。而面向对象复用很多是用继承实现的,子类继承过来的同名操作有新的语境,必须要重新测试。随着继承层次的的同名操作有新的语境,必须要重新测试。随着继承层次的加深,测试的工作量和难度也随之增加。由继承支持的多态加深,测试的工作量和难度也随之增加。由继承支持的多态的特性同样给测试带来了难度。的特性同样给测试带来了难度。 3、面向对象软件的开发是渐进、演化的开发,从分析、面向对象软件的开发是渐进、演化的开发,从分析、设计到实现使用相同的语义结构(如类、属性、操作、消设计到实现使用相同的语义结构(如类、属性、操作、消息)。因此要扩大测试的视角,对分析模型、设计模型进息)。因此
110、要扩大测试的视角,对分析模型、设计模型进行测试。例如,在分析模型中定义了一个行测试。例如,在分析模型中定义了一个无用的属性无用的属性,围,围绕着这个属性可能会带来以下错误:绕着这个属性可能会带来以下错误: 在在 分析模型中:分析模型中: 定义了一个与该属性有关的操作:定义了一个与该属性有关的操作: 导致了不正确的致了不正确的类关系:关系: 为共享属性和操作共享属性和操作创建了不必要的子建了不必要的子类: 为适适应该属性和操作刻画了其属性和操作刻画了其类和系和系统的行的行为。 如果如果问题在分析在分析阶段未被段未被发现,再将,再将错误继续传播,播,使得使得设计模型可能存在:模型可能存在: 与与该
111、类有关的不合适的子系有关的不合适的子系统或任或任务的划分:的划分: 与与该无用属性有关操作的算法无用属性有关操作的算法设计: 与与该无用属性有关操作的接口及消息模式。无用属性有关操作的接口及消息模式。面向对象测试的特点面向对象测试的特点 如果问题在设计阶段仍未被检测到,并传送到编码活如果问题在设计阶段仍未被检测到,并传送到编码活动中,则大量的工作将被花在生成那些实现一个不必要的属动中,则大量的工作将被花在生成那些实现一个不必要的属性、不必要的操作、不必要的消息通信以及很多其它相关问性、不必要的操作、不必要的消息通信以及很多其它相关问题的代码。题的代码。 由于分析设计模型不能被执行,所以不能进行
112、传统意由于分析设计模型不能被执行,所以不能进行传统意义上的测试。只能通过正式技术复审来检查分析模型和设计义上的测试。只能通过正式技术复审来检查分析模型和设计模型的一致性。模型的一致性。 4、 面向对象开发工作的演化性使面向对象测试活动也具面向对象开发工作的演化性使面向对象测试活动也具有演化性。每个构件产生过程中,单元测试随时进行,迭代有演化性。每个构件产生过程中,单元测试随时进行,迭代的每一个构造都要进行集成测试,后期迭代还包括大量的回的每一个构造都要进行集成测试,后期迭代还包括大量的回归测试,迭代结束时进行系统测试。归测试,迭代结束时进行系统测试。 是否设计模式的使用将减轻是否设计模式的使用
113、将减轻OO系统的繁重测试?系统的繁重测试?Binder认为每次复用是一个新的使用语境,需要重新谨慎的认为每次复用是一个新的使用语境,需要重新谨慎的测试。为了获得测试。为了获得OO系统的高可靠性,可能需要更多的而不系统的高可靠性,可能需要更多的而不是更少的测试。是更少的测试。 面向对象测试的特点面向对象测试的特点面向对象的测试策略面向对象的测试策略 传统的测试策略是从小型测试开始,逐步走向大传统的测试策略是从小型测试开始,逐步走向大型测试,即从单元测试开始,逐步进入集成测试,最后型测试,即从单元测试开始,逐步进入集成测试,最后进行系统测试。在传统测试中,单元测试集中在最小的进行系统测试。在传统测
114、试中,单元测试集中在最小的可编译程序单位(子程序、过程、函数),一旦这些单可编译程序单位(子程序、过程、函数),一旦这些单元都被独立测试后,被集成到程序结构中进行一系列的元都被独立测试后,被集成到程序结构中进行一系列的回归测试,以发现由于模块的接口和新单元加入所导致回归测试,以发现由于模块的接口和新单元加入所导致的副作用而带来的错误。最后,对系统整体进行测试以的副作用而带来的错误。最后,对系统整体进行测试以发现需求中的错误。发现需求中的错误。 面向对象软件测试的目标与结构化软件测试的目标面向对象软件测试的目标与结构化软件测试的目标相同,都是为了找出软件开发中的错误,提高软件的质相同,都是为了找
115、出软件开发中的错误,提高软件的质量。结构化软件的测试策略是从组成系统的最小单元量。结构化软件的测试策略是从组成系统的最小单元模块开始进行测试,然后逐步集成进行小系统测试、模块开始进行测试,然后逐步集成进行小系统测试、系统测试,最后在用户的参与下进行验收测试。系统测试,最后在用户的参与下进行验收测试。面向对象的测试策略面向对象的测试策略 1、单元测试(类或对象或组成的小簇)、单元测试(类或对象或组成的小簇) OO语境中,单元的概念发生了变化。封装驱动了类语境中,单元的概念发生了变化。封装驱动了类或对象的定义,即每个类或对象封装了属性和操作这些属或对象的定义,即每个类或对象封装了属性和操作这些属性
116、的服务,最小的可测试单位不是个体模块,而是封装的性的服务,最小的可测试单位不是个体模块,而是封装的类或对象。类包含一组不同的操作,并且某个特殊操作可类或对象。类包含一组不同的操作,并且某个特殊操作可能作为类的一部分存在(如子类中继承的操作),因此,能作为类的一部分存在(如子类中继承的操作),因此,单元实际上是类或若干相关的类组成的小簇。单元实际上是类或若干相关的类组成的小簇。 单元测试不再孤立的测试单个操作(这是传统的单元单元测试不再孤立的测试单个操作(这是传统的单元测试的视角),而是将操作作为类的一部分。测试的视角),而是将操作作为类的一部分。命令命令execute()粘贴命令粘贴命令exe
117、cute()拷贝命令拷贝命令execute()execute由基类定义并被一组子由基类定义并被一组子类继承,每个子类的类继承,每个子类的execute被应用被应用于每个子类定义的私有属性和操作于每个子类定义的私有属性和操作的语境内,因此,仅在基类内测试的语境内,因此,仅在基类内测试execute是无效的,应该在每个子类是无效的,应该在每个子类的语境内测试的语境内测试execute。 单元测试若用于测试不发生请求的类(如“栈”类,其中操作有:pop(),push(),empty())时,同样要设计驱动程序,封装在一个测试类(包)中,测试类负责运行测试用例并给出结果,每个测试用例用一个操作名表示;
118、单元测试如果测试发生请求的类,则需要设计桩程序,封装在桩类中。 例如:面向对象的测试策略面向对象的测试策略 单元测试主要使用的图模型是:类图、类的状态图、单元测试主要使用的图模型是:类图、类的状态图、活动图。活动图。 2、集成测试(大簇、构件、子系统)、集成测试(大簇、构件、子系统) 这里的构件或子系统应该与系统的体系结构相对应。这里的构件或子系统应该与系统的体系结构相对应。集成测试主要以检查这些构件、子系统的接口为目的。集成测试主要以检查这些构件、子系统的接口为目的。对对于类之间的集成于类之间的集成,Roger S. Pressman认为传统的自顶向认为传统的自顶向下和自底向上集成的测试策略
119、没有意义。他提出了两种集下和自底向上集成的测试策略没有意义。他提出了两种集成测试策略:成测试策略: (1)基于线程的测试()基于线程的测试(thread-based testing) 集成一组相互协作的对某个输入或事件作出响应的集成一组相互协作的对某个输入或事件作出响应的类,每个线程被分别测试,并使用回归测试以保证没有副类,每个线程被分别测试,并使用回归测试以保证没有副作用产生。作用产生。 (2)基于使用的测试()基于使用的测试(use-based testing) 按层次测试系统。先测试不依赖服务器的独立类,按层次测试系统。先测试不依赖服务器的独立类,如管理和显示数据的类,然后测试依赖独立类
120、的其他类。如管理和显示数据的类,然后测试依赖独立类的其他类。逐步增加依赖类,直到测试完整个系统。逐步增加依赖类,直到测试完整个系统。面向对象的测试策略面向对象的测试策略 对于子系统之间的对于子系统之间的集成集成,如果系统划分为层,如果系统划分为层次结构,则可以按自顶向次结构,则可以按自顶向下或自底向上集成,同时下或自底向上集成,同时也需设计驱动类和桩类。也需设计驱动类和桩类。如:一个如:一个OOOO系统的结构为:系统的结构为:用户界面用户界面(A)应用逻辑应用逻辑(B)访问数访问数据库据库(C)网络通信网络通信(D)应用系统的一个结构应用系统的一个结构该系统可以采用自顶向下、自底向上或三明治式
121、进行该系统可以采用自顶向下、自底向上或三明治式进行集成测试。见下图。集成测试。见下图。面向对象的测试策略面向对象的测试策略自顶向下自顶向下自底向上自底向上三明治式三明治式UI层层桩桩桩桩UI层层应用层应用层桩桩桩桩UI层层应用层应用层数据库数据库网络网络数据库层数据库层网络层网络层驱动驱动驱动驱动数据库数据库网络网络应用层应用层驱动驱动驱动驱动UI层层桩桩桩桩数据库层数据库层网络层网络层驱动驱动驱动驱动面向对象的测试策略面向对象的测试策略TestATestBTestCTestDTestA、BTestB、CTestB、DTestA、B、C、D单元测试单元测试集成测试集成测试集成测试集成测试测试过
122、程(UML活动图) 集成测试使用的图模型是:顺序图、协作图、活动图(概念层)面向对象的测试策略面向对象的测试策略3、确认测试、确认测试 在确认和系统测试层次,和传统在确认和系统测试层次,和传统的一样。测试的内容主要集中于用户可的一样。测试的内容主要集中于用户可见的动作和用户可识别的系统输出(用见的动作和用户可识别的系统输出(用户可见的功能),以及系统性能等其他户可见的功能),以及系统性能等其他需求。测试人员应该根据需求说明和用需求。测试人员应该根据需求说明和用例模型设计测试用例。例模型设计测试用例。 确认测试使用的图模型主要是用确认测试使用的图模型主要是用例图。例图。面向对象的测试策略面向对象
123、的测试策略面向对象软件的测试用例设计面向对象软件的测试用例设计 传统测试用例设计是由软件的输入、加工、输传统测试用例设计是由软件的输入、加工、输出视图或个体模块的算法细节驱动的,面向对象测出视图或个体模块的算法细节驱动的,面向对象测试关注于设计合适的操作序列以测试类的状态和用试关注于设计合适的操作序列以测试类的状态和用例的实现。例的实现。 1、传统方法的可用性、传统方法的可用性 白盒测试:用于类级别的测试。测试类中封装白盒测试:用于类级别的测试。测试类中封装的操作,检查类的状态以确定是否存在错误。的操作,检查类的状态以确定是否存在错误。 黑盒测试:集成测试、确认测试。构件、子系黑盒测试:集成测
124、试、确认测试。构件、子系统是黑盒。测试序列跟踪跨越类协作的操作流。统是黑盒。测试序列跟踪跨越类协作的操作流。 2、类级别测试用例设计(单元测试)、类级别测试用例设计(单元测试) 着重于单个类及封装的操作。可按照以下方法着重于单个类及封装的操作。可按照以下方法设计用例:设计用例: (1)随机测试)随机测试 以银行应用系统为例,简要说明这种测试方法。该系统以银行应用系统为例,简要说明这种测试方法。该系统的的accountaccount(帐户)类有如下操作:(帐户)类有如下操作:openopen(打开)、(打开)、setupsetup(建立)、(建立)、depositdeposit(存款)、(存款)
125、、withdrawwithdraw(取款)、(取款)、balancebalance(余额)、(余额)、summarizesummarize(清单)、(清单)、creditLimitcreditLimit(透(透支限额)、支限额)、closeclose(关闭)。(关闭)。 但问题的性质隐含了一些限制但问题的性质隐含了一些限制(例如,账号必须在其它操作可应用前被打开,在所有操作(例如,账号必须在其它操作可应用前被打开,在所有操作完成后被关闭)。一个完成后被关闭)。一个帐户帐户实例的最小行为生命历史包括下实例的最小行为生命历史包括下面操作:面操作: 打开打开,建立建立,存款存款,取款取款,关闭关闭,
126、表示了,表示了帐户帐户的最小测试的最小测试序列。然而大量的其它行为可能在下面序列中发生:序列。然而大量的其它行为可能在下面序列中发生: 打开打开,建立建立,存款存款, 存款存款|取款取款|余额余额|清单清单|透支限额透支限额n ,取取款款,关闭关闭 一系列操作序列可以随机产生,例如:一系列操作序列可以随机产生,例如: 测试用例测试用例1:打开打开,建立建立,存款存款,存款存款,余额余额,清单清单,取款取款,关闭关闭面向对象软件的测试用例设计面向对象软件的测试用例设计 测试用例测试用例2:打开打开,建立建立,存款存款,取款取款,存款存款,余额余额,透支限额透支限额,取款取款,关闭关闭 可随机选取
127、其它的测试序列以测试该类对象不同的生可随机选取其它的测试序列以测试该类对象不同的生命历史。命历史。 (2)划分测试()划分测试(partition testing) 可以减少测试类所需的测试用例的数量,采用与传统可以减少测试类所需的测试用例的数量,采用与传统测试的等价划分相同的方式,即输入、输出被分类,为处理测试的等价划分相同的方式,即输入、输出被分类,为处理每个类别设计测试用例。划分类别的具体方法是:每个类别设计测试用例。划分类别的具体方法是: 基于状基于状态的划分的划分 基于基于类操作改操作改变类状状态的能力来的能力来对类操作分操作分类。类中有中有的操作改的操作改变类的状的状态(如(如帐户
128、帐户类中的中的存款存款和和取款取款),有的操,有的操作不改作不改变类的状的状态(如(如余额余额,清单清单和和透支限额透支限额)。因此分)。因此分别独立独立测试改改变状状态的操作和不改的操作和不改变状状态的操作。的操作。面向对象软件的测试用例设计面向对象软件的测试用例设计 基于属性的划分基于属性的划分 根据操作使用的属性来划分根据操作使用的属性来划分类操作,即使用相同操作,即使用相同属性的操作划分在一个等价属性的操作划分在一个等价类中。如中。如帐户帐户类中,以中,以透支透支限额限额来定义划分,操作被定义成来定义划分,操作被定义成3个类别:个类别: 使用使用透支限额透支限额的操作,的操作, 修改修
129、改透支限额透支限额的操作,的操作, 不使用或不修改不使用或不修改透支限额透支限额的操作。的操作。 然后对每个划分设计测试序列。然后对每个划分设计测试序列。 基于操作基于操作类别的划分的划分 如在如在帐户帐户类中的操作可被分中的操作可被分类为: 初始化操作(初始化操作(打开打开、建立建立)、计算操作(算操作(存款存款,取取款款)、查询操作()、查询操作(余额余额,清单清单,透支限额透支限额)和终止操作)和终止操作( 关闭)。关闭)。面向对象软件的测试用例设计面向对象软件的测试用例设计 3、类协作测试用例的设计(集成测试)、类协作测试用例的设计(集成测试) 测试类或构件被组装后相互之间能否正常交互
130、完成指定测试类或构件被组装后相互之间能否正常交互完成指定的功能。使用的功能。使用use-case作为测试的主要驱动,顺序图、协作为测试的主要驱动,顺序图、协作图为测试提供帮助。作图为测试提供帮助。 和单个类一样,可通过应用随机和划分方法以及基于和单个类一样,可通过应用随机和划分方法以及基于use-case场景和行为模型导出测试用例。场景和行为模型导出测试用例。 (1)随机测试)随机测试 Kirani等人建议用下面的步骤生成多个随机测试序列:等人建议用下面的步骤生成多个随机测试序列: 对每个客每个客户类,用,用类操作列表生成随机操作列表生成随机测试序列,序列,这些操作将些操作将发送消息送消息给其
131、他服其他服务器。器。 对生成的每个消息,确定在服生成的每个消息,确定在服务器器对象中的象中的协作者作者类及及对应的操作。的操作。 对服服务器器对象中的已象中的已经被来自客被来自客户对象的消息象的消息调用的每用的每个操作,确定个操作,确定该操作向操作向协作者作者发送的消息。送的消息。面向对象软件的测试用例设计面向对象软件的测试用例设计 对每个消息,确定下一每个消息,确定下一层被被调用的操作并用的操作并结合合这些些操作到操作到测试序列中。序列中。 如,某一个如,某一个应用用问题的的类协作作图如下:如下:对对B的随机测试序列可能是的随机测试序列可能是x1,x2,为了考了考虑涉及到涉及到该测试的的协作
132、者,要考作者,要考虑上述序列中每个操作相关上述序列中每个操作相关联的消息。的消息。设B必必须与与C协作(需作(需执行行x3)以)以执行行x1,B与与D协作(需作(需执行行x4)以)以执行行x2。因此,。因此,对B的的测试序列序列应该是:是:x1,x3,x2,x4,测试序列跟踪跨越序列跟踪跨越类协作的操作流。作的操作流。基于用例的实现是产生随基于用例的实现是产生随机测试序列的基础。机测试序列的基础。ABCDEx1,x2,x3x4面向对象软件的测试用例设计面向对象软件的测试用例设计 (2)划分测试)划分测试 类似于单个类划分测试方法,但需扩展测试序列类似于单个类划分测试方法,但需扩展测试序列以包括
133、那些通过发送给协作类的消息而激活的操作。另以包括那些通过发送给协作类的消息而激活的操作。另一种方法是基于特殊类的接口来划分测试。如上图,一种方法是基于特殊类的接口来划分测试。如上图,B接收来自类接收来自类A和类和类E的消息,可以通过将的消息,可以通过将B中的方法划分中的方法划分为服务于为服务于A和服务于和服务于E的操作来测试。的操作来测试。 (3)从行为模型导出的测试)从行为模型导出的测试 类的类的STD可用于帮助导出测试类(和那些与其协可用于帮助导出测试类(和那些与其协作的类)的动态行为的测试序列。下图是银行应用系统作的类)的动态行为的测试序列。下图是银行应用系统帐户帐户类的类的STD。 所
134、涉及的测试应覆盖所有的状态,即操作序列应所涉及的测试应覆盖所有的状态,即操作序列应该导致该导致帐户帐户类的转换穿越所有允许的状态。类的转换穿越所有允许的状态。面向对象软件的测试用例设计面向对象软件的测试用例设计 测试用例测试用例1:打开打开,存款存款(初次初次),取款取款l(消户消户), 关闭关闭 (最小测试序列)(最小测试序列)测试用例测试用例2:打开打开,存款存款(初次初次),存款存款,余额余额, 透支透支 ,取款取款(消户消户),关闭关闭测试用例测试用例3:打开打开,存款存款(初次初次),存款存款,取款取款, 帐户资料帐户资料 ,取款取款(消户消户),关闭关闭建立帐户建立帐户帐户操作帐户
135、操作非帐户操作非帐户操作打开打开存款存款(初次初次)存款存款余额余额,透支透支, 帐户资料帐户资料取款取款(消户消户)关闭关闭取款取款面向对象软件的测试用例设计面向对象软件的测试用例设计 可以使用可以使用“宽度度优先的方式先的方式”遍遍历STD: 一个一个测试用例用例测试单个状个状态转换,当,当测试新的新的转换时,仅使用以前被使用以前被测试过的的转换。 4、其它需要考、其它需要考虑的的问题 以上以上测试用例的用例的设计主要考主要考虑选取合适的操作序列,取合适的操作序列,还要考要考虑操作的参数,在操作的参数,在选择参数参数时可可对参数划分等价参数划分等价类,每个,每个输入参数属于一个等价入参数属
136、于一个等价类,同,同时还需考需考虑参数参数的的边界情况。界情况。 面向对象软件的测试用例设计面向对象软件的测试用例设计 RUPRUP的测试活动的测试活动 RUP建立的测试活动主要是执行并评估测试模建立的测试活动主要是执行并评估测试模型所描述的测试。其中,测试模型是包括以下内容型所描述的测试。其中,测试模型是包括以下内容的集合:的集合: 测试用例:可用例:可设计一一张表:每一行是一个表:每一行是一个测试用例,每一列有用例的用例,每一列有用例的输入数据、入数据、预期期结果、果、实际结果和果和测试条件。条件。 测试规程:程:详细描述了怎描述了怎样使用使用测试用例。一用例。一个个测试规程可能用于不同的
137、程可能用于不同的测试用例,但有用例,但有时一个一个测试用例可能需要多个用例可能需要多个测试规程。(多程。(多对多关系)多关系) 测试构件:构件:为了了实现系系统测试自自动化而化而设计的的程序构件,有程序构件,有时也称也称“测试驱动程序程序”。 RUP的的测试活活动具体有以下几方面:具体有以下几方面: 1、制定测试计划、制定测试计划 规划一次迭代中的测试工作,包括:规划一次迭代中的测试工作,包括: 描述描述测试策略策略 估算估算测试工作所需的人力以及系工作所需的人力以及系统资源源 制定制定测试工作的工作的进度度 制定制定测试计划的划的输入和入和结果果见下下图。 系系统是不可能完全被是不可能完全被
138、测试的。每个的。每个测试用例、用例、规程和构程和构件的开件的开发、执行及行及评估都需要花估都需要花费时间和金和金钱。测试设计的准的准则是以最少的重复来是以最少的重复来测试最重要的用例并最重要的用例并对风险性最性最大的需求大的需求进行行测试。RUP的测试活动的测试活动制定测试计划的输入和结果制定测试计划的输入和结果需求补充需求补充构架描述构架描述测试计划测试计划用例模型用例模型设计模型设计模型制制定定测测试试计计划划测试工程师测试工程师分析模型分析模型实现模型实现模型(测试策略与进度)(测试策略与进度)RUP的测试活动的测试活动设计测试用例的输入和结果设计测试用例的输入和结果需求补充需求补充构架
139、描述构架描述测试规程测试规程用例模型用例模型设计模型设计模型设设计计测测试试用用例例测试工程师测试工程师分析模型分析模型实现模型实现模型测试计划测试计划测试用例测试用例 2、设计测试用例、设计测试用例 (1)设计集成测试用例)设计集成测试用例 用于验证构件被组装成包或子系统后相互之间能用于验证构件被组装成包或子系统后相互之间能否正常交互。大多数集成测试用例可由用例实现否正常交互。大多数集成测试用例可由用例实现-设计设计导出,因此,设计测试用例时,首先考虑用例实现的交导出,因此,设计测试用例时,首先考虑用例实现的交互图,从中选择若干组感兴趣的场景互图,从中选择若干组感兴趣的场景参与者、输入信参与
140、者、输入信息、输出结果和系统初始状态的组合。当执行相应的集息、输出结果和系统初始状态的组合。当执行相应的集成测试时,可以捕获到系统内对象之间的实际交互(比成测试时,可以捕获到系统内对象之间的实际交互(比如,通过跟踪打印输出或者通过单步执行),将中间结如,通过跟踪打印输出或者通过单步执行),将中间结果与交互图进行比较。果与交互图进行比较。 (2)设计系统测试用例)设计系统测试用例 用于测试系统功能整体上是否正确,在不同条件用于测试系统功能整体上是否正确,在不同条件下的用例组合的运行是否有效。这些条件包括不同的硬下的用例组合的运行是否有效。这些条件包括不同的硬件配置(处理器、基本内存、硬盘等)、不
141、同程度的系件配置(处理器、基本内存、硬盘等)、不同程度的系统负载、不同数量的参与者以及不同规模的数据库。统负载、不同数量的参与者以及不同规模的数据库。 2、设计测试用例、设计测试用例 测试人员在设计测试用例时,应对以下用例组合的优先测试人员在设计测试用例时,应对以下用例组合的优先级进行排序:级进行排序: 执行并行功能行并行功能时需要的用例需要的用例组合。合。 可能被并行可能被并行执行的用例行的用例组合。合。 如果并行运行,有可能相互影响的用例如果并行运行,有可能相互影响的用例组合。合。 包含多包含多进程的用例程的用例组合。合。 经常性的、并有可能以复常性的、并有可能以复杂的和不可的和不可预知的
142、方式消耗系知的方式消耗系统资源(如源(如进程、程、处理器、数据理器、数据库以及通信以及通信软件)的用例件)的用例组合。合。 在在设计测试用例用例时,还要考要考虑事件流和特殊需求。事件流和特殊需求。(3)建立)建立测试规程程 测试人人员应根据根据测试规程程对每个子系每个子系统使用一个或多个用使用一个或多个用例例进行行测试(也可一个用例有多个(也可一个用例有多个规程)。程)。测试规程随着程随着测试活活动的的进展可能需要修改,用来展可能需要修改,用来说明如何明如何执行一个新的或行一个新的或发生生了了变化的化的测试用例。用例。 2、设计测试用例、设计测试用例测试规程测试规程实现模型实现模型实实现现测测
143、试试构件工程师构件工程师测试用例测试用例测试测试构件构件测试实现的输入和结果测试实现的输入和结果 3、实现测试、实现测试尽可能的建立测试构件以使测试规程自动化。 实现测试构件有两种方法:实现测试构件有两种方法: (1 1)依赖于测试自动化工具。测试人员根)依赖于测试自动化工具。测试人员根据测试规程,在自动化工具环境中执行测据测试规程,在自动化工具环境中执行测试规程所描述的动作,测试工具会自动记试规程所描述的动作,测试工具会自动记录这些动作。构件工程师整理这些记录,录这些动作。构件工程师整理这些记录,并作适当调整,生成测试构件。这些测试并作适当调整,生成测试构件。这些测试构件通常是以脚本语言实现
144、的,如构件通常是以脚本语言实现的,如Visual Basic的测试版本。的测试版本。 (2 2)把测试规程作为编程工作的主要规格)把测试规程作为编程工作的主要规格说明,使用编程语言开发测试构件。需要说明,使用编程语言开发测试构件。需要有高超的编程技巧和责任心。有高超的编程技巧和责任心。 3、实现测试、实现测试测试规程测试规程实现模型实现模型执执行行集集成成测测试试集成测试人员集成测试人员测试用例测试用例集成测试的输入和结果集成测试的输入和结果测试测试构件构件缺陷缺陷 4、执行集成测试、执行集成测试对一个迭代内创建的每个构造执行集成测试。 (1)对每一个测试用例执行测试规程(手工或自动),)对每
145、一个测试用例执行测试规程(手工或自动),实现与构造相关的集成测试。实现与构造相关的集成测试。 (2)将测试结果和预期结果相比较,研究两者的偏离原)将测试结果和预期结果相比较,研究两者的偏离原因。因。 (3)将缺陷报告给相关的构件工程师,由他们对缺陷)将缺陷报告给相关的构件工程师,由他们对缺陷进行修改。进行修改。 (4)将缺陷报告给测试设计人员,由他们对测试结果和)将缺陷报告给测试设计人员,由他们对测试结果和缺陷类型进行统计分析,评估整个测试工作的结果。缺陷类型进行统计分析,评估整个测试工作的结果。集成测试按以下步骤进行:集成测试按以下步骤进行: 5、执行系统测试、执行系统测试 当集成测试已表明
146、系统满足了当前迭代中所确定的集成质量目标时,就可以开始进行系统测试。系统测试的的输入和结果同集成测试。系统测试中发现的问题反馈给测试设计人员和相关工作流的负责人员。 6、评估测试、评估测试 测试人员将一次迭代内测试工作的结果和测试计划建立的目标进行对比,做出评估。测试计划测试计划测试模型测试模型评评估估测测试试测试工程师测试工程师测试评估的输入和结果缺陷缺陷测试评估测试评估执行系统测试与评估测试执行系统测试与评估测试 测试人员确定一些度量标准,评估软件的质量水平,并确定还需要进一步做多少测试工作。 测试设计人员尤其看重两条度量标准: 测试完全性。由测试用例的覆盖率和测试构件的覆盖率导出,即用测
147、试用例使用数量和测试构件代码执行数量来衡量测试的完全性。当然,还要检查非功能方面的测试用例。 可靠性。根据已发现的缺陷进行缺陷趋势分析,测试人员创建缺陷趋势图,以阐明特定类别的缺陷在时间跨度上的分布。还要创建能够描述在时间跨度上测试成功率(即已达到预期结果的测试的比率)的趋势图。 基于缺陷趋势分析,测试设计人员可以提出进一步的建议,例如:评估测试评估测试 如果可靠性测量指出系统还不够成熟,就要执行额外的测试来查找更多的缺陷。 如果对当前迭代所设置的质量目标过高,就要降低测试准则。 把系统中质量已过关的部分分离出,并把它们作为当前迭代的结果交付出去,没有达到质量标准的部分必须加以修改,然后再进行
148、测试。 测试设计人员在测试评估描述中阐述测试的完整性、可靠性并提出行动建议。评估测试评估测试 测试的主要的主要结果是果是测试模型,它描述了系模型,它描述了系统是怎是怎样被被测试的。的。测试模型包括:模型包括: 测试用例,用例,规定了在系定了在系统重要重要测试什什么。么。 测试规程,程,规定了怎定了怎样执行行测试用例。用例。 测试构件,使构件,使测试规程自程自动化。化。 测试还产生生测试计划、划、对已已执行的行的测试的的评估以及可以向其他核心工作流(如估以及可以向其他核心工作流(如设计和和实现工作流)缺陷的反工作流)缺陷的反馈。7、测试小小结谢谢!同学们辛苦了!谢谢!同学们辛苦了! 习习 题题 P2352361.6.7 .