ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:663.95KB ,
资源ID:22367744      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22367744.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单元测试用例设计Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单元测试用例设计Word格式.docx

1、i)单元测试范围的重点包括两个方面:1.测试代码实现的功能,这个可以通过需求文档进行整理,然后调整每个功能点的颗粒度,尽量可以和开发实现的被测单元进行对应,入口文档包括需求文档、设计文档;2.外部接口和底层实现。四、常见测试用例设计方法及举例4.1 用于语句覆盖的基路径法 基路径法保证设计出的测试用例,使程序的每一个可执行语句至少执行一次,即实现语句覆盖。基路径法是理论与应用脱节的典型,基本上没有应用价值,读者稍作了解即可,不必理解和掌握。基路径法步骤如下: 1)画出程序的控制流图 控制流图是描述程序控制流的一种图示方法,主要由结点和边构成,边代表(dibio)控制流的方向,节点代表控制流的汇

2、聚处,边和结点圈定的空间叫做区域,下面是控制流图的基本元素:以下(yxi)代码:void Sort(int iRecordNum, int iType) int x = 0; int y = 0; while(iRecordNum- 0) if(0 = iType) x = y+2; break; elseif(1 = iType) x = y+10; else x = y+ 20;可以(ky)画出以下控制流图:2)计算(j sun)程序环路复杂度环路(hun l)复杂度V(G)可用以下(yxi)3种方法(fngf)求得:(1) 环路复杂度等于控制流图中的区域数;上图中,有4个区域,V(G)

3、= 4。(2) 设E为控制流图的边数,N为结点数,则环路复杂度为EN2;上图中,V(G) = 10(边) 8(结点) + 2 = 4。(3) 设P为控制流图中的判定(pndng)结点数,环路复杂度为P1。上图中:V(G) = 3(判定(png)结点) + 1 = 4。环路复杂度是独立路径(ljng)数的上界,也就是需要的测试用例数的上界。 3)导出基本(jbn)路径集 基本路径(lng)数等于V(G)。根据上面的计算方法,可得出需要的基本路径数为4。路径就是从程序的入口到出口的可能路线,基本路径要求每条路径至少包含一条新的边,直到所有的边都被包含。需要提醒的是:基路径法和路径覆盖是两回事,用于

4、设计用例的基路径数一般小于全部路径数,即基本路径集不是惟一的。基路径法完成的是语句覆盖,而不是路径覆盖。下面选择四条基本路径:路径1:1-11路径2:1-2-3-4-5-1-11路径3:1-2-3-6-8-9-10-1-11路径4:1-2-3-6-7-9-10-1-11 4) 设计(sh)用例根据(gnj)上面的路径,可以设计出以下用例:路径(lng)1:用例1:iRecordNum = 0ng)2:用例2:iRecordNum=1, iType = 0ng)3:用例3:iRecordNum=1, iType = 1用例4:iRecordNum=1, iType = 2 从上述步骤可以看出,基

5、路径法工作量巨大,如果用于五十行左右的函数,将耗费大量的时间,而五十行代码的函数实在是太普通了。这种成本巨高的方法,其测试效果如何呢?测试效果完全与成本不匹配,首先,基路径法完成的只是代码覆盖,这是最低级别的覆盖,其次,整个设计过程都是依据已经存在的代码来进行的,没有考虑程序的设计功能,是典型的“跟着代码走”,不足是显而易见的。综上所述,基路径法没有实际应用价值。4.2 用于MC/DC的真值表法设计(sh)用于MC/DC的用例,可以先将条件值的所有可能组合列出表格,然后从中选择(xunz)用例,称为真值表法。例如判定A | (B & C),条件组合(zh)如下表:ABC判定结果组合1T组合2F

6、组合3组合4组合5组合6组合7组合8为了(wi le)使A独立影响(yngxing)判定结果,选择B和C相同,判定结果相反,且A相反的组合:组合2和6;为了使B独立影响判定结果,选择A和C相同,判定结果相反,且B相反的组合:组合5和7;为了使C独立影响判定结果,选择A和B相同,判定结果相反,且C相反的组合:组合5和6。因此(ync),组合2、5、6、7符合(fh)MC/DC要求(yoqi)。符合MC/DC要求(yoqi)的用例集不是惟一的。为了提高效率,可以使用(shyng)工具来生成真值表和找出符合要求的组合,有些商业工具具有这种功能。自行开发难度也不大,下面提出开发MC/DC用例设计小工具

7、的思路,有兴趣的读者可以尝试一下:1)用一个简单的词法和语法分析器解析判定表达式,计算条件数量;2)生成真值表;3)用一个逻辑表达式计算器,针对每个条件C,扫描真值表,找出符合以下要求的组合:除条件C外,其他条件取值相同;将条件C的真值和假值分别代入判定表达式,判定的计算结果相反。4)针对找出的组合,设计两个用例,条件C分别取真和假。需要注意的是,判定中可能存在完全相同的条件,例如:(A=0 | B = 1) & C = 2 | (A=0 & D = 3)针对A=0设计MC/DC用例时,前一个A=0取反,后一个A=0也会跟着取反,如果后一个A=0视为其他条件,则不能实现MC/DC覆盖,因此,计

8、算判定值时,两个A=0应视为同一个条件。4.3 边界值法 边界值法假定错误最有可能出现在区间之间的边界,一般对边界值本身,及边界值的两边(lingbin)都需设计测试用例。如下(rxi)函数:/参数(cnsh)age表示(biosh)年龄int func(int age) int ret = 0; / do something return ret;参数(cnsh)age表示一个人的年龄,假设有效的取值范围是0-200,那么,用边界值法可以得出以下用例(省略输出):age = -1;age = 0;age = 1;age = 199;用例5:age = 200;用例6:age = 201;通常

9、,程序对输入(shr)还会分段处理,例如,年龄在10以下(yxi),为儿童,需要特别照顾;年龄在60岁以上,为退休老人(lo rn),不能安排工作,那么,10和60是内部边界(binji),也要设计测试用例:用例7:age =9;用例8:age = 10;用例9:age = 11;用例10:age = 59;用例11:age = 60;用例12:age = 61;边界值法需要了解数据(shj)所代表的实际意义,此外对于枚举类型等非标量数据不适用。边界值法对于复杂的软件项目来说,适用范围有限。 4.4 等价(dngji)类法 先从代码编写(binxi)的思路说起。程序员编写一个函数的代码,会如何

10、做呢? 首先,了解代码功能。程序的功能是什么?无非就是:有哪些输入?执行(zhxng)什么操作或计算?产生什么输出? 然后,将功能细化,形成一个或多个功能点。一个功能点就是一类输入及其处理。什么叫“一类”输入?程序可能有无数输入,但代码并不需要用无数个判定来对每个输入分别做处理,只需将输入分类,需要做相同处理的输入归于一类,这就是“等价类”。从编程角度来说,“等价类”是指计算或操作过程的“等价”,一个等价类就是处理过程完全相同的输入的集合。程序中通常用判定来识别分类,一个判定就是一次分类,嵌套的判定则会造成(zo chn)分类数量的翻番。 所以,函数代码编写(binxi)的核心思维就是等价类划

11、分和处理。一个函数要完全正确,关键是等价类的划分要正确完整,且每个等价类的处理正确。 举个例子,现在要编写一个函数,将字符串左边的空格删除。函数原形(yunxng)如下:char* strtrml(char *str);功能(gngnng):将str左边空格删除(shnch),并返回str本身(bnshn)。ng)点:1. 左边有空格:删除;(正常输入)2. 左边无空格:不作处理;3. 全部是空格:全部删除;4. 空串:(边界输入)5. 空指针:直接返回。(非法输入) 不一定需要针对每个功能点分别写代码,因为程序中的if、for、while等语句本身具有“如果不符合条件就跳过”的含义,所以很多

12、功能点是可以共用代码的,例如,前4个功能点只需要相同的代码,不过,编程时对功能点的考虑还是要全面。 既然函数没有(mi yu)错误的关键是等价类划分正确完整且处理正确,那么测试时,只要把输入的等价类都列出来,并设定正确的预期输出,进行测试就行了。 这就是通常说的“等价类”法,从测试角度来说的“等价”,是指测试效果(xiogu)上的等价,即同类中一个数据测试通过,可以肯定其他数据也会测试通过。 用例设计的首要工作是设定输入。输入有哪些呢?要从正常输入、边界(binji)输入、非法输入三方面考虑,每方面进一步划分形成等价类,即要考虑:有哪些正常输入?有哪些边界输入?有哪些非法输入?多个输入时,例如

13、有多个参数,首先把各个参数的等价(dngji)类列出来,然后要考虑参数之间是否存在特殊的组合关系。例如下面的函数:/计算某年某月某日是星期几,参数(cnsh)分别表示年月日int Date(int year, int month, int day);用例如下表(假设year的有效范围是1-9999):输入正常值边界值非法值组合Year2000(闰年)2009(非闰年)1999910000闰年和非闰年要保证都和2月组合;2月要和28、29、30日组合;小月要和30、31日组合;大月要和31、32日组合month2(短月)3(大月)4(小月)1213Day10(普通)28(非闰年二月)29(闰年二

14、月)30(小月)3132 用例的输出是比较容易被轻视的工作,但是,没有(mi yu)充分且正确的预期输出,用例基本上没有意义,就像医生要求病人做一大堆检查,却不看检查结果一样。预期输出要根据程序的设计功能确定正确的值。一个用例的预期输出可能有多个。 等价类法是与程序的基本特性“对数据分类处理”相匹配的方法。对于一个函数来说,如果对数据的分类正确且完整,每一个分类处理正确,那么,程序就没有问题。同样,测试时,只要依据设计功能,找出所有等价类,那么,用例就是完整的。所以,用例的完整性,本质上是指等价类是否划分正确且完整,每一类的正确输出(shch)是否均依据设计功能正确设定。 使用了等价类法后,是

15、否需要(xyo)使用其他方法呢? 等价(dngji)类法从“有哪些正常输入?”三个方面来考虑等价类,因此,边界值法是等价类法的一部分。常见的用例设计方法中还有正交法和错误推测法。正交法考虑数据的组合,实际上,如果程序对输入数据的组合需要判断处理,也是一种等价类划分,但正交法会产生大量的多余组合,且可能缺少必要的组合,因此不推荐采用正交法,应该根据数据的实际意义自行组合。单独从错误推测角度去设计用例未免太不可靠,但错误推测法可以作为检查等价类是否完整的一种思路,即用等价类法设计用例后,可以考虑哪些输入比较容易产生错误,以检查是否遗漏(ylu),这只是一种检查思路,也包含在等价类法之中。总之,用例

16、设计只需使用等价类法,但可以从多种角度检查等价类的完整性。4.5循环(xnhun)测试法在程序中多循环判断是,我们一样需要重点(zhngdin)关注,根据循环的重量级进行。例如一个简单循环判断:如下图4-5,有如下几个分支需要覆盖:1、跳过整个循环:不进入循环流程2、仅有一次进入循环:需要进行数据构造(guzo),能够让循环运行一次3、n次进入(jnr)循环(n为循环的最大次数)不难看出,通过上述分支的覆盖,就可以验证循环的功能以及循环设置的边界是否生效,不会出现循环没有控制好,导致实际使用(shyng)的时候会多进行一次或者少进行一次循环的情况。图4-54.6错误(cuw)推测法错误猜测大多

17、源于经验(jngyn),需要从边界值分析等其他技术获得帮助。这种技术猜测特定软件类型可能发生的错误类型,并且设计测试用例查出这些错误。对有经验的工程师来讲,错误猜测有时是唯一最有效发现bug的测试设计方法。为了最好的利用现成的经验,可以列出一个错误类型的检查列表,帮助猜测错误可能发生在单元中的位置,提高错误猜测的有效性。五、相关注意事项5.1独立性单元测试用例在设计和数据准备的过程中,需要保持良好的独立性,确保本测试的数据是不需要依赖其他输出的,这样减少相互影响。5.2尽量脱离被测代码的束缚在测试用例设计的过程中,尤其是测试用例编写在代码(di m)编写完成后进行的,一定小心被代码实现功能所影

18、响,多考虑异常分支和异常数据。5.3面向对象的语言(yyn)单元测试特点面向对象的语言进行单元测试还有一定的特点,对于每一个类,可能(knng)他出现在程序中的情况各不相同,在进行测试的时候,可以结合上面介绍的方法,根据内部方法相互调用逻辑,完成测试设计。大体划分两个方向,一个是功能性的,就是类似黑盒的方法,仅仅关注实现的功能点是否正确;另一个就是结构性测试,需要分析类中的方法相互实现逻辑,进行(jng)类似白盒测试,确保每个分支覆盖。5.4单元测试的命名(mng mng)标准1.单元测试的命名标准合理地命名测试,主要目的是为了使后来的开发者从为了理解测试而阅读代码的负担中解脱出来。测试名应该包含三部分:被测试方法名、测试场景(即测试使用的条件)、预期行为(即被测试方法的最终结果)。2.单元测试中的变量命名规范单元测试除了主要的测试功能之外,它还为API提供某种形式的文档。通过合理命名变量,帮助阅读测试的人可以尽快理解你要验证什么(从而更加理解产品代码中想要实现什么功能)。3.断言(dunyn)和操作分离4.避免(bmin)滥用setup和teardown比如在setup中准备stub和mock对象,这种情况就会导致阅读测试的人意识不到测试中使用(shyng)了模拟对象,也不知道这些模拟对象预期是什么。内容总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1