测就测呗,有啥难的!

3、如何进行单元测试?(1)

上一篇 / 下一篇  2009-03-27 10:39:31 / 个人分类:单元测试

3.1代码错误

3.1.1分类

代码错误可以分为两个方面:一个是性能问题,一个是功能错误。

性能问题可以分为时间性能和空间性能。时间性能就是指代码的执行效率不符合预期。空间性能就是指代码所占用的资源超出预期。由于单元测试面对的测试目标是比较小的代码单元,时间性能和空间性能通常都比较难于衡量,所以单元测试一般不测试性能问题。性能问题的测试通常是在系统测试或者性能测试阶段进行。

功能错误就是程序没有实现正确的功能。具体来说就是某种输入下没有产生预期的输出。功能错误可以分为有特征错误和无特征错误两种。有特征错误分为行为特征和语法特征。行为特征是在执行的过程当中会产生一些可以捕捉到的行为方面的特征,比如崩溃或者超时。语法特征错误就是在不执行的情况下,通过扫描,自动的或者人工的分析,发现代码当中的某些特征可能潜在一些错误,比如在条件表达式当中使用了赋值操作符,但是编译器是允许这种语法的。语法特征错误通常只是潜在的,不能明确肯定这里有错误,具体来说还可能包含数组越界这一类的。因为在C/C++语言当中数组是具有语法特征的,它是有上下限的,而上下限很多时候是静态的,所以可以通过对比来判断数组是不是有可能越界。这些都算是语法特征错误。总的来说,静态分析可以找出来的错误就叫语法错误。

单元测试主要测试代码的功能错误。

3.1.2产生的原因

从代码单元错误的角度来看,一般有三种原因造成:

1、 设计错误,就是在设计代码单元的功能时,就已经有错误了。

2、 录入错误,就是在编码的过程中敲键盘敲错了。

3、 算法错误,就是在编写代码的时候考虑得不够全面,不够完善,或者是考虑错了。

算法错误占大多数,其中部分算法错误又占算法错误的大部分。部分算法错误指的是一个程序可能有十种输入,在这十种输入当中有三四种我们是做了正确处理的,可能还有几种是有错误的,甚至有几种是根本没有想到,没有进行处理,从而导致的错误。

3.1.3特征

代码错误有一些基本的特性,包括偶然性,随机性和单一性。一般来说开发流程比较好,编码规范比较好,都有助于减少代码错误,还有就是程序员的经验比较丰富,对业务比较熟悉也可以减少代码错误的数量。但是这些只是在程度上,数量上有所减少,要想完全预防错误还是非常困难的。

 

3.2测试方法

从测试的主体来说可以分为两类,一类是靠工具自动完成;一类是靠人工完成。

从测试的方法来说可以分为两种,一种是静态(分析代码),一种是动态(执行代码)。这样我们可以组合出四种测试的方法。

1、 人工静态分析:通过人工阅读代码来查找错误,一般是交叉阅读,即代码走查。

2、 自动静态分析:扫描代码中某些错误特征。用工具来扫描,只能发现语法特征错误,因为工具总是要根据某一些预设的语法才能判断代码是否有问题

3、 自动动态测试:自动生成用例并执行,捕捉某些行为特征。例如异常、崩溃、超时。它只能发现行为特征错误,因为工具再先进也不可能自动了解代码的功能,除非有一些特征被捕抓到,否则它是不可能知道这里是否有错误的。

4、 人工动态测试:人工设定程序的输入和预期的正确输出,执行程序,并判断实际输出是否符合预期。“人工”,是指用例的输入输出由人工设定,其他工作可以自动化。一般来说人工动态测试称为狭义单元测试。

我们用一个简单的例子来介绍一下四种测试方法。

int Add(int a, int b)
{
   return a-b;
};

这是一个加法函数,错误是把“+”号写成“-”。如果是人工静态分析,可能发现这个错误。如果是自动静态分析则不会发现这个错误,因为这里没有什么语法特征。如果是自动动态测试也通常是不会发现的,因为它不会产生崩溃,超时这些可以捕抓得到的行为特征。如果是用人工动态的方法,我们可以输入两个1,接着执行代码,输出不为2的话就让工具自动报错,这样就可以马上发现这里有问题。人工动态测试的基本过程:设定初始状态,接着执行程序(需要一些驱动让程序能够执行起来),然后让工具或测试代码自动判断结果是否正确。在人工动态测试过程中,用例的输入和输出人工设定,其他工作可以自动化。

 


TAG:

 

评分:0

我来说两句

日历

« 2024-05-07  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 4871
  • 日志数: 10
  • 建立时间: 2008-10-22
  • 更新时间: 2009-03-30

RSS订阅

Open Toolbar