代码级测试

代码级测试的测试方法一定是一套测试方法的集合,而不是一个测试方法。 因为单靠一种测试方法不可能发现所有潜在的错误,一定是一种方法解决一部分或者一类问题,然后综合运用多种方法解决全部问题。

常见代码错误类型

第一,语法特征错误

语法特征错误是指,从编程语法上就能发现的错误。比如,不符合编程语言语法的语句等。

有的是在编译阶段可以发现,有的必须要在运行阶段才可以发现。

第二,边界行为特征错误

边界行为特征错误是指,代码在执行过程中发生异常,崩溃或者超时。之所以称为“边界”,是由于此类错误通常都是发生在一些边界条件上。比如0作为除数。

第三,经验特征错误

经验特征错误是指,根据过往经验发现代码错误。

第四,算法错误

算法错误是指,代码完成的计算(或者功能)和之前预先设计的计算结果(或者功能)不一致。

第五,部分算法错误

部分算法错误是指,在一些特定的条件或者输入情况下,算法不能准确完成业务要求实现的功能。这类错误,是整个代码级测试过程中最常见的类型。

代码级测试方法

主要分为两大类,分别是静态方法和动态方法。

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

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

静态方法

人工静态方法

人工静态方法是指,通过人工阅读代码查找代码中潜在错误的方法,通常采用的手段包括,开发人员代码走查、结对编程、同行评审等。理论上,人工静态方法可以发现上述五类代码错误,但实际效果却并不理想。理论上可以发现所有的代码错误,但也因为其对“测试人员”的过渡依赖,局限性非常大

自动静态方法

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

自动静态方法可以发现语法特征错误、边界行为特征错误和经验特征错误这三类“有特征”的错误,但对于算法错误和部分算法错误这两种“无特征”的错误却无能为力。根本原因在于,自动静态方法并不清楚代码的具体业务逻辑。

你需要根据不同的开发语言,选择不同的工具。目前有很多工具都可以支持多种语言,比如 Sonar、Coverity 等,你可以根据实际需求来选择。Facebook出的Infer。常见的语言,C,Java, Pathon等都可以分析。

动态方法

人工动态方法

人工动态方法是指,设计代码的输入和预期的正确输出的集合,然后执行代码,判断实际输出是否符合预期。单元测试,采用的测试方法本质上就是人工动态方法。

在代码级测试中,人工动态方法是最主要的测试手段,可以真正检测代码的逻辑功能,其关注点是“什么样的输入,执行了什么代码,产生了什么样的输出”,所以最善于发现算法错误和部分算法错误

目前,不同的编程语言对应有不同的单元测试框架,比如,对 Java 语言最典型的是 Junit 和 TestNG,对于 C 语言比较常用的是 Google Test 等。

自动动态方法

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

自动动态方法,可以覆盖边界行为特征错误, 通常能够发现“忘记处理某些输入”引起的错误(因为容易忘记处理的输入,往往是“边界”输入)。但是它对于发现算法错误无能为力,毕竟工具不可能了解代码所要实现的功能逻辑。(比如?)

每种测试方法,所能覆盖的错误类型也不同,所以进行代码级测试时,你需要综合运用这些方法,并结合所在公司或者项目的编码规范一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值