如何编写单元测试用例 - 范文中心

如何编写单元测试用例

09/08

一、 单元测试的概念

  单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。

  测试的覆盖种类

  1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。

  2.判定覆盖(也叫分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。

  3.条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次。

  4.判定——条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次,并且每个可能的判断结果也至少执行一次。

  5.条件组合测试:设计足够的测试用例,运行所测程序,使程序中每个判断的所有条件取值组合至少执行一次。

  6.路径测试:设计足够的测试用例,运行所测程序,要覆盖程序中所有可能的路径。

  用例的设计方案主要的有下面几种:条件测试,基本路径测试,循环测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖,和路径覆盖。

二、开始测试前的准备

  在开始测试时,要先声明一下,无论你设计多少测试用例,无论你的测试方案多么完美,都不可能完全100%的发现所有BUG,我们所需要做的是用最少的资源,做最多测试检查,寻找一个平衡点保证程序的正确性。穷举测试是不可能的。所以现在进行单元测试我选用的是现在一般用的比较多的基本路径测试法。

三、开始测试

  基本路径测试法:设计出的测试用例要保证每一个基本独立路径至少要执行一次。

  函数说明 :当i_flag=0;返回 i_count+100

当i_flag=1;返回 i_count *10

否则 返回 i_count *20

输入参数:int i_count ,

int i_flag

输出参数: int i_return;

代码:

1 int Test(int i_count, int i_flag)

2 {

3 int i_temp = 0;

4 while (i_count>0)

5 {

6 if (0 == i_flag)

7 {

8 i_temp = i_count + 100;

9 break;

10 }

11 else

12 {

13 if (1 == i_flag)

14 {

15 i_temp = i_temp + 10;

16 }

17 else

18 {

19 i_temp = i_temp + 20;

20 }

21 }

22 i_count--;

23 }

24 return i_temp;

25 }

  1.画出程序控制流程图

  圈中的数字代表的是语句的行号,也许有人问为什么选4,6,13,8......作为结点,第2行,第3行为什么不是结点,因为选择结点是有规律的。让我们看程序中;第2行,第3行是按顺序执行下来的。直到第4行才出现了循环操作。而2,3行没有什么判断,选择等分支操作,所以我们把2

,3,4全部合并成一个结点。其他的也是照这个规则合并,然后就有了上面的流程图。

  2.计算圈复杂度

  有了图以后我们要知道到底我们有写多少个测试用例,才能满足基本路径测试。

  这里有有了一个新概念——圈复杂度

  圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保所有语句至少执行一次的测试数量的上界。

  公式圈复杂度V(G)=E+N+2,E是流图中边的数量,N是流图中结点的数量。

  公式圈复杂度V(G)=P+1 ,P是流图G中判定结点的数量。

  通俗的说圈负责度就是判断单元是不是复杂,是不是好测试的标准。一般来说如果圈复杂度如果大于20就表示这个单元的可测试性不好,太复杂(也许有人觉得无所谓,但是如果你们公司实行了CMMI5的话,对这个是有规定的)。

  从图中我们可以看到,

V(G)=10条边-8结点+2=4

V(G)=3个判定结点+1=4

  上图的圈复杂图是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。

  3.导出程序基本路径。

  现在我们知道了起码要写4个测试用例,但是怎么设计这4个测试用例?

  导出程序基本路径,根据程序基本路径设计测试用例子。

  程序基本路径:基本独立路径就是从程序的开始结点到结束可以选择任何的路径遍历,但是每条路径至少应该包含一条已定义路径不曾用到的边。(看起来不好理解,让我们看例子)。

  让我们看上面的流程图:从结点4到24有几条路径呢?

1 B(4,24)

2 C,E,J(4,6,8,24)

3 C,D,F,H,A,B(4,6,13,15,22,4,24)

4 C,D,G,I,A,B(4,6,13,19,22,4,24)

还有吗??

5 C,D,C,I,A,C,E,J(4,6,13,19,22,4,6,8,24)算吗?

  不算,为什么?因为上面的4条路径已经包括了所有的边。第5条路径已经不包含没有用过的边了。所有的路径都遍历过了。

  好了,现在我们有了4条基本独立路径根据独立路径我们可以设计测试用例。

1 B(4,24)

输入数据:i_flag=0,或者是i_flag

预期结果:i_temp=0.

2 C,E,J(4,6,8,24)

输入数据: i_count =1; i_flag=0

预期结果:i_temp=101.

3 C,D,F,H,A,B(4,6,13,15,22,4,24)

输入数据: i_count =1; i_flag=1

预期结果:i_temp=10.

4 C,D,G,I,A,B(4,6,13,19,22,4,24)

输入数据: i_count =1; i_flag=2

预期结果:i_temp=20.

  这里的输入数据是有路径和程序推论出来的。而要注意的是预期结果是从函数说明中

导出,不能根据程序结构中导出。

  为什么这么说?

  让我们看程序中的第3行。

  int i_temp=0; 假如开发人员一不小心写错了,变成了int i_temp=1; 根据程序导出的预期结果就会是一个错误的值,但是单元测试不出来问题,那单元测试就失去了意义。

  有人也许会问这么简单的函数就有4个测试用例,如果还复杂一些的怎么办?上面的测试用例还可以简化吗?答案是可以。

  我们来看 路径 1 B(4,24)和 4 C,D,G,I,A,B(4,6,13,19,22,4,24),路径1是路径4的真子集, 所以1是可以不必要的。上图的圈复杂度是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。所以说圈复杂度标示是最多的测试用例个数,不是一定要4个测试用例才可以。不过有一点要申明的是测试用例越简化代表你的测试越少,这样程序的安全性就越低了。

四、完成测试

  接下来根据测试用例使用工具测试NUNIT,VS2005都可以。

  接下来根据测试结果编写测试报告,测试人,时间,结果,用例,是否通过,格式网上一大把,每个公司的格式也不一样就不说了。


相关内容

  • 关于嵌入式软件测试
    关于嵌入式软件测试 作者:软件测试工程师 发布时间:[ 2010/6/28 16:00:35 ] 推荐标签: 嵌入式软件测试与普通软件测试的目的一样,都是为了发现软件缺陷,而后修正缺陷以提高软件的可靠性.嵌入式系统安全性的失效可能会导致灾难 ...
  • 软件测试试题库
    一.单选题(2分/题,共30分) 二.多选题(1分/题,共10分) 三.名字解释题(3分/题,共9个) 试题一 (http://xiaolifang84.blog.163.com/blog/#m=0) 一.判断正误题 1. 测试是调试的一个 ...
  • 招标技术文件编写要素及注意事项
    招标技术文件编制要素及注意事项 倪 翼 招标技术文件必须具备总则及总的要求;工程(设备)概况;使用条件.技术参数.性能及功能要求 测试与检验 质量保证及管理 技术服务和设计联络等七个方面的要素.在编写过程中,根据设备需求一览表中的清单,以七 ...
  • 公路工程地质勘察报告的编写
    公路工程地质勘察报告的编写 一.公路工程地质勘察内容 1.路线工程地质勘察.主要查明与路线方案及路线布设有关的地质问题.选择地质条件相对良好的路线方案,在地形.地质条件复杂的地段,重点调查对路线方案与路线布设起控制作用的地质问题,确定路线的 ...
  • 软件测试范围
    软件测试 一. 单项选择题:(每题1分,共20分) 1. 软件测试的目的是 ( B ) (A)发现程序中的所有错误 (B)尽可能多地发现程序中的错误 (C)证明程序是正确的 (D)调试程序 2. 下列___不属于测试原则的内容 ( D ) ...
  • 软件需求分析模板
    项目名称 (The English Name) 软件需求分析报告 XXX项目组 修订表 审批记录 目 录 1. 引言.............................................................. ...
  • 软件测试试卷(有答案)
    模拟试题1 一.选择题(每题2分,共30分) 1.导致软件缺陷的最大原因是( ) A. 编写程序 B. 设计方案 C. 软件需求说明书 D.软件规格说明书 2.在下面几个语句中,判断哪一个是错误的 A)发现和修复产品中的软件缺陷越早,开发费 ...
  • 进销存管理系统实训报告
    企业进销存管理系统实训报告 小组成员:成波.钟秀.马姝婷.邢亚可.龙浩 目 录 一. 系统分析 . ...................................................................... ...
  • 高中物理沪科版教材内容安排及特点
    本课程适用于: 高中物理沪科版教材内容安排和特点 作者:上海分公司 延吉中路校区 于婧璐 课程内容要点: 一.沪科版"二期"课改教材的特点 二.本地教材进度与考试节点 三.单元知识点把握 四.教材单元教学内容的课时 五. ...
  • IT名企软件测试笔试题--华为篇(答案版)
    判断题(10*1分): 1.软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性.( √ ) 2. 白盒测试侧重于程序结构,黑盒测试侧重于功能,其中白盒测试需要程序员参与,黑盒测试不需要 (×) 3.单元测试通常应该先进行" ...