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

    第7章编码和测试ppt课件.ppt

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

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

    第7章编码和测试ppt课件.ppt

    第7章 编码和测试,7.1程序设计语言的选择,程序设计语言是人和计算机通信的最基本的工具,它的特点必然会影响人的思维和解题方式,会影响人和计算机通信的方式和质量,也会影响其他人阅读和理解程序的难易程度。因此,编码之前的一项重要工作就是选择一种适当的程序设计语言。,适宜的程序设计语言能使根据设计完成编码时所遇到的困难最少,可以减少需要的程序测试量,并且可以得出更容易阅读和更容易维护的程序。由于软件系统的绝大部分成本用在生命周期的测试盒维护阶段,所以容易测试盒容易维护时极端重要的。,使用汇编语言编码需要把软件设计翻译成机器操作的序列,由于这两种表示方法很不相同,因此汇编语言设计即困难又容易出现差错。一般来说高级语言的源程序语句和汇编代码指令之间有一句对多句的对应关系。但总的来说。高级语言明显优于汇编语言,因此,除了在很特殊的应用领域,或者大型系统中执行时间非常关键的,一小部分代码需要用汇编语言书写之外,其他程序应该一律运用高级语言书写。为了使程序容易测试盒维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。,实用标准:,软件的应用领域算法与计算的复杂性数据结构的复杂性效率可移植性程序设计人员的水平 构造系统的模式,7.2 编码风格,所谓编码风格即书写源程序的习惯、程序代码的逻辑结构与习惯的编程技术。7.2.1程序内部的文档所谓程序内部的文档包括恰当的标识符、适当的注释和程序的视觉组织等等。软件=程序+文档。为了提高程序的可维护性,源代码也需要实现“文档化”。内部文档的组织包括标识符命名、内部注释和程序的视觉组织。,7.2.2数据说明原则,在设计阶段确定了数据结构的组织和复杂程度,编写程序时则要建立数据说明,使数据更容易理解,更容易维护。一般而言,数据说明应遵循3个原则:(1)数据说明的次序应当规范化,使数据属性容易查找,有利于测试、排错和维护。,(2)当多个变量名用一个语句说明时,应当对这些变量按字母的顺序排列。(3)如果涉及了一个复杂的数据结构,应当使用注释,说明这个数据结构的固有特点。,7.2.3 语句构造,涉及期间确定了软件的逻辑构造,然而个别语句的构造却是编写程序的一个主要任务。构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复杂。下述规则有助于使语句简单明了:,(1)不要为了节省空间而把多个语句写在同一行。(2)尽量避免复杂的条件测试。(3)尽量减少对非条件的测试。(4)避免大量使用循环嵌套和条件嵌套。(5)利用括号使逻辑表达式或算术表达式的运算次序清晰直观。,7.2.4 输入输出,在设计和编写程序时应该考虑下述有关输入输出风格的规则:(1)对所有输入数据都进行检查。(2)检查输入项重要组合的合法性。(3)保持输入格式简单。(4)使用数据结束标记,不要要求用户指定数据的数目。,(5)明确提示交互式输入的请求,详细说明可用的选择或边界数值。(6)当程序设计语言对格式有严格要求时,应保持输入格式的一致。(7)设计良好的输出报表。(8)给所有输出数据加标志。,7.2.5 高效率原则,效率主要指的是处理机时间和存储容量两个方面。有3个原则:第一,效率是性能要求;第二,效率是靠好的设计来提高的;第三,程序的效率和程序的简单程度是一致的。,1、程序运行时间在把详细设计结果翻译成程序时可以应用下述规则:(1)写程序之前先简化算术和逻辑表达式。(2)仔细研究嵌套的循环,以确定是否有语句可以从内层往外移。(3)尽量避免使用多维数组。,(4)尽量避免使用指针和复杂的表。(5)使用执行时间短的算术运算。(6)不要混合使用不同的数据类型。(7)尽量使用整数运算和布尔表达式。在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。,2、存储器效率,在大型计算机中必须考虑操作系统页式调度的特点,一般来说,使用能保持功能域的结构化控制结构,是提高效率的较好方法。在微处理器中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是“简单”。,3、输入输出的效率,如果用户为了给计算机提供输入信息或为了理解计算机输出的信息,所需花费的脑力劳动是经济的,那么人和计算机之间通信的效率就高。因此,简单清晰同样是提高人机通信效率的关键。硬件之间的通信效率是很复杂的问题,但是,从写程序的角度看,却有些简单的原则可以提高输入输出的效率。,7.3 软件测试,7.3.1软件测试目标软件测试,是为了发现错误而执行程序的过程。或者说,软件测绘是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。软件测试在软件生存周期中横跨两阶段:通常在编写出每个模块之后对它做出必要,的测试(称为单元测试)。在这个阶段结束之后,软件系统还要进行各种综合测试,这是软件生存周期的另一个独立的阶段,即测试阶段,通常由专门的测试人员承担这项工作。软件测试是对需求分析、设计和编码3个阶段进行最终的复审。,软件测试不是为了发现程序没有错误,也不是为了表明程序时正确的。软件测试的根本目标是尽可能多地发现错误。测试目标决定了测试方案的设计。测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。但是,如果仅就测试本身而言,软件测试的目标是以最小的时间和人力发现软件中潜在的各种错误和缺陷。测试只能查找程序中的错误,不能证明程序中没有错误。,7.3.2 软件测试准则,为了能设计出有效的测试方案,软件工程师必须深入理解并正确运用指导软件测试的基本准则。下面讲述主要的测试准则。(1)所有测试都应该能追溯到用户需求。(2)应该远在测试开始之前就制定出测试计划。(3)把Pareto原理应用到软件测试中。,(4)应该从“小规模”测试开始,并逐步进行“大规模”测试。(5)穷举测试时不可能的。(6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作。,7.3.3 测试方法,测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常运行。前一种方法称为黑盒测试,后一种方法称为白盒测试。黑盒测试又称为功能测试。白盒测试又称为结构测试。,黑盒测试:基于程序外部功能而进行的测试,又称功能测试。白盒测试:基于程序内部结构而进行的测试,又称结构测试。,7.3.4 测试步骤,大型软件系统的测试过程基本由下述几个步骤组成:1、模块测试2、子系统测试3、系统测试4、验收测试5、平行运行,7.3.5 测试阶段的信息流,图7-1描绘了测试阶段的信息流,测试过程需要三类输入:a、软件配置。b、测试配置;c、测试工具。,测试后进行结构分析,即将实测结构与预期的结果比较,如发现错误就进行排错。排错也就是调试,即对发现的错误进行错误定位,确定出错性质,改正这些错误,并修正相关的文档。修正的文档一般要经过再次测试,直到通过测试为止。,通过收集和分析测试结果中出错率数据可建立可靠性模型,进行可靠性预报。如果经常出现修改设计的严重错误,那么软件质量和可靠性就不能保证,应对软件进一步测试。如果经测试,软件功能完善,错误率数据很少,并易于修改,那么则有两种可能:要么是软件的质量和可靠性可以接受,要么是所做的测试不充分。,7.4 单元测试,单元测试集中监测软件设计的最小模块。通常,单元测试和编码属于软件过程的同一个阶段。可以应用人工测试和计算机测试两种不同类型的测试方法,完成单元测试工作。单元测试主要使用白盒测试技术,而且对多个模块的测试可以并行地进行。,7.4.1 测试重点,1、模块接口2、局部数据结构3、重要的执行通路4、出错处理通路5、边界条件,1、模块接口,首先应该对通过模块接口的数据流进行测试,如果数据不能正确地进行,所有其他测试都是不切实际的。在对模块接口进行测试时主要检查下述几个方面:参数的数目、次序、属性或单位系统与变元是否一致;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致。,2、局部数据结构,对于模块来说,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现局部数据说明、初始化、默认值等方面的错误。,3、重要的执行通路,由于通常不可能进行穷举测试,因此,在单元测试期间选择最有代表性、最可能发现错误的执行通路进行测试就是十分关键的。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。,4、出错处理通路,好的设计应该能够预见出现错误的条件,并且设置出适当的处理错误的通路,以便在真的出现错误时执行相应的出错处理通路或干净地结束处理。不仅应该在程序中包含出错处理通路,而且应该认真测试这种通路。当评价出错处理通路时,应该着重测试下述一些可能发生的错误:,4、出错处理通路,(1)对错误的描述是难以理解的;(2)记下的错误与实际遇到的错误不同;(3)在对错误进行处理之前,错误条件已经引起系统干预;(4)对错误的处理不正确;(5)描述错误的信息不足以帮助确定造成错误的位置。,5、边界条件,边界测试时单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效,例如,处理n个元素时,或做到i次重复时,往往会发生错误。使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结构、控制量和数据值的测试方案,最容易发现软件中的错误。,7.4.2 代码审查,人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者成为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出30%-70%的逻辑设计错误和编码错误。审查小组最好又下述4人组成:a、组长,应该是一个很有能力的程序员,而且没有直接参与这项工程;b、程序的设计者;c、程序的编写者;d、程序的测试者。,审查之前,小组成员应该先研究设计说明书,力求理解这个设计。为了帮助理解,可以先由设计者扼要地介绍他的设计。在审查会上由程序的编写者解释它是怎样用程序代码实现这个设计的,通常是逐个语句地讲述程序的逻辑,小组其他成员仔细倾听他的讲解,并力图发现其中的错误。审查会上进行的另外一项工作,是对照类似于上一小节中介绍的程序设计常见错误清单,分析审查这个程序。当发现错误时由组长记录下来,审查会继续进行。,审查会还有另外一种常见的进行方法,称为预排:由一个人扮演“测试者”,其他人扮演“计算机”。会前测试者准备好测试方案,会上由扮演计算机的成员模拟计算机执行被测试的程序。,代码审查比计算机测试的优越之处是:,一次审查会上可以发现许多错误;用计算机测试的方法发现错误之后,通常需要先改正这个错误才能继续测试,因此错误时逐个地发现并改正的。也就是说,采用代码审查的方法可以减少系统验证的总工作量。,实践表明,对于查找某些类型的错误来说,人工测试比计算机测试更为有效;对于其他类型的错误来说刚刚好相反。因此,人工测试盒计算机测试时互相补充,相辅相成的,缺少其中任何一种方法都会使查找错误的效率降低。,7.4.3 计算机测试,模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和存根软件。通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结构。存根程序代替被测试的模块所调用的模块。因此存根程序也可以称为“虚拟子程序”。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。,7.5 集成测试,集成测试时测试盒组装软件的系统化技术。由模块组装成程序时有两种方法:(1)非渐增式测试方法 先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。,(2)渐增式测试把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种方法每次增加一个模块进行测试,该方法实际上同时完成单元测试和集成测试。,两种方法的主要优缺点是:,非渐增式测试是把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况非常复杂。测试时会遇到许许多多的错误,改正错误是极端困难的,因为在庞大的程序中想要诊断定位一个错误非常困难的,而且一旦改正一个错误之后,马上又会遇到新的错误,这个过程将继续下去,看起来好像永远也没有尽头。,渐增式测试与“一步到位”的非渐增式测试刚好相反,它把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;对接口可以进行更彻底的测试;可以使用系统化的测试方法。因袭,目前在进行集成测试时普遍采用渐增式测试方法。当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。,1、自顶向下集成,自顶向下集成方法是一个日益为人们广泛采用的测试盒组装软件的途径。从主控模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于主控模块的那些模块组装到程序结构中去时,或者使用深度优先策略,或者使用宽度优先策略。如图7-3所示。,把模块结合进软件结构的具体过程由下述4个步骤完成1、对主控模块进行测试,测试时用存根程序代替所有直接附属于主控模块的模块。2、根据选定的结合策略,每次用一个世纪模块代换一个存根程序。3、在结合进一个模块的同时进行测试。4、为了保证加入模块没有引进新的错误,可能需要进行回归测试。从第二步开始不断地重复进行上述过程,直到构造起完整的软件结构为止。,自顶向下的结合策略能够在测试的早期对主要的控制或关键的抉择进行检验。在一个分解得好的软件结构中,关键的抉择位于层次系统的较上层,因此首先碰到。如果主要控制确实有问题,早期认识到这类问题是很有好处的,可以及早想办法解决。如果选择深度优先的结合方法,可以再早期实现软件的一个完整的功能并且验证这个功能。早期证实软件的一个完整功能,可以增强开发人员和用户双方的信心。,自顶向下的方法讲起来比较简单,但是实际使用时可能遇到逻辑上的问题。这类问题中最常见的是,为了充分地测试软甲系统的最高层次,需要在较低层次上的处理。然而在自顶向下测试的初期,存根程序代替了低层次的模块,因此在软件结构中没有重要的数据自下往上流。为了解决这个问题,测试人员有两种选择:第一,把许多测试推迟到用真实模块代替了存根程序以后再进行;第二,从层次系统的底部向上组装软件。,2、自底向上集成,自底向上测试从“原子”模块开始组装和测试。用下述步骤可以实现自底向上的结合策略:1、把底层模块组合成实现某个特定的软件子功能的族。2、写一个驱动程序,协调测试数据的输入和输出。3、对由模块组成的子功能族进行测试。4、去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更多的子功能族。,上述第二步到第四步实质上构成一个循环。随着结合向上移动,对测试驱动程序的需要也就减少了。事实上,如果软件结构的顶部两层用自顶向下的方法组装,可以明显减少驱动程序的数目,而且族的结合也将大大简化。,3、不同集成测试策略的比较,自顶向下测试方法的主要优点是不需要测试驱动程序,主要缺点是需要存根程序。自底向上测试方法的优缺点与上述测试方法的优缺点刚好相反。人们在实践中创造出许多混合策略:1、改进的自顶向下测试方法2、混合法,(1)改进的自顶向下测试方法,基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。一般自顶向下方法所具有的优点在这种方法中也都有,而且能在测试的早期发现关键模块中的错误;但是,它的优点也比自顶向下方法多一条,即测试关键模块时需要驱动程序。,(2)混合法,对软件结构中较上层使用的自顶向下方法对软件结构中较下层使用的自底向上方法相结合。这种方法兼有两种方法的优点和缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折中方法。,4、回归测试,所谓回归测试是指重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动。,回归测试集包括下述3种不同的测试用例:1、监测软件全部功能的代表性测试用例2、专门针对可能受修改影响的软甲功能的附加测试3、针对被修改过的软件成分的测试应该把回归测试集设计成只包括可以监测程序每个主要功能中的一类或多累错误的一个测试用例。,7.6 确认测试,确认测试也称为验收测试,它的目标是验证软件的有效性。软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此事软件有效性的标准,也是进行确认测试的基础。,1、确认测试的范围,确认测试必须有用户积极参与,或者以用户为主进行。确认测试通常使用黑盒测试法。应该仔细设计测试假话和测试过程,测试计划包括要进行测试的种类及进度安排,测试过程规定了用来检测软件是否与需求一致的测试方案。,测试确认有下述两种可能的结果:1、功能和性能与用户要求一致,软件是可以接受的;2、功能和性能与用户要求有差距。,2、软件配置复查,确认测试的一个重要内容就是复查软件配置。复查目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。,3、Alpha和Beta测试,Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。,Beta测试由软件的最终用户们在一个或多个客户场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户记录在Beta测试过程中遇到的一切问题,并且定期把这些问题报告给开发者。接收到Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。,7.7 白盒测试技术,设计测试方案是测试阶段的关键技术问题。所谓测试方案包括具体的测试目的、应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。其中最困难的问题是设计测试用的输入数据。设计测试方案的基本目标是,确定一组最可能发现某个错误或某类错误的测试数据。,1、逻辑覆盖,有选择地执行某程序中某些最有代表性的通路是对穷尽测试的唯一可行的替代办法。所谓逻辑覆盖式对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。测试数据执行(叫覆盖)程序逻辑的程度可以划分成哪些不同的等级呢?从覆盖源程序语句的详尽程度分析,大致有以下不同的覆盖标准。,(1)语句覆盖,为了暴露程序中的错误,至少每个语句应该执行一次,语句覆盖的含义是,选择足够多的测试数据,使被测试程序中每个语句至少执行一次。例如,图7-5所示的程序流程图描绘了一个被测模块的处理算法:,为了使每个语句都执行一次,程序的执行路径应该是sacbed,为此只需要输入下面的测试数据(实际上X可以使任意实数):A=2,B=0,X=4,(2)判定覆盖,判定覆盖又叫分支覆盖,它的含义是,不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。,对于上述例子来说,能够分别覆盖路径sacbed和sabd的两组测试数据,或者可以分别覆盖路径sacbd和sabed的两组测试数据,都满足判定覆盖条件。例如,用下面两组测试数据就可以做到判定覆盖:1、A=3,B=0,X=3(覆盖sacbd)2、A=2,B=1,X=1(覆盖sabed),(3)条件覆盖,条件覆盖的含义是,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。只需要使用下面两组测试数据就可以达到上述覆盖标准:1、A=2,B=0,X=4(覆盖sacbed)2、A=1,B=1,X=1(覆盖sabd),(4)判定/条件覆盖,既然判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖,自然会提出一种能同时满足这两种覆盖标准的逻辑覆盖,这就是判定/条件覆盖。它的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。,(4)判定/条件覆盖,对于图7-5的例子而言,下述两组测试数据满足判定/条件覆盖标准:1、A=2,B=0,X=42、A=1,B=1,X=1 但是,这两组测试数据也就是为了满足条件覆盖标准最初选取的两组数据,因此,有时判定/条件覆盖也并不比条件覆盖更强。,(5)条件组合覆盖,条件组合覆盖式更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。,对于图7-5的例子,共有8种可能的条件组合,它们是:,1.A1,B=02.A1,B03.A1,B=04.A1,B05.A=2,X16.A=2,X17.A 2,X18.A 2,X1,和其他逻辑覆盖标准中的测试数据一样,条件组合48中的X指是指在程序流程图第二个判定框(b点)的X值。下面4组测试数据可以使上面列出的8种条件组合每种至少出现一次:1.A=2,B=0,X=4(针对1,5两种组,执行路径sacbed)2.A=2,B=1,X=1(针对2,6两种组合,执行路径sabed),3.A=1,B=0,X=2(针对3,7两种组,执行路径sabed)4.A=1,B=1,X=1(针对4,8两种组合,执行路径sabd)显然,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。,(6)点覆盖,如果连通图G的子图G 是连通的,而且包含G的所有节点,则称G是G的点覆盖。,(7)边覆盖,如果连通图G的子图G 是连通的,而且包含G的所有边,则称G是G的边覆盖。,(8)路径覆盖,路径覆盖的含义是,选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果图中有环,则要求每个环至少经过一次)。,2、控制结构测试,现有的很多种白盒测试技术,是根据程序的控制结构设计测试数据的技术,下面介绍几种常用的控制结构测试技术。(1)基本路径测试基本路径测试时Tom MaCabe提出的一种白盒测试技术。使用这种技术设计测试用例时,首先计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合,,从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。使用基本路径测试技术设计测试用例的步骤如下:第一步,根据过程设计结果画出相应的流图。,例如,为了用基本路径测试技术测试下列的用PDL描述的求平均值过程,首先画出图7-6所示的流图。注意,为了正确地画出流图,我们把被映射为流图结点的PDL 语句编了序号。,第二步,计算流图的环形复杂度。环形复杂度定量度量程序的逻辑复杂性。经计算,图7-6所示流图的环形复杂度为6。,第三步,确定线性独立路径的基本集合。所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,用流图术语描述,独立路径至少包含一条在定义 该路径之前不曾用过的边。第四步,设计可强制执行基本集合中每条路径的测试用例。,(2)条件测试,尽管基本路径测试技术简单而且高效,但是仅有这种技术还不够,还需要使用其他控制结构测试技术,才能进一步提高白盒测试的质量。用条件测试技术设计出的测试用例,能够检查程序模块中包含的逻辑条件。条件测试方法着重测试程序中的每个条件。,条件测试的目的不仅是检测程序条件中的错误,而是检测程序中的其他错误。分支策略是最简单地条件测试策略:对于符合条件C来说,C的真分支和假分支以及C中的每个简单条件,都应该至少执行一次。域测试要求对一个关系表达式执行3个或4个测试。BRO测试利用条件C的条件约束来设计测试用例。,(3)循环测试,循环是绝大多数软件算法的基础,但是,在测试软件时却往往未对循环结构进行足够的测试。循环测试技术时一种白盒测试技术,它专注于测试循环结构的有效性。在结构化的程序中通常有3中循环,即简单循环、串循环和嵌套循环,如图7-7所示。下面分别讨论这3中循环的测试方法。,第一种:简单循环。,应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。1、跳过循环2、只通过循环一次3、通过循环两次4、通过循环m次,其中m=n-15、通过循环,n-1,n,n+1次。,第二种:嵌套循环。,如果把简单循环的测试方法直接应用到嵌套循环,可能的测试数就会随嵌套层数的增加按几何级数增长,这会导致不切实际的测试数目。下面是一种能减少测试数的方法:,1、从最内层循环开始测试,把所有其他循环都设置为最小值。2、对内层循环使用简单循环测试方法,而外层循环的迭代参数取最小值,并为越界值或非法值增加一些额外的测试。3、由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。4、继续进行下去,直到测试完所有循环。,第三种:串接循环。,如果串接循环的各个循环都彼此独立,则可以使前述的测试简单循环的方法来测试串接循环。但是,如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。,7.8 黑盒测试技术,黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,他是与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型错误。黑盒测试力图发现下述类型的错误:功能不正确或遗漏了功能;界面错误;数据结构错误或外部数据库访问错误;性能错误;初始化和终止错误。,白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于测试过程的后期。设计黑盒测试方案时,应该考虑下述问题:A、怎样测试功能的有效性?B、哪些类型的输入可构成好的测试用例?C、系统是否对特定的输入值特别敏感?D、怎样划定数据类的边界?E、系统能够承受社么样的数据率和数据量?F、数据的特定组合将对系统运行产生什么样的影响?,应用黑盒测试技术,能够设计出满足下述标准的测试用例集:(1)所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数。(2)所设计出的测试用例能够告诉我们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的错误是否存在。,1、等价划分,等价类划分方法是把软件所有可能的输入数据,即软件的输入域划分成若干部分,形成一些等价类,即在一个部分中各个输入数据对于发现软件中错误的概率是一样的,然后从每一部分中选取数据作为测试用例,进行软件测试。这样只要选取一个等价类中的一个输入数据作为测试数据进行测试而发现错误,那么使用这一类等价类中的其他输入数据进行测试也会发现同,样的错误;反之,若使某个等价类中的一个输入数据作为作为测试数据进行测试没有查出错误,则使用这个等价类中的其他输入数据也同样查不出错误。因此,把全部输入数据合理地划分为若干等价类,其目的是用少量测试用例取得较好的测试效果。,(1)划分等价类,对于等价类划分,人们从实践角度,经常从有效和无效的角度对输入数据进行等价类划分。有效等价类是指对于程序的规格来说,是合理的、有意义的输入数据集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。,无效等价类是指对于程序规格说明来说,是不合理的、无意义的输入数据集合。这一类测试用例主要用于检查程序中功能和性能的实现是否不符合规格说明的要求。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。软件不能只接收合理的数据,还要经受意外的考验,接受无效的或不合理的数据,这样获得的软件才具有较高的可靠性。,划分等价类的方法是根据每个输入,找出两个或更多的等价类并将其列表。下面给出几条确定等价类的参考原则:(1)如果某个输入条件规定了输入数据的取值范围,则可以确立一个有效等价类和两个无效等价类。(2)如果某个输入条件规定了输入数据的个数,则可以划分一个有效等价类和两个无效等价类。,(3)如果某个输入条件规定了输入数据的一组可能取的值,而且程序可以对每个输入值分别进行处理,则可为每一个输入值确立一个有效等价类,而针对这组值确定一个无效等价类。(4)如果某个输入条件是一个布尔量,则可以确立一个有效等价类和一个无效等价类。,(5)如果某个输入条件规定了必须符合的条件,则可以划分一个有效等价类和一个无效等价类。(6)若在已划分的某一等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分为更小的等价类。,(2)设计测试用例,在确立了等价类之后,建立等价类表,并列出所有划分出的等价类,见下表:,再根据等价类来设计测试用例,过程如下:(1)为每一个等价类规定一个唯一的编号。(2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类。重复这一步,直到所有的有效等价类都被覆盖。(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类。重复这一步,直到所有的无效等价类都被覆盖。,例如:某一8位计算机,其十六进制常熟的定义为:以0X或0X开头的数是十六进制整数,其值的范围是-7f7f(大小写字母不加区分),如0 x13、0 x6a、-0 x3c。,第一步:建立等价类表,如下图:,第二步:为有效等价类设计测试用例,第三步:为无效等价类至少设计一个测试用例,其中,第一步所建立的等价类表相当于被测对象的模型。第二步和第三步所设计的测试用例覆盖了等价类表中的11个等价类。,2、边界值分析,经验表明,处理边界情况时程序最容易发生错误。使用边界值分析方法涉及测试方案首先应该确定边界情况,这需要经验和创造性,通常输入等价类和输出等价类的边界,就是应该着重测试的程序边界情况。选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。,也就是说,按照边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。通常涉及测试方案时总是联合使用等价划分和边界值分析这两种技术。,3、错误推测,错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。对于程序中容易出错的情况也有一些经验。还应该仔细分析程序规格说明书,注意找出其中遗漏或者省略的部分,以便设计相应的测试方案,检测程序员对这些部分的处理是否正确。,7.9 调试,调试也称为纠错作为成功测试的后果出现,也就是说,调试是在测试发现错误之后排除错误的过程。调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。1、调试过程调试不是测试,但是它总是发生在测试之后,如图7-8所示。,调试过程总会产生以下两种结果之一:第一,找到了问题的原因并把问题改正和排除掉了;第二,没有找出问题的原因。,调试是软件开发过程中最艰巨的脑力劳动。软件错误的下述特征也是相当重要的原因:(1)症状和产生的原因可能在程序中相距甚远,紧耦合的程序结构更加剧了这种情况。(2)当改正了另一个错误之后,症状可能暂时消失了。(3)症状可能实际上并不是由错误引起的。,(4)症状可能是由不易跟踪的认为错误引起的。(5)症状可能是由定时问题而不是由处理问题引起的。(6)可能很难重新产生完全一样的输入条件。(7)症状可能时有时无,这种情况在硬件和软件紧密地耦合在一起的嵌入式系统中特别常见。(8)症状可能是由分布在许多任务中的原因引起的,这些任务运行在不同的处理机上。,2、调试途径,调试的目标是寻找软件错误的原因并改正错误。一般来说,有下列3种调试途径可以采用:(1)蛮干法(2)回溯法(3)原因排除法。对分查找法、归纳法和演绎法都属于原因排除法。,在动手改正错误之前,软件工程师应该仔细考虑下述3个问题:第一个问题:是否同样的错误也在程序其他地方存在:第二个问题:将要进行的修改可能会引入的“下一个错误”是什么?第三个问题:为防止今后出现类似的错误,应该做什么?,7.10 软件可靠性,1.软件可靠性是指:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。2.软件可用性是指:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。为了方便可用性的计算,一般使用稳态可用性对系统进行可用性评价。3.系统平均无故障时间的估算式 MTTF=1/(K(ET/IT-Ec(t)/IT),

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开