软件测试之单元测试
1、
什么是单元测试
软件测试的方法有不少种,从不一样的角度来看,也有不一样德分类,若从一个软件开发的过程来看,通常把软件测试分红单元测试、集成测试、确认测试、验收测试、系统测试,可见,单元测试是软件开发过程当中进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其余部分相隔离的状况下进行测试。单元测试是由程序员本身来完成,最终受益的也是程序员本身。能够这么说,程序员有责任编写功能代码,同时也就有责任为本身的代码编写单元测试。执行单元测试,就是为了证实某段代码的行为和咱们指望的一致。
单元测试通俗的说就是一个实现简单功能的函数,用一组特定的输入
(
测试用例
)
测试函数的功能是否正常,而且返回了正确的输入。
2、
单元测试之基本路径法
单元测试的方法也有几种,我要介绍的是运用比较普遍的基本路径法。基本路径法事基于程序控制流程图
(
控制流程图和程序的语句能够说是对应
)
的一种对某段代码的各个执行路径一一进行测试的方法。因此,说到基本路径法就不得不先介绍一下程序控制流程图。
例:
注:
上图是组成完整控制流图的几个基本的单元结构。
下面我给你们写一段程序,而后画出这个程序的控制流图
代码:
控制流图:
注
:
图中的数字是指代的代码的行号。看到这个流图以后,你们多少会有点疑惑,图中的那些代码行号是怎么选择出来的,为何要选择图中的那些呢?是这样的:
图中选择的行号的代码都是出现了选择分支,循环操做,判断等,顺序执行的语句能够合并成。这也是画控制流图的通常规则。
3、
圈复杂度
有了控制流图之后,很天然地,咱们要知道咱们到底要写几个测试用例,才能来知足基本路径测试。
当你们看到上面介绍的控制流程图的时候,学过离散数学或者是数据结构的人,我想都是会有很一种很熟悉的感受,不错,控制流程图就是来源于图及有向图
(
这会不会再一次让你们感受到数学对咱们的重要性呢
?)
下面我就介绍一下新的概念——圈复杂度。
圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保全部语句至少执行一次的测试数量的上界。
公式圈复杂度
V
(
G
)
=E-N+2
,
E
是流图中边的数量,
N
是流图中结点的数量。
公式圈复杂度
V
(
G
)
=P+1
,
P
是流图
G
中断定结点的数量。
通俗的说圈复杂度就是判断单元是否是复杂,是否是好测试的标准。通常来讲若是圈复杂度若是大于
20
就表示这个单元的可测试性很差,太复杂
从图中咱们能够看到,
V
(
G
)
=10
条边
-8
结点
+2=4
V
(
G
)
=3
个断定结点
+1=4
上图的圈复杂图是
4
。这个结果对咱们来讲有什么意义呢?它表示咱们只要最多
4
个测试用例就能够达到基本路径覆盖。
4、
程序基本路径
如今咱们知道了起码要写
4
个测试用例,可是怎么设计这
4
个测试用例?导出程序基本路径,根据程序基本路径设计测试用例子。
程序基本路径:基本独立路径就是从程序的开始结点到结束能够选择任何的路径遍历,可是每条路径至少应该包含一条已定义路径未曾用到的边。(看起来很差理解,让咱们看例子)。
让咱们看上面的流程图:从结点
4
到
24
有几条路径呢?很明显:
A 13->35
B 13->15->17->35
C 13->15->23->29->33->13->35
D 13->15->23->25->33->13->35
还有吗??
E 13->15->23->29->33->13->15->17->35
算吗?
不算,为何?由于上面的
4
条路径已经包括了全部的边。第
5
条路径已经不包含没有用过的边了。全部的路径都遍历过了。
好了,如今咱们有了
4
条基本独立路径根据独立路径咱们能够设计测试用例。
A 13->35
输入数据:
flag=0
,或者是
flag<0
的某一个值。
预期结果:
temp=0.
B 13->15->17->35
输入数据:
count =1; flag=0
预期结果:
temp=101.
C 13->15->23->29->33->13->35
输入数据:
count =1;flag=1
预期结果:
temp=10.
D 13->15->23->25->33->13->35
输入数据:
count =1; flag=2
预期结果:
temp=20.
上面的测试用例还能够简化吗?固然能够
来看
路径
A 13->35
和
C 13->15->23->29->33->13->35
,路径
1
是路径
4
的真子集,因此
1
是能够没必要要的。上图的圈复杂度是
4
。这个结果对咱们来讲有什么意义呢?它表示咱们只要最多
4
个测试用例就能够达到基本路径覆盖。因此说圈复杂度标示是最多的测试用例个数,不是必定要
4
个测试用例才能够。不过有一点要申明的是测试用例越简化表明你的测试越少,这样程序的安全性就越低了。
接下来的任务就是根据咱们的测试用例来使用测试工具进行测试了。
5、
小结
到这,单元测试的基本路径法已经简单的给你们介绍了一下,一个完整的测试是多种测试方法结合在一块儿进行的。另外,我还想说的一点就是,不管你设计多少测试用例,不管你运用了多少种的测试方法,也无论你的测试方案是多么的完美,你都不可能
100%
的发现全部的
BUG
,咱们进行测试,要作的就是用最少的资源,作最多的测试检测,来让程序尽量少的出现
BUG
。还有一点就是,穷举测试是最有效的,可是那是不可能的,这也是咱们这个基本路径法运用这么普遍的一个缘由。
想要了解更多的关于单元测试的知识能够登录
51CTO
技术博客!