测试学习7

代码级测试的基本理念和方法

  • 通常情况下,代码级测试工作都是由,开发人员完成,但是测试框架选型、覆盖率统计工具选型、测试用例涉及原则都需要资深的测试工程师参与
  • 代码级测试这个系列,为你呈现代码级测试技术入门、方法论、用例设计、覆盖率衡量、典型难点、解决思路
  • 代码级测试的测试方法一定是一个测试方法集合,而不是一个测试方法,因为单靠一种测试方法不可能发现所有的潜在错误,一定是一种方法解决一部分问题,多种方法解决全部问题

常见的代码错误类型

  • 1,语法特征错误
指从编程语法上就能发现的错误,如不符合语法的语句
如果使用IDE进行代码开发,那么IDE能提示大部分错误,只有解决了这类错误,才能编译通过,但是会有一些比较隐晦的语法特征错误,IDE不能及时发现,也不影响编译,只在运行阶段报错
  • 2,边界行为特征错误
边界行为特征错误是指,代码执行过程中发生异常,崩溃或者超时,之所以称为边界,是因为此类错误通常是发生在一些边界条件上
  • 3,经验特征错误
根据以往经验发现错误
如:在出现逻辑判断的地方出现了赋值语句
  • 4,算法错误
指代码完成的计算和之前预先设计的计算结果不一致
直接关系到要实现的业务逻辑,在整个代码级测试中占比最大,但是完全的代码错误并不常见,因为不能准确完成基本功能需求的代码,是一定不会被提交的
  • 5,部分算法错误
指在一系列特定条件或者输入情况下,算法不能准确完成业务要求实现的功能,这类错误是整个代码级测试国臣过程中最常见的类型

代码级测试常用方法

  • 代码级测试方法主要分为两大类:静态方法和动态方法

  • 静态方法:不实际执行代码的基础上发现缺陷的方法,分为人工静态方法和自动静态方法

  • 动态方法:实际执行代码发现缺陷,分为人工动态方法和自动动态方法

  • 人工静态方法

通过人工阅读代码查找代码中潜在错误的方阿飞,主要包括开发人员代码走查,结对编程,同行评审等
理论上可以发现5类错误,但是实际效果不理想
主要是过度依赖评审者的个人能力,而且完全依赖人工,效率普遍偏低
  • 自动静态方法
指在不运行代码的情况下,通过词法分析、语法分析、控制流分析等技术,并结合各种预定义和自定义的代码规则,对程序代码进行静态扫描发现错误
自动静态方法可以发现语法特征错误、边界行为特征错误和经验特征错误这三种'有特征'的错误
对于算法错误无能为力,根本原因在于,自动静态方法并不清楚代码的具体业务逻辑
  • 人工动态方法
指设计代码的输入和预期正确输出的集合,然后执行代码,判断实际输出是否符合预期
在代码级测试中,人工动态方法是最主要的测试手段,可以真正检验代码的逻辑功能,关注点是'什么样的输入,执行什么代码,产生什么样的输出',所以善于发现算法错误和部分算法错误
  • 自动动态方法
又称自动边界测试方法,指基于代码自动生成边界测试用例并执行,捕捉潜在的异常、崩溃和超时的方法
自动动态方法,可以覆盖边界行为特征错误,通常能够发现'忘记处理某些输入'引起的错误,因为容易忘记的输入,往往是边界输入,但是对于发现算法错误无能为力,毕竟工具不可能了解代码要实现的逻辑功能

静态测试方法

  • 人工静态方法属于流程上的实践,依赖于个人能力,这种方法在企业级测试中被广泛使用
  • 自动静态方法,可以通过自动化的手段,以很低的成本发现并报告各种潜在的代码质量问题,目前被广泛采用,并已经集成到CI/CD流水线了,作为测试工程师需要知道完成代码静态扫描环境的搭建

人工静态方法

  • 代码走查:开发人员检查自己的代码
  • 结对编程:两个开发人员结成对子在一台计算机上共同完成开发任务
  • 同行评审:代码提交到仓库前,需要和同技术级别或者更高级人员进行评审,通过评审后才会提交
  • 以上三种方式,使用最普遍的是同行评审,出现问题后责任明确;结对编程效果不错但是人员利用率低,用于非常关键和底层算法的代码实现

自动静态方法

  • 主要有三个特点
相比于编辑器,可以做到对代码更加严格、个性化审查
不真正检查代码的逻辑功能,只站在代码本身的视角,基于规则,尽可能多的发现代码错误
由于静态分析算法并不实际执行代码,会存在一定的误报率
  • 由于自动静态方法具有自动化程度高,检查发现问题成本低以及能够发现代码问题广等特点,被企业广泛用于前期代码质量控制和代码质量度量

  • 实际工程实践中,企业往往会结合自己的编码规范定制规程库,并于本地IDE开发环境和持续集成的流水线进行高度整合

  • 代码本地开发阶段,IDE环境可以自动对代码进行自动静态检查,代码提交到仓库后,CI/CD流水线也会自动触发代码静态检查,如果遇到潜在错误,就会自动邮件通知代码提交者

  • 目前自动静态扫描通常都会和持续集成的流水线做绑定,最常见的应用场景是提交代码后,持续集成流水线会自动触发自动静态扫描,这一功能是通过jenkins以及jenkins上的SonarQube插件来完成的,当你在Jenkins中安装了SonarQube Plugin,并将SonarQube服务器相关的配置信息加入Plugin之后,就可以在Jenkins Job配置中增加Sonar静态扫描步骤了

  • python中可以用pylint进行检查

动态测试方法

  • 需要实际执行代码去发现潜在代码错误的测试方法
  • 由于自动动态方法并不能理解代码逻辑,所以仅仅被用于发现异常、崩溃、超时这类有特征错误,对于代码逻辑功能的测试,主要还是依靠人工动态方法

人工动态方法

  • 主要用于发现算法错误和部分算法错误,是最主要的代码级测试手段
  • 代码级测试的人工动态方法其实就是单元测试所采用的方法
  • 单元测试中的三个最主要的难点
单元测试用例输入参数的复杂性
单元测试用例预期输出的复杂性
关联依赖的代码不可用
  • 单元测试用例’输入参数’的复杂性
1,被测函数的输入参数
2,被测函数内部需要读取的全局静态变量
3,被测函数内部需要读取的类成员变量
4,函数内部调用子函数获得的数据
5,函数内部调用子函数改写的数据
6,嵌入式系统中,在终端调用中改写的数据
  • 单元测试用例’预期输出’的复杂性
1,被测函数的返回值
2,被测函数的输出参数
3,被测函数所改写的成员变量和全局变量
4,被测函数中进行的文件更新,数据库更新,消息队列更新等
  • 关联依赖的代码不可用
关联依赖的代码---假设被测函数中调用了其他函数,那么被调用的其他函数就是被测函数的关联依赖代码
大型软件中往往是并行开发的,一般会采用桩代码来模拟不可用的代码,通过打桩补齐未定义部分
桩函数要与原函数完全相同的原型,仅仅内部实现不同,这样测试代码才能正确连接到桩函数

自动动态方法

  • 自动动态方法的重点是:如何实现边界测试用例的自动生成
  • 解决这个问题最简单直接的方法是,根据被测函数的输入参数生成可能的边界值
任何数据类型都有自己的典型值和边界值,可以为他们预先设定好典型值和边界值,然后组合就生成了
定义各种数据类型的典型值和边界值
根据被测函数原型,生成测试用例代码模板
将参数中分别取值,进行循环组合,分贝替换模板中对应内容,即可生成用例集
  • 由于该方法不可能自动了解代码要显示的逻辑功能,所以不会验证预期输出,而是通过try–except来观察
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值