欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    软件工程第六章 测试ppt课件.ppt

    • 资源ID:1444600       资源大小:1.14MB        全文页数:96页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程第六章 测试ppt课件.ppt

    软 件 工 程,第六章 测试,通常把编码和测试统称为实现。所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。所选用的程序设计语言的特点及编码风格将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。,无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。在软件生命周期的每个阶段都不可避免地会产生差错。在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错.经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。,Error: 人的错误Fault: 人错误的结果,体现在开发和维护的产品中 Failure: (系统故障)错误(fault)(内在)、故障(failure)(外在),人的错误如何产生故障,测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。,软件测试在软件生命周期中横跨两个阶段。编码和测试阶段在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。,大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。,通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。软件可靠性模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。,1、定义:测试是为了发现程序中的错误而执行程序的过程。注意: 只能尽可能查错,不能证明程序中 没有错; 测试员与程序员不应是同一个人。,测 试基础,G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。(1) 测试是为了发现程序中的错误而执行程序的过程;(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3) 成功的测试是发现了至今为止尚未发现的错误的测试。,软件测试的目标,由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。,为了能设计出有效的测试方案,软件工程师必须深入理解并正确运用指导软件测试的基本准则。下面讲述主要的测试准则。(1) 所有测试都应该能追溯到用户需求。软件测试的目标是发现错误。从用户的角度看,最严重的错误是导致程序不能满足用户需求的那些错误。,软件测试准则,(2) 应该远在测试开始之前就制定出测试计划。实际上,一旦完成了需求模型就可以着手制定测试计划,在建立了设计模型之后就可以立即开始设计详细的测试方案。因此,在编码之前就可以对所有测试工作进行计划和设计。(3) 把Pareto原理应用到软件测试中。Pareto原理说明,测试发现的错误中的80%很可能是由程序中20%的模块造成的。当然,问题是怎样找出这些可疑的模块并彻底地测试它们。,(4) 应该从“小规模”测试开始,并逐步进行“大规模”测试。通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。(5) 穷举测试是不可能的。所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试。测试只能证明程序中有错误,不能证明程序中没有错误。但是,精心地设计测试方案,有可能充分覆盖程序逻辑并使程序达到所要求的可靠性。,(6) 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。所谓“最佳效果”是指有最大可能性发现错误的测试。开发软件的软件工程师并不是完成全部测试工作的最佳人选(通常他们主要承担模块测试工作)。, 黑盒测试(black-box , or closed-box testing): 确信对每个输入,观察到输出与期望的输入出是否匹配. 对功能测试,2、测试方法, 白盒测试(white-box , or open-box, clear-box testing): 利用程序的结构进行测试. 结构测试,若程序执行需10-3秒,则对于所有合法输入的测试大约需用一万年,而且还应测试输入非法数据的情况。,主要问题:穷尽测试(complete test)通常是不可能的。例:(Black-box) 程序要求输入3个整型数据。若字长16位,则各种可能输入的排列组合共有 (种),例:(White-box) 下图所示的程序中共有 5201014条可能的执行通路,显然,每条通路都执行一遍是不现实的。,1. 基本概念,3、测试步骤:,测试阶段的信息流:,单元测试(白盒),主要测试以下五个方面:1、模块接口: 内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改,等等。 外部检查:打开、结束、关闭文件的操作;文件和属性;IO错误处理;输出拼写,等等。2、局部数据结构: 数据说明(declaration);初始化与缺省值的设置;变量名拼写;数据类型的相容性;上下溢出及地址异常,等等。,3.单元测试,3、重要的执行通路: 由于穷尽测试不可能,故通常针对最常见的错误设计测试方案。较常见的错误有:计算次序问题(例:运算的优先级)不同类型混合运算(例:比较类型不同的量)初值设置错误精度问题(例:精度不够导致两变量不可能相等,而程序中等待相等条件的出现)表达式错误循环终止条件错误(例:次数差1,或陷入死循环),4、出错处理通路:预见出现错误的条件,设置处理。较常见的问题有: 输出的错误信息难以理解,不能确定错误位置 描述的错误与实际错误不符 处理之前系统已经干预 处理不正确,3.单元测试,5、边界条件 单元测试中最后,也可能是最重要的任务,因为软件常在其边界失效。,1、代码审查(code inspection) 代码会审 以小组会的方式进行,会审小组一般由3-4人组成,包括组长1人,程序作者1人,其他程序员(或测试人员)1-2人。 作者讲解程序,其他人员,捕捉程序结构、功能与编码风格等方面存在问题,发现的错误会后交由作者修改。 预排:由人扮演computer,模拟执行情况。,3.单元测试,优点: 一次审查可发现多个错误,不必改一个测一个。,单元测试的主要手段 :,模块不是独立的程序,不易单独测试,为了解决这个问题,可以在单元测试时为被测试模块编一些测试模块,作为它上级模块或下级模块的替身。代替上级模块的称为驱动模块,代替下级模块的称为桩模块。,2、制做测试软件:Stub (存根,桩)和 Driver(驱动),2.单元测试,替身模块是真实模块的简化,只需要模拟与被测模块直接有关的一部分功能,测试结束完后完成历史使命。满足被测模块需要的前提下,驱动模块和桩模块的内容应尽量简单。,模块不是独立的程序,不易单独测试,为了解决这个问题,可以在单元测试时为被测试模块编一些测试模块,作为它上级模块或下级模块的替身。代替上级模块的称为驱动模块,代替下级模块的称为桩模块。,2.单元测试,替身模块是真实模块的简化,只需要模拟与被测模块直接有关的一部分功能,测试结束完后完成历史使命。满足被测模块需要的前提下,驱动模块和桩模块的内容应尽量简单。,2、计算机测试,制做测试软件:Stub (存根,桩)和 Driver(驱动),软件的编写,属额外开支。模块高内聚可简化这一过程。,2.单元测试,模块通过单元测试后,要组装为程序,在组装中进行的测试,就称为集成测试。 即使所有模块通过了单元测试,组装中仍不免出现新问题,根源在于模块接口和全局数据协调不好。例如:数据会在穿过接口时丢失;一个模块可能会对另一模块造成有害的影响;把子功能组合起来可能不产生所要求的主功能;有些单独看来可以允许的误差,组装后可能达到不能容忍的地方。,集成测试 (Integration Testing),又称为综合测试,1、非渐增式测试,先测试每个模块,再把模块组合程序,1、非渐增式测试 2、渐增式测试,4.集成测试,渐增式:从一个模块开始,测一次添一个新模块,滚雪球一样越滚越大,直到把所有模块组装完毕。,2、渐增式测试,4.集成测试,4.集成测试,两种方式的比较: 渐增式测试可以较早发现模块间的接口错误;非渐增式测试最后才组装,因此错误发现得晚。 非渐增式测试中发现错误后难以诊断定位;渐增式测试中,出现的错误往往跟最新加入的模块有关。渐增式测试在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底。渐增式测试较非渐增式测试费时。非渐增式测试可以同时并行测试所有模块,能充分利用人力。, 自顶向下测试第1步:测试顶端模块,用桩程序(stub)代替直接附属的下层模块,4.集成测试,3、渐增式测试 的几种策略,第2步:根据深度优先或宽度优先的策略,每次用一个实际模块代换一个stub。,3.集成测试,第3步:在结合进一个模块的同时进行测试。,M,第4步:回归测试(regression testing)全部或部分地重复以前做过的测试。, 由底向上测试第1步:把低层模块组合成族,每族实现一个子功能。第2步:用驱动程序(Driver)协调测试数据的IO,测试子功能族。,3.集成测试,优点:在早期即对主要控制及关键的抉择进行检验。问题:Stub只是对低层模块的模拟,测试时没有重要的数据自下往上流,许多重要的测试须推迟进行,而且在早期不能充分展开人力。,第3步:去掉Driver,自下而上把子功能族合成更大的子功能族。,M,M,M,3.集成测试,注意:两种策略的优、缺点刚好互补,但单用其中任一种都不实际,通常根据软件的特点将二者混用。, 混合策略,3.集成测试,Target layer,Top-down,Bottom-up,5.确认测试(Acceptance testing),任务:验收软件的有效性(功能和性能达标)。手段:黑盒测试;用户参与;主要用实际数据进行测试。内容:按合同规定审查软件配置; 设计测试计划,使通过测试保证软件能满足所有功能、性能要求; 文档与程序一致,具有维护阶段所必须的细节; 严格按用户手册操作,以检查手册的完整性和正确性。,确认测试也称为验收测试,确认测试必须有用户积极参与,或者以用户为主进行。用户应该参与设计测试方案,使用用户界面输入测试数据并且分析评价测试的输出结果。为了使得用户能够积极主动地参与确认测试,特别是为了使用户能有效地使用这个系统,通常在验收之前由开发单位对用户进行培训。,确认测试的范围,应该仔细设计测试计划和测试过程,测试计划包括要进行的测试的种类及进度安排,测试过程规定了用来检测软件是否与需求一致的测试方案。通过测试和调试要保证软件能满足所有功能要求,能达到每个性能要求,文档资料是准确而完整的,此外,还应该保证软件能满足其他预定的要求(例如,安全性、可移植性、兼容性和可维护性等)。,确认测试有下述两种可能的结果:(1) 功能和性能与用户要求一致,软件是可以接受的;(2) 功能和性能与用户要求有差距。在这个阶段发现的问题往往和需求分析阶段的差错有关,涉及的面通常比较广,因此解决起来也比较困难。为了制定解决确认测试过程中发现的软件缺陷或错误的策略,通常需要和用户充分协商。,确认测试的一个重要内容是复查软件配置。保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。在确认测试过程中还应该严格遵循用户指南及其他操作程序,以便检验这些使用手册的完整性和正确性。必须仔细记录发现的遗漏或错误,并且适当地补充和改正。,软件配置复查,如果软件是专为某个客户开发的,可以进行一系列验收测试,以便用户确认所有需求都得到满足了。验收测试是由最终用户而不是系统的开发者进行的。事实上,验收测试可以持续几个星期甚至几个月,因此能够发现随着时间流逝可能会降低系统质量的累积错误。,Alpha和Beta测试,如果一个软件是为许多客户开发的(例如,向大众公开出售的盒装软件产品),那么,让每个客户都进行正式的验收测试是不现实的。在这种情况下,绝大多数软件开发商都使用被称为Alpha测试和Beta测试的过程,来发现那些看起来只有最终用户才能发现的错误。,Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。,Beta测试由软件的最终用户们在一个或多个客户场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户记录在Beta测试过程中遇到的一切问题(真实的或想像的),并且定期把这些问题报告给开发者。接收到在Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。,白盒测试技术,主要技术:1、逻辑覆盖(Logical coverage) 适用于白盒测试 覆盖程度由弱到强顺次为: 语句覆盖(Statement coverage):每个语句至少执行一次。,任务:预定要测试的功能 设计输入的测试数据(test cases) 列出预期结果(expected output),设计测试方案,白盒测试技术,例:P.153 图7.5,问题:若AND错写为OR,或X1错写为X1,则错误无法由上例测出。,Test case : A=2 , B=0 , X=4.,6 白盒测试技术,判定覆盖(Branch coverage):在的基础上,每个判定的每个分支至少执行一次。,Test cases:A=3 , B=0 , X=3A=2 , B=1 , X=1,问题:若X1错写为X1,仍然无法被测出。,6 白盒测试技术, 条件覆盖(Condition coverage):在的基础上,使每个判定表达式的每个条件都取到各种可能的结果。,Test cases:A=2 , B=0 , X=4(满足A1, B=0; A=2, X1)A=1, B=1, X=1(满足A1, B0; A 2, X1),问:条件覆盖 ? 判定覆盖,答: 不一定。 反例: A=2, B=0, X=1 ( 满足A1, B=0; A=2, X 1) A=1, B=1, X=2 (满足A1, B0; A 2, X 1),满足条件覆盖 不满足判定覆盖,6.白盒测试技术,判定/条件覆盖:即判定覆盖条件覆盖,判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖,判定/条件覆盖的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也取到各种可能的结果。,Test cases:A=2 , B=0 , X=4(满足A1, B=0; A=2, X1)A=1, B=1, X=1(满足A1, B0; A 2, X1),判定/条件覆盖不比条件覆盖更强,6.白盒测试技术, 条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次。,全部可能的条件组合为: A1, B=0 A1, B 0 A1, B=0 A1, B 0 A=2, X1 A=2, X 1 A 2, X1 A 2,X 1,Test cases:(1) A=2, B=0, X=4 (T T) (2) A=2. B=1, X=1 (F T) (3) A=1, B=0, X=2 (F T) (4) A=1, B=1, X=1 (F F) ,问题:没有测试到(T F)的情形,有路径没走到,6.白盒测试技术,还可考虑下述覆盖: 点覆盖, 边覆盖,= 语句覆盖, 路径覆盖(Path coverage): 每条可能的路径都至少执行一次,若图中有环,则每个环至少经过一次。,=判定覆盖,Test cases: A=1 , B=1 , X=1 A=1 , B=1 , X=2 A=3 , B=0 , X=1 A=2 , B=0 , X=4, 路径覆盖 条件组合覆盖,1,4,5,6,7,2,3,1-2-3,1-2-6-7,1-4-5-3,1-4-5-6- 7,6.白盒测试技术,1. 基本路径测试基本路径测试是Tom McCabe提出的一种白盒测试技术。用该程序的环形复杂度定义执行路径的基本集合,导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。步骤如下:第一步,根据过程设计结果画出相应的流图。,控制结构测试,例如,用PDL描述的求平均值过程,PROCEDURE average;/* 这个过程计算不超过100个在规定值域内的有效数字的平均值;同时计算有效数字的总和及个数。*/ INTERFACE RETURNS average, total.input, total.valid; INTERFACE ACCEPTS value, minimum, maximum; TYPE value1100 IS SCALAR ARRAY; TYPE average, total.input, total.valid; minimum,maximum, sum IS SCALAR; TYPE i IS INTEGER;1: i=1;total.input=total.valid=0;sum=0;,2:DO WHILE valuei -9993: AND total.input=minimum6: AND valuei011:THEN average=sum/total.valid;12:ELSE average=-999;13:ENDIF END average,求平均值过程的流图,第二步,计算流图的环形复杂度。可以用第6.5.1小节讲述的3种方法之一计算环形复杂度。图7.6所示流图的环形复杂度为6。第三步,确定线性独立路径的基本集合。用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。程序的环形复杂度决定了程序中独立路径的数量,而且这个数是确保程序中所有语句至少被执行一次所需的测试数量的上界。对于求平均值过程来说,由于环形复杂度为6,因此共有6条独立路径。,路径3:1-2-3- 10-11-13,路径2:1-2-10-12-13,路径1:1-2-10-11-13,路径4:1-2-3-4-5-8-9-2-,路径5:1-2-3-4-5-6-8-9-2-,路径6:1-2-3-4-5-6-7-8-9-2-,识别出判定结点。本例中结点2、3、5、6和10是判定结点。,第四步,设计可强制执行基本集合中每条路径的测试用例。应该选取测试数据使得在测试每条路径时都适当地设置好了各个判定结点的条件。在测试过程中,执行每个测试用例并把实际输出结果与预期结果相比较。一旦执行完所有测试用例,就可以确保程序中所有语句都至少被执行了一次,而且每个条件都分别取过true值和false值。,应该注意,某些独立路径不能以独立的方式测试,也就是说,程序的正常流程不能形成独立执行该路径所需要的数据组合。在这种情况下,这些路径必须作为另一个路径的一部分来测试,如路径1 、路径3。2. 条件测试尽管基本路径测试技术简单而且高效,但是仅有这种技术还不够,还需要使用其他控制结构测试技术,才能进一步提高白盒测试的质量。,用条件测试技术设计出的测试用例,能够检查程序模块中包含的逻辑条件。一个简单条件是一个布尔变量或一个关系表达式,可以加上NOT算符。关系表达式的形式如下:E1E2其中,E1和E2是算术表达式,而是下列算符之一:“”或“”。复合条件由两个或多个简单条件、布尔算符和括弧组成。布尔算符有OR(“|”),AND(“&”)和NOT。不包含关系表达式的条件称为布尔表达式。,因此,条件成分的类型包括布尔算符、布尔变量、布尔括弧(括住简单条件或复合条件)、关系算符及算术表达式。如果条件不正确,则至少条件的一个成分不正确。因此,条件错误的类型如下:布尔算符错(布尔算符不正确,遗漏布尔算符或有多余的布尔算符)布尔变量错布尔括弧错关系算符错算术表达式错,条件测试方法着重测试程序中的每个条件。有两个优点: 容易度量条件的测试覆盖率; 程序内条件的测试覆盖率可指导附加测试的设计。条件测试的目的不仅是检测程序条件中的错误,而且是检测程序中的其他错误。如果一个测试策略对检测条件错误是有效的,则很可能该策略对检测程序的其他错误也是有效的。,分支测试可能是最简单的条件测试策略:对于复合条件C来说,C的真分支和假分支以及C中的每个简单条件,都应该至少执行一次。域测试要求对一个关系表达式执行3个或4个测试。对于形式为E1E2的关系表达式来说,需要3个测试分别使E1的值大于、等于或小于E2的值。,如果错误而E1和E2正确,则这3个测试能够发现关系算符的错误。为了发现E1和E2中的错误,让E1值大于或小于E2值的测试数据应该使这两个值之间的差别尽可能小(边界)。包含n个变量的布尔表达式需要2n个(每个变量分别取真或假这两个可能值的组合数)测试。这个策略可以发现布尔算符、变量和括弧的错误,但是,该策略仅在n很小时才是实用的。,在上述种种条件测试技术的基础上,K.C.Tai提出了一种被称为BRO(branch and relational operator)测试的条件测试策略。如果在条件中所有布尔变量和关系算符都只出现一次而且没有公共变量,则BRO测试保证能发现该条件中的分支错和关系算符错。,BRO测试利用条件C的条件约束来设计测试用例。包含n个简单条件的条件C的条件约束定义为(D1,D2,Dn),其中Di(0,=和指定表达式的输出约束。,C1: B1 & B2,C2: B1 & (E3=E4),C3: (E1E2) & (E3=E4), (t,t) ,(f,t), (t,f) , (t,=),(f,=),(t,) , (,=), (=,=),(,) ,C1为真,C1为假,B1 假 , B2真,B1真 , B2假,3. 循环测试循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。(1) 简单循环。应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。跳过循环。只通过循环一次。,图 3种循环,通过循环两次。通过循环m次,其中mn-1。通过循环n-1,n,n+1次。(2) 嵌套循环。B.Beizer提出了一种能减少测试数的方法:从最内层循环开始测试,把所有其他循环都设置为最小值。对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试。,由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。继续进行下去,直到测试完所有循环。(3) 串接循环。如果串接循环的各个循环都彼此独立,则可以使用前述的测试简单循环的方法来测试串接循环。如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。, 划分经验 当规定了输入范围时:,1、等价划分(Equivalence Partitioning) 适用于黑盒测试 把所有可能的输入数据(有效的和无效的)划分成若干个等价类,从每个等价类取一组数据作为测试数据(代表)., 当规定了输入的一组值,且对不同值做不同处理时:例:教工分房方案中,按教授、副教授、讲师、助教分别计分 有效类4个;无效类1个,(值的范围、数据的个数 ),黑盒测试技术, 当规定了输入的规则时: 例:(PASCAL) 语言规定,每个语句以“ ;” 结 束 有效类1个;无效类若干(以“ ,”结束、以“ :”结束、以空格结束等等) 当输入为整型时:有效类可分为Z+、0、Z 三种 当处理表格时:有效类可分为空表、含一项的表、含多项的表等注: 以上经验亦适用于输出数据; 不需要测试编译程序肯定能发现的错误。, 设计步骤 设计一个新方案以尽可能多地覆盖尚未被覆盖的有效等价类;重复这一步骤直到所有有效类都被覆盖为止。(有效等价类可以一例覆盖多类) 设计一个新方案以覆盖一个且仅一个尚未被覆盖的无效等价类;重复这一步骤直到所有无效类都被覆盖为止。(无效等价类必须一类一例),例:考察一个把数字串转变成整数的函数。用二进制补码表示整数,机器字长16位,即整数范围最小为- 32768,最大为32767。函数及参数的PASCAL说明如下: function StrToInt (dstr : shortstr) : integer; type shortstr = array 1.6 of char; 要求被处理的数字串是右对齐的,即在少于6个字符的串左边补空格。负号在最高位数字左边一位。试用等价划分法设计测试方案。,解:首先根据规格说明划分等价类。考虑到PASCAL编译器的固有检错功能,测试时不需要使用长度不等于6的数组,也不需要用非字符数组类型的参数。有效输入类:16个数字字符组成的数字串(最高位非0);最高位为0的数字串; 最高位左邻负号的数字串;无效输入类:空字符串(6位空格);左边补位的既非0亦非空格;最高位右边含有空格;5 456最高位右边含有其它非数字字符; 5567负号与最高位间有空格; - 7789,下面根据等价划分,设计出一套测试方案:16个数字字符组成的数字串,最高位非0;输出 为合法正整数。输入: 预期输出:1,最高位为0的数字串,输出为合法正整数。输入: 预期输出:1,负号与最高位数字相临;输出合法负整数。输入: 预期输出:-1,所有位为0;输出0。输入: 预期输出:0,太小的负整数。输入: 预期输出:“错误,无效输入”,太大的正整数。输入: 预期输出:“错误,无效输入”,空字符串。输入: 预期输出:“错误:没有数字”,左边补位的非0也非空格。输入: 预期输出:“错误:非法填充”,最高位右边也含空格。输入: 预期输出:“错误:无效输入”,最高位右边含其它非数字字符。输入: 预期输出:“错误:无效输入”,负号与最高位间有空格。输入: 预期输出:“错误:负号位置非法”,11,2、边界值分析(Boundary Value Analysis)注意: 程序最容易在边界发生错误; 通常与等价划分结合进行。如: 输入-32768 预期输出: -32768 输入32767 预期输出: 327673、错误推测(猜错)思路: 列出可能有的错误; 列出容易发生错误的特殊情况。 以此为基础设计测试方案。根据:直觉、经验工具:常见错误清单、判定表等。,4、实用策略(Practical Strategies) 黑盒设计 白盒补充 在任何情况下都应该使用边界值分析的方法; 必要时用等价划分法补充; 必要时再用错误推测法补充; 对照程序逻辑,检查测试方案。可根据对程序可靠性的要求采用不同的逻辑覆盖标准,必要时补充一些测试方案。注: 即使用上述综合策略设计测试方案,仍不能保证发现一切错误。,开始,AB+C,BA+C,CA+C,A=B,B=C,印出“等边三角形”,A=C,B=C,印出“等腰三角形”,印出“不等边三角形”,印出“不是三角形”,停止,9,10,11,13,7,8,14,15,16,21,17,19,18,22,20,1,2,3,4,5,6,12,调 试(Debugging),测试 发现错误调试 改正错误,第1步:确定错误的位置(95%工作量); 第2步:改正错误。,用例执行,Debugging,附加测试,怀疑的原因,识别出的原因,修正,回归测试,Debugging,1、调试技术 输出存储器内容(memory dump): 以八进制或十六进制的形式印出存储器的内容。缺点: 输出信息量极大, 不易解读且大多无用; 输出的是程序在某一 时刻的静态情况,且 往往不是出错时的状态。, 插入“watch points”(或称“spy points”) 人工插入打印 缺点: 改动源代码,增加了出错机会; 打印信息可能太多。 自动调试工具 无须打印额外信息,且不改动源代码,2、调试策略 调试过程的关键不是调试技术,而是用来推断错误原因的基本策略。主要有: 试探法,凭经验猜测。 回溯法:由症状(symptom)最先出现的地方,沿control flow向回检查。适用于小型程序。 对分法:在关键点插入变量的正确值,则:,收集数据,组织数据,研究数据间的关系,提出假设,证明假设,纠正错误,能,能,不能,不能, 归纳法:从错误症状中找出规律,推断根源。,列举可能的原因,排除不正确的假设,精化余下的假设,证明假设,收集更多数据,纠正错误,有剩余,能,不能,无剩余, 演绎法:普通 特殊 从假设中逐步排除、精化,从而导出错误根源。,软件可靠性(Reliability),1、基本概念 可靠性(Reliability):程序在给定的时间间隔内,按照说明书的规定,成功地运行的概率。 可用性(Usability):程序在给定的时间点,按照说明书的规定,成功地运行的概率。 正确性(Correctness):程序的功能正确。,Reliability,Correctness,Usability,设系统故障停机时间为td1, td2, ; 正常运行时间为tu1, tu2, ; 则系统的“稳态可用性”为,Availability = (Shooman, 1983)其中 MTTF = Mean Time To Failure = MTTR = Mean Time To Repair =,0,t,tu1,td1,tu2,td2,MTTF 平均无故障时间 MTTR 平均维修时间,2、估算 MTTF: MTTF =,其中:K为经验常数(典型值约在200左右); ET为测试前故障总数; IT为程序长度(机器指令总数); 为测试(包括调试)时间; EC( )为时间从0至 期间改正的错误数。,前提假设: ET / IT Constant (通常为0.5 2%) 调试中没有引入新故障(即ET与时间无关) MTTF与剩余故障成反比,换个角度看问题,意义:可根据对软件平稳运行时间的要求,估算需改正多少个错误后才能结束测试。,还有一个问题 ,ET = ?,估算方法:, 植入故障法: 人为植入NS个故障,测后发现ns个植入故障和n个原有故障,则设, 分别测试法: 二人(组)分别独立测试同一程序,甲测得故障总数为B1,乙测得为B2,bc是发现相同的故障数,设以甲的测试结果为基准(即相当于中的植入故障),则设,一般多测几个 取平均。,

    注意事项

    本文(软件工程第六章 测试ppt课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开