现在的位置: 首页 > 综合 > 正文

C/C++单元测试理论精要(二)

2014年04月05日 ⁄ 综合 ⁄ 共 977字 ⁄ 字号 评论关闭

1.2 单元测试的目标和方法

 

    单元测试的目标是什么呢?就是完整检测代码单元的功能逻辑。找出代码单元本身的所有功能逻辑错误,具体来说,就是检测对数据的各种分类是否考虑全面,处理是否正确。单元测试并不是用来代替系统测试、性能测试的,它的目标相当明确,就是检测代码单元本身的功能逻辑错误。

   

   
    如果时间紧张,应该优先测试哪些代码呢?代码的功能逻辑越复杂,也就是算法密集度越高,可能的错误越多,越需要全面的测试,测试效益越大。所以,如果时间不够,应该优先测试算法密集的代码。80-20规则在软件开发中同样存在,也就是80%的代码错误可能存在于20%的代码中,20%的代码可能占用了80%的开发调试时间。这20%就是算法密集的代码,即使只对这些代码进行单元测试,也可以产生巨大的效益。代码复杂度和测试价值可以用工具来统计。

 

    测试方法主要有两种:静态和动态。静态方法主要由工具扫描和分析代码。动态方法则需要执行代码。

   

    静态方法能发现哪些错误呢?从静态测试的角度来看,代码错误可分为代码缺失,语义错误,一般错误。代码缺失是分类遗漏造成的,也就是程序员没有考虑到某些输入,没有编写相应代码。语义错误就是通过分析代码的语法含义,有可能判断的错误,例如,条件语句中将等于操作符写成了赋值操作符、数组越界、除零错。其他错误就是一般错误。对于语义错误,静态测试可能能够发现。对于代码缺失,静态测试无法发现,因为代码不存在,也就无从分析。其他错误,静态测试不能发现,因为工具不了解代码的设计功能。很显然,静态测试并没有真正检测代码的功能逻辑,根本不知道这个代码是干什么的,实现什么功能才对,只是通过分析代码的自然特性来检测错误,所以作用是很有限的。

   

    动态方法是这么做的:首先,依数据的分类列出输入,这个分类是跟程序功能紧密相关的,一个分类,相当于是一个功能点。然后,执行被测试代码,然后,判断输出是不是符合预期,如果不符合,就报告错误。只要测试数据是完整的,就可以完整覆盖代码的功能逻辑,
发现所有功能逻辑错误。静态测试所能发现的错误,如条件语句中将等于操作符写成了赋值操作符,数组越界,除零错,都会表现为功能不正确,动态测试当然也能发现。因此,要想达到基本的测试效果,要依靠动态方法。我们说的单元测试,主要是指动态方法,也就是动态测试。

抱歉!评论已关闭.