1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,*,国防科技大学计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,*,*,软件测试概念(ginin)详述,第一页,共80页。,测试阶段的信息(xnx)流程,2026/1/28 周三,2,第二页,共80页。,测试阶段的信息(xnx)流程,输入流分软件配置和测试
2、配置两项,软件配置由需求说明书、设计说明书和源代码组成;测试配置中包含测试计划、测试工具、测试用例和期望结果,有时测试配置亦作为软件配置的一个组成部分。,测试人员根据上述输入信息测试程序并评价测试结果,当测试结果与期望结果存在差异时,往往程序有错。此时可采用排错技术(jsh)定位错误并改正之。,通过对测试结果的收集和评价,软件质量和软件可靠性的一些定性指标即能逐步确定下来。,2026/1/28 周三,3,第三页,共80页。,测试用例和场景(chng jng)的设计,任何工程化的产品都有两种测试方法:,一种方法是已知产品应该具有(jyu)的功能,通过测试检验每个功能是否都能正常使用;,另一种方法
3、是已知产品内部工作过程,通过测试检验产品内部动作是否按照产品规格说明的规定正常进行。,前者称为黑盒测试,后者称为白盒测试。,测试用例和测试场景将根据这两种测试方法的特性制定。,2026/1/28 周三,4,第四页,共80页。,黑盒测试(csh),黑盒测试完全不考虑程序的内部结构和处理过程。测试仅在程序界面上进行。,设计测试用例旨在说明:,软件的功能是否可操作;,程序能否适当地接收输入数据并产生正确的输出结果或在可能的场景中事件驱动的效果是否尽如人意;,能否保持(boch)外部信息(如数据文件)的完整性。,2026/1/28 周三,5,第五页,共80页。,白盒测试(csh),白盒测试法密切关注处
4、理细节,针对程序的每一条逻辑路径都要分别设计测试用例,检查分枝(fn zh)和循环的情况。,穷举测试不可取,一般选用少量“最有效”,即最有可能暴露错误的路径进行测试。,测试的目的是为了找出错误,所以无论采用黑盒法还是白盒法,设计测试用例时总是期望用尽可能少的时间和代价发现尽可能多的错误。,2026/1/28 周三,6,第六页,共80页。,例:,最多有1014个逻辑路径,假设(jish)每运行一个测试用例平均花费1毫秒,总共需3170年才能穷尽所有测试。,2026/1/28 周三,7,第七页,共80页。,软件测试的步骤(bzhu),软件工程的开发过程和测试过程应该是对应的。第一章图采用V型图表示
5、开发测试的对应关系(gun x),也可以采用图所示的螺旋型图表示。,每旋转一圈,测试的范围加大一次:,螺旋中心对应单元测试,它测试源程序的每一模块;,下一步是综合测试,它测试软件总体结构;,再下一步是确认(验收)测试,测试软件是否满足需求;,最后一步是系统测试,检查软件与系统中其他元素是否协调。,2026/1/28 周三,8,第八页,共80页。,软件测试技术(jsh),本节主要(zhyo)讨论当用白盒或黑盒测试法测试软件时,如何设计测试用例才能达到测试的目的。,此外,对自动测试工具也作一些简单介绍。,2026/1/28 周三,9,第九页,共80页。,白盒测试(csh),白盒测试应该根据程序的控
6、制结构设计测试用例,原则是:,保证模块中每一独立的路径至少执行一次;,保证所有判断(pndun)的每一分枝至少执行一次;,保证每一循环都在边界条件和一般条件下至少各执行一次;,验证所有内部数据结构的有效性。,2026/1/28 周三,10,第十页,共80页。,1.基本(jbn)路径测试,基本路径测试的主要思想是,根据软件过程性描述(详细设计或代码)中的控制流程确定复杂性度量,然后用此度量定义基本路径集合,由此导出一组测试用例,它们能保证每个语句至少执行一次。,为了使用图论的知识和术语,引入流图(亦称程序图)的概念,流图即把流程图中结构化构件(gujin)改用一般有向图的表示形式。,代表条件判断
7、的结点称为谓词结点。,2026/1/28 周三,11,第十一页,共80页。,结构化构件(gujin)在流图中的表示,2026/1/28 周三,12,第十二页,共80页。,例:流程图,2026/1/28 周三,13,第十三页,共80页。,例:对应(duyng)的流图,2026/1/28 周三,14,第十四页,共80页。,条件(tiojin)处理,若判断中含复合条件(tiojin),则需增加谓词结点。如OR运算的处理。,2026/1/28 周三,15,第十五页,共80页。,基本路径(ljng)测试的思想,基本路径,至少引入一个(y)新语句或者新判断的程序执行通道,测试用例的设计方法,流程图=流图=
8、基本路径=测试用例,2026/1/28 周三,16,第十六页,共80页。,Step1 根据程序(chngx)的逻辑结构画出流程图,void Func(int nPosX,int nPosY),while(nPosX 0),int nSum=nPosX+nPosY;,if(nSum 1),nPosX-;,nPosY-;,else,if(nSum -1)nPosX-=2;,else nPosX-=4;,/end of while,2026/1/28 周三,17,第十七页,共80页。,Step1 根据(gnj)程序的逻辑结构画出流程图,2026/1/28 周三,18,第十八页,共80页。,Step2
9、 根据(gnj)流程图画出流图,2026/1/28 周三,19,第十九页,共80页。,Step3 确定基本(jbn)路径的集合,基本路径(ljng),流图的Cyclomatic复杂度正好是基本路径(ljng)的数目,V(G)=E N+2,V(G)=11-9+2=4,2026/1/28 周三,20,第二十页,共80页。,Step3 确定基本路径(ljng)的集合,1-11,1-2,3-4,5-10-1-11,1-2,3-6-7-9-10-1-11,1-2,3-6-8-9-10-1-11,2026/1/28 周三,21,第二十一页,共80页。,Step4 对每条基本路径(ljng)设计测试用例,对
10、于路径(ljng)1 11,nPosX 取-1,nPosY取任意值,1-2,3-4,5-10-1-11,nPosX 取1,nPosY取1,对于路径(ljng)1-2,3-6-7-9-10-1 11,nPosX 取1,nPosY取-1,1-2,3-6-8-9-10-1-11,nPosX 取1,nPosY取-3,2026/1/28 周三,22,第二十二页,共80页。,2.控制结构测试(csh),基本路径测试是控制结构测试技术的一种,下面介绍其他形式的控制结构测试,它们比基本路径测试法覆盖程度(chngd)更大,进一步提高了白盒测试的质量。,2026/1/28 周三,23,第二十三页,共80页。,条
11、件(tiojin)测试法,条件测试主要考虑程序中的条件判断,以期发现条件判断内部的错误和程序中其他一些错误。,程序中“条件”分为简单条件和复合条件。简单条件为一个布尔变量或一个关系表达式(可能前缀逻辑非),复合条件由简单条件通过逻辑运算符(OR、AND、NOT)和括号连接而成。,因此(ync)条件中可能出现的错误类型包括:布尔运算符错、布尔变量错、括号错、关系运算符错和算术表达式错。,最简单的条件测试是分支测试。,2026/1/28 周三,24,第二十四页,共80页。,分支(fnzh)和关系运算测试法BRO,能用少于2n次测试发现条件中大多数错误,采用(ciyng)该方法的前提是条件中每个布尔
12、变量和关系运算符至多出现一次并无公共变量。,BRO方法引入条件约束的概念,含n个简单条件的复合条件C之约束D表示为(D1,D2,Dn),Di(0in)一般为某种符号,它指明简单条件Ci在C中出现的约束。C的一次执行覆盖约束条件D指,C中出现的每个简单条件Ci在这次执行中都满足D中对应的约束Di。对于一个布尔表达式,出现约束或为真(t)或为假(f);对于一个关系表达式,出现约束用符号、或表示。,2026/1/28 周三,25,第二十五页,共80页。,数据流测试法,数据流测试法是根据程序中变量定义和引用的位置选择测试路径。,为说明数据流测试法,假设程序中每个语句都被赋与一个唯一的标号,并且每个函数
13、都不修改其参数和全局变量,对以S为标号的语句定义下面两个集合:,DEF(S)=X|语句S中含X的定义,USE(S)=X|语句S中含对X的引用,当S为分支或循环语句时,DEF集合为空,USE集合由S所含条件确定。如果从语句S到语句S存在一条(y tio)路径并且在S中不存在X的再定义,则称在S中定义的X在S处活跃。,2026/1/28 周三,26,第二十六页,共80页。,数据流测试法(续),定义变量X的定义引用链(DU链)为X,S,S,其中S,S为标号,XDEF(S)USE(S)且S中定义的X在S处活跃。,一种简单的数据流测试策略即对每条DU链至少覆盖一次,称为DU测试策略,它对于测试含嵌套IF
14、语句和多重循环语句的程序特别(tbi)有效。,2026/1/28 周三,27,第二十七页,共80页。,循环(xnhun)测试,循环是大多数算法的基础,循环测试的目的是检查循环结构的有效性。,循环分为简单循环、并列(bngli)循环、嵌套循环和非结构循环四类:,2026/1/28 周三,28,第二十八页,共80页。,2026/1/28 周三,29,第二十九页,共80页。,循环(xnhun)测试(续),对于最多为n次的简单循环,应作下列测试(csh):,1)完全跳过循环;,2)仅循环一次;,3)循环两次;,4)循环m次,mn;,5)分别循环(n-1)次,n次,n+1次。,2026/1/28 周三,
15、30,第三十页,共80页。,循环(xnhun)测试(续),对于嵌套循环若生搬硬套(shng bn yng to)简单循环的测试策略。可能使测试次数成几何级数增长,减少测试次数的具体措施包括:,1)从最内层循环开始测试,此时所有外层循环都取最小值,内层循环按简单循环的测试策略测试;,2)由里向外,回退到上一层循环测试,这层循环的所有外层循环仍取最小值,由该层循环嵌套的那些循环取一些典型值。,3)继续向外扩展,直至所有循环测试完毕。,对于并置循环分两种情况,若两个循环完全独立,采用简单循环的测试策略,反之,若第一循环的计数器用作第二循环的初值,即两循环不独立,需用嵌套循环测试策略测试。,非结构化的
16、循环需按结构化程序设计的思想首先将程序结构化然后再进行测试。,2026/1/28 周三,31,第三十一页,共80页。,黑盒测试(csh),黑盒测试(csh)旨在测试(csh)软件是否满足功能要求,它主要诊断下列几类错误:,(1)不正确或遗漏的功能;,(2)界面错误;,(3)数据结构或外部数据库访问错误;,(4)性能错误;,(5)初始化和终止条件错误。,值得指出的是,黑盒测试(csh)法与白盒测试(csh)法不能互相替代,相反两者应互为补充,在测试(csh)的不同阶段为发现不同类型的错误而灵活选用。,2026/1/28 周三,32,第三十二页,共80页。,1.等价(dngji)分类法,等价分类法
17、的主要思想是把程序的输入数据集合按输入条件划分为若干个等价类,每一等价类相对于输入条件表示为一组有效或无效(wxio)的输入,然后为每一等价类设计一个测试用例,这样即可大大减小测试的次数又不丢失发现错误的机会。,因此等价分类法的关键是根据输入数据的类型和程序的功能说明划分等价类。,2026/1/28 周三,33,第三十三页,共80页。,等价(dngji)分类法,常用的一些规则:,(1)如果能为输入条件指定一个范围,则可划分出一个有效的等价类(输入值落在此范围内)和两个无效的等价类(大于最大值的输入和小于最小值的输入);,(2)如果能为输入条件指定一个特定值,则可类似(li s)地划分出一个有效
18、等价类和两个无效等价类;,(3)如果能为输入条件指定一个集合,则可划分出一个有效等价类(此集合)和一个无效等价类(此集合的补集);,(4)如果能为输入条件指定一个布尔量,则可划分出一个有效等价类(此布尔量)和一个无效布尔量(此布尔量之非)。,2026/1/28 周三,34,第三十四页,共80页。,2.,边界值分析法,经验表明,大多数错误都发生在输入的边界值上。为此,专门引入边界值分析(Boundary Value Analysis)技术,旨在选择测试用例,强迫程序在边界值上执行。,BVA技术是对等价分类技术的补充,即在一个等价类中不是任选一个元素作为此等价类的代表进行测试,而是选择此等价类边界
19、上的值。,此外(cwi),采用BVA技术导出测试用例时,不仅要考虑输入条件,还要考虑输出的状态。,2026/1/28 周三,35,第三十五页,共80页。,边界值分析法,采用BVA技术设计测试用例与等价分类法有许多相似之处:,1)如果输入条件指定了由值a,b括起来的一个范围,那么值a、值b和紧挨a、b左右的值应分别作为测试用例;,2)如果输入条件指定为一组数,那么这组数中最大者、最小者和次大、次小者应作为测试用例;,3)应用规则1)、2)于输出条件。例如(lr),假设某程序输出为一张温度压力对照表,此时应设计测试用例正好产生表项所允许的最大和最小值。,4)如果内部数据结构是有界的(例如(lr),
20、某数组有100个元素),那么应设计测试数据,使之能检查该数据结构的边界。,2026/1/28 周三,36,第三十六页,共80页。,3.对比(dub)测试法,在一些可靠性要求很高的系统中,经常使用冗余的软、硬件,以减少错误发生的可能性。,这时,不同的软件版本由不同的开发(kif)小组根据同一需求说明书开发(kif),并用相同的测试数据对它们进行测试,保持结果一致。,此后各版本并行执行并实时地比较结果,确保系统的正确性。,受此思想起发,许多关键软件,即使最后交付时只要求一个版本,开发(kif)时也另外产生一个独立版本供测试使用。这种黑盒测试方法称为对比测试或背靠背测试,2026/1/28 周三,3
21、7,第三十七页,共80页。,软件测试策略(cl),软件测试策略主要考虑,如何把设计测试用例的技术组织(zzh)成一个系统的、有计划的测试步骤。,测试策略应包含测试规划、测试用例设计、测试实施和测试结果收集评估等。其中测试规划包括:测试的步骤、工作量、进度和资源等,本节重点讨论测试步骤,测试中的排错技术,2026/1/28 周三,38,第三十八页,共80页。,1,单元测试,单元测试(csh)的对象是软件设计的最小单位模块。,单元测试(csh)的依据是详细设计描述,单元测试(csh)应对模块内所有重要的控制路径设计测试(csh)用例,以便发现模块内部的错误。,单元测试(csh)多采用白盒测试(cs
22、h)技术,系统内多个模块可以并行地进行测试(csh)。,2026/1/28 周三,39,第三十九页,共80页。,1.1 单元测试任务(rn wu),单元测试任务包括:,1)模块接口测试;,2)模块局部数据结构测试;,3)模块边界条件测试;,4)模块中所有独立执行通路测试;,5)模块的各条错误处理通路测试。,模块接口测试是单元测试的基础(jch)。只有在数据能正确流入、流出模块的前提下,其他测试才有意义,2026/1/28 周三,40,第四十页,共80页。,测试接口(ji ku)考虑的因素,输入的实际参数与形式参数的个数是否相同;,输入的实际参数与形式参数的属性(shxng)是否匹配;,输入的实
23、际参数与形式参数的量纲是否一致;,调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;,调用其他模块时所给实际参数的属性(shxng)是否与被调模块的形参属性(shxng)匹配;,调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;,调用预定义函数时所用参数的个数、属性(shxng)和次序是否正确;,是否存在与当前入口点无关的参数引用;,是否修改了只读型参数;,10 对全程变量的定义各模块是否一致;,11 是否把某些约束作为参数传递。,2026/1/28 周三,41,第四十一页,共80页。,测试接口(ji ku)考虑的因素(续),如果模块内包括外部输入输出,还应该考虑下列因
24、素:,文件属性是否正确;,OPEN/CLOSE语句是否正确;,格式说明(shumng)与输入输出语句是否匹配;,缓冲区大小与记录长度是否匹配;,文件使用前是否已经打开;,是否处理了文件尾;,是否处理了输入/输出错误;,输出信息中是否有文字性的错误。,2026/1/28 周三,42,第四十二页,共80页。,单元测试的任务(rn wu)(续),局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:,不合适(hsh)或不相容的类型说明;,变量无初值;,变量初始化或省缺值有错;,不正确的变量名(拚错或不正确地截断);,出现上溢、下溢和地址异常。,2026/1/28 周三,43,第四十
25、三页,共80页。,单元测试的任务(rn wu)(续),在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证(bozhng)模块中每条语句至少执行一次。,此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。,此时基本路径测试和循环测试是最常用且最有效的测试技术。,2026/1/28 周三,44,第四十四页,共80页。,单元测试的任务(rn wu)(续),计算中常见的错误包括:,误解或用错了算符优先级;,混合(hnh)类型运算;,变量初值错;,精度不够;,表达式符号错。,2026/1/28 周三,45,第四十五页,共80页。,单元测试的任务(rn wu)(续)
26、比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:,不同数据类型的对象之间进行比较;,错误地使用逻辑运算符或优先级;,因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;,比较运算或变量出错;,循环终止条件不合适(hsh)或不可能出现;,迭代发散时不能退出;,错误地修改了循环变量。,2026/1/28 周三,46,第四十六页,共80页。,单元测试的任务(rn wu)(续),一个好的设计应能预见各种出错条件(tiojin),并预设各种错误处理通路,错误处理通路同样需要认真测试,测试应着重检查下列问题:,输出的错误信息难以理解;,记录的错误与实际遇到的错误不相符;,在程序
27、自定义的错误处理段运行之前,系统已介入;,异常处理不当;,错误陈述中未能提供足够的定位错误信息。,2026/1/28 周三,47,第四十七页,共80页。,1.2 单元测试过程(guchng),一般认为(rnwi)单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。,为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub)。,驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。,提高模块的内聚度可简化单元测试,如
28、果每个模块只完成一个功能,所需测试用例数目将显著减少,模块中的错误也更容易发现。,2026/1/28 周三,48,第四十八页,共80页。,单元测试环境(hunjng),2026/1/28 周三,49,第四十九页,共80页。,2,综合测试,综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关(yugun)的各种错误。,某些软件设计人员习惯于把所有模块按设计要求一次全部组装起来,然后进行整体测试,这称为非增量式集成。这种方法容易出现混乱。,与之相反的是增量式集成方法,程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面
29、的测试亦可做到完全彻底。,2026/1/28 周三,50,第五十页,共80页。,2.1 自顶向下集成(j chn),自顶向下集成是构造程序结构(jigu)的一种增量式方式,它从主控模块开始,按照软件的控制层次结构(jigu),以深度优先或广度优先的策略,逐步把各个模块集成在一起。,深度优先策略首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径多少带点随意性,一般根据问题的特性确定。,2026/1/28 周三,51,第五十一页,共80页。,例:,2026/1/28 周三,52,第五十二页,共80页。,步骤(bzhu),1)以主控模块作为测试驱动模块,把对主控模块进行单元测试时引
30、入的所有桩模块用实际模块替代;,2)依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;,3)每集成一个模块立即测试一遍;,4)只有每组测试完成后,才着手替换下一个桩模块;,5)为避免引入新错误,须不断进行回归测试(即全部或部分(b fen)地重复已做过的测试)。,从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。,2026/1/28 周三,53,第五十三页,共80页。,优缺点,自顶向下集成的优点(yudin)在于能尽早地对程序的主要控制和决策机制进行检验,因此较早地发现错误。,缺点是在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模
31、块,因此测试并不充分。,2026/1/28 周三,54,第五十四页,共80页。,2.2 自底向上集成(j chn),自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装和测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。,自底向上综合测试的步骤分为:,1)把低层模块组织成实现某个子功能的模块群(cluster);,2)开发一个测试用驱动模块,控制测试数据的输入和测试结果的输出;,3)对每个模块群进行测试;,4)删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群;,从第一步开始循环(xnhun)执行上述各步骤,直至整个程序构造完毕。,2
32、026/1/28 周三,55,第五十五页,共80页。,例:,2026/1/28 周三,56,第五十六页,共80页。,优缺点,自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象。,它与自顶向下综合测试方法的优缺点正好相反。,因此,在测试软件系统时,应根据软件的特点及工程的进度,选用适当的测试策略,有时混合使用两种策略更为(n wi)有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。,2026/1/28 周三,57,第五十七页,共80页。,关键(gunjin)模块,在综合测试过程中尤其要注意关键模块,所谓关键模块一般都具有下述一或多个特征:,
33、对应几条需求;,具有高层控制(kngzh)功能;,复杂易出错;,有特殊的性能要求。,关键模块应尽早测试,并反复进行回归测试。,2026/1/28 周三,58,第五十八页,共80页。,2.3,综合测试文档,测试说明书(Test Specifications)应给出软件集成(j chn)的总体规划和某些特殊测试的描述。,综合测试文档将作为软件配置的一部分交给用户。,2026/1/28 周三,59,第五十九页,共80页。,测试(csh)说明书提纲,测试范围,测试计划,A测试的各个阶段和划分模块群情况,B进度安排,C开销软件(驱动和桩模块),D环境和资源,测试过程n(关于第n个模块群测试过程的描述),
34、A集成顺序,1用途(yngt),2被测模式,B模块群中各模块的单元测试情况,2026/1/28 周三,60,第六十页,共80页。,测试(csh)说明书提纲(续),1模块m的测试描述,2开销软件描述,3期望结果,C测试环境,1特殊工具或技术(jsh),2开销软件的描述,D测试用例,E模块群n的期望结果,实际测试结果,参考文献,附录,2026/1/28 周三,61,第六十一页,共80页。,第四十六页,共80页。,2)由里向外,回退到上一层循环测试,这层循环的所有外层循环仍取最小值,由该层循环嵌套的那些循环取一些典型值。,4)删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群
35、测试(csh)说明书提纲,第三十二页,共80页。,1-2,3-6-8-9-10-1-11,循环(xnhun)测试(续),最简单的条件测试是分支测试。,变量初始化或省缺值有错;,BRO方法引入条件约束的概念,含n个简单条件的复合条件C之约束D表示为(D1,D2,Dn),Di(0in)一般为某种符号,它指明简单条件Ci在C中出现的约束。,设计测试用例旨在说明:,期发现那些似乎只有最终用户才能发现的问题。,测试用例和测试场景将根据这两种测试方法的特性制定。,软件测试过程可概括为用单元测试保证模块正确工作,用综合测试保证模块集成到一起后正常工作,用确认测试保证软件需求的满足,用系统测试保证软件与其
36、他(qt)系统元素合成后达到系统各项性能要求。,目前测试工具可分为下面几类:,3 确认(qurn)测试,通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步确认测试即可开始。,确认测试应检查(jinch)软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。,2026/1/28 周三,62,第六十二页,共80页。,3.1 确认测试(csh)标准,实现软件确认要通过一系列黑盒测试。,确认测试同样需要制订测试计划和过程,测试计划应规定测试的种类和测试进度,测试过程则定义一些特殊的测试用例,旨在说明软件与需求是否一致。,无论是计划还是过程,都应该着重考虑软件是
37、否满足合同规定的所有功能(gngnng)和性能,文档资料是否完整、准确,人机界面和其他方面(例如,可移植性、兼容性、错误恢复能力和可维护性等等)是否令用户满意。,2026/1/28 周三,63,第六十三页,共80页。,3.2 配置(pizh)复审,确认测试的另一个重要环节是配置复审。复审的目的在于保证软件配置齐全、分类有序,并且(bngqi)包括软件维护所必需的细节。,2026/1/28 周三,64,第六十四页,共80页。,3.3 、测试(csh),软件是否真正满足最终用户的要求应由用户进行一系列“验收测试”。,验收测试既可以是非正式的测试,也可以是有计划、有系统的测试。,有时,验收测试长达数
38、周甚至数月,不断暴露错误,导致(dozh)开发延期。,一个软件产品,将有众多用户,不可能由每个用户验收,此时多采用称为、测试的过程,以,期发现那些似乎只有最终用户才能发现的问题。,2026/1/28 周三,65,第六十五页,共80页。,、测试(csh),测试是指软件开发公司组织内部人员模拟各类用户行为(xngwi)对即将面市的软件产品(称为版本)进行测试,试图发现错误并修正。,测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作,并尽最大努力涵盖所有可能的用户操作方式。,经过测试调整的软件产品称为版本。紧随其后的测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用版本,并要
39、求用户报告异常情况、提出批评意见。,然后软件开发公司再对版本进行改错和完善。,2026/1/28 周三,66,第六十六页,共80页。,4 系统(xtng)测试,计算机软件是基于计算机系统的一个重要组成部分(z chn b fn),软件开发完毕后应与系统中其他成份集成在一起,此时需要进行一系列系统集成和确认测试。,在系统测试之前,软件工程师应完成下列工作:,1)为测试软件系统的输入信息,设计错误处理通路;,2)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助;,3)参与系统测试的规划和设计,保证软件测试的合理性。,2026/1/28 周三,67,第六十七
40、页,共80页。,4.1 恢复(huf)测试,恢复测试主要检查系统的容错(rn cu)能力。当系统出错时,能否在指定的时间间隔内修正错误并重新启动系统。,恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。,对于自动恢复系统,需验证重新初始化、检查点、数据恢复和重新启动等机制的正确性;对于人工干予的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。,2026/1/28 周三,68,第六十八页,共80页。,4.2 安全(nqun)测试,安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。,例如,(1)想方设法截取或破译(p
41、 y)口令;(2)专门定做软件破坏系统的保护机制;(3)故意导致系统失败,企图趁恢复之机非法进入;(4)试图通过浏览非保密数据,推导所需信息等等。,理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。,2026/1/28 周三,69,第六十九页,共80页。,4.3 强度(qingd)测试,强度测试检查程序对异常情况的抵抗能力(nngl)。,强度测试总是迫使系统在异常的资源配置下运行。,例如:,(1)当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;,(2)定量地增长数据输入率,检查输入子
42、功能的反映能力(nngl);,(3)运行需要最大存储空间(或其他资源)的测试用例;,(4)运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例;等等。,2026/1/28 周三,70,第七十页,共80页。,4.4 性能(xngnng)测试,对于那些实时和嵌入式系统,软件部分既使满足功能要求,也未必能够满足性能(xngnng)要求。,虽然从单元测试起,每一测试步骤都包含性能(xngnng)测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能(xngnng),系统性能(xngnng)测试是为了完成这一任务。,性能(xngnng)测试有时与强度测试相结合,经常需要其他软、硬件
43、的配套支持。,2026/1/28 周三,71,第七十一页,共80页。,5,排错,排错与成功(chnggng)的测试形影相随。,测试成功(chnggng)的标志是发现了错误。,根据错误迹象确定错误的原因和准确位置,并加以改正的任务主要依靠排错技术。,2026/1/28 周三,72,第七十二页,共80页。,5.1 排错过程(guchng),排错过程开始于一个测试用例的执行,若测试结果与期望结果有出入,即出现了错误征兆,排错过程首先要找出错误原因,然后对错误进行修正。,因此排错过程有两种可能,一是找到了错误原因并纠正了错误,另一种可能是错误原因不明,排错人员只得(zhd)作某种推测,然后再设计测试用
44、例证实这种推测,若一次推测失败,再作第二次推测,直至发现并纠正了错误。,2026/1/28 周三,73,第七十三页,共80页。,排错过程(guchng),2026/1/28 周三,74,第七十四页,共80页。,5.2 排错方法(fngf),无论采用那种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统(xtng)评估很好地结合起来。,常用的排错策略分为三类:,原始类(brute force),回溯类(backtracking),排除类(cause eliminations),2026/1/28 周三,75,第七十五页,共80页。,基于(jy)CASE工具的软件
45、测试和排错,自动测试工具,由于软件测试工作量很大,因此设计自动测试工具,减少测试时间和费用十分必要。,目前测试工具可分为下面几类:,(1)静态分析器(static analyzers)。不执行(zhxng)被测试的程序,而通过扫描源代码,找出可能导致程序错误的异常情况。例如,变量无初值,程序中有孤立语句等。,(2)代码审查器(code auditors)。检查源代码是否满足最基本的代码标准。,2026/1/28 周三,76,第七十六页,共80页。,自动(zdng)测试工具,(3)断言处理器。包括前置处理器和后置处理器,专门检查程序员关于(guny)程序行为的断言在程序实际执行过程中是否成立。,
46、4)测试文件产生器产生一些嵌入了预定值的典型的输入文件。,(5)测试数据生成器。能辅助测试人员产生一些特殊的测试用例,强迫程序按某种方式运行。,(6)测试验证器。度量测试的置信程度并向质量保证专家报告。,(7)测试套具。支持测试过程的各项活动,如在测试环境上安装候选程序、填入输入数据、用桩模块模拟下层模块的行为等等。,(8)输出比较器。通过对几组输出的比较找出它们之间的差别。,此外,象符号处理系统、环境模拟器和数据流分析器等一批自动测试工具也被人们越来越多地采用。,2026/1/28 周三,77,第七十七页,共80页。,调试器,调试(dio sh),又名排错,任务就是要定位错误,排除错误。客
47、观地说,定位错误是一门艺术,目前主要靠程序员的经验和智慧,但若辅以CASE工具支持,可成倍提高效率。,关于程序调试(dio sh)部分,常见的功能包括设置断点,查看、修改变量或表达式的值,单步执行和进入过程执行等等。,程序员调试(dio sh)程序,通常希望被调程序和调试(dio sh)器能同时运行。此时若要求被调试(dio sh)内容和调试(dio sh)环境同时显现,可采用双终端方式,若因内存空间限制两者不可能同时在单机上运行,则可采用双机或远程调试(dio sh)方式,被调程序在一机运行,调试(dio sh)器在另一机上运行,两者通过串行接口进行通讯。,2026/1/28 周三,78,第
48、七十八页,共80页。,例:,2026/1/28 周三,79,第七十九页,共80页。,小结(xioji),软件测试既是软件开发阶段的最后一个活动,又是软件质量保证的最后一项措施。它所用的主要技术是白盒测试和黑盒测试。,软件测试过程可概括为用单元测试保证模块正确工作,用综合测试保证模块集成到一起后正常工作,用确认测试保证软件需求的满足,用系统测试保证软件与其他(qt)系统元素合成后达到系统各项性能要求。,测试一旦发现错误,必须定位并纠正此错,即通常所说的排错(或调试)过程。因此排错与测试是密不可分的两个活动。,本章介绍了若干软件测试技术和策略,简单讨论了排错的过程、方法和支持工具。,2026/1/28 周三,80,第八十页,共80页。,






