《六章节软件测试.ppt》由会员分享,可在线阅读,更多相关《六章节软件测试.ppt(142页珍藏版)》请在三一办公上搜索。
1、第六章 软件测试,6.1 基本概念 软件开发过程必须伴有质量保证活动。软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。,有关测试的思考题,软件测试是一门非常重要的学科,主要研究内容是什么?软件测试需要什么样的专业基础软件质量到底是什么?测试的目标是什么?开发一个测试系统之前你是否明白:可以测试什么?应该测试什么?最终能够测试什么?测试的目标是什么?,软件产品最大的成本是检测软 件错误、修正软件错误的成本。在整个软件开发中,测试工作量 一般占30%40%,甚至50%。在人命关天的软件(如飞机控制、核反应堆等)测试所花费的时间往往是其它软件工程活动时间之和的三到五倍,软件测试背
2、景,软件是人编的所以不完美实例:1994-1995,迪斯尼的狮子王系统不支持问题Intel的pentium处理器1994年浮点除法缺陷200年8月28日,1.13MHZ处理器一个可能导致运行程序被挂起的执行指令问题1999年12月3日,美国航天局火星极地登陆飞船失踪1991年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度千年虫,世界各地解决2000年错误超过数亿美元,软件测试的认识的发展,人们对软件测试认识的五个阶段:阶段1 测试=调试阶段2 测试是证明软件正确阶段3 测试是发现软件中错误阶段4 测试是减小软件不工作的风险(是度量软件质量要素的过程)阶段5 测试可产生低风险的软件的一
3、 种认识上的训练,三个盲人和一头大象:你能够为质量 下定义吗?,质量管理领域权威人物J.M.Juran将质量 定义为“决定产品性能和满意程度的 特征”,测试注重于产品的满意度。测试应针对这样一种情况:软件产品在一些特定的范围内不能满足客户的合理要求。通过测试过程可以评定质量风险(可能的错误),了解被测试系统中存在的错误模式(观察到的错误症状)。,质量控制技术,质量控制活动分类,开发方法学,配置管理,验证技术,评 审,正确性验证,性能调试,组件测试,集成测试,系统测试,原子事务,模块冗余性,检 错,质量控制,避免错误,容 错,调 试,测 试,软件质量问题,以软件测试为中心的软件质量保障技术软件
4、静态测试技术质量 软件度量技术控制 动态测试技术技术 配置管理技术 修改控制与管理技术 软件测试是保证软件质量,提高软件可靠性的关键,软件测试的目标,(1)预防错误:几乎不可实现(2)发现错误,6.1.1 测试的目的与地位 G.J.Myers在中认为:1.测试是为了寻找错误而运行程序的过程。2.一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试。3.一个成功的测试是揭示了迄今为止尚未发现的错误的测试。,E.W.Dijkstra 指出:“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.,把证明程序无错当作测试目的不仅
5、是不正确的,完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的.软件测试要设法使软件发生故障,暴露软件错误 测试的“成功”与“失败”能够发现错误的测试是成功的测试,否则是失败的测试。,“测试的目的是说明程序正确地执行它应有的功能”这种说法正确吗?例:程序Triangle,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用“测试用例”(3,4,5),(5,5,6),(6,6,6),程序都能给出正确结果,是否就可认为程序是正确的?,难以说清的软件缺陷,古谚:“一片树叶飘落在森林中没有人听见,谁
6、能说它发出了声音?”,由于不能报告没有看见的问题,因此,没有看见就不能说存在软件缺陷,如果软件中的问题没有人发现,那么它算不算软件缺陷?”,只有看到了,才能断言软件缺陷,尚未发现的软件缺陷只能说是未知软件缺陷。,眼见为实,6.1.2 测试原则(1)所有的测试都应追溯到用户需求 最严重的错误(从用户角度)是那些导致软件无法满足需求的错误。程序中的问题根源可能在开发 前期的各阶段解决、纠正错误也必须追溯到前期工作。,测试与开发前期工作的关系,决定软件与系统的配合关系,需求分析,概要设计,详细设计,编 码,单元测试,集成测试,确认测试,系统测试,开发前期出现错误的扩展,计划,需求分析,设计,编码,测
7、试,A,A,B,软件生存期各阶段间需保持的正确性,用户要求,用户:我要什么?,运行结果,计算机:程序运行得到的结果,源程序,程序员:我要让计算机什么做?,设计说明书,设计员:我要让软件做什么?,需求说明书,分析员:我可以提供什么?,1,2,3,4,5,理解正确性表达正确性,理解正确性设计正确性表达正确性,理解正确性编码正确性,运行正确性输入正确性,相符吗?,测试原则(2)概要设计时应完成测试计划,详细的测试用例定义可在设计 模型确定后开始,所有测试可 在任何代码被产生之前进行计 划和设计。,软件测试不等于程序测试 软件测试应贯穿于软件定义与开发的整个期间;据美国一家公司统计,查出的软件错误中,
8、属于需求分析和软件设计的错误约占 64%,属于程序编写的错误仅占 36%。程序编写的许多错误是“先天的”。,测试阶段工作步骤单元测试:检验每个模块能否单独 工作.集成测试:检验概要设计中模块接 口设计问题确认测试:以需求规格说明书为检 验尺度系统测试:综合检验测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量.,测试原则(3)pareto原则:测试发现的错误中80%很可能起源于20%的模块中。应孤立这些疑点模块重点测试。(4)穷举测试是不可能的。(5)应由独立的底三方来构造测试。(开发和测试队伍分别建立),测试原则,例:测试计算器程序加法测试1+0=1+999999999999999
9、99999999999999999=2+0=2+99999999999999999999999999999999=99999999999999999999999999999999+99999999999999999999999999999999=1.0+0.1=1.0+0.2=减法测试乘法测试除法测试求平方根百分数倒数,测试原则(6)测试用例应由输入数据和预期的输 出结果两部分组成.(7)兼顾合理的输入和不合理的输入数据(8)程序修改后要回归测试(9)应长期保留测试用例,直至系统废弃。,测试原则:软件测试是有风险的行为,数量,遗漏软件缺陷数目,测试费用,测试中,测试后,软件,测试工作量,每一个
10、软件项目都有一个最优的测量量,最优测量量,6.1.3 可测试性 可测试软件的特征:可操作性可观察性可控制性可分解性简单性稳定性易理解性,“好”测试的属性:发现错误的可能性高不冗余在目的相似的测试中,应使用最可能找到错误的测试每一个测试应独立执行,软件测试有关概念,测试中用到的模型元素(UML类图),测试组,测试用例,故 障,组 件,测试存根,测试驱动程序,误 差,错 误,改 正,由修改,由引起,由引起,找出,使用,修改,1n,*,*,*,*,*,*,*,*,*,*,*,组件是系统中可以孤立进行测试的部分,一个组件可以是对象,一组对象,一个或多个子系统。错误,也称缺陷或不足,是可能引起组件不正常
11、行为的设计或编码错误。误差是系统执行过程中错误的表现。故障是组件的规格说明与其行为之间的偏差,故障是由一个或多个误差引起的。测试用例是一组输入和期待的结果,它根据引起故障和检查的目的来使用组件。测试存根是被测试的组件所依赖的其它一些组件的实现部分。测试驱动程序是依赖被测试组件的那个组件的实现部分。改正是对组件的变化。改正的目的在于修正错误。改正可能会产生新的错误。,错误(fault)、误差(error)和故障(failure),出轨(出故障)?,图中不表示故障,因为既没有指定期望行为也没有任何观察的行为,它也不表示误差,因为这不意味着系统正处在进一步处理将导致故障的状态.,错误(fault)、
12、误差(error)和故障(failure),用例名称 DriveTrain参与执行者 火车司机入口条件 司机按下控制面板上的StrartTrain事件流 1.列车开始在轨道1上运行 2.列车平移到轨道2退出条件 列车运行在轨道2上特殊条件 没有,用例DriveTrain指定了列车的期望行为:,错误(fault)、误差(error)和故障(failure),测试用例标识符 DriveTrain测试位置 http:/www12.in.tum.de/要测试的特征 引擎连续运行5s特征合格/不合格标准 如果列车连续前进5s,并且至少 通过两个轨道的长度,则测试通过控制方法 驱动程序StrartTrai
13、n调用StrartTrain()方法数据 从输入文件http:/www12.in.tum.de/中 得到运行方向和持续时间,用例DriveTrain的测试用例DriveTrain:,执行这个测试用例时,可以证明系统是包含有错误的,软件测试有关概念术语和定义,软件测试要精度还是准确度很大程度上取决于产品是什么,最终取决于开发小组的目标。,既不准确又不精确,精确但不准确,准确但不精确,既准确又精确,精确和准确,软件测试有关概念术语和定义,验证和合法性检查验证是检查软件符合产品说明书的过程合法性检查是保证软件满足用户要求的过程质量和可靠性 可靠性只是质量的一个方面测试和质量评判(QA)软件测试员的目
14、标是找出软件缺陷软件质量评判人员的主要职责是创建和加强 促进软件开发并防止软件缺陷的标准和方法,测试(test)调试(debug),以已知条件开始,使用预先定义的程序,有预知的结果,以不可知内部条件开始,结果一般不可预见,有计划,被动的,由独立的测试组,在不了解软件设计的条件下完成,由程序作者进行,发现错误,找出错误位置,排除,测试与调试(排错),软件错误分类 功能错(需求分析错误)软件结构错 数据错 编码错 软件集成错 测试定义与测试执行错误,6.1.4 测试用例设计 选择测试用例是软件测试员最重要 的一项工作。测试用例的属性:属性 描述name 测试用例的名称 location 可执行的完
15、全路径名 input 输入数据或命令oracle 与测试输入相比较的期待测试结果log 测试生产的输出,程序测试举例例:程序 Triangle,输入三个整 数,表示一个三角形的三个边 长,该程序产生一个结果,指 出该三角形是等边三角形、等 腰三角形还是不等边三角形。,判断三角型的测试用例设计:输入数据 预期结果(1)6;6;6 等边(2)8;8;4 等腰(3)4;5;6 一般 还应输入非法数据:0;7;9-7;3;5 a;2;7 等,6.1.5 软件测试信息流,软件配置,测试,测试配置,测试工具,结果分析,排错,可靠性 分析,测试结果,错误,预期结果,出错率,改正的软件,预测的可靠性,需求规格
16、说明书软件设计说明书 被测源程序,测试计划 测试用例(测试数据)测试驱动程序,测试活动和相关工作产品,项目协议,对象设计,客户,开发人员,用户,集成策略,系统分解,功能性需求,非功能性需求,单元测试,集成测试,结构测试,功能测试,性能测试,来自ODD,来自TP,来自SDD,来自RAD,来自RAD,用户手册,验收测试,安装测试,现场测试,日常操作,测试设计中需要考虑的22种测试类型,黑盒测试白盒测试单元测试累计综合测试集成测试功能测试系统测试端到端测试健全测试衰竭测试接受测试,负载测试强迫测试性能测试可用性测试安装/卸载测试恢复测试兼容测试安全测试比较测试Alpha测试Beta测试,6.1.6
17、测试的方法与技术,软件测试的策略和方法,静态测试方法,动态测试方法,人工测试方法,计算机辅助静态分析方法,白盒测试方法,黑盒测试方法,静态和动态测试,汽车的检查过程:踩油门看车漆打开前盖检查发动汽车听听发动机声音上路行使,静态测试,动态测试,静态测试:基本特征是在对软件进行 分析、检查和审阅,不实 际运行被测试的软件。静态测试约可找出3070%的逻辑设计错误.对需求规格说明书、软件设计说明书、源程序做检查和审阅,包括:是否符合标准和规范;通过结构分析、流图分析、符号执行指出软件 缺陷;,动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素:被测试程序 测试数据(测
18、试用例),动态测试方法(1)选取定义域有效值,或定义域 外无效值.(2)对已选取值决定预期的结果(3)用选取值执行程序(4)执行结果 与(2)结果相比,不吻和程序有错.,动态黑盒测试 闭着眼睛测试软件,软件,输入,不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。,输出,动态白盒测试 带上X光眼镜测试软件,?,3581322.293419985680302829734315,250*(1+0.015)*(1+0.015)360-1)/0.015,250*(1+0.015)*(1+0.015)360-1)/0.015,假如知道一个盒子包含一台计算机,而另一个盒子是人用纸笔计算
19、,就会选择不同的测试用例,了解软件的运作方式会影响测试手段,6.2 两种类型的测试6.2.1 黑盒测试 又称:功能测试 数据驱动测试 基于规格说明书的测试,6.2.2 白盒测试 又称:开盒测试 结构测试 玻璃盒测试 基于覆盖的测试.根据被测程序的逻辑结构设计 测试用例;力求提高测试覆盖率;,黑盒测试与白盒测试比较 黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。白盒测试是根据程序内部逻辑结构进行测试。,黑盒测试与白盒测试优缺点比较,黑盒测试 白盒测试,优点,缺点,性质,适用于各阶段测试从产品功能角度测试容易入手生成测试数 据,可构成
20、测试数据使特定程 序部分得到测试有一定的充分性度量手段可或较多工具支持,某些代码得不到测试如果规格说明有误,则无法发现不易进行充分性测试,不易生成测试数据(通常)无法对未实现规格说明的 部分进行测试工作量大,通常只用于单 元测试,有应用局限,是一种确认技术,回答“我们在构造一个正确 的系统吗?”,是一种验证技术,回答“我们在正确 地构造一个系 统吗?”,6.2.3 穷举测试例:输入 三条边长 黑盒测试可采用的测试用例数(设字长16位)执行时间:设测试一次需1ms 共需一万年.,=2 X2 X2 3X10,16,16,16,14,6.2.3 穷举测试 白盒测试例:含4个分支,循环次数20,从A到
21、B的可能路径执行时间:设测试一次需2ms 穷举测试需5亿年.,=5+5+.+5+5 10,20,1,2,19,14,A,B,不论黑盒还是白盒测试都不能进行穷尽测试,所以软件测试不可能发现程序中存在的所有错误,因此需精心设计测试方案,力争尽可能少的次数,测出尽可能多的错误.,黑盒测试与白盒测试能发现的错误,C,B,A,D,-只能用黑盒测试发现的错误,A,-只能用白盒测试发现的错误,-两种方法都能发现的错误,-两种方法都不能发现的错误,B,C,D,6.3白盒测试的测试用例设计 6.3.1 逻辑覆盖法(1)语句覆盖(2)判定覆盖(3)条件覆盖(4)判定/条件覆盖(5)条件组合覆盖(6)路径覆盖(7)
22、点覆盖(8)边覆盖,例:PROCEDURE SAMPAL(A,B:REAL;VAR X:REAL);BEGIN IF(A1)AND(B=0)THEN X:=X/A IF(A=2)OR(X1)THEN X:=X+1 END;,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,(1)语句覆盖使程序中每个语句至少执行一次,语句覆盖,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,只需设计一个测试用例:输入数据:A=2,B=0,X=4即达到了语句覆盖;语句覆
23、盖是最弱的逻辑覆盖,(2)判定覆盖(分支覆盖)使每个判定的真假分支都至少执行一次,判定覆盖,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,例:可设计两组测试用例:A=3,B=0,X=3 可覆盖c、d分支 A=2,B=1,X=1 可覆盖b、e分支 两组测试用例可覆盖所有判定的真假分支语句覆盖仍是弱的逻辑覆盖,(3)条件覆盖 使每个判定的每个条件的可能取值至少执行一次,第一判定表达式:设条件 A1 取真 记为 T1 假 T1 条件 B=1 取真 记为 T2 假 T2第二判定表达式:设条件 A=2 取真 记为 T3 假 T3
24、 条件 X1 取真 记为 T4 假 T4,条件覆盖,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,满足条件:T1,T1,T2,T2 T3,T3 T4,T4,测试用例 通过 满足的 覆盖A B X 路径 条件 分支1 0 3 abe T1,T2,T3,T4 b,e2 1 1 abe T1,T2,T3,T4 b,e 两个测试用例覆盖了四个条件八种可能取值。未覆盖c、d分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖,(4)判定/条件覆盖 选取足够多的测试用例,使判断中的每个条件的所有可能取
25、值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.,判定/条件 覆盖,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,满足条件:T1,T1,T2,T2 T3,T3 T4,T4,测试用例 通过 满足的 覆盖A B X 路径 条件 分支2 0 4 ace T1,T2,T3,T4 c,e2 1 1 abd T1,T2,T3,T4 b,d 能同时满足判定、条件两种覆盖标准。取值。,测试用例 通过 满足的 覆盖A B X 路径 条件 分支2 0 3 ace T1,T2,T3,T4 c,e2 1 1 abe T1,T2
26、,T3,T4 b,e1 0 3 abe T1,T2,T3,T4 b,e1 1 1 abd T1,T2,T3,T4 b,d,(5)条件组合覆盖 所有可能的条件取值组合至少执行一次 A1,B=0 A1,B0 A1,B=0 A1,B0 A=2,X1 A=2,X1 A2,X1 A2,X1,测试用例 通过 满足的 覆盖A B X 路径 条件 分支2 0 4 ace T1,T2,T3,T4 c,e2 1 1 abe T1,T2,T3,T4 b,e1 0 2 abd T1,T2,T3,T4 b,d1 1 1 abd T1,T2,T3,T4 b,d,(6)路径覆盖 覆盖每一个可能的路径测试用例 通过 满足的
27、覆盖A B X 路径 条件 分支1 1 1 abd T1,T2,T3,T4 b,d1 1 2 abe T1,T2,T3,T4 b,e3 0 1 acd T1,T2,T3,T4 c,d2 0 4 ace T1,T2,T3,T4 c,e,基本路径测试法 通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。基本路径测试步骤:导出程序流程图的拓扑结构-流图(程序图)计算流图G的环路复杂度V(G)确定只包含独立路径的基本路径集 设计测试用例,导出程序流程图的拓扑结构-流图,1,2,3,6,4,5,7,10,6,11,a,节点,边,R4,区域,1,2,3,4,5
28、,8,7,3,9,11,程序流程图,8,9,R1,R2,R3,计算流图G的环路复杂度V(G)V(G)=区域个数=4 V(G)=边的条数-节点个数+2=4 V(G)=判定节点个数+1=4,确定只包含独立路径的基本路径集path1:1-11path1:1-2-3-4-5-10-1-11path1:1-2-3-6-8-9-10-1-11path1:1-2-3-6-7-9-10-1-11 一条新路径必须包含一条新边。这4条路径组成了一个基本路径集。4(环路复杂度V(G)是构成这个基本路径集的独立路径数的上界,也是设计测试用例的数目。设计测试用例,保证基本路径集中每条路径的执行。,6.4黑盒测试的测试用
29、例设计6.4.1 等价类划分法 把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集(称为等价类),使得每个子集中的一个典型值在测试中的作用与这一子集中所有其它值的作用相同.可从每个子集中选取一组数据来测试程序,例:某报表处理系统要求用户输入处理 报表的日期,日期限制在2001年1 月至2005年12月,即系统只能对该 段期间内的报表进行处理,如日期 不在此范围内,则显示输入错误信 息。系统日期规定由年、月的6位数字 字符组成,前四位代表年,后两位 代表月。如何用等价类划分法设计测试用例,来测试程序的日期检查功能?,如何划分等价类?有效等价类(合理等价类)无效等价类(不合理等价类)划分
30、等价类的标准:覆盖不相交代表性,划分等价类的规则,(1)如果输入条件规定了取值范围,可定义一个有效等价类和两个无 效等价类。,例 输入值是学生成绩,范围是0100,0 100,有效等价类1成绩100,无效等价类 成绩100,无效等价类 成绩0,划分等价类的规则:,(2)如果输入条件代表集合的某 个元素,则可定义一个有效 等价类和一个无效等价类。,划分等价类的规则:,(3)如规定了输入数据的一组值,且 程序对不同输入值做不同处理,则每个允许的输入值是一个有 效等价类,并有一个无效等价类(所有不允许的输入值的集合)。例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四 种这四个值
31、作为四个有效等价类,另 外把四种学历之外的任何学历作为无 效等价类,划分等价类的规则:,(4)如果规定了输入数据必须遵循的规 则,可确定一个有效等价类(符合 规则)和若干个无效等价类(从不 同角度违反规则)。(5)如已划分的等价类各元素在程序中 的处理方式不同,则应将此等价 类进一步划分成更小的等价类。,用等价类划分法设计测试用例步骤:,(1)形成等价类表,每一等价类规定 一个唯一的编号;(2)设计一测试用例,使其尽可能多 地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等 价类均被测试用例所覆盖;(3)设计一新测试用例,使其只覆盖 一个无效等价类,重复这一步骤 直到所有无效等价类均被覆
32、盖;,第一步:等价类划分,输入等价类 有效等价类 无效等价类,报表日期的类型及长度,3位数字字符(1),有非数字字符(4)少于6个数字字符(5)多于6个数字字符(6),年份范围,在20012005之间(2),小于2001(7)大于2005(8),月份范围,在112之间(3),“报表日期”输入条件的等价类表,小于1(9)大于12(10),第二步:为有效等价类设计测试用例 对表中编号为1,2,3的3个有效等价类 用一个测试用例覆盖:,测试数据 期望结果 覆盖范围,200105,等价类(1)(2)(3),输入有效,第三步:为每一个无效等价类设至少 计一个测试用例,测试数据 期望结果 覆盖范围,001
33、MAY,等价类(4),输入无效,20015,等价类(5),输入无效,2001005,等价类(6),输入无效,200005,等价类(7),输入无效,200805,等价类(8),输入无效,200100,等价类(9),输入无效,200113,等价类(10),输入无效,不能出现相同的测试用例,本例的10个等价类至少需要8个测试用例,例:对招干考试系统“输入学生成绩”子模块设计测试用例 招干考试分三个专业,准考证号第一位 为专业代号,如:1-行政专业,2-法律专业,3-财经专业.行政专业准考证号码为:110001111215法律专业准考证号码为:210001212006财经专业准考证号码为:310001
34、314015,例:准考证号码的等价类划分 有效等价类:(1)110001 111215(2)210001 212006(3)310001 314015 无效等价类:(4)-110000(5)111216 210000(6)212007 31000(7)314016+,例:计算给定月份中天数的方法接口(java):Class MyGregorianCalender public static in getNumDaysInMonth(int month,int year)getNumDaysInMonth()方法有两个参数,月和年,年份的有效输入是从0到maxInt.,等价类划分即把输入空间分解
35、成一系列子域,软件在一个子域内的行为应是等价的。,软件错误分为两类:计算错误 域错误,针对计算错误的测试方法针对域错误的测试方法:测试域边界 划定的正确性,6.4.2 边界值分析法边界值分析法与等价类划分法区别(1)边界值分析不是从某等价类中 随便挑一个作为代表,而是使 这个等价类的每个边界都要作 为测试条件。(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试 情况,被测试子 域,测试内点,测试外点,软件边界与悬崖很类似,边界条件类型,如果软件测试问题包含确定的边界,那么数据类型可能是:数值字符位置数量速度地址尺寸,还要考虑数据类型的特征:第一个/最后一个最小值/最大值开始/完成空/
36、满最慢/最快相邻/最远超过/在内,测试边界线测试临近边界的合法数据,以及刚超过边界的非法数据.越界测试通常简单地加1或很小的数(对于最大值)和减1或很小的数(对于最小值).,输入条件,报表日期的类型及长度,1个数字字符5个数字字符7个数字字符有1个非数字字符全部是非数字字符6个数字字符,显示出错显示出错显示出错显示出错显示出错输入有效,日期范围,月份范围,“报表日期”边界值分析法测试用例,测试用例说明,测试数据,期望结果,选取理由,52001520010052001.5MAY-200105,月份为1月月份为12月月份12,200101200112200100200113,20010120051
37、2200100200513,输入有效输入有效显示出错显示出错,输入有效输入有效显示出错显示出错,在有效范围边界上选取数据,仅有1个合法字符比有效长度少1比有效长度多1只有1个非法字符6个非法字符类型及长度均有效,最小日期最大日期刚好小于最小日期刚好大于最大日期,最小月份最大月份刚好小于最小月份刚好大于最大月份,6.4.3 错误推测法(error guessing)根据经验来设计测试用例的方法例如,数据测试中的:缺省值空白空值零值无,6.4.4 状态测试 软件必须测试程序的状态及其转换。测试软件的逻辑流程建立状态转换图减少要测试的状态及转换的数量,空闲,等待用户输入命令,按下Esc键显示口令框,
38、口令错误 消除,口令正确初始状态消失,空闲,等待用户输入命令,按下Esc键,口令正确,口令错误,不同形式的状态转换图,失败状态测试找到测试软件失败的案例。竞争条件和时序错乱以下是要面临竞争的典型情形:两个不同的程序同时保存或打开一个文档.共享同一台打印机、通信端口或者其他外围设备。当软件处于读取或修改状态时按键或单击鼠标。同时关闭或启动软件的多个实例。同时使用权不同的程序访问一个共同数据库。,有效等价类和用来测试getNumDaysInMonth()方法所选的有效输入,有效等价类,一个月有31天,非闰年,1901,7(七月),一个月有31天,闰年,1904,7(七月),一个月有30天,非闰年,
39、1901,6(六月),一个月有30天,闰年,1904,6(六月),一个月为28或29天,非闰年,1901,2(二月),月份输入值,年份输入值,一个月为28或29天,闰年,2(二月),1904,用来测试getNumDaysInMonth()方法的附加边界值,等价类,可以被400整除的闰年,2000,2(二月),可以被100整除的非闰年,1900,2(二月),非正数无效月份,1291,0,正数无效月份,1315,13,月份输入值,年份输入值,6.4.5 因果图法 因果图适合于描述对于多种输入条件的组合,相应产生多个动作的形式来设计测试用例。因果图方法最终生成的是判定表。,因果图方法实例某电力公司有
40、A、B、C、D四类收费标准,并规定:居民用电 100度/月 按A类收费 100度/月按B类收费动力用电 10000度/月,非高峰,B类收费 10000度/月,非高峰,C类收费 10000度/月,高峰,C类收费 10000度/月,高峰,D类收费,用因果图表明输入和输出间的逻辑关系,1,I1,2,B,4,A,C,3,5,D,I4,I3,I2,把因果图转换为判定表,组合条件,条件(原因),动作(结果),A,B,C,1,2,3,1,2,3,4,5,6,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,4,1,0,1,0,5,0,0,1,1,D,0,
41、0,0,1,1,0,0,1,0,0,0,0,测试用例,为判定表每一列设计一个测试用例:,1列 居民电,90度/月 A2列 居民电,110度/月 B3列 动力电,非高峰,8000度/月 B4列 动力电,非高峰,1.2万度/月 C5列 动力电,高峰,0.9万度/月 C6列 动力电,高峰,1.1万度/月 D,条件 测试用例 预期结果组合(输入数据)(输出动作),6.5 针对专门环境和应用的测试6.5.1 GUI测试常见GUI测试指南:对于窗口对于菜单和鼠标操作对于数据项,6.5.2 C/S体系结构的测试 整体C/S测试策略(三个不同层次)客户端应以“分离的”模式被测试(不考虑服务器和底层网络的运行)
42、客户端软件和关联的服务器端应用被一起测试(网络运行不被明显考虑)完整的C/S体系结构(包括网络运行和性能)被测试,C/S常用测试方法客户端应用功能测试服务器测试(协调和数据管理功能、性能)数据库测试事务测试网络通信测试,6.5.3 实时系统测试可采用以下四步策略:(1)任务测试(2)行为测试(3)任务间测试(4)系统测试,(1)任务测试(task testing)对每一个任务进行单独测试(白盒、黑盒测试),发现逻辑和功能上错误,不能发现定时上和行为上错误。,(2)行为测试(behavioral testing)用CASE工具创建应用系统模型,模拟实时系统行为。按类测试各种事件(如中断、控制信号
43、、数据)。测试过的事件以随机次序、随机频率送给系统,检查软件行为方面的错误.,(3)任务间测试(intertask testing)检查与时间有关错误。如用不同数据速率、处理负载 测试相互通信的异步任务。通过消息队列或数据存储测试 任务间的通信来找出数据存储区错 误的范围。,(4)系统测试(system testing)软件、硬件组装后,找出软、硬件接口错误。,软件测试的过程,被测模块,单元测试,设计信息,集成测试,被测模块,单元测试,被测模块,单元测试,测试过的模块,确认测试,系统测试,软件需求,其它系统元素,装配好的软件,确认的软件,可运行的软件,6.6软件测试的步骤,软件测试策略,单元测
44、试,U,C,D,R,S,I,V,ST,集成测试,确认测试,系统测试,系统工程,软件需求分析,软件设计,代码编写,6.6.1 单元测试一.单元测试的内容主要对模块的五个基本特性进行评价,模块,错误处理,模块接口,局部数据结构,重要的执行路径,边界条件,1.常见错误类型 接口错误I/O错误数据结构错误算法错误比较及控制逻辑错误错误处理错误,2.模块测试基本原则 至少一次测试所有语句测试所有可能的执行或逻辑路径的组合测试每个模块的所有入口和出口,3.确定单元测试数据集 值域值类离散值值的次序集(测试顺序文件和表),二.单元测试的方法单元测试一般为编码步骤的附属部分.模块不是独立的程序,自己不能运行,
45、要靠其它部分来调用和驱动,要为每个单元测试开发两个软件:(1)驱动模块(驱动程序):相当于主模块(2)桩模块(测试存根、连接程序):代替所测模块调用的子模块,单元测试的测试环境举例:,B,A,C,D,E,待测试模块,单元测试的测试环境举例:,被测模块 B,驱动模块(模拟模块A),桩模块(测试存根)(模拟模块E),测试用例,测试结果,许多模块不能用简单的软件进行充分的单元测试,此时,完全的测试可放到集成测试阶段再进行.,单元测试的测试环境举例:,实际软件,华氏到慑氏转换模块,温度数据,实际配置,测试用例数据,结果,测试驱动软件,华氏到慑氏转换模块,结果,测试驱动际配置,单元测试的测试环境举例,温
46、度显示模块,温度接口模块,实际配置,测试驱动际配置,温度显示模块,程序员编写的桩模块(测试存根),温度值的测试文件,结构性模式(structural patterns)适配器模式(Adapter)打包器(Wrapper)桥模式(Bridge)句柄(Handle)组合模式(Composite)修饰模式(Decorator)包装器(Wrapper)外观模式(Facade)轻量模式(Flyweight)代理模式(Proxy),Implementor,OperationaImp(),桥模式(Bridge)意图:将抽象部分和实现部分分离,使他们都可以独立地变化,Abstraction,Contextin
47、terface(),ConcreteImplementorA,OperationaImp(),ConcreteImplementorB,OperationaImp(),RefinedAbstraction,支持多种窗口系统的设计窗口与窗口实现分离,Window,Raise()DrawRact(),ApplicationWindow,IconWindow,DialogWindow,MacWindowlmp,DeviceRaise()DeviceRect(),PMWindowlmp,DeviceRaise()DeviceRect(),XWindowlmp,DeviceRaise()DeviceRe
48、ct(),Windowlmp,DeviceRaise()DeviceRect(),利用Bridge设计模式与未完成、未知或在测试另一组件时不可用组件的接口(UML类图),用户接口,数据库户接口,数据库户接口,测试存根,数据库,可用Bridge设计模式实现测试存根,用户接口子系统访问测试不能访问的数据库子系统。将数据库接口和数据库实现分离开来。,6.6.2 集成测试(组装测试)集成测试需考虑的问题:数据穿越接口可能丢失.一模块可能破坏另一模块功能.子功能组装可能未产生所要求的 主功能.全程数据结构可能出问题.误差累积问题.,集成测试方法通常采用黑盒测试技术实施策略:非渐增式测试渐增式测试,深度优
49、先广度优先,自顶向下结合自底向上结合,一.非渐增式集成方式 一次就把所有通过了单元测试的模块组合在一起进行全程序的测试.缺点:发现错误难以诊断定位.又称“莽撞测试”.,二.渐增式集成方式 从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。,自顶向下结合方式举例:,A,D,B,E,模块测试结合顺序,C,F,深度优先:A、B、E、C、D、F,广度优先:A、B、C、D、E、F,自顶向下结合方式举例:(深度优先),A,测试 A,S2,S1,S3,A,加入B,S2,B,S3,S4,A,加入E,S2,B,S3,E,A,加入C,C,B,S3,E,加入D,C,B,D,E,加入F,C,B,D,E,A,A,F,S5,自底向上结合方式举例:,A,C,B,D,F,E,E,d1,C,d3,F,d4,B,d2,E,D,d5,F,自底向上结合方式举例:,Mc,D1,Ma,Mb,D2,D3,簇1,簇2,簇3,自顶向下 自底向上优点 可在测试早期 设计测试用例容易 实现并验证系 统主要功能 不需驱动模块 不需桩模块 缺点 需桩模块 只有到最后程序才 能作为一个整体3.混合集成测试方法一般对软件结构的上层使用自顶向下结合的方法;对下层使用自底向上结合的方法;,