您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件制造_软件测试.
软件制造工程第5章测试25.1软件测试基础5.2单元测试5.3集成测试5.4白盒测试技术5.5黑盒测试技术5.6测试用例书35.1软件测试的基础什么是软件测试?是为了发现错误而执行程序的过程。发现错误是为了更正错误,最终得到一个高质量的软件系统。软件测试的对象:整个软件定义、开发周期的产品.软件测试不等于程序测试;它包括程序测试和文档测试。测试用例:通常指测试数据和预期的输出结果测试用例书45.1.1软件测试的目标软件测试存在的矛盾用户希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。软件开发者希望通过软件测试表明软件产品中不存在错误,已正确地实现了用户的要求。5G.Myers给出的软件测试目的测试是为了发现程序中的错误而执行程序的过程好的测试用例是极可能发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今未发现的错误的测试总之,测试的目的是以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷;测试附带的收获是它能证明软件的功能和性能与需求说明相符合。注意:测试不能表明软件中不存在错误,它只能说明软件中存在错误。65.2.2软件测试的准则(1)1)所有测试都能追溯到用户需求2)应该远在测试开始之前就制定出测试计划3)应该把Pareto原理应用到软件测试中群集现象:80%的错误可能是由20%的模块造成的4)从“小规模”测试开始,逐步过渡到“大规模”测试5)穷举测试是不可能的测试只能证明程序有错,不能证明程序没有错误6)应由独立的第三方从事测试工作75.2.3测试方法软件测试方法一般分为:静态测试和动态测试。静态测试是指被测程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段对程序进行检测。动态测试是指通过运行程序发现错误,又分黑盒法和白盒法两种。8两种动态测试方法黑盒测试(功能测试):•把程序看作一个黑盒子;•完全不考虑程序的内部结构和处理过程;•是在程序接口进行的测试。白盒测试(结构测试):•把程序看成装在一个透明的盒子里;•测试者完全知道程序的结构和处理算法;•按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。黑盒测试不可能实现穷尽测试:假设有程序P,输入量为A和B,输出量为C。如果计算机的字长为32位,A和B的数据类型都是整数类型。将A和B的可能取值进行排列组合,输入数据的可能性有:232×232=264种。假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。PABC白盒测试也不能实现穷尽测试:图中所示的一个小程序的控制流程。曲线代表执行次数不超过20的循环,循环体中共有5条通路。可能执行的路径有520条,近似为1014条可能的路径。如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。黑盒测试与白盒测试优缺点比较:黑盒测试白盒测试优点①适用于各阶段测试②从产品功能角度测试③容易入手生成测试数据①可构成测试数据使特定程序部分得到测试②有一定的充分性度量手段③可获较多工具支持缺点①某些代码得不到测试②如果规格说明有误,则无法发现③不易进行充分性测试①通常不易生成测试数据②无法对未实现规格说明的部分进行测试③工作量大,通常只用于单元测试,有应用局限性质一种确认技术,回答“我们在构造一个正确的系统吗?”一种验证技术,回答“我们在正确地构造一个系统吗?”125.1.4测试步骤测试的4个步骤:单元(模块)测试集成测试(子系统和系统测试)确认(验收)测试平行运行13测试与软件开发各阶段的关系软件开发过程是一个自顶向下,逐步细化的过程软件测试则是依相反顺序自底向上,逐步集成的过程。145.2.5测试阶段的信息流测试过程需要二类输入软件配置:软件需求规格说明、软件设计规格说明、源代码等;测试配置:测试计划、测试用例、测试程序等;155.3单元测试(UnitTesting)又称模块测试,需要从程序的内部结构出发设计测试用例。测试目的:发现模块内部可能存在的差错测试依据:详细设计说明书和源程序清单测试方法:白盒测试为主,黑盒测试为辅,多个模块并行进行。165.3.1测试重点17①模块接口测试在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目:调用本模块的输入参数是否正确;本模块调用子模块时,输入给子模块的参数是否正确;输出给标准函数的参数是否正确;全局量的定义和用法在各摸块中是否一致;与外部设备的输入输出是否正确。。。。18②局部数据结构测试测试项目:不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值变量名拼写错或书写错不一致的数据类型全局数据对模块的影响19③重要的执行通路测试测试用例要适当:关键20④错误处理测试着重测试以下可能发生的错误:出错的措述是否难以理解出错的描述是否能够对错误定位显示的错误与实际的错误是否相符对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起系统的干预等21⑤边界测试重点检查刚好等于、大于或小于边界值的数据;对运行时间有要求的模块,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。227.3.2代码审查人工测试源程序。参与者:程序的设计者、编写者、测试者没有直接参与系统开发,但有能力的程序员。方法:研究设计说明书,一起审查程序代码如何实现设计,从中发现问题。注意:通常代码审查和机器测试结合使用。235.3.3计算机测试单元测试通常在编码阶段进行。常用机器测试,即通过运行模块发现问题。两个重要概念:驱动程序(driver):相当于被测试模块的“主程序”,接收测试数据,把这些数据传送给被测试的模块,并且输出相关结果。存根程序(stub):代替被测试模块所调用的模块。不需要具有子模块所有功能,但不允许什么事情也不做。24单元测试的测试环境25正文加工系统功能结构图若要测试“编辑子系统”,需要上层“驱动模块”和下层“存根程序”265.4集成测试(IntegratedTesting)在单元测试之后,将模块组装成系统,为发现并排除模块在连接中可能出现的问题,而进行的测试。需要考虑:模块连接时穿越模块接口的数据是否会丢失;一个模块对另一个模块是否会产生不利的影响;各子功能组合起来,能否达到预期要求的父功能全局数据结构是否有问题;单个模块的误差累积起来,是否会放大至不能接受的程度。27集成测试的两种方式①非渐增式组装方式对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行的测试,从而得到要求的软件系统。②渐增式组装方式先对模块进行单元测试,然后将测试后的模块逐步组装成较大的系统;在组装的过程中边连接边测试,以发现连接过程中产生的问题;最后组装成为要求的软件系统。28渐增式组装方式的三种类型自顶向下的渐增方式自底向上结合的渐增方式混合渐增测试29自顶向下的渐增方式将模块按系统程序结构,沿控制层次自顶向下进行组装。不需要驱动模块,需要存根模块深度优先宽度优先30深度优先组装的例子31组装步骤1)对主模块进行测试,用存根模块代替下层模块;2)根据选定的结合策略,每次用一个实际模块代替一个桩模块;3)在结合进一个模块的同时进行测试;4)为保证加入的模块没有引进新的错误,可能需要进行回归测试32优点:能在早期验证主要的控制和判断点。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。缺点:可能遇到逻辑次序上的问题33自底向上的增殖方式从程序模块结构最底层的模块开始组装和测试。不再需要存根程序,需要驱动模块。组合策略:1.把低层模块组合成实现某个特定的软件子功能的族;2.用驱动程序协调测试数据的输入和输出;3.对由模块组成的子功能族进行测试;4.去掉驱动程序,没软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。34自底向下组合测试的例子35回归测试思考:采用“渐增式测试”时,测试中当新的模块结合进来之后,是否需要对程序进行再次测试?定义:指集成测试中,重新执行已经做过测试的某个子集,以保证上述这些变化没有带来非预期的副作用。先采取自顶向下的方式测试被修改的模块及其子模块;然后将这一部分视为子系统,再自底向上测试。36混合策略1)衍变的自顶向下的增殖测试先对输入/输出模块和引入新算法模块进行测试;再自底向上组装成为功能相当完整且相对独立的子系统;然后由主模块开始自顶向下进行增殖测试。372)自底向上一自顶向下的增殖测试先对含读操作的子系统自底向上直至根结点模块进行组装和测试;再对含写操作的子系统做自顶向下的组装与测试。385.5确认测试又称有效性测试。验证软件的功能、性能及其它特性是否与用户的要求一致。确认测试的基础:软件需求规格说明书确认测试的主要工作:有效性测试与软件配置审查主要参与人员:以用户为主39确认测试的步骤405.5.1确认测试范围通常采用黑盒测试,验证被测软件是否满足用户需求。测试计划:包括测试种类及进度安排;测试步骤:描述具体的测试用例测试目的:确定软件的特性是否与需求相符;所有的文档都是正确且便于使用;其它软件需求。测试结果:与预期的结果相符;与预期的结果不符:要提交一份问题报告。415.5.2软件配置复查目的:保证软件配置的所有成分都齐全;各方面的质量都符合要求;具有维护阶段所必需的细节;而且已经编排好分类的目录。应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。425.5.3α测试和β多测试适用:为多个用户开发的软件α测试:由用户在开发环境下进行的测试。主要评价软件产品的:FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)β测试:由最终用户在实际使用环境下进行的测试,这些用户定期返回有关错误信息给开发者。注意:只有当α测试达到一定的可靠程度时,才开始β测试。435.6自盒测试技术白盒测试执行的要求:对程序模块的所有独立的执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;445.6.1逻辑覆盖有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖1.语句覆盖含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。分析:执行路径sacbed测试用例:A=2,B=0,X=4覆盖sacbed语句覆盖特点:语句覆盖对程序的逻辑覆盖很少。语句覆盖是很弱的逻辑覆盖标准。2.判定覆盖(分支覆盖)含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。所有判定分支:(1)a点判定为T(2)a点判定为F(3)b点判定为T(4)b点判定为F2.判定覆盖(分支覆盖)测试用例:Ⅰ.满足(1)(4)A=3,B=0,X=3覆盖sacbdⅡ.满足(2)(3)A=2,B=1,X=1覆盖sabed2.判定覆盖(分支覆盖)或者Ⅰ.满足(1)(3)A=2,B=0,X=3覆盖sacbedⅡ.满足(2)(4)A=3,B=1,X=1覆盖sabd特点:比语句覆盖强,但对程序逻辑的覆盖程度仍不高。3.条件覆盖含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。所有条件:(1)A>1(2)A≤1(3)B=0(4)B≠0(5)A=2(6)A≠2(7)X>1(8)X≤13.条件覆盖测试用例:Ⅰ.满足(1)(3)(5)(7)A=2,B=0,X=4覆盖sacbedⅡ.满足(2)(4)(6)(8)A=1,B=1,X=1覆盖sabd3.条件覆盖或者Ⅰ.满足(1)(3)(5)(8)A=2,B=0,X=1覆盖sacbedⅡ.满足(2)(4)(6)(7)A=1,B=1,X=2覆盖sabed或者……条件覆盖特点:条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二组测试用例。判定覆盖不一定包含条件覆盖,条件
本文标题:软件制造_软件测试.
链接地址:https://www.777doc.com/doc-1990609 .html