已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,.,思路,5W1H1D:WhatWhyWhenWhoWaysHowDemo?(二期),2,.,什么是单元测试,概念:单元测试是对最小的可测试软件元素(单元)实施的测试,它所测试的内容包括内部结构(如逻辑和数据流)以及单元的功能和可观测的行为。什么是单元(1)可测试的、最小的、不可再分的程序模块。(2)有明确的功能、规格定义。(3)有明确的接口定义,清晰地与同一程序的其他单元划分开来。举例:如C语言中单元可以是一个函数,C+这样的面向对象的语言中,基本单元是类,Java里单元也指一个类,图形化的软件中可以指一个窗口或一个菜单等。,3,.,进行单元测试的重要性,时间方面:如果认真的做好了单元测试,在系统集成联调时非常顺利,会节约很多时间,反之不做单元测试或简单随便做,在集成时总会遇到一些简单问题就花了很长时间去查找,时间成本更大!1:3:12时间单位!测试效果:单元测试的效果是非常明显的。首先,单元测试做好,集成测试和系统测试时就很顺利。其次,单元测试易发现一些深层次的问题,同时还会发现一些很容易发现而在集成测试和系统测试很难发现的问题。再次,单元测试证明代码做了什么,如何做的,是否做了不该做的事情。测试成本:不同阶段(单元,集成,系统测试)发现问题,定位问题和解决问题成本。”半年开发,三年维护,终生改BUG。”虫虫和天上的星星一样多。”产品质量:单元测试的好与坏直接影响到产品的质量,代码中的一个小错误就导致了整个产品的质量降低一个指标或者导致更严重的后果,做好单元测试这种情况是可以完全避免的。(理由有些牵强。),4,.,单元测试的优点(了解),它是一种验证行为测试,为以后的开发提供支缓。为后期开发中增加功能或更改程序结构,甚至为代码的重构提供了保障,可以自由的对程序进行改进。它是一种设计行为编写单元测试,从调用者角度观察、思考,特别是先写测试(test-first),把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。另外还可以使编码人员在编码时产生预测试,将程序的缺陷降低到最小。它是一种编写文档的行为单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。它具有回归性自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。,5,.,何时开始单元测试,什么时候测试?单元测试越早越好,早到什么程度?极限编程(ExtremeProgramming,或简称XP)讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。从经验来看,先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的直接返回一个合适值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。,6,.,谁来做单元测试,7,.,谁来做单元测试,执行者:开发人员或者白盒测试人员维护一个专门单元测试的测试团队成本太高,或者是有某些专门白盒测试人员,让其去熟悉开发架构和业务实现方式进行测试开发,设计测试用例和编写测试代码进行单元测试也得不偿失。无论由哪个部门做单元测试,都要面对一些问题,但开发部门所面对的问题可以借助工具来解决,而由测试部门进行单元测试,要么无法真正实施,要么代价昂贵。业内选择:更多的是由开发人员来完成,8,.,单元测试的内容,单元测试又称模块测试,属于白盒测试(不局限于白盒测试方法),是最小单位的测试。单元测试既可以是白盒测试也可以是黑盒测试。白盒测试主要是检查程序的内部结构、逻辑、循环和路径。黑盒测试注重对程序功能方面的要求,它只用到程序的规格说明,没有用到程序的内部结构。单元测试针对程序单元非一个独立可运行的程序,因此,在考虑测试模块时,同时要考虑到它和外界其他模块的联系,用一些辅助模块去模拟与被测模块关联。这些模块分为两种:驱动模块和桩模块。,9,.,桩和驱动模块由来,单元测试针对程序单元非一个独立可运行的程序,因此,在考虑测试模块时,同时要考虑到它和外界其他模块的联系,用一些辅助模块去模拟与被测模块关联。这些模块分为两种:驱动模块和桩模块。,10,.,驱动模块:相当于所测模块的主程序。它接收测试数据,把这些测试数据传送给被测模块,最后再输出实测结果。桩模块:由被测模块调用,用以代替由被测单元所调用的模块的功能,返回适当的数据或进行适当的操作使被测单元能继续运行下去,同时还要进行一定的数据处理,如打印入口和返回等,以便检验被测模块与其下级模块的接口。,11,.,假设把任务分给了7个人,每个人负责实现一个模块。小张负责B模块,他完成了B编码,现在需要开阵单元测试工作,先分析结构图:1、由于B模块不是最顶层模块,所以它不包含main函数(A模块包含main函数),也就不能独立运行。2、B模块调用了D模块和E模块,而目前D模块和E模块都还没有开发好,那么想让B模块通过编译器的编译也是不可能的。那么怎样才能测试B模块呢?需要做:1、写两个模块Sd和Se分别代替D模块和E模块(函数名、返回值、传递的参数相同),这样B模块就可以通过编译了。Sd模块和Se模块就是桩模块。2、写一个模块Da用来代替A模块,里面包含main函数,可以在main函数中调用B模块,让B模块运行起来。Da模块就是驱动模块。,实例,12,.,单元测试-测试方法和用例设计方法,单元测试的方法可以是白盒测试也可以是黑盒测试:1,什么是白盒,什么是黑盒?2,白盒测试用例设计方法?3,黑盒测试用例设计方法?(规范(规格)导出、等价类划分、边界值分析法、错误推测法和因果图分析方法。)不做详细介绍,可以参阅网上资料了解。,13,.,白盒测试i3)statement;,for(i=0;i3,21,.,课后研究2:语句覆盖的覆盖率的问题,能达到很高的语句覆盖率语句覆盖率看似很高,却有严重缺陷if(x!=1)statements;elsestatement;,99句,1句,测试用例:x=2语句有覆盖率99%50%的分支没达到!,22,.,判定覆盖(又称分支覆盖),指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。比语句覆盖稍强的覆盖标准是判定覆盖。,23,.,Sample,Dima,basIntegerDimcAsDoubleIf(a0andb0)Thenc=c/aEndifIf(a1orc1)Thenc=c+1Endifc=b+c,24,.,用例设定1,Case1:a=2b=1c=6可以覆盖判断A的Y分支和判断B的Y分支Case2:a=-2b=-1c=-3可以覆盖判断A的N分支和判断B的N分支评价:这两组测试用例可覆盖所有的判定的真假分支。,25,.,用例设定2,Case3:a=1b=1c=-3可以覆盖判断A的Y分支和判断B的N分支Case4:a=1b=-2c=3可以覆盖判断A的N分支和判断B的Y分支评价:这两组测试用例也可覆盖所有的判定的真假分支。,26,.,判定覆盖优缺点,优点:判定覆盖比语句覆盖有更强的测试能力。同样判定覆盖也具有语句覆盖的简单性,无需细分每一个判定就可以得到测试用例。缺点:很多时候大部分的判定语句由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖依旧是较弱的逻辑覆盖。,27,.,条件覆盖,简而言之,设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。条件覆盖率的公式:条件覆盖率=被评价到的条件取值的数量/条件取值的总数X100%,28,.,Sample,Dima,basIntegerDimcAsDoubleIf(a0andb0)Thenc=c/aEndifIf(a1orc1)Thenc=c+1Endifc=b+c,29,.,条件设定,第一个判定中,考虑到各种条件取值:a0为真,记为T1a0为假,记为F1b0为真,记为T2b0为假,记为F2,第二种判定考虑情况:a=1为真,记为T3a=1为假,记为F3c1为真,记为T4c1为假,记为F4,30,.,用例设定,31,.,条件覆盖的优缺点,优点:增加了对条件判定情况的测试,增加了测试路径。缺点:条件覆盖不一定包含判定覆盖。以上的设计用例中没有覆盖判断A的Y分支和判断B的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,32,.,判定-条件覆盖,设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。判定条件覆盖率:条件判定覆盖率=被评价到的条件取值和判定分支的数量/(条件取值总数+判定分支总数),33,.,用例设定,判定-条件用例设计思路:1,所有条件可能至少执行一次;2,所有判断的可能结果至少执行一次。要满足T1T2T3T4F1F2F3F4;要覆盖判断A的Y分支和N分支;判断B的Y分支和N分支。,34,.,35,.,判定-条件覆盖优缺点,优点:同时满足判定,条件两种覆盖。缺点:未考虑条件的组合也没有覆盖所有的判定组合情况。,36,.,条件组合覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。这种方法包含了“分支覆盖”和“条件覆盖”的各种要求。满足条件组合覆盖一定满足判定覆盖、条件覆盖、判定条件覆盖。,37,.,用例设定,思路:把每一个判断中的所欲条件进行组合,所设计的用例应该包含所有的组合条件。组合条件:,38,.,用例设定,39,.,条件组合覆盖优缺点,优点:条件组合覆盖满足判定覆盖、条件覆盖和判定-条件覆盖。缺点:大大的增加了测试用例的数量和单元测试设计执行时间。,40,.,路径覆盖,设计所有的测试用例,来覆盖程序所有可能的执行路径。路径覆盖率的公式:路径覆盖率=被执行到的路径数/程序中总的路径数。路径覆盖是覆盖率最高的一种覆盖技术。,41,.,用例设定,42,.,路径覆盖优缺点,优点:可以对程序进行彻底的测试,比其他的覆盖都广泛。缺点:需要设计大量,负责的测试用例,工作量增大,但是不一定覆盖所有的条件组合。,43,.,综合比较,44,.,用例设计和覆盖程度比较,45,.,结论,采用任何一种覆盖方法都不能满足测试要求,所以实际的测试用例设计时,需要将不同的覆盖方法组合起来使用,实现最佳的测试用例设计。,46,.,回溯例子:条件组合覆盖+路径覆盖,先路径覆盖,然后查看条件覆盖缺失。,47,.,基本路径测试,详细文档见下期讲解,48,.,单元测试步骤,1,首先要构造测试用例的运行环境,即确定用例运行的前提条件,明确被测模块/单元所需的程序环境(全局变量赋值或初始化实体),启动测试驱动,设置桩,调用被测模块,设置预期输出条件判断,最后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 眼科常见病诊疗技术详解与习题集
- 贵州省黔东南苗族侗族自治州2024-2025学年七年级上学期语文1月期末试卷(含答案)
- 2025年民航机务工程师招聘面试参考题库及答案
- 合同解除退款协议书
- 2025年公路水运工程施工企业安全生产管理人员试题含解析
- 合作外贸开发协议书
- 医院岗位外包协议书
- 叫区间服务合同范本
- 合作社帮扶合同范本
- 合同竞品协议书范本
- 汽车驾驶培训行业深度调研及发展策略研究报告
- 金嗓子喉片行业分析
- 久盛电缆科技有限公司环保电缆及特种防火电缆项目环境影响报告
- 成人高等教育毕业生登记表-6
- 船舶避碰课件
- 新译林版高一英语必修一Unit4 Extended reading公开课课件
- 并购顾问服务协议(买方)
- 老年人能力评估实施方案
- 谈判药品审核备案表
- 严重精神疾病管理培训讲解
- GB/T 10612-2003工业用筛板板厚
评论
0/150
提交评论