1、第六章软件测试,6.1基本概念软件开发过程必须伴有质量保证活动。软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。,6.1.4测试用例设计选择测试用例是软件测试员最重要的一项工作。测试用例的属性:属性描述name测试用例的名称location可执行的完全路径名input输入数据或命令oracle与测试输入相比较的期待测试结果log测试生产的输出,6.1.5软件测试信息流,软件配置,测试,测试配置,测试工具,结果分析,排错,可靠性分析,测试结果,错误,预期结果,出错率,改正的软件,预测的可靠性,需求规格说明书软件设计说明书被测源程序,测试计划测试用例(测试数据)测试驱动程序,测
2、试活动和相关工作产品,项目协议,对象设计,客户,开发人员,用户,集成策略,系统分解,功能性需求,非功能性需求,单元测试,集成测试,结构测试,功能测试,性能测试,来自ODD,来自TP,来自SDD,来自RAD,来自RAD,用户手册,验收测试,安装测试,现场测试,日常操作,测试设计中需要考虑的22种测试类型,黑盒测试白盒测试单元测试累计综合测试集成测试功能测试系统测试端到端测试健全测试衰竭测试接受测试,负载测试强迫测试性能测试可用性测试安装/卸载测试恢复测试兼容测试安全测试比较测试Alpha测试Beta测试,6.1.6测试的方法与技术,软件测试的策略和方法,静态测试方法,动态测试方法,人工测试方法,
3、计算机辅助静态分析方法,白盒测试方法,黑盒测试方法,动态测试方法(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,假如知道一个盒子包含一台
4、计算机,而另一个盒子是人用纸笔计算,就会选择不同的测试用例,了解软件的运作方式会影响测试手段,6.2两种类型的测试6.2.1黑盒测试又称:功能测试数据驱动测试基于规格说明书的测试,6.2.2白盒测试又称:开盒测试结构测试玻璃盒测试基于覆盖的测试.根据被测程序的逻辑结构设计测试用例;力求提高测试覆盖率;,黑盒测试与白盒测试比较黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。白盒测试是根据程序内部逻辑结构进行测试。,黑盒测试与白盒测试优缺点比较,黑盒测试白盒测试,优点,缺点,性质,适用于各阶段测试从产品功能角度测试容易入手生成测试数据,
5、可构成测试数据使特定程序部分得到测试有一定的充分性度量手段可或较多工具支持,某些代码得不到测试如果规格说明有误,则无法发现不易进行充分性测试,不易生成测试数据(通常)无法对未实现规格说明的部分进行测试工作量大,通常只用于单元测试,有应用局限,是一种确认技术,回答“我们在构造一个正确的系统吗?”,是一种验证技术,回答“我们在正确地构造一个系统吗?”,不论黑盒还是白盒测试都不能进行穷尽测试,所以软件测试不可能发现程序中存在的所有错误,因此需精心设计测试方案,力争尽可能少的次数,测出尽可能多的错误.,黑盒测试与白盒测试能发现的错误,C,B,A,D,-只能用黑盒测试发现的错误,A,-只能用白盒测试发现
6、的错误,-两种方法都能发现的错误,-两种方法都不能发现的错误,B,C,D,6.3白盒测试的测试用例设计6.3.1逻辑覆盖法(1)语句覆盖(2)判定覆盖(3)条件覆盖(4)判定/条件覆盖(5)条件组合覆盖(6)路径覆盖(7)点覆盖(8)边覆盖,例:PROCEDURESAMPAL(A,B:REAL;VARX:REAL);BEGINIF(A1)AND(B=0)THENX:=X/AIF(A=2)OR(X1)THENX:=X+1END;,开始,(A1)AND(B=0),(A=2)OR(X1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,(1)语句覆盖使程序中每个语句至少执行一次,语
7、句覆盖,开始,(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即达到了语句覆盖;语句覆盖是最弱的逻辑覆盖,(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)条件覆盖使
8、每个判定的每个条件的可能取值至少执行一次,第一判定表达式:设条件A1取真记为T1假T1条件B=1取真记为T2假T2第二判定表达式:设条件A=2取真记为T3假T3条件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,T2T3,T3T4,T4,测试用例通过满足的覆盖ABX路径条件分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e两个测试用例覆盖了四个条件八种可能取值。未覆盖c、d分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖
9、判定覆盖也不一定包含条件覆盖,(4)判定/条件覆盖选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次.,判定/条件覆盖,开始,(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,T2T3,T3T4,T4,测试用例通过满足的覆盖ABX路径条件分支204aceT1,T2,T3,T4c,e211abdT1,T2,T3,T4b,d能同时满足判定、条件两种覆盖标准。取值。,测试用例通过满足的覆盖ABX路径条件分支203aceT1,T2,T3,T4c,
10、e211abeT1,T2,T3,T4b,e103abeT1,T2,T3,T4b,e111abdT1,T2,T3,T4b,d,(5)条件组合覆盖所有可能的条件取值组合至少执行一次A1,B=0A1,B0A1,B=0A1,B0A=2,X1A=2,X1A2,X1A2,X1,测试用例通过满足的覆盖ABX路径条件分支204aceT1,T2,T3,T4c,e211abeT1,T2,T3,T4b,e102abdT1,T2,T3,T4b,d111abdT1,T2,T3,T4b,d,(6)路径覆盖覆盖每一个可能的路径测试用例通过满足的覆盖ABX路径条件分支111abdT1,T2,T3,T4b,d112abeT1,
11、T2,T3,T4b,e301acdT1,T2,T3,T4c,d204aceT1,T2,T3,T4c,e,基本路径测试法通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。基本路径测试步骤:导出程序流程图的拓扑结构-流图(程序图)计算流图G的环路复杂度V(G)确定只包含独立路径的基本路径集设计测试用例,导出程序流程图的拓扑结构-流图,1,2,3,6,4,5,7,10,6,11,a,节点,边,R4,区域,1,2,3,4,5,8,7,3,9,11,程序流程图,8,9,R1,R2,R3,计算流图G的环路复杂度V(G)V(G)=区域个数=4V(G)=边的条数-
12、节点个数+2=4V(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黑盒测试的测试用例设计6.4.1等价类划分法把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集(称为等价类),使得每个子集中的一个典型值在测试中的
13、作用与这一子集中所有其它值的作用相同.可从每个子集中选取一组数据来测试程序,例:某报表处理系统要求用户输入处理报表的日期,日期限制在2001年1月至2005年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。如何用等价类划分法设计测试用例,来测试程序的日期检查功能?,如何划分等价类?有效等价类(合理等价类)无效等价类(不合理等价类)划分等价类的标准:覆盖不相交代表性,划分等价类的规则,(1)如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。,例输入值是学生成绩,范围是0100
14、,0100,有效等价类1成绩100,无效等价类成绩100,无效等价类成绩0,划分等价类的规则:,(2)如果输入条件代表集合的某个元素,则可定义一个有效等价类和一个无效等价类。,划分等价类的规则:,(3)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类,划分等价类的规则:,(4)如果规定了输入数据必须遵循的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从
15、不同角度违反规则)。(5)如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。,用等价类划分法设计测试用例步骤:,(1)形成等价类表,每一等价类规定一个唯一的编号;(2)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖;(3)设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖;,第一步:等价类划分,输入等价类有效等价类无效等价类,报表日期的类型及长度,3位数字字符(1),有非数字字符(4)少于6个数字字符(5)多于6个数字字符(6),年份范围,在20012005之间(2)
16、,小于2001(7)大于2005(8),月份范围,在112之间(3),“报表日期”输入条件的等价类表,小于1(9)大于12(10),第二步:为有效等价类设计测试用例对表中编号为1,2,3的3个有效等价类用一个测试用例覆盖:,测试数据期望结果覆盖范围,200105,等价类(1)(2)(3),输入有效,第三步:为每一个无效等价类设至少计一个测试用例,测试数据期望结果覆盖范围,001MAY,等价类(4),输入无效,20015,等价类(5),输入无效,2001005,等价类(6),输入无效,200005,等价类(7),输入无效,200805,等价类(8),输入无效,200100,等价类(9),输入无效
17、,200113,等价类(10),输入无效,不能出现相同的测试用例,本例的10个等价类至少需要8个测试用例,例:对招干考试系统“输入学生成绩”子模块设计测试用例招干考试分三个专业,准考证号第一位为专业代号,如:1-行政专业,2-法律专业,3-财经专业.行政专业准考证号码为:110001111215法律专业准考证号码为:210001212006财经专业准考证号码为:310001314015,例:准考证号码的等价类划分有效等价类:(1)110001111215(2)210001212006(3)310001314015无效等价类:(4)-110000(5)111216210000(6)2120073
18、1000(7)314016+,例:计算给定月份中天数的方法接口(java):ClassMyGregorianCalenderpublicstaticingetNumDaysInMonth(intmonth,intyear)getNumDaysInMonth()方法有两个参数,月和年,年份的有效输入是从0到maxInt.,等价类划分即把输入空间分解成一系列子域,软件在一个子域内的行为应是等价的。,软件错误分为两类:计算错误域错误,针对计算错误的测试方法针对域错误的测试方法:测试域边界划定的正确性,6.4.2边界值分析法边界值分析法与等价类划分法区别(1)边界值分析不是从某等价类中随便挑一个作为代
19、表,而是使这个等价类的每个边界都要作为测试条件。(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况,被测试子域,测试内点,测试外点,软件边界与悬崖很类似,边界条件类型,如果软件测试问题包含确定的边界,那么数据类型可能是:数值字符位置数量速度地址尺寸,还要考虑数据类型的特征:第一个/最后一个最小值/最大值开始/完成空/满最慢/最快相邻/最远超过/在内,测试边界线测试临近边界的合法数据,以及刚超过边界的非法数据.越界测试通常简单地加1或很小的数(对于最大值)和减1或很小的数(对于最小值).,输入条件,报表日期的类型及长度,1个数字字符5个数字字符7个数字字符有1个非数字字符全部是非数
20、字字符6个数字字符,显示出错显示出错显示出错显示出错显示出错输入有效,日期范围,月份范围,“报表日期”边界值分析法测试用例,测试用例说明,测试数据,期望结果,选取理由,52001520010052001.5MAY-200105,月份为1月月份为12月月份12,200101200112200100200113,200101200512200100200513,输入有效输入有效显示出错显示出错,输入有效输入有效显示出错显示出错,在有效范围边界上选取数据,仅有1个合法字符比有效长度少1比有效长度多1只有1个非法字符6个非法字符类型及长度均有效,最小日期最大日期刚好小于最小日期刚好大于最大日期,最小月
21、份最大月份刚好小于最小月份刚好大于最大月份,6.4.3错误推测法(errorguessing)根据经验来设计测试用例的方法例如,数据测试中的:缺省值空白空值零值无,6.4.4状态测试软件必须测试程序的状态及其转换。测试软件的逻辑流程建立状态转换图减少要测试的状态及转换的数量,空闲,等待用户输入命令,按下Esc键显示口令框,口令错误消除,口令正确初始状态消失,空闲,等待用户输入命令,按下Esc键,口令正确,口令错误,不同形式的状态转换图,设置2Bwatch上的时间的顺序图,:2Bwatch用户,按下按钮1和2,:2Bwatch输入,:2Bwatch显示,:2Bwatch时间,时间,按下按钮1,按
22、下按钮2,按下按钮1和2,闪烁小时,闪烁分钟,增加分钟,刷新,提交更新时间,停止闪烁,2Bwatch设置时间功能的状态图和测试结果,按左按钮按右按钮,按左按钮按右按钮,4.2分钟以后,测量时间,设置时间,电池没电,3.按下左右按钮,5.按下左右按钮/蜂鸣,8.20年以后,7.20年以后,6.,2.,1.,激励因素,空集合,测量时间,1.初始变迁,测试的变迁,预期结果状态,按下左边按钮,测量时间,2.,同时按下两个按钮,设置时间,3.,等2分钟,测量时间,4.超时,失败状态测试找到测试软件失败的案例。竞争条件和时序错乱重复压迫重负,应联合使用,同时进行,有效等价类和用来测试getNumDaysI
23、nMonth()方法所选的有效输入,有效等价类,一个月有31天,非闰年,1901,7(七月),一个月有31天,闰年,1904,7(七月),一个月有30天,非闰年,1901,6(六月),一个月有30天,闰年,1904,6(六月),一个月为28或29天,非闰年,1901,2(二月),月份输入值,年份输入值,一个月为28或29天,闰年,2(二月),1904,用来测试getNumDaysInMonth()方法的附加边界值,等价类,可以被400整除的闰年,2000,2(二月),可以被100整除的非闰年,1900,2(二月),非正数无效月份,1291,0,正数无效月份,1315,13,月份输入值,年份输入
24、值,6.4.5因果图法因果图适合于描述对于多种输入条件的组合,相应产生多个动作的形式来设计测试用例。因果图方法最终生成的是判定表。,因果图方法实例某电力公司有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,
25、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,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.1GUI测试常见GUI测试指南:对于窗口对于菜单和鼠标操作对于数据项,6.5.2C/S体
26、系结构的测试整体C/S测试策略(三个不同层次)客户端应以“分离的”模式被测试(不考虑服务器和底层网络的运行)客户端软件和关联的服务器端应用被一起测试(网络运行不被明显考虑)完整的C/S体系结构(包括网络运行和性能)被测试,C/S常用测试方法客户端应用功能测试服务器测试(协调和数据管理功能、性能)数据库测试事务测试网络通信测试,6.5.3实时系统测试可采用以下四步策略:(1)任务测试(2)行为测试(3)任务间测试(4)系统测试,(1)任务测试(tasktesting)对每一个任务进行单独测试(白盒、黑盒测试),发现逻辑和功能上错误,不能发现定时上和行为上错误。,(2)行为测试(behaviora
27、ltesting)用CASE工具创建应用系统模型,模拟实时系统行为。按类测试各种事件(如中断、控制信号、数据)。测试过的事件以随机次序、随机频率送给系统,检查软件行为方面的错误.,(3)任务间测试(intertasktesting)检查与时间有关错误。如用不同数据速率、处理负载测试相互通信的异步任务。通过消息队列或数据存储测试任务间的通信来找出数据存储区错误的范围。,(4)系统测试(systemtesting)软件、硬件组装后,找出软、硬件接口错误。,软件测试的过程,被测模块,单元测试,设计信息,集成测试,被测模块,单元测试,被测模块,单元测试,测试过的模块,确认测试,系统测试,软件需求,其它
28、系统元素,装配好的软件,确认的软件,可运行的软件,6.6软件测试的步骤,软件测试策略,单元测试,U,C,D,R,S,I,V,ST,集成测试,确认测试,系统测试,系统工程,软件需求分析,软件设计,代码编写,6.6.1单元测试一.单元测试的内容主要对模块的五个基本特性进行评价,模块,错误处理,模块接口,局部数据结构,重要的执行路径,边界条件,1.常见错误类型接口错误I/O错误数据结构错误算法错误比较及控制逻辑错误错误处理错误,2.模块测试基本原则至少一次测试所有语句测试所有可能的执行或逻辑路径的组合测试每个模块的所有入口和出口,3.确定单元测试数据集值域值类离散值值的次序集(测试顺序文件和表),二
29、.单元测试的方法单元测试一般为编码步骤的附属部分.模块不是独立的程序,自己不能运行,要靠其它部分来调用和驱动,要为每个单元测试开发两个软件:(1)驱动模块(驱动程序):相当于主模块(2)桩模块(测试存根、连接程序):代替所测模块调用的子模块,单元测试的测试环境举例:,B,A,C,D,E,待测试模块,单元测试的测试环境举例:,被测模块B,驱动模块(模拟模块A),桩模块(测试存根)(模拟模块E),测试用例,测试结果,许多模块不能用简单的软件进行充分的单元测试,此时,完全的测试可放到集成测试阶段再进行.,单元测试的测试环境举例:,实际软件,华氏到慑氏转换模块,温度数据,实际配置,测试用例数据,结果,
30、测试驱动软件,华氏到慑氏转换模块,结果,测试驱动际配置,单元测试的测试环境举例,温度显示模块,温度接口模块,实际配置,测试驱动际配置,温度显示模块,程序员编写的桩模块(测试存根),温度值的测试文件,结构性模式(structuralpatterns)适配器模式(Adapter)打包器(Wrapper)桥模式(Bridge)句柄(Handle)组合模式(Composite)修饰模式(Decorator)包装器(Wrapper)外观模式(Facade)轻量模式(Flyweight)代理模式(Proxy),6.6.2集成测试(组装测试)集成测试需考虑的问题:数据穿越接口可能丢失.一模块可能破坏另一模块
31、功能.子功能组装可能未产生所要求的主功能.全程数据结构可能出问题.误差累积问题.,集成测试方法通常采用黑盒测试技术实施策略:非渐增式测试渐增式测试,深度优先广度优先,自顶向下结合自底向上结合,一.非渐增式集成方式一次就把所有通过了单元测试的模块组合在一起进行全程序的测试.缺点:发现错误难以诊断定位.又称“莽撞测试”.,二.渐增式集成方式从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题。,自顶向下结合方式举例:,A,D,B,E,模块测试结合顺序,C,F,深度优先:A、B、E、C、D、F,广度优先:A、B、C、D、E、F,自顶向下结合方式举例:(深度优先),A,测试A,S
32、2,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.混合集成测试方法一般对软件结构的上层使用自顶向下结合的方法;对下层使用自底向上结合的方法;,6.6.
33、3确认测试(有效性测试),有效性测试,软件配置审查,管理机构裁决,选择测试人员,软件计划,用户文档,开发文档,源程序文本,支持环境,交用户运行维护,测试报告,软件配置,构造测试用例,(验收测试),实际运行测试,专家鉴定会,一.有效性测试通过黑盒测试,证实软件功能与用户需求是否一致.二.软件配置审查与验收,确认测试,软件配置审查,主管部门批准,集成的软件,软件需求,用户文档,设计文档,源程序,测试文档,交付的软件,确认的软件,确认的配置,三.人工测试静态分析对源程序进行静态分析的方法:生成各类引用表静态错误分析类型和单位分析引用分析表达式分析接口分析,对源程序进行静态分析的方法:(1)桌前检查检
34、查变量、标号的交叉引用检查子程序、宏、函数、常量检查标准、风格检查(2)代码会审(3)走查,四.确认测试结果测试完成后可能出现两种情况:(1)测试与预期相符,可接受.(2)不相符,列出软件缺陷表,与用户协商解决.,五.测试和测试测试(Alpha)在开发者的场所由用户进行,在开发着关注和控制的环境下进行.测试(Beta)最终用户在自己的场所进行.,6.6.4系统测试软件只是计算机系统的一个元素,软件最终要与其他系统元素(如新硬件、信息等)相结合,进行各种集成测试和确认测试.,用于系统测试的测试类型:(1)恢复测试(2)安全性测试(3)强度测试(4)性能测试,推测残留在程序中的错误数,错误植入模型
35、Mills将播种模型用于程序中残留错误的估算,称错误植入模型播种模型:N:程序中原有残留的错误数Nt:新植入的错误数n:测试发现的原有错误数nt:测试发现的植入错误数,N,N,n,n,t,t,N,N,n,n,t,=,t,Hyman对错误植入模型的改进,ET:程序中原有的残留错误数E1:1号测试员在某一时间内发现的错误数E2:2号测试员在同一时间内发现的错误数E0:两位测试员共同发现的错误数,E,E,E,E,1,0,=,2,T,E,T,E,1,E,2,/E,0,(1)恢复测试以不同的方式强使软件出现故障,检测软件能否恰当地完成恢复.自动恢复:检测重新初始化、检测点设置、数据恢复、重新启动等是否正
36、确.人工干预恢复:检测平均恢复时间是否在允许范围内.,(2)安全性测试设计测试用例,突破软件安全保护机构的安全保密措施,检验系统预防机制的漏洞.(3)强度测试设计测试用例,检验系统能力最高能达到的实际限度,让系统处于资源的异常数量、异常频率、异常批量的条件下测试系统的承受能力.一般比平常限度高5-10倍的限度做测试用例.,6.6面向对象的软件测试,测试目标:在现实的时间跨度内应用可管理的工作量去发现最大可能数量的错误,基本目标不变,但由于OO程序的性质改变了测试策略和测试战术更多的设计模式复用是否将减轻OO系统的繁重测试?Binder,R.V.在“Object-OrientedSoftware
37、Testing”中讨论改问题:“每次复用是一个新的使用语境,并且重新测试是谨慎的.为了获得面向对象系统的高可靠性,似乎可能需要更多而不是更少的测试.”,强度测试是一种敏感性测试技术,某种情况下,一包含在程序有效数据边界内的非常小范围的数据变动可能导致极端的,甚至错误的处理,或使系统性能严重下降.敏感性测试用来发现可能导致不稳定或不正确处理的有效输入类中的数据组合.,(4)性能测试,设计测试用例,并记录软件运行性能,与性能要求比较,检验是否达到性能要求规格。,6.6.5测试的步骤及相应的测试种类,6.6面向对象的软件测试,测试目标:在现实的时间跨度内应用可管理的工作量去发现最大可能数量的错误,基
38、本目标不变,但由于OO程序的性质改变了测试策略和测试战术更多的设计模式复用是否将减轻OO系统的繁重测试?Binder,R.V.在“Object-OrientedSoftwareTesting”中讨论改问题:“每次复用是一个新的使用语境,并且重新测试是谨慎的.为了获得面向对象系统的高可靠性,似乎可能需要更多而不是更少的测试.”,6.6.1OOA和OOD的模型测试,每个阶段的所有面向对象模型都应被测试。OOA和OOD的模型不能被执行,对它们不能进行传统意义上的测试。,可通过技术复审检查OOA和OOD的模型的正确性和一致性。,扩大测试的视角,6.6.2面向对象测试策略,信息隐蔽对测试的影响封装和继承
39、对测试的影响,面向对象程序的特点对软件测试的影响:,单元和集成测试策略必须有很大的改变测试用例的设计必须考虑OO软件的特征,1.OO的单元测试,一个类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。不再孤立地测试单个操作(这是传统单元测试的视角)OO软件的类测试等价于传统的单元测试.传统软件的单元测试关注算法细节和模块接口间流动的数据OO软件的类测试是由封装在类中的操作和类的状态行为驱动的,单元概念的变化封装的类或对象作为最小的可测试单位,2.OO的集成测试,OO软件没有层次的控制结构,传统的自顶向下和自底向上的集成策略没有意义.,OO软件的集成两种策略:基于线程的测试(t
40、hread-basedtesting)集成响应系统的一个输入或事件所需的一组类,每个线程被个体地集成和测试,通过回归测试保证没有副作用产生;基于使用的测试(use-basedtesting)通过测试几乎不使用服务器的类(独立类)来开始系统的构造,测试完独立类后,使用独立类按层逐步完成依赖类的测试直至完整的系统被构造;,3.OO的确认测试,在确认和系统测试层次,类连接的细节消失.,和传统的确认测试一样,OO软件的确认关注用户可见的动作和用户可识别的系统输出.为辅助确认测试的导出,应利用分析模型中的用例图提供的场景来提高交互需求中发现错误的可能性,6.6.3OO软件的测试用例设计,每个测试用例应被
41、唯一标识,并应显式地和与被测试类相关联测试的目的应被陈述对每个测试应开发一组测试步骤,包括:将被测试对象的一组特定状态将被作为测试的结果使用的一组消息和操作当对象被测试时可能产生的一组异常一组外部条件(进行测试必须的软件外部环境的变化)将辅助理解或实现测试的补充信息,OO软件的测试用例设计还处于成型期.Binder,R.V.在“EssaysonObject-OrientedSoftwareEngineering”中建议了对OO软件的测试用例设计的整体方法:,1.OO概念的测试用例设计的含义,封装可能会成为测试的障碍测试需要报告对象的具体和抽象状态,而封装使得对象的状态快照难于获得。继承,特别是
42、多继承使测试复杂化,子类继承或重载的父类成员函数的测试问题,继承的成员函数是否都不需要测试?对父类中已经测试过的成员函数,两种情况需要在子类中重新测试:继承的成员函数在子类中做了改动;成员函数调用了改动过的成员函数的部分;例如:父类Base有两个成员函数Inherited()和Redefined(),子类Derived只对Redefined()做了改动.DerivedRedefined()需要重新测试DerivedInherited()如果它调用了Redefined()的语句,则需重新测试,否则不必,子类继承或重载的父类成员函数的测试问题,对父类的测试是否能够照搬到子类?上例中:BaseRed
43、efined()和DerivedRedefined()已是两个不同的成员函数,照理应对DerivedRedefined()重新进行测试分析,设计测试用例,但由于它们的相似性,只需在BaseRedefined()的测试要求和测试用例上添加对DerivedRedefined()的新的测试要求和增补相应的测试用例.,2.传统测试用例设计方法的可用性,白盒测试方法可用于类定义的操作的测试对具有简洁结构的类,白盒测试最好用于类级别的测试黑盒测试方法也适合OO系统,6.6.4测试单个类的方法,(1)随机测试,例:银行系统的account(帐户)类有下列操作:open(打开)setup(建立)deposit
44、(存款)withdraw(取款)balance(余额)summarize(清单)creditLimit(透支限额)close(关闭)系统对操作的限制:必须在应用其它操作之前先打开帐户,在完成了全部操作之后才能关闭帐户;,在限制下还是存在操作的许多排列,一个account类实例的最小行为历史包括下列操作:open.setup.deposit.withdraw.closeaccount类的最小测试序列大量的其它行为可能在下面序列中发生:open.setup.deposit.deposit|withdraw|balance|summarize|creditLimitn.withdraw.close一
45、系列不同的操作序列可以随机地产生,例如:测试用例r1:open.setup.deposit.deposit.balance.summarize.creditLimit.withdraw.close测试用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close这些和其它的随机顺序测试被进行,以测试不同的类实例的生存历史.,测试单个类的方法,(2)划分测试(partitiontesting)与测试传统软件时采用的等价类划分方法类似.划分类别的方法:基于状态的划分基于属性的划分基于功能的划分,基于状态的划分,
46、根据类操作改变类状态的能力来划分类操作.,例:银行系统的account(帐户)类状态操作包括:deposit(存款)withdraw(取款)非状态操作包括:balance(余额)summarize(清单)creditLimit(透支限额)测试用例p1(测试改变状态的操作):open.setup.deposit.deposit.withdraw.close测试用例p2(测试不改变状态的操作,在最小测试序列中的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close,基于属性的划分,根据类操作使用的属性来划分类操作.,例:银行系统的account(帐户)类可根据balance属性来定义划分,把操作划分为三个类别:使用balance的操作修改balance的操作不使用也不修改balance的操作为上述每个类别设计测试序列,基于功能的划分,根据类操作所完成的功能来划分类操作.,例:银行系统的account(帐户)类中的操作可划分为三个类别:初始化操作(open,setup)计算操作(deposit,withdraw)查询操作(balance,summarize,credit