书签 分享 收藏 举报 版权申诉 / 134
上传文档赚钱

类型软件工程第6章-测试课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3390045
  • 上传时间:2022-08-26
  • 格式:PPT
  • 页数:134
  • 大小:2.51MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《软件工程第6章-测试课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    软件工程 测试 课件
    资源描述:

    1、第第6章章 测试测试6.1 软件测试基础6.2 单元测试6.3 集成测试6.4 确认测试6.5 白盒测试技术6.6 黑盒测试技术软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。软件测试的工作量往往占软件开发总工作量的40%以上.仅就测试而言,它的目标是发现软件中的错误,但是,发现错误并不是最终目的。软件工程的根本目标是开发出高质量的完全符合用户需

    2、要的软件,因此,通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。软件可靠性模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。表面看来,软件测试的目的与软件工程所有其他阶段的目的都相反。软件工程的其他阶段都是“建设性”的:软件工程师力图从抽象的概念出发,逐步设计出具体的软件系统,直到用一种适当的程序设计语言写出可以执行的程序代码。但是,在测试阶段测试人员努力设计出一系列测试方案,目的却是为了“破坏”已经建造好的软件系统竭力证明程序中有错误不能按照预定要求正确工作。6.1 软件

    3、测试基础G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。(1)测试是发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。6.1.1 软件测试的目标从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。(1)所有测试都应该能追溯到用户需求。从用户的角度看,最严重的错误是导致程序不能

    4、满足用户需求的那些错误。应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。6.1.2 软件测试准则(2)应该远在测试开始之前就制定出测试计划。实际上,一旦完成了需求模型就可以着手制定测试计划,在建立了设计模型之后就可以立即开始设计详细的测试方案。因此,在编码之前就可以对所有测试工作进行计划和设计。(3)把Pareto原理应用到软件测试中。Pareto原理说明,测试发现的错误中的80%很可能是由程序中20%的模块造成的。当然,问题是怎样找出这些可疑的模块并彻底地测试它们。(4)应该从“小规

    5、模”测试开始,并逐步进行“大规模”测试。通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。(5)穷举测试是不可能的。所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试。即使是一个中等规模的程序,其执行路径的排列数也十分庞大,由于受时间、人力和资源的限制,在测试过程中不可能执行每个可能的路径。因此,测试只能证明程序中有错误,不能证明程序中没有错误。(6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作。测试任何产品都有两种方法:(1)黑盒测试。如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;(2)白盒测

    6、试。如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。6.1.3 测试方法对于软件测试而言,黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为功能测试。白盒测试法与黑盒测试法相反,它的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求

    7、正确工作。白盒测试又称为结构测试。根据第4条测试准则,测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成,因此,大型软件系统的测试过程基本上由下述几个步骤组成。6.1.4 测试步骤1.模块测试在设计得好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来测试,而且通常比较容易设计检验模块正确性的测试方案。模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细

    8、设计的错误。2.集成测试(子系统测试)子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此,这个步骤着重测试模块的接口。3.系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也符合预定要求。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。4.验收测试验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本

    9、类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试。验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。验收测试也称为确认测试。单元测试集中检测软件设计的最小单元模块。通常,单元测试和编码属于软件过程的同一个阶段。在编写出源程序代码并通过了编译程序的语法检查之后,就可以用详细设计描述作指南,对重要的执行通路进行测试,以便发现模块内部的错误。通常,单元测试主要使用白盒测试技术,而且对多个模块的测试可以并行地进行。6.2 单元测试单元测试,从下述5个方面对模块进行测试。1.模块接口首先应该对通过模块接口的数

    10、据流进行测试。在对模块接口进行测试时主要检查下述几个方面:参数的数目、次序、属性或单位系统与变元是否一致;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致。测试重点2.局部数据结构对于模块来说,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现局部数据说明、初始化、默认值等方面的错误。3.重要的执行通路由于通常不可能进行穷尽测试,因此,在单元测试期间选择最有代表性、最可能发现错误的执行通路进行测试就是十分关键的。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。4.出错处理通路好的设计应该能预见出现错误的条件,并且设置适当的处理错误

    11、的通路,以便在真的出现错误时执行相应的出错处理通路或干净地结束处理。不仅应该在程序中包含出错处理通路,而且应该认真测试这种通路。(1)对错误的描述是难以理解的;(2)记下的错误与实际遇到的错误不同;(3)在对错误进行处理之前,错误条件已经引起系统干预;(4)对错误的处理不正确;(5)描述错误信息不足以帮助确定造成错误位置。5.边界条件边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效,例如,处理n元数组的第n个元素时,或做到i次循环中的第i次重复时,往往会发生错误。使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结构、控制量和数据值的测试方案,非常可能发现软件中的错误

    12、。人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出30%70%的逻辑设计错误和编码错误。审查小组最好由下述4人组成:(1)组长,应该是一个很有能力的程序员,而且没有直接参与这项工程;(2)程序的设计者;(3)程序的编写者;(4)程序的测试者。6.2.2 代码审查集成测试是测试和组装软件的系统化技术,例如,子系统测试即是在把模块按照设计要求组装起来的同时进行测试,主要目标是发现与接口有关的问题(系统测试与此类似)。例如,数据穿过接口时可能丢失;一个模块对另一个模块可能由于疏忽而造成有害影响;把子功

    13、能组合起来可能不产生预期的主功能;个别看来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有问题等等。6.3 集成测试由模块组装成程序时有两种方法。(1)非渐增式测试方法。一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法;(2)渐增式测试方法。把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试。非渐增式测试一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试时会遇到许许多多的错误,改正错误更是极端困难,因为在庞大的程序

    14、中想要诊断定位一个错误是非常困难的。而且一旦改正一个错误之后,马上又会遇到新的错误,这个过程将继续下去。渐增式测试与“一步到位”的非渐增式测试相反,它把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;对接口可以进行更彻底的测试;可以使用系统化的测试方法。因此,目前在进行集成测试时普遍采用渐增式测试方法。当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。自顶向下集成方法是从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于(及最终附属于)主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。深度

    15、优先的结合方法先组装在软件结构的一条主控制通路上的所有模块。选择一条主控制通路取决于应用的特点,并且有很大任意性。宽度优先的结合方法是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。6.3.1 自顶向下集成 自顶向下结合模块结合进软件结构由下述4个步骤完成:(1)对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;(2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序(新结合进来的模块往往又需要新的存根程序);(3)在结合进一个模块的同时进行测试;(4)为了保证加入模块没有引进新的错误,可能需要进行回归测试(即,全部或部分地重复

    16、以前做过的测试)。从第二步开始不断地重复进行上述过程,直到构造起完整的软件结构为止。自顶向下的结合策略能够在测试的早期对主要的控制或关键的抉择进行检验。在一个分解得好的软件结构中,关键的抉择位于层次系统的较上层,因此首先碰到。如果主要控制确实有问题,早期认识到这类问题是很有好处的,可以及早想办法解决。如果选择深度优先的结合方法,可以在早期实现软件的一个完整的功能并且验证这个功能。早期证实软件的一个完整的功能,可以增强开发人员和用户双方的信心。自顶向下的方法遇到的问题如下:为了充分地测试软件系统的较高层次,需要在较低层次上的处理。然而在自顶向下测试的初期,存根程序代替了低层次的模块,在软件结构中

    17、没有重要的数据自下往上流。为了解决这个问题,测试人员有两种选择:第一,把许多测试推迟到用真实模块代替了存根程序以后再进行;第二,从层次系统的底部向上组装软件。自底向上测试从“原子”模块(即在软件结构最低层的模块)开始组装和测试,不需要存根程序。用下述步骤可以实现自底向上的结合策略:第一步,把低层模块组合成实现某个特定的软件子功能的族;第二步,写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出;第三步,对由模块组成的子功能族进行测试;第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。上述第二步到第四步实质上构成了一个循环。6.3.2 自底向上集成自底

    18、向上结合一般说来,一种方法的优点正好对应于另一种方法的缺点。自顶向下测试方法的主要优点是不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且能在早期发现上层模块的接口错误。自顶向下测试方法的主要缺点是需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。可以看出,自底向上测试方法的优缺点与上述自顶向下测试方法的优缺点刚好相反。6.3.3 不同集成测试策略的比较在测试实际的软件系统时,应该根据软件的特点以及工程进度安排,选用适当的测试策略。一般说来,纯粹自顶向下或纯粹自底向上的策略可能都不实用,人们在实践中创造出许多混合

    19、策略:(1)改进的自顶向下测试方法。基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。一般的自顶向下方法所具有的优点在这种方法中也都有,而且能在测试的早期发现关键模块中的错误;但是,它的缺点也比自顶向下方法多一条,即测试关键模块时需要驱动程序。(2)混合法。对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。这种方法兼有两种方法的优点和缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷方法。在集成测试过程中每当一个新模块结合进来时,程序就发生了变化:建立了新的数据流路径,可能出现了新的I/O操作,激活了新的控制逻辑

    20、。这些变化有可能使原来工作正常的功能出现问题。在集成测试的范畴中,所谓回归测试是指重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。6.3.4 回归测试每当改正软件错误的时候,软件配置的某些成分(程序、文档或数据)也被修改了。回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动。回归测试可以通过重新执行全部测试用例的一个子集人工地进行,也可以使用自动化的捕获回放工具自动进行。利用捕获回放工具,软件工程师能够捕获测试用例和实际运行结果,然后可以回放(即重新执行测试用例),并且比较软件变化前后所得到的运行结果。回归测试集(已执行过

    21、的测试用例的子集)包括下述3类不同的测试用例:(1)检测软件全部功能的代表性测试用例;(2)专门针对可能受修改影响的软件功能的附加测试;(3)针对被修改过的软件成分的测试。在集成测试过程中,回归测试用例的数量可能变得非常大。因此,应该把回归测试集设计成只包括可以检测程序每个主要功能中的一类或多类错误的那样一些测试用例。一旦修改了软件之后就重新执行检测程序每个功能的全部测试用例,是低效而且不切实际的。确认测试也称为验收测试,它的目标是验证软件的有效性。l确认(validation),确认指的是为了保证软件确实满足了用户需求而进行的一系列活动。l验证(verification),是保证软件正确地实

    22、现了某个特定要求的一系列活动。6.4 确认测试Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。Beta测试由软件的最终用户们在一个或多个客户场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户记录在Beta测试过程中遇到的一切问题(真实的或想像的),并且定期把这些问题报告给开发者。接收到在Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。Alph

    23、a和Beta测试设计测试方案是测试阶段的关键技术问题。所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。其中最困难的问题是设计测试用的输入数据。不同的测试数据发现程序错误的能力差别很大,为了提高测试效率降低测试成本,应该选用高效的测试数据。因为不可能进行穷尽的测试,选用少量“最有效的”测试数据,做到尽可能完备的测试就更重要了。6.6 白盒测试技术 控制流图是白盒测试的主要依据。对于一个程序,其程序控制流图G=(V,E,I,O)是一个有向图,其中V是结点的集合,E是边的集合,I是唯一的源结点(入口结点),而

    24、O是唯一的汇结点(出口结点)。结点表示语句,以标有编号的圆圈表示。边表示语句间可能的控制流向 I,O相应于程序的开始语句和结束语句。三角形问题类C语言实现/*PROGRAM TRIANGLE*/mian()1int a,b,c;2boolean IsTraingle3sacnf(“Enter 3 integer which is sides of a triangle.%d%d%d”,a,b,c);4printf(“Side a is%d”,a);5printf(“Side b is%d”,b);6printf(“Side c is%d”,c);7if(ab+c)AND(ba+c)AND(ca

    25、+b)8 then IsTraingle=True;9 else IsTraingle=False;10 if(IsTraingle)11then if (a=b)AND(b=c)12then printf(“Equilateral”)13else if(a!=b)AND(a!=c)AND(b!=c)14then printf(“Scalene”)15else printf(“Isosceles”)16else printf(“Not a Triangle”)结点3到7是一个序列,结点7到10是一个if-then-else结构,结点11到16是一个嵌套的if-then-else结构。结点3和1

    26、6是程序源结点和汇结点,对应于单入口、单出口准则。该程序没有循环,因此控制流图是一个有向非循环图。例:例:P=3P=16是一条程序路经。是一条程序路经。逻辑覆盖是一种使用最广泛的结构测试方法。逻辑覆盖以程序内部的逻辑结构为基础设计测试用例,要求对被测程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。由于覆盖测试的目标不同,逻辑覆盖分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖及路径覆盖。下面的一小段程序来讨论。if(age25)AND(sex=M)then commission=commission+150;end if if(age=50 OR(commission 2000.0

    27、)then commission=commission-200;endifendif 3 3个变量为:年龄个变量为:年龄age、性别、性别sex、佣金佣金commission a、b、c、d和e为控制流上程序点。语句覆盖要求设计若干个测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。这里所谓“若干”,自然是越少越好。Test 1:age=50,sex=M,comm=2500作为测试用例,则程序按路径ace执行。这样该程序段的4个语句都得到执行,从而作到了语句覆盖。语句覆盖 从程序中每个语句都得从程序中每个语句都得到执行这一点来看,语到执行这一点来看,语句覆盖的方法似乎能够句覆盖的

    28、方法似乎能够比较全面地检验被测比较全面地检验被测程序的每一个语句。程序的每一个语句。但语句覆盖是很弱的逻但语句覆盖是很弱的逻辑覆盖准则。辑覆盖准则。假如这一程序段中两个判假如这一程序段中两个判断的逻辑运算有问题,断的逻辑运算有问题,例如,第一个判断的运算例如,第一个判断的运算符符“”错成运算符错成运算符“”或是第二或是第二个判断个判断中的运算符中的运算符“”错成了运错成了运算符算符“”仍使用上述前一个测试用仍使用上述前一个测试用例例Test 1,程序仍将按路径,程序仍将按路径ace执行,执行,但不能发现判断中逻辑运但不能发现判断中逻辑运算的错误。算的错误。判定覆盖要求设计若判定覆盖要求设计若干

    29、测试用例,运行被干测试用例,运行被测程序,使得程序中测程序,使得程序中每个判断的取真分支每个判断的取真分支和取假分支至少执行和取假分支至少执行一次,即判断的真假一次,即判断的真假值均要被检测。值均要被检测。判定覆盖又称为分支判定覆盖又称为分支覆盖。覆盖。若选用两组测试用例:若选用两组测试用例:Test 1:age=50,sex=M,comm.=2500 Test3:age=20,sex=M,comm.=1500 则分别执行路径则分别执行路径ace和和abd,从而使两个判断的从而使两个判断的4个分支个分支c,e和和b,d分别得到检测。分别得到检测。若选用另外两组测试用例:若选用另外两组测试用例:

    30、Test4age=40,sex=M,comm.=1500Test5 age=50,sex=F,comm.=1900 则分别路径则分别路径acd及及abe,同样也可覆盖同样也可覆盖4个分支个分支.上述两组测试用例上述两组测试用例不仅满足判定覆盖,同不仅满足判定覆盖,同时还满足语句覆盖。时还满足语句覆盖。判定覆盖比语句覆盖判定覆盖比语句覆盖更强一些。更强一些。如果在此程序段中如果在此程序段中第第2 2个判断条件个判断条件comm2000comm2000错错写成写成comm2000comm25 取真值,记为取真值,记为T1age25 取假值,即取假值,即age25,记为,记为sex=M 取真值,记为

    31、取真值,记为T2:sex=M 取假值,即取假值,即sex=F,记为,记为第第2个判断应考虑到;个判断应考虑到;Age=50 取真值,记为取真值,记为T3Age=50 取假值,即取假值,即age2000 取真值,记为取真值,记为T4 comm.2000 取假值取假值,记为记为 4T1T2T3T(age25)(sex=M)(age=50)(com m 2000.0)com m=com m+150com m=com m-200aTFTFcbed图 5-2 被 测 程 序 段 流 程 图(age25)(sex=M)(age=50)(com m 2000.0)com m=com m+150com m=c

    32、om m-200aTFTFcbed(age25)(sex=M)(age=50)(com m 2000.0)com m=com m+150com m=com m-200aTFTFcbed图 5-2 被 测 程 序 段 流 程 图 3 3个测试用例覆个测试用例覆盖了盖了4 4个条件的个条件的8 8种情况。种情况。覆盖了两个判覆盖了两个判断的断的4个分支个分支b、c、d和和c。测试用例 age sex comm 所走路径 覆盖条件 Test1 Test3 Test550 M 2500.0 20 M 1500.0 50 F 1900.0 a c e a b d a b e T1 T2 T3 T4 1T

    33、 T2 3T 4T T1 2T T3 4T 测试用例 age sex comm 所走路径 覆盖分支 覆盖条件 Test6Test7 20 M 2100.0 50 F 1500.0 a b e a b e be be 1T T2 3T T4 T1 2T T3 4T 判定判定/条件覆盖要求设计足条件覆盖要求设计足够的测试用例,执行被测程够的测试用例,执行被测程序,使得判断中每个条件的序,使得判断中每个条件的所有可能取值至少被执行一所有可能取值至少被执行一次,同时每个判断的所有可能次,同时每个判断的所有可能判断结果也至少被执行一次。判断结果也至少被执行一次。两个判断各包含两个条件,两个判断各包含两个

    34、条件,这这4 4个条件在两个判断中可能有个条件在两个判断中可能有8 8种组合,它们是:种组合,它们是:1 1)age25,sex=Mage25,sex=M,记为,记为T1T1,T2T22)age25,sex=F2)age25,sex=F,记为,记为T1T1,3)age3)age25,sex=M25,sex=M,记为,记为 ,T2,T24)age4)age25,sex=F25,sex=F,记为,记为 ,5 5)ageage 50,comm2000.050,comm2000.0,记为,记为T3T3,T4T46)age 6)age 50,comm 50,comm2000.02000.0记为记为T3,

    35、T3,7)age2000.0,7)age2000.0,记为记为 ,T4T48)age50,comm2000.0,8)age=2,对于P-use的程序图出度=2 4)C-use 当且仅当USE(v,n)是计算使用,对于C-use的程序图入度=1 5)定义使用路径 关于变量v的定义使用路径(记做du-path),存在定义和使用结点DEF(v,m)和USE(v,n),使得m和n是该路径的开始结点和结束结点。6)清除路径 当定义结点和清除结点中间没有其他的定义结点的时候为清除路径。5647328191结点被定义的变量被引用的变量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9Z

    36、V10Z 语句2使用变量W,在此之前并未对其进行定义(赋值)。语句5,6使用了变量V,但在第一次执行循环时也未对其定义过。语句6对变量Z的定义从未被使用过。语句8对变量W的定义从未被使用过。首先,介绍程序片的一个重要概念S(V,n)。S(V,n)表示结点n之前的所有对V中的变量值做出贡献的所有语句片段的总和。很明显的,做出贡献的一定有USE(v,n),但是要注意的是这里的使用路径包括直接和间接的。举个例子说明。比如说在结点n有个变量a=a+b+c,那么很明显,影响a的值包括a、b、c,将在结点n前影响到值a,b,c三个变量的所有结点都算进去,直到出现一个常量语句,例如b=30,那么说明没有什么

    37、再影响b了。在程序的特定部位插入记录动态特性的语句,最终是为了把程序执行过程中发生的一些重要的历史事件记录下来。例如,记录在程序执行过程中某些变量值的变化情况,变化的范围等。这些插入的语句常常被称为“探测器”或者“探测点”程序插桩需要从插桩位置、插桩策略、插桩过程 1)程序的开始,即程序块的第1个可执行语句之前2)转移指令之前 for,do,do-while,do until 等循环语句处。if,else if,else及end if等条件语句各分支处。输入/输出语句之后。函数、过程、子程序调用语句之后。3)标号之前。4)程序的出口 return语句之后 call语句之后 插桩策略主要解决的如

    38、何在程序中植入探针,包括植入的位置和方法。块探针 分支探针。黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,它是与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型的错误。黑盒测试力图发现下述类型的错误:功能不正确或遗漏了功能;界面错误;数据结构错误或外部数据库访问错误;性能错误;初始化和终止错误。7.7 黑盒测试技术白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于测试过程的后期。设计黑盒测试方案时,应该考虑下述问题:(1)怎样测试功能的有效性?(2)哪些类型的输入可构成好测试用例?(3)系统是否对特定的输入值特别敏感?(4)怎样划定数据类的边界?(5)系统能够承受什么样

    39、的数据率和数据量?(6)数据特定组合将对系统运行产生什么影响?黑盒测试技术设计的满足下述标准的测试用例集:(1)所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数;(2)所设计出的测试用例能够告诉我们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的错误是否存在。等价类划分测试 等价类划分是一种典型的黑盒测试方法,根据对软件的要求和说明,即需求规格说明书,把程序输入域划分成若干部分,然后从每个部分中选取少数代表性数据为作测试输入。等价类划分把程序的输入域划分成若干个互不相交的子集等价类。等价类的交集为空,等价类的并集是整个输入域。等价类划分 等价类由等价关系决定,特点如下

    40、:如果用等价类中的一个元素作为测试数据进行测试不能发现程序中的故障,那么使用集合中的其它元素进行测试也不可能发现程序故障。对揭露故障来说,等价类中的每个元素是等效的。有效等价类:有效等价类是指对程序规格说明,是有意义的,合理的输人数据所构成的集合。利用有效等价类,可以检验程序是否实现了规格说明预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。在考虑等价类时,应注意区别有效等价类和无效等价类。在考虑等价类时,应注意区别有效等价类和无效等价类。无效等价类是指对程序规格说明,是不合理或无意义的输入数据所构成的集合。利用无效等价类,可以检查程序功能和性能的实现是 否有不符合规格说

    41、明要求的地方。对于具体的问题,无效等价类至少应有一个,也可能有多个。根据已列出的等价类表,按以下步骤确定测试用例:1)为每个等价类规定一个唯一的编号。2)设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到测试用例覆盖了所有的有效等价类。3)设计一个新的测试用例,使其覆盖并且只覆盖一个还没有被覆盖的无效等价类。重复这一步,直至测试用例覆盖了所有的无效等价类。等价类划分等价类划分x1有效等价类有效等价类a,b,(,(b,c),),c,dx2有效等价类有效等价类e,f),f,g x1无效等价类无效等价类 x1dx2无效等价类无效等价类 x2gabcdefgx1x2 常见的等

    42、价类测试形式常见的等价类测试形式1.三角形问题的等价类测试用例(1)传统等价类划分测试用例设计 在三角形问题中,输入条件要求:等价类划分测试举例等价类划分测试举例l整数;整数;l三个数;三个数;l取值在取值在1到到100之间之间1 输入三个整数有效等价类号码无效等价类号码整数1一边为非整数二边为非整数三边均为非整数456三个数2只有一条边只有二条边多余三条边7893一边为零二边为零三边为零101112一边 零二边 零三边 100二边 100三边 100161718100110011001cba a b c覆盖的等价类a b c覆盖的等价类1.5,4,540,0,0123.5,2.5,55-3,

    43、4,6132.5,4.5,5.562,-7,-51437-3,-5,-7154,58101,4,8162,3,4,593,101,101173,0,810101,101,101180,6,011 三角形问题有四种可能输出:非三角形,一般三角形,等腰三角形和等边三角形。R1=:边为:边为a,b,c的等边三角形的等边三角形R2=:边为:边为a,b,c的等腰三角形的等腰三角形R3=:边为:边为a,b,c的一般三角形的一般三角形R4=:边:边a,b,c不能形成三角形不能形成三角形四个标准等价类测试用例是:测试用例 a b c 预期输出Test1Test2Test3Test4523452415352等边

    44、三角形等腰三角形一般三角形非三角形 考虑a a,b b,c c的无效值产生了下面7 7个健壮等价类测试用例,用于一般三角形的判断 三角形问题的7 7个健壮等价类测试用例 测试用例 a b c 预期输出Test1Test2Test3Test4Test5Test6Test73-1551015545-1551015555-155101一般三角形a 值不在允许的范围内b 值不在允许的范围内c 值不在允许的范围内a 值不在允许的范围内b 值不在允许的范围内c值不在允许的范围内NextDate 函数的等价类测试用例设计 NextDate是三个变量month,day,year的函数。l有效等价类:M1=mo

    45、nth:1month12 D1=day:1day31 Y1=year:1912year2050l无效等价类:M2=month:month12D2=day:day31Y2=year:year2050 只有一个标准等价类测试用例:Case ID Month Day Year Expected OutputTest1 8 16 1964 8/17/1964健壮等价类测试用例:测试用例 Month Day Year 预期输出Test1Test2Test3Test4Test5Test6Test78-1138888161616-13216161964年8月17日month 不在 1.12中month 不在

    46、 1.12中day不在1.31中day不在1.31中year不在1912.2050 year不在1912.20501964196419641964196419112051M1=month:month has 30 daysM2=month:month has 31 days M3=month:month is FebruaryD1=day:1day28D2=day:day=29D3=day:day=30D4=day:day=31Y1=year:year=2000Y2=year:year is a leap yearY3=year:year is a common year标准等价类测试用例:机

    47、械地选择输入值而不考虑定义域,机械地选择输入值而不考虑定义域,因此没有考虑不可能出现的日期。因此没有考虑不可能出现的日期。测试用例 Month Day Year 预期输出Test1Test2Test3Test445241529303120001996200220004/16/20005/30/19962/31/2002(不可能的日期)5/1/2000(不可能的输入日期)测试用例测试用例 Month Day Year 预期输出预期输出Test1Test2Test3Test4Test5Test6Test7Test8Test9Test104524-1134526152930311529-132303

    48、120001996200220001996200220001996191120514/16/20005/30/19962/31/2002(不可能的日期)5/1/2000(不可能的输入日期)Month不在有效值域1.12中Month不在有效值域1.12中Day不在有效值域1.31中Day不在有效值域1.31中Year不在有效值域1912.2050中Year不在有效值域1912.2050中案例2:测试用户登录对话框的功能测试场景:测试场景:在各种输入条件下,测试程序的登录对话框功能用户名和密码的规则如下:用户名和密码的规则如下:用户名长度为6至10位 用户名由字符(a-z、A-Z)和数字(0-9)

    49、组成 不能为空、空格和特殊字符 密码规则同用户名规则操作步骤预期结果输入正确的用户名和口令(均为6位),点击OK按钮进入系统输入正确的用户名和口令(均为10位),点击OK按钮进入系统输入正确的用户名和口令(均为6至8位之间),进入系统用户名为空,提示输入用户名不能进入系统用户名为空格,提示无效用户名不能进入系统用户名小于6位,提示用户名太短不能进入系统“用户名”“口令”“预期结果”说明“user10”“pass10”进入系统正确的用户名和口令(6位)“user789”“pass789”进入系统正确的用户名和口令(7-9位)“user000010”“pass000010”进入系统正确的用户名和口

    50、令(10位)“”“pass”提示输入用户名不能进入系统用户名为空“空格”“pass”提示无效用户名不能进入系统用户名为空格“u”“userpass”提示用户名太短不能进入系统用户名小于6位“user0000011”“userpass”提示用户名太长不能进入系统用户名大于10位等价类测试的指导方针 如果执行语言是强类型的,则没有必要使用健壮等价类测试。如果错误输入检查非常重要,进行健壮等价类测试。如果输入数据以离散值区间或集合的形式定义,则等价类测试是合适的。在发现“合适”的等价关系之前,可能需要进行多次尝试。边界值分析 大量的故大量的故障发生在输入或输出范围的边界上,而障发生在输入或输出范围的

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:软件工程第6章-测试课件.ppt
    链接地址:https://www.163wenku.com/p-3390045.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库