编写单元测试用例说明书的依据是啥

author author     2023-04-13     346

关键词:

编写单元测试用例说明书的依据是什么

一、 单元测试的概念

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

测试的覆盖种类

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<0的某一个值。
预期结果: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都可以。

接下来根据测试结果编写测试报告,测试人,时间,结果,用例,是否通过,格式网上一大把,每个公司的格式也不一样就不说了。
参考技术A 相关的标准,比如GB之类,还有项目的研制要求如研制任务书等,还有具体的测试来源,详细设计文档以及一些其他文档。 参考技术B 详细设计说明

软件测试之如何编写单元测试用例

单元测试是以程序设计说明书为指导,测试模块范围内的重要控制路径,以揭露错误。当程序编好以后,将它录制在媒体上,或者直接由终端键盘输入到机中进行调试。测试的相对复杂性和所发现的错误受到单元测试所限定的范... 查看详情

测试理论--如何编写一个好的测试用例

 第一:依据分明   众所周知,一个项目首先立项,然后经过一系列的动作到了需求分析,做完需求分析后,测试就可以做测试需求,然后就可以写测试用例了。所以写测试用例的依据就是需求。这么说太笼统,举一个例... 查看详情

测试用例的编写原则

...确性测试:输入用户实际数据以验证系统是满足需求规格说明书的要求;测试用例中的测试点应首先保证要至少覆盖需求规格说明书中的各项功能,并且正常。2、容错性(健壮性)测试:程序能够接收正确数据输入并且产生正... 查看详情

测试用例编写规范

...用例编写准备从配置管理员处申请软件配置:《需求规格说明书》和《设计说明书》;根据需求规格说明书和设计说明书,详细理解用户的真正需求,并且对软件所实现的功能已经准确理解,然后着手制订测试用例。 二、测... 查看详情

为 Preact 编写单元测试用例

】为Preact编写单元测试用例【英文标题】:WritingUnitTestCasesforPreact【发布时间】:2018-04-0419:33:47【问题描述】:我对Preact很陌生,我必须为Preact中的应用程序编写单元测试用例。我可以发现jest和酵素可以用于相同的用途,但我每... 查看详情

如何编写脚本自动运行androidstudio测试用例

...测试,说明代码的健壮性已经非常好了。在Eclipse下也没编写过测试用例,总觉得多此一举。然后看了AndroidStudio新建的工程目录下总会自动生成test文件夹,看着很不爽,所以需要了解它是怎么工作的。在工程目录与main同级的test... 查看详情

七分钟教会你如何编写一个合格的测试用例(代码片段)

...测试用例编写依据测试用例编写应严格根据PRD(产品说明书)没有PRD应根据与客户的沟通和确认结果编写开发的技术文档和流程图2、测试用例的组成元素【用例编号】测试用例的编号。【用例等级】测试用例的重要级别&... 查看详情

测试用例内容和编写方法

一、测试用例内容测试用例包含:项目名称,测试环境,设计人,更新日期用例编号,功能模块,子模块,用例标题,前置条件,测试步骤,预期结果,实际结果,用例优先级,软件版本,是否自动化 二、用例优先级划分1.L... 查看详情

unittest单元测试框架总结(代码片段)

...目录一、unittest模块的各个属性说明二、使用unittest框架编写测试用例思路三、使用unittes 查看详情

如何为 JWT 策略编写单元测试用例

】如何为JWT策略编写单元测试用例【英文标题】:HowtowriteunittestcaseforJWTstrategy【发布时间】:2020-09-1909:05:55【问题描述】:我是新来的passport.js,并试图涵盖我的JWT策略的单元测试用例。任何人都可以建议如何做到这一点?//Setup... 查看详情

单元测试

...来设计组件行为,从而为组件的测试打下基础。 3、编写单元测试程序(或测试用例)确认组件行为:这个阶段 查看详情

为 iPhone / iPad 编写单元测试的最佳方法是啥?

】为iPhone/iPad编写单元测试的最佳方法是啥?【英文标题】:WhatisthebestapproachforwritingunittestsforiPhone/iPad?为iPhone/iPad编写单元测试的最佳方法是什么?【发布时间】:2010-04-1505:07:56【问题描述】:我正在开发一个iPad应用程序。我不... 查看详情

我们如何为嵌套函数编写单元测试用例(Jasmine)?

】我们如何为嵌套函数编写单元测试用例(Jasmine)?【英文标题】:HowdowewriteUnittestcases(Jasmine)fornestedfunctions?【发布时间】:2017-05-2902:51:47【问题描述】:我正在为以下场景编写一个测试用例。代码覆盖率没有完全覆盖。不知道... 查看详情

编写 Gradle 脚本以运行 Eclipse Android 测试项目的单元测试用例

】编写Gradle脚本以运行EclipseAndroid测试项目的单元测试用例【英文标题】:WritingGradlescripttorununittestcasesforEclipseAndroidTestproject【发布时间】:2014-06-2619:12:12【问题描述】:我有一个简单的HelloWorldAndroid项目(内置在EclipseIDE中),... 查看详情

测试用例编写思路

  测试用例的编写可不简单呢,写一份专业的测试用例,是所有测试工作者考虑的内容,其实用例的编写是可以通过一些思路来进行,不少比较成熟的公司为了提升用例的专业性,就会有自己的用例库,包括流程、关注点... 查看详情

Spring Boot:如何为删除其余模板编写单元测试用例

】SpringBoot:如何为删除其余模板编写单元测试用例【英文标题】:Springboot:Howtowriteunittestcasefordeleteresttemplate【发布时间】:2020-11-2120:51:14【问题描述】:我正在尝试为HttpHandler类编写单元测试用例,该类具有用于删除的其余模板... 查看详情

java示例代码_为此方法编写单元测试用例

java示例代码_为此方法编写单元测试用例 查看详情

在 Objective C 中编写单元测试用例时,在单独的方法中重构 XCTest 断言的代码重复

】在ObjectiveC中编写单元测试用例时,在单独的方法中重构XCTest断言的代码重复【英文标题】:RefactorcodeduplicationofXCTestAssertionsinaseperatemethodwhilewritingunittestcasesinObjectiveC【发布时间】:2018-03-2912:55:32【问题描述】:我有一个包含多... 查看详情