《软件测试52讲》——代码测试篇
《软件测试52讲》
代码测试篇
25——掌握代码级测试的基本理念与方法
常见代码错误类型
1、语法特征错误
语法特征错误是指,从编程语法上就能发现的错误。比如,不符合编程语言语法的语句等。
2、边界行为特征错误
边界行为特征错误是指,代码在执行过程中发生异常,崩溃或者超时。之所以称为“边界”,是由于此类错误通常都是发生在一些边界条件上。
3、经验特征错误
经验特征错误是指,根据过往经验发现代码错误。
4、算法错误
算法错误是指,代码完成的计算(或者功能)和之前预先设计的计算结果(或者功能)不一致。
5、部分算法错误
部分算法错误是指,在一些特定的条件或者输入情况下,算法不能准确完成业务要求实现的功能。
代码级测试常用方法
1、静态方法
人工静态方法:人工静态方法是指,通过人工阅读代码查找代码中潜在错误的方法,通常采用的手段包括,开发人员代码走查、结对编程、同行评审等。
自动静态方法:自动静态方法是指,在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术,并结合各种预定义和自定义的代码规则,对程序代码进行静态扫描发现语法错误、潜在语义错误,以及部分动态错误的一种代码分析技术。
自动静态方法工具:Sonar、Coverity
2、动态方法
人工动态方法:人工动态方法是指,设计代码的输入和预期的正确输出的集合,然后执行代码,判断实际输出是否符合预期。
单元测试框架:Java(Junit和TestNG),Python(UniTest、Pytest)
自动动态方法:自动动态方法,又称自动边界测试方法,指的是基于代码自动生成边界测试用例并执行,以捕捉潜在的异常、崩溃和超时的方法。
这四类测试方法的特点,以及可以覆盖的错误类型,可以概括如下:
人工静态方法,本质上通过开发人员代码走查、结对编程、同行评审来完成的,理论上可以发现所有的代码错误,但也因为其对“测试人员”的过渡依赖,局限性非常大;
自动静态方法,主要的手段是代码静态扫描,可以发现语法特征错误、边界行为特征错误和经验特征错误这三类“有特征”的错误;
人工动态方法,就是传统意义上的单元测试,是发现算法错误和部分算法错误的最佳方式;
自动动态方法,其实就是自动化的边界测试,主要覆盖边界行为特征错误。
26——深入浅出之静态测试方法
人工静态方法
(1)代码走查(Code Review)
(2)结对编程(Pair Programming)
(3)同行评审(Peer Review):如果你所在的项目使用 GitHub 管理代码,并采用GitFlow 的分支管理策略,那么在递交代码或者分支合并时,需要先递交 Pull Request(PR),只有这个 PR 经过了所有评审者的审核,才能被合并。
这也是同行评审的具体实践。目前,只要你采用 GitFlow 的分支管理策略,基本都会采用这个方式。
自动静态方法
自动静态工具 Sonar
目前,自动静态扫描通常都会和持续集成的流水线做绑定,最常见的应用场景是当你递交代码后,持续集成流水线就会自动触发自动静态扫描,这一功能是通过 Jenkins 以及 Jenkins 上的SonarQube 插件来完成的,
当你在 Jenkins 中安装了 SonarQube Plugin,并且将SonarQube 服务器相关的配置信息入 Plugin 之后,你就可以在 Jenkins Job 的配置中增加Sonar 静态扫描步骤了。
27——深入浅出之动态测试方法
人工动态方法——单元测试
单元测试用例“输入参数”的复杂性
1、被测试函数的输入参数
2、被测试函数内部需要读取的全局静态变量
3、被测试函数内部需要读取的类成员变量
4、函数内部调用子函数获得的数据
5、函数内部调用子函数改写的数据
6、嵌入式系统中,在中断调用中改写的数据
单元测试用例“预期输出”的复杂性
1、被测函数的返回值
2、被测函数的输出参数
3、被测函数所改写的成员变量和全局变量
4、被测函数中进行的文件更新、数据库更新、消息队列更新等
关联依赖的代码不可用
采用桩代码来模拟不可用的代码,并通过打桩补齐未定义部分
自动动态方法
自动动态方法是,基于代码自动生成边界测试用例并执行来捕捉潜在的异常、崩溃和超时的测试方法
解决这个问题最简单直接的方法是,根据被测函数的输入参数生成可能的边界值