一、 单元测试的概念
单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。
测试的覆盖种类
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都可以。
接下来根据测试结果编写测试报告,测试人,时间,结果,用例,是否通过,格式网上一大把,每个公司的格式也不一样就不说了。
分享到:
相关推荐
我们将从CMMI3工程活动中的实现与测试文件中的单元测试用例入手,介绍如何编写单元测试用例,如何进行测试,并如何记录测试结果。 在单元测试用例的编写中,需要考虑到各种边界值和异常情况,以确保测试的正确性和...
详细的软件单元测试用例模板,包括:一、范围(标识、系统概述、文档概述),二、引用文档,三、测试准备(软件项、硬件和固件项、其他测试前准备),四、被测软件单元,五、测试用例,六、需求可追踪性,七、注释等...
通用单元测试用例写法 单元测试用例写作是软件测试中非常重要的一部分,好的单元测试用例写作可以确保软件的质量和稳定性。本文将详细介绍单元测试用例写作的方法和规范。 软件测试用例设计是软件测试的重要组成...
单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。用例的设计方案主要的有下面几种:条件测试,基本路径测试,循环测试。
软件测试中如何编写单元测试用例(白盒测试) 单元测试是软件测试中的一种重要方法,它可以帮助开发者和测试人员更好地了解软件的功能和性能。编写单元测试用例是单元测试的关键步骤,它可以确保软件的每个单元都能...
本指南将深入探讨单元测试用例的设计原则和最佳实践,以帮助开发者编写出高效且全面的测试用例。 一、单元测试的基础概念 单元测试是对软件中的最小可测试单元进行检查,如函数、方法或对象。它的目的是发现早期...
### 编写有效测试用例 #### 一、引言 在软件开发过程中,测试用例的编写是一项至关重要的任务。良好的测试用例能够确保软件的质量,并帮助开发团队及早发现潜在的问题。本文将深入探讨如何编写有效的测试用例,...
【酒店管理系统单元测试用例详解】 酒店管理系统是一个复杂的软件系统,涵盖了多个子系统,包括客房预订、前台接待、前台收银、账务管理、管家系统、电话系统、客历系统和合约系统,以及经理系统和总经理系统。这些...
### 单元测试用例设计规范详解 #### 一、引言 单元测试作为软件测试的基础环节,在确保软件质量方面发挥着至关重要的作用。本文旨在详细介绍单元测试用例设计的基本原则和技术,帮助软件测试人员更好地理解和掌握...
单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。 测试的覆盖种类 1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。 2....
测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例
测试用例设计是软件质量保证的关键环节,它涵盖了测试用例的基本概念、设计与编写、评估以及管理等多个方面。理解并熟练掌握这些知识点对于确保软件产品的质量和稳定性至关重要。 首先,我们要了解测试用例的基本...
b)游戏测试的测试用例有什么作用 c)测试用例应该包括什么 d)功能点模块化理念 e)场景测试法协助功能点细分 f)用例的设计原则 四、编写过程注意事项此上为个人心得总结一部分,望大家一块来讨论获得更多原文转自:...
5. **编制人**:负责编写测试用例的测试工程师的名字,便于沟通和协作。 6. **修改历史**:记录测试用例的修改历程,包括何时、何人进行的修改,以及修改原因,有助于保持测试用例的更新和准确性。 7. **编制时间*...
接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板接口测试用例编写模板...
基于Linux平台的单元测试用例执行框架 本文主要介绍了基于Linux平台的单元测试用例执行框架的设计和实现。该框架是代码测试系统(Code Testing System,CTS)的重要组成部分,用于执行测试用例,捕获插装结果。在...