




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程
软件生存期维护软件计划需求分析测试软件设计实现(编码)
定义时期开发时期使用和维护时期退役2第8章软件测试
软件测试的目标是什么?应遵循哪些准则?测试基本概念有哪些软件测试方法?何为黑盒测试?何为白盒测试?软件测试步骤?软件纠错(调试)有哪些方法?面向对象软件测试的特点?3
软件质量问题
根据Standish于1995年公布的CHAOS报告显示,在来自350个组织的8000个项目中,只有16.2%是“成功的(succeeded)”,即能在预算和限期内完成;31.1%是“失败的(failed)”,即未能完成或者取消;其余52.7%被称为“被质疑的(challenged)”,虽然完成但平均预算超支89%。2004年,该组织的统计项目数累计达到50000多个,结果显示,成功项目的比例提升到29%,而被质疑的项目比例仍有53%。4Standish咨询公司对软件项目完成情况的统计数5软件错误的几件大事2007年8月14日14时,美国洛杉矶国际机场电脑发生故障,60个航班的2万旅客无法入关。直至次日凌晨3时50分,所有滞留旅客才全部入关。原因分析:包含旅客姓名和犯罪记录的部分数据系统(海关和边境保护系统:决定旅客是否可以进入美国领土)瘫痪
2004年9月发生过类似问题62006年3月2日14点10分,沪深大盘忽然发生罕见大跳水,7分钟之内上证指数跌去近20点。原因分析:当日下午刚上市的招商银行认股权证成交量巨大,导致其行情显示时总成交量字段溢出,使其价格在股票分析软件上成为一条不再波动的直线,让市场产生了恐慌。71996年6月4日,欧洲空间局的阿丽亚娜火箭,发射后37秒爆炸,损失6亿美元原因分析:
Ada语言编写的一段程序,将一个64位浮点整数转换为16位有符号整数时,产生溢出,导致系统惯性参考系统完全崩溃81994年12月3日,美国弗吉尼亚州Lynchburg(林奇伯格)大学的T.R.Nicely博士使用装有Pentium芯片的计算机时发现错误:(4195835/3145727)*3145727-4195835==0?后果:Intel花费4亿多美元更换缺陷芯片原因:
Pentium刻录了一个软件缺陷(浮点除法)92002年6月28日美国商务部的国家标准技术研究所(NIST)发布报告:“据推测,(美国)由于软件缺陷而引起的损失额每年高达595亿美元。这一数字相当于美国国内生产总值的0.6%”。10
一、测试概念--错误、缺陷和失败
错误:错误是指软件运行结果和真实结果之间的差值,错误本质上是对真实值和理想值差距的测量。缺陷:系统无法完成其应该完成的功能。失败:指系统或者系统的构件无法满足计划中的功能需求。错误存在意味着失败一定会出现,而发现一个失败则表明缺陷一定存在。错误-----失败-----缺陷
11保证软件质量手段预防性:工程化、严格管理治病方法:程序正确性证明软件测试
12一、程序正确性证明1)程序正确性证明含义象证明数学定理一样证明程序的正确性。{φ(x)}P(x){ψ(x,y)}其含义是,对一切满足P(x)的输入x,若程序P都终止,且ψ(x,y)均成立,则称程序P关于输入x是完全正确的。13程序正确性证明2)证明程序正确性的方法为了证明程序的完全正确性,通常按部分正确性,终止性或完全正确性证明的步骤进行,因此针对不同类别的证明,提出了不同证明方法。⒈部分正确性与证明方法
Φ(x)∧P↓→ψ(x,P(x))若对每一个使得φ(x)为真,且使得P计算终止的输入x,即φ(x)∧p↓成立,且推出ψ(x,p(x))为真,则称P是部分正确的。14程序正确性证明☆部分正确性证明的方法⑴Floyd的不变式断言法⑵Manna的子目标断言法⑶Hoare的公理化方法⒉终止性与证明方法
Φ(x)→P↓
若对每个使得φ(x)为T的输入x,P都终止,则称程序p对φ(x)是终止的。15程序正确性证明☆终止性证明的方法⑴Floyd的良序集方法⑵Kunth的计数器方法⑶Manna的不动点方法⒊完全正确性与证明方法φ(x)→P↓∧ψ(x,P(x))若对使得φ(x)为T的一切输入x,程序P都终止,并且ψ(x,p(x))为T,称p完全正确。16程序正确性证明☆完全正确性证明的方法⑴Hoare的公理化方法的推广⑵Burstall的间发断言法⑶Dijkstra的弱谓词变换方法以及强验证方法。17程序正确性证明实例一、部分正确性证明(不变式断言法)步骤:⒈建立输入、输出和不变式断言;⒉建立每条通路上的验证条件;⒊证明每一验证条件成立。例1.求两个非负整数x,y的最大公约数
z的程序,即z=gcd(x,y)的程序18例1流程图Φ(x):x0≥0∧y0≥0∧(x0≠0∨y0≠0)开始Read(x,y)x≠0y≥xy←y-x(s,x,y)←(x,y,s)z=ystopc3c2FTΦ(x):c1c419例1的证明⑴建立断言φ(x):x0≥0∧y0≥0∧(x0≠0∨y0≠0)ψ(x,z):z=gcd(x0,y0)p(x,y):x≥0∧y≥0∧(x≠0∨y≠0)∧gcd(x,y)=gcd(x0,y0)⑵建立验证条件C1(x,y):[x0≥0∧y0≥0∧(x0≠0∨y0≠0)][x0≥0∧y0≥0∧(x0≠0∨y0≠0)∧gcd(x0,y0)=gcd(x0,y0)]20例1的证明C2(x,y):[x≥0∧y≥0∧(x≠0∨y≠0)∧x≠0∧y≥x∧gcd(x,y)=gcd(x0,y0)][x≥0∧y-x≥0∧(x≠0∨y-x≠0)∧gcd(x,y-x)=gcd(x0,y0)]C3(x,y):[x≥0∧y≥0∧(x≠0∨y≠0)∧x≠0y<x∧gcd(x,y)=gcd(x0,y0)][y≥0∧x≥0∧(y≠0∨x≠0)∧gcd(y,x)=gcd(x0,y0)]
21例1的证明C4(x,y):[x≥0∧y≥0∧(x≠0∨y≠0)gcd(x,y)=gcd(x0,y0)∧x=0)]y=gcd(x0,y0)⑶证明验证条件⑴~⑷,证明如下:22例1的证明
验证条件C1(x,y)与C3(x,y)这两条路径未改变中间变量x、y的任何值,其为T是显然的。C2(x,y)的证明:x≠0与y≥x∵x≠0为T,x≥0∧y≥0为T,y≥x∴y-x≥0为T,x≠0∨y-x≠0为T。根据数论知识,当y≥x时,有
gcd(x,y)=gcd(x,y-x),∵gcd(x,y)=gcd(x0,y0)∴gcd(x,y-x)=gcd(x0,y0)23例1的证明C4(x,y)的证明:x=0∵(x=0∧y≥0)∧(x≠0∨y≠0)为T∴y>0为T,根据数论知识,当y>0时有gcd(0,y)=y又∵gcd(0,y)=gcd(x0,y0)∴y=gcd(x0,y0)为T,部分正确性得证24
程序正确性证明大规模软件的证明很复杂,复杂度高于开发过程,本身可能出错。只能证明程序功能正确,不能证明其动态特性是否符合要求。大规模软件质量只要靠测试保证25二、软件测试
测试工作量约占开发总工作量的40%以上测试内容文档:静态测试程序:静态与动态测试步骤单元测试(模块测试)集成测试(综合测试)确认测试(有效性测试)系统测试(环境测试)测试方法静态测试、动态测试(黑盒测试和白盒测试)26
测试心理
测试的一个基本目的就是找到程序中的潜在错误。因此,不应抱着证明程序正确的目的进行测试,而应该抱着证明程序不能运行的目标进行测试,以揭示任何可能存在的缺陷。基于这一点,测试有时候被定义为为了找错误而执行程序的过程。27EdsgerWybeDijkstra1930-2002
“Programtestingcanbeusedtoshowthepresenceofbugs,butnevertoshowtheirabsence!”281.测试目标SE生产阶段——“建设性”测试:找错过程——“破坏性”?
改错
提高软件质量——“建设性”
G.Myers
为了发现程序中的错误而执行程序的过程
证明程序正确,没有错误?
表明程序有错误,暴露错误?
29软件测试的目标G.J.Myers就软件测试的目标提出以下观点:测试是为了发现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发现过的错误的方案;成功的测试是发现了至今为止尚未发现过的错误的测试。302.测试的原则应该把测试贯穿于整个开发过程中预先确定测试结果
开发者不应测试自己的程序制定严格的测试计划,防止测试的随意性集中力量测试容易出现错误的程序段应当对每一个测试结果做全面检查。保存好测试计划、测试方案、测试用例、错误数据分类和统计,以及最终的分析报告,为维护提供方便,为可靠性分析提供有力的数据说明。313.测试的复杂性机器字长为32位,程序P接收A、B,产生结果C。PBCA232×232=264/1ms≈5亿年32路径测试≤20520/1ms≈3170年选择测试用例是关键程序P接收整数a、b、c,判别a、b、c组成一般△、等腰△、直角△、等边△?334.测试阶段的信息流向测试评价纠错可靠性模型软件配置测试配置测试结果错误正确预期结果错误率可靠性预测测试阶段的信息流34二、软件测试方法
静态测试动态测试Error!352.静态测试
功能检(代码自查)
程序员阅读模块功能、流程图、编码检查语法、逻辑错误模拟单步执行群体检查(小组会议评审)
程序员、项目负责人、懂计算机的用户需求分析、文档功能说明、流程图、编码、自我测试情况36
自查日志项目名称及代码:工作产品及ID:评审者姓名:准备所花费的时间(小时):缺陷列表:编号位置描述严重程度37项目
Xxxxxxxx工作产品类
AuctionItem产品大小250行Java代码评审小组P1,P2,P3时间开销(人-小时)准备总计3人-小时小组评审会议4.5人-小时总计开销7.5人-小时缺陷重要缺陷数3细微缺陷数8总计缺陷数11评审状态通过对下一阶段的推荐评价代码质量可进一步提高383.动态测试函数 f(x1,x2,…,xn)=(y1,y2,…,ym)
黑盒测试——数据驱动测试功能着眼点:接口时机:后期的集成测试、确认测试白盒测试——逻辑驱动测试内部逻辑结构、处理过程着眼点:内部(断点)时机:早期的单元测试39三、黑盒测试和白盒测试
黑盒测试——功能测试功能是否正常使用?输入→正确输出?保持外部信息的完整性?白盒测试——结构测试按内部逻辑测试每条通路是否按要求正常工作?401.黑盒测试法(功能测试法)在软件接口上进行测试测试功能需求的有效性测试集中于软件信息域(输入域—输出域)Black-BoxTestingMakesurethateverykindofinputissubmitted,andtheoutputobservedmatchestheoutputexpected.——Functionaltesting黑盒测试412.黑盒法测试方案设计
等价划分法边界值分析法错误推测法42(1)等价划分假定:每类中一个典型值在测试中的作用与这一类中所有其他值的作用相同输入等价类有效等价类无效等价类输出等价类划分:试探性、经验43如何划分等价类如果输入条件中规定了取值的范围,则可划分为一个有效等价类和两个无效等价类。如果输入条件中规定了输入值的个数,则可划分为一个有效等价类和两个无效等价类。如果输入条件中规定了输入值的集合,则可确立一个有效等价类和一个无效等价类。如果规定了输入数据的一组值,而且程序对不同的输入执行不同的处理
。则每个不同的值可以建立一个有效等价类,此外,还有一个无效等价类。如果规定了输入数据必须遵循的规则,则可以建立一个有效等价类(符合规则)和若干个无效等价类(从不同的角度违反规则)。如果一个等价类中元素在程序中的处理方式不同,应将此等价类进一步划分为更小的等价类44建立等价类表输入条件有效等价类无效等价类.........45确定测试用例步骤:在等价类表中为每个等价类规定一个惟一的编号。
设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类。重复这一步骤,直至所有的有效等价类都被覆盖为
止。设计一个新的测试用例,使它仅覆盖一个尚未被覆盖的无效等价类,重复此步骤,直至所有的无效等价类都被覆盖为止。46一个例子标识符是由字母开头的字母或数字组合构成,有效字符数为8个,最多字符数为80个”。并且规定:“标识符必须先说明后使用,在同一个说明语句中,标识符至少有一个”输入条件有效等价类无效等价类第一个字符标识符组成标识符字符数标识符个数标识符的使用字母(1)字母(3),数字(4)1~8个(7)1个(11),多个(12)先说明后使用(14)非字母(2)非字母非数字(5),保留字(6)0个(8),>8个(9),>80个(10)0个(13)未说明就使用(15)47确定测试用例:Varx,T123:real;(1)(3)(4)(7)(11)(12)(14)Var3A:real;(2)VarA$:char;(5)Varif:integer;(6)Varx,:real;(8)VarT12345678:real;(9)VarT12345678910……:real;(10)Var:real;(13)
Begin
……m:=0(15)
……End.48等价划分法的评价选用等价类中典型值/任意值作为testcases没有选用某些高效率的测试方案49(2)边界值分析(BoundaryValueAnalysis,BVA)处理边界情况最易出错选择边界值作testcases,暴露error的可能性大刚好等于等价类边界值稍小于稍大于"Bugslurkincornersandcongregateatboundaries..."——BorisBeizer50边界值分析的规则
值的范围 x∈[a,b] a-1,a,b,b+1
值的个数 a~b a-1,a,b,b+1
输出等价类 sinx 1 π/2
0 0
-1 -π/2
有序集 [1,n]
[0,n-1] 错位_π210-1π251边界值分析方法的评价边界值→testcases,易发现错误考虑输出等价类联合使用等价划分、边界值分析方法52(3)错误推测法特殊的容易出错的情况→
testcases凭经验、直觉,根据程序的特点着重测试已发现了较多错误的程序段(错误的群集现象)测试数据的组合(等价划分&边界值分析:孤立测试数据)0,空数据结构负边界:栈上溢、下溢未赋初值的变量排序: 空,一个元素 全等 已排序判定表(树)选择测试数据的组合533.白盒测试法关注软件内部逻辑结构(controlstructure)测试每条逻辑通路,检查断点(breakpoint)状态测试方案对程序逻辑的覆盖程度决定测试的完全性程度White-BoxTestingUsethestructureoftheprogramtotest.——Structuraltesting白盒测试54可能的执行通路=520
loop=20X123453170年!365×24小时/年1毫秒/条1014条
=1014条365×24小时/年穷尽测试(completetest)55
一系列测试过程的总称,隨测试用例选择方案的不同,这组测试过程的逻辑复盖度也越来越完整。逻辑覆盖(Logicalcoverage)4.白盒法测试方案的设计穷尽测试不可能
选少量“最有效”的testcases,做到尽可能完备的测试56Error!选择足够多的测试用例,使程序中每个可执行的语句至少执行一次。a(1)语句覆盖(Statementcoverage)57入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcase1:A=2,B=0,X=3覆盖路径SabcdEA>1ANDB=0 TA=2ORX>1 T语句覆盖58语句覆盖入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE问题:只测试了判定表达式=T,为F时如有错误无法发现!如未测试SacE,此路径上X值应该保持不变,无法发现问题!Testcase1:A=2,B=0,X=3很弱的逻辑覆盖59选择足够多的测试用例,使每个判定的每个分支至少执行一次。(分支覆盖)入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE两种方案:1. SabcdE+SacE (TT) (FF)2.SabcE+SacdE (TF) (FT)(2)判定覆盖(Branchcoverage)60入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases3:①A=4,B=0,X=4(SabcE)②A=2,B=1,X=3(SacdE)问题:任一方案都只检查了全部路径的一半(2/4)无法判断内部条件的错误(如X>1错写为X<1)方案2.SabcE+SacdE (TF) (FT)比语句覆盖强判定覆盖61入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdEA>1 TA≤1 FB=0
TB≠0
FA=2 TA≠2 FX>1 TX≤1 F测试用例必须覆盖这8种可能的结果!选择足够多的测试用例,使每个判定表达式中的每个条件都取到各种可能的结果。(3)条件覆盖(Conditioncoverage)62入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases4:①A=2,B=0,X=4 [SabcdE](满足A>1,B=0;A=2,X>1)TTTT②A=1,B=1,X=1 [SacE](满足A1,B0;A2,X1)FFFF条件覆盖 判定覆盖
?条件覆盖63入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases5:①A=2,B=0,X=1
[SabcdE](满足A>1,B=0;A=2,X1)TTTF②A=1,B=1,X=2
[SacdE](满足A1,B0;A2,X>1)FFFT表达式
(A=2ORX>1)始终为T,没有覆盖分支cE,不是判定覆盖!条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖!条件覆盖64选择足够多的测试用例,使判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。(4)判定-条件覆盖65入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases6:①A=2,B=0,X=4 [SabcdE](满足A>1,B=0;A=2,X>1)TTTT②A=1,B=1,X=1 [SacE](满足A1,B0;A2,X1)FFFFTestcases4问题:没能覆盖判定表达式中各条件取值的所有可能组合!若A>1ANDB=0错写成
A>1ORB=0,无法测试出!同样,若A=2ORX>1错写成
A=2ANDX>1
,无法测试出!不一定能发现判定表达式中的逻辑错误!判定-条件覆盖66选择足够多的测试用例,使每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖
一定能满足判定覆盖、条件覆盖和判定—条件覆盖。(5)条件组合覆盖67全部可能的条件组合为:①A>1,B=0TT②A>1,B0TF③A1,B=0FT
④A1,B0FF⑤A=2,X>1TT⑥A=2,X
1TF
⑦A
2,X>1FT⑧A
2,X
1FFTestcases7:①A=2,B=0,X=4(TT)(①⑤)②A=2.B=1,X=1(FT)(②⑥)③A=1,B=0,X=2(FT)(③⑦)④A=1,B=1,X=1(FF)(④⑧)问题:不能保证覆盖程序中的每一条路径!没有测试到路径SabcE(表达式TF,条件①和⑧的组合)的情形入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE最强的逻辑覆盖条件组合覆盖685.条件组合覆盖4.判定-条件覆盖3.条件覆盖2.判定覆盖1.语句覆盖测试充分性测试代价逻辑覆盖的关系69四、软件测试的步骤与策略SSTRVDICU系统工程需求分析设计编码单元测试集成测试确认测试系统测试70一、单元测试(UnitTesting)目标:测试单元内部逻辑的正确性依据:详细设计文档测试人员:编该单元的编码人员测试方法:白盒法71moduletobetestedresultstestcasessoftwareengineerinterfacelocaldatastructuresboundaryconditionsindependentpathserrorhandlingpaths1.单元测试内容72ModulestubdriverinterfacelocaldatastructuresboundaryconditionsindependentpathserrorhandlingpathstestcasesRESULTSmain(){input(test_case);result=Module(test_case);output(result);}result_typeModule(test_case){……;value=submodule(data);……;}value_typesubmodule(data){output(data);value=fake_value();returnvalue;}2.单元测试过程73二、集成测试(IntegrationTesting)目标:单元间接口、特别是公共单元接口和共享数据依据:概要设计文档测试方法:黑盒法测试人员:专门测试人员和总体设计师741.集成测试内容TestA,B,C,DTestATestBTestCTestD难分离,难诊断、定位错误
!752.测试方法(非增式与增式测试)非增式测试法增式测试法一步到位、集成所有模块可并行测试所需机器时间少问题:难以制定较完全的测试计划,难以诊断出错位置。一次集成一个模块易分离、诊断定位、改正错误对接口测试更彻底较早发现接口错误问题:编写driver,stub工作量较小76增式测试法(Incrementaltesting)Top-downMS1S2M1S3S4M2S2Bottom-upMMMMMMMMMMMMDDDDDD77(1)自顶向下集成(Top-down)深度优先策略M1M2M5M8M6M3M7M4宽度优先策略M1M2M3M4M5M6M7M8M1M2M3M5M6M8S7S4M1M2M3M4M5M6M7M878自顶向下集成优点尽早测试主要控制、关键选择(上层)尽早实现软件的完整功能并验证无
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届河北省邯郸市曲周县一中高三下学期第二次“战疫”线上教学综合测试数学试题
- 2025版权协议 委托放映合同
- 人民网全国合同样本
- 房屋地毯清理方案范本
- 2025茶叶供货合同模板
- 中介贷款代办合同样本
- epc提供合同样本
- 共同保险合同范例
- 供货付款担保合同样本
- 符合孩子成长需求的课程计划
- 《汽车常见维护与修理项目实训教程》-教案
- 2024年河北高中学业水平合格性考试历史试题真题(含答案)
- 心血管内科介入管理制度、岗位职责及工作流程
- 药物临床试验统计分析计划书
- 人教版小学五年级数学下册《第七单元 折线统计图》大单元整体教学设计2022课标
- 资金支付计划审批表
- 读书分享平凡的世界
- 《婴幼儿健康管理》课件-任务一 家庭对婴幼儿健康的影响
- 甲状腺手术甲状旁腺保护
- 2024年山东济南中考语文作文分析-为了这份繁华
- 帕金森病药物治疗 课件
评论
0/150
提交评论