代码级测试方法


# 代码级测试方法

# 常见代码错误类型

# 语法特征错误

存在形式:

  • 从编程语法上就能发现的错误

  • 比较隐晦的语法错误,不会再编译时出现,但会在运行时出错

比如:

def demoMethod()
{
   a[10];
  a[10]=88;
  ...
}
1
2
3
4
5
6

# 边界行为特征错误

通常都是发生在一些边界条件上,代码在执行过程中发生异常,崩溃或者超时

比如:

def division(a, b)
{
  return a/b;
}
1
2
3
4

# 经验特征错误

根据过往经验发现代码错误

# 算法错误

  • 代码完成的计算(或者功能)和之前预先设计的计算结果(或者功能)不一致

  • 完全的算法错误并不常见,因为不能准确完成基本功能需求的代码,是一定不会被递交的

# 部分算法错误

在一些特定的条件或者输入情况下,算法不能准确完成业务要求实现的功能

# 代码级测试常用方法

代码级测试方法主要分为两大类,分别是静态方法和动态方法

# 静态方法

在不实际执行代码的基础上发现代码缺陷的方法,又可以进一步细分为人工静态方法和自动静态方法

人工静态方法

通过人工阅读代码查找代码中潜在错误的方法,通常采用的手段包括,开发人员代码走查、结对编程、同行评审

局限性

  • 过度依赖于代码评审者的个人能力,同样的评审流程,发现的问题却相差悬殊
  • 如果开发人员自行走查自己的代码,会存在“思维惯性”,开发过程中没有能考虑的输入和边界值,代码走查时也一样会被遗漏
  • 由于完全依赖人工,效率普遍较低

自动静态方法

在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术,并结合各种预定义和自定义的代码规则,对程序代码进行静态扫描发现语法错误、潜在语义错误,以及部分动态错误的一种代码分析技术

优点:可以发现语法特征错误、边界行为特征错误和经验特征错误这三类“有特征”的错误

缺点:不能发现算法错误和部分算法错误这两种“无特征”的错误

# 动态方法

通过实际执行代码发现代码中潜在缺陷的方法,同样可以进一步细分为人工动态方法和自动动态方法

人工动态方法

设计代码的输入和预期的正确输出的集合,然后执行代码,判断实际输出是否符合预期

人工动态方法是最主要的测试手段,可以真正检测代码的逻辑功能

关注点:是“什么样的输入,执行了什么代码,产生了什么样的输出”,所以最善于发现算法错误和部分算法错误

自动动态方法

基于代码自动生成边界测试用例并执行,以捕捉潜在的异常、崩溃和超时的方法

自动动态方法,可以覆盖边界行为特征错误

不足:对于发现算法错误无能为力

(完)