当测试人员遇上CodeReview:揭秘代码审查绝招

2023-11-05

引言:测试人员的业务流程理解程度,直接影响测试用例的准确性和全面性。为了提高测试用例编写水平和测试效率,有两个关键方面需要注意。

首先,通过仔细阅读需求文档并与产品经理进行充分沟通的方式可以达到这一目标。其次,通过进行代码审查来提高代码质量、减少错误,并对团队合作产生积极影响。

在这篇文章中,笔者将分享一些关于使用Go语言编写项目和进行日常代码审查的方法和实践经验

CodeReview方法和工具

使用工具

goland:将代码clone到本地,可跟进代码逻辑和实现方式;同时还可设置断点、启动调试会话模式。

版本控制git插件:通过git插件,可全局查看开发针对需求的实现逻辑,以及后期每次修改代码的变动点。

postman:可通过工具模拟接口,向本地开启的服务发送请求,进行debug,从而定位bug。

切入点

通过diff代码方式,查看改动点,缩小测试范围。

通过接口方式,依据开发提供的接口文档,去跟进代码,来评估代码是否正确实现了所需的功能。

通过日志记录方式,可辅助故障排查,定位代码位置。

全局CodeReview实践

项目提测前,测试人员如有充分熟悉项目的时间,那我们就可以大致走读一下代码。一般情况下,笔者会优先对数据层进行比对分析。如:

1.数据源的准确性

代码最终获取结果的数据表是否满足项目需求,以及数据的筛选条件甚至是排序都可重点关注。

那么如何去找到这些数据库表的位置?

做法:

①以笔者所测项目为例,找到接口定义如/list/account,定位到account.go类,分别跟进每个方法的调用,找到dao相关文件,即可发现调用的数据库表。一般表操作语句会有where、limit、order by 语句等获取数据的条件。

②当分析完开发的代码,要与自己推断出的表及查询条件,进行对比和补充,并完善到测试用例,在用例评审时三方同时敲定、确认,避免重大错误的产生。

③如调用方法过多,可将调用关系罗列出来,避免造成跟进混乱。

图片

2.数据存储的原子性和一致性

对于数据库的访问,是否开启事务,如成功则提交事务;如失败则回滚事务。保证操作的一致性。所以我们就需要了解事务相关,关键词:Rollback()、Commit(),代码参考如下:

图片

案例:如订单审核功能,点击通过按钮,调用两张表的写入,一个是订单信息的表,一个是财务的表。

异常:如没有事务的引入,则订单表可能插入失败了,但是没有被回滚,仍然去进行插入财务表,财务插入成功,这就造成了订单表和财务表数据的不统一,而引发功能性bug。

3.分支逻辑覆盖

我们可通过关键字如if else、 case,for等代码块,来分析判断逻辑是否合理、是否存在遗漏、是否冗余。功能逻辑的覆盖本来就要求测试人员对需求有全面、准确的了解,那么为了补足自身思想的局限性,我们就可以进行codereview,分析并补全测试用例。

4.容易遗漏功能

尤其功能发生异常时需要发送报警邮件、打印日志功能,注意err的位置,是否有sendMail、log相关关键词。关注发送邮件方法,亦可快速查看出邮件包含的主题、内容等,也能判断出发送内容是否完整。

图片

以上是新功能提测前,全局codereview的入手经验。

测试过程中,我们还可关注一些细节的处理。

1.如特殊字符、默认值、最值、空值等入库的处理,是否符合预期。关注对于参数是否调用strings内置包或者unicode内置包中的方法,进行了处理。

• 对于'\t', '\n', '\v', '\f', '\r'的特殊字符

• 对于收尾空格的处理

• 对于连续空格的处理

2.如健壮性中异常处理问题,检查代码是否正确地处理了可能发生的错误和异常情况。确保代码不会因为错误而产生意外行为,此时多关注error和defer关键字,error代码块中根据实际需求return、doSomething()等,defer关键字确保资源有没有被正确释放。

3.如健壮性中变量踩踏问题,一般可以大致看一眼方法内是否存在相同变量名称的赋值语句,是“:="还是"="。如有用":="赋值代码,可着重分析,其是否合理,笔者曾经遇到过一个不合理的赋值导致的bug。

图片

在上述示例中,需求本意是通过查询条件,取与全量数据的交集赋值给变量validIDs。

但是由于红线部分②误使用“:=”赋值,那么一旦出了if的作用域,当前validIDs获取到的交集数据就失效了,造成在最下边③return时,返回的实际上是①的值。

由此可见,当我们进行筛选后,返回的量并不是筛选后的,而是全量,从而引起功能逻辑错误。

善用代码diff

何时可进行diff呢?

当需求为微小变更时,可优先使用diff策略,缩小测试范围。

• 如修改列表的升降序排序,查看db.order,DESC,ASC等关键字;

• 如新增一个枚举值类型,通过diff判断是否仅可测试新增内容;

• 如针对某个产品线特殊操作,通过代码比对,是否仅仅取出了某个类型处理,仅回归个别类型即可。

当开发修改bug后,可优先使用diff策略。

如定位所改函数getAccount();使用全局搜索功能,ctrl+alt+F输入方法;结果列表就是调用到本次修改的地方;那么再针对每个调用一一定位,反推代码是在哪个功能调用。以此来圈定回归范围,提升测试信心。

CodeReview收益

• 对于历史久远的已上线需求,没有明确的文档和负责人,此时codereview就起到作用了,当梳理完代码后,对于功能的认知更能加深一步。

• 测试范围更加明确,以前对于修改代码后,需要回归的地方完全依赖于开发,那么现在可以自己根据调用关系来圈定范围,和开发互相补位。

• 有效提升项目完成效率,测试过程中发现bug,可走读代码大致定位原因,将详细的复现步骤与错误代码位置相结合,提高开发修复bug的效率,也减少了给开发复现bug的时间,从而正向推送项目的进行。

总结

以上就是笔者在实际项目中使用CodeReview的一些经验和体会,CodeReview不仅能帮助我们更高质、高效完成项目测试任务,而且对自身的技术能力提升非常有帮助,强烈推荐在实际项目中多多使用。

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当测试人员遇上CodeReview:揭秘代码审查绝招 的相关文章

  • 最佳利用Mock提升测试效率的7个技巧!

    再聊这个问题之前 我们先了解一下公司技术架构的演变过程 这样我们才能真正体会到我们为什么要使用 Mock功能 单体应用 在早期 大部分公司的应用技术栈主要可以分为两大类 LAMP Linux Apache MySQL PHP 和 MVC S
  • 【Mysql】InnoDB 引擎中的页目录

    一 页目录和槽 现在知道记录在页中按照主键大小顺序串成了单链表 那么我使用主键查询的时候 最顺其自然的办法肯定是从第一条记录 也就是 Infrimum 记录开始 一直向后找 只要存在总会找到 这种在数据量少的时候还好说 一旦数据多了 遍历耗
  • Python接口自动化测试处理不同接口间参数依赖

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试/测试开发/全日制/测试管理丨Python关键字

    Python 语言有一些关键字 它们具有特殊的含义 不能被用作标识符 变量名 函数名等 False 布尔类型的假值 None 表示一个空对象或无值 True 布尔类型的真值 and 逻辑与操作符 as 用于给导入的模块起别名 assert
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • Selenium小技巧!

    Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器 如 Chrome Opera 和 Microsoft Edge 中的工具 用于帮助开发人员调试和研究网站 借助 Chro
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 19年通过校招进入广州某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 月薪2W的软件测试工程师,到底是做什么的?

    在生活中 我们常常会遇到以下几种窘迫时刻 准备骑共享单车出行 却发现扫码开锁半天 车子都没有反应 手机导航打车 却发现地图定位偏差很大 司机总是跑错地方 买个水 却遭遇自动售货机吐币 或者不找零钱 好不容易休息打个游戏 却一直出现卡顿 闪退
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错

随机推荐

  • 区块链与分布式数据库的区别

    1 来源 分布式数据库 应对互联网条件下大规模数据的增删改查需求 解决传统数据库面临的通信开销大 性能差 容量可扩展性差和可靠性低的问题 通信开销大 假设只有一个数据库 并且放在北京 那么纽约的用户就需要等待网络从纽约到北京的往返通信延迟
  • 使用python写一个爬取百度前10条热搜

    import requests from bs4 import BeautifulSoup def get baidu hot url https top baidu com board tab realtime headers User
  • 宝塔面板如何部署静态网站?一分钟教会你最简单的方法

    宝塔面板如何部署静态网站 如果你有做好的静态网站源码 想要直接上传到宝塔面板 有的朋友可能不知道放在哪里 这里教大家一个最简单的方法 首先 一键部署好你的网站 这里用WordPress一键部署来举例 填写好你的网站信息 保存好数据库名和密码
  • 神经网络的过拟合是什么,神经网络过拟合的表现

    神经网络过拟合的现象是什么 发生原因 过拟合现象一般都是因为学习的过于精确 就好比让机器学习人脸 取了100个人的脸训练 但是由于你学习的过精确 导致除了这个样本100人外其他的人脸神经网络都认为不是人脸 实际我们只需要学习人脸的基本特征而
  • lstm时间序列预测+GRU(python)

    lstm时间序列预测 GRU python 1 数据分布 2 完整代码 3 实验结果 4 相关代码 4 1 GRU的修改 4 2 BiLSTM的修改 可以参考新发布的文章 1 BP神经网络预测 python 2 mlp多层感知机预测 pyt
  • 1、muduo网络库 ---- Linux平台下muduo编译安装

    muduo库的介绍 一个基于reactor反应堆模型的多线程C 网络库 作者是陈硕大神 muduo库是基于 boost 库开发的 所以需要在 Linux 平台上首先安装 boost 库 1 boost 库安装 1 编译源码安装 第一种方法是
  • Linux Nginx 配置 Thinkphp 两种方式

    第一种常见 前端vue后端Thinkphp接口以 api开头 这种Thinkphp不用启动 但是需要启动 php pfm 遇到的问题是我多个Thinkphp 项目在不同的目录 配置也是对应目录 但是不同域名访问接口 时都指向了第一个Thin
  • MQ--3 Message queuing)>>>>kafka

    MQ 1 Message queuing gt gt gt gt RabbitMQ MQ 2 Message queuing gt gt gt gt ZooKeeper 三 Kafka http kafka apache org 官网链接
  • windows的磁盘操作之二——初始化磁盘

    转载自 windows的磁盘操作之二 初始化磁盘 bunny技术坊的技术博客 51CTO博客 原文如下 上一节中我们介绍了一些基本概念和主要的API 本节开始我们将列举并分析一些实例 本文中的所有代码我都在vs2008下测试过 读者只需要替
  • Flutter使用C++

    总体 flutter通过dart语言和C 交互 dart的ffi包完成交互 ffi封装了c 的基本数据类型 包括结构体 和一些基本方法 我们可以直接在dart中访问c 的内存数据等 相对于jni更加直接 基本步骤 官方步骤 https do
  • 数据挖掘七种常用的方法汇总

    数据挖掘 Data Mining 就是从大量的 不完全的 有噪声的 模糊的 随机的实际应用数据中 提取隐含在其中的 人们事先不知道的 但又是潜在有用的信息和知识的过程 这个定义包括几层含义 数据源必须是真实的 大量的 含噪声的 发现的是用户
  • 将本地jar 批量发布到 Nexus 私服

    前言 在日常开发过程中 我们有遇到将项目依赖通过 mvn deploy 发布到自己的公司的私服 以便其他人 环境统一下载入口 但是也有一些特殊情况 比如只能拿到第三方 或甲方 的依赖jar 并拿不到源码 所以只能将jar 通过 mvn de
  • 有限域GF(2^8)内乘法代码实现以及原理

    在密码学中经常用到有限域的乘法 一般在AES中用到的是GF 2 8 有限域内乘法 什么是有限域呢 有限域通俗的讲就是函数的运算结果全都包含在一个域中 不同于实数域 有限域有一个最大值 所有超过这个最大值的数都会经过一定的方法使他回到这个域中
  • 主成份分析(PCA)详解

    主成分分析法 Principal Component Analysis 大多在数据维度比较高的时候 用来减少数据维度 因而加快模型训练速度 另外也有些用途 比如图片压缩 主要是用SVD 也可以用PCA来做 因子分析等 具体怎么用 看个人需求
  • Docker基础(1)—— Docker基本概念

    Docker基础 1 Docker基本概念 Docker基础 2 Docker安装及基础操作 关于docker是什么以及docker的教程网上有很多资料 GitBook上的Docker教程是比较官方和全面的 以下我结合手册的学习及在慕课网上
  • mini2440按键中断

    ARM中断控制系统 按键驱动程序设计 一 Arm中断控制系统 1 查询方式 程序不断地查询设备的状态 并做出相应的反应 该方式实现比较简单 常用在比较单一的系统中 比如 一个温控系统中可以实用查询的方式不断检测温度变化 特点 实现简单 但C
  • 操作系统——LRU算法以及置换次数、缺页数、缺页率计算

    目录 一 LRU是什么 二 LRU算法的规则 三 缺页 换页 四 计算页面置换次数 缺页数 一 LRU是什么 LRU 全称是Least Recently Used 即最近最少使用页面置换算法 从字面意思上可以看出 选择最近最久未使用的页面予
  • python猜硬币正反面_python 编写猜硬币小游戏

    猜硬币解法1 import random guess while guess not in 0 1 print 猜硬币游戏 print 猜一猜硬币是正面还是反面 guess int input 正面 请输入0 反面 请输入1 注意要用int
  • 【STM32】

    失败了也挺可爱 成功了就超帅 文章目录 前言 1 JTAG SWD引脚 2 禁用JTAG功能 2 1 标准库 2 2 HAL库 3 禁用SWD JTAG功能 3 1 标准库 3 2 HAL库 总结 前言 最近在画板子耍 我LED灯选用的 P
  • 当测试人员遇上CodeReview:揭秘代码审查绝招

    引言 测试人员的业务流程理解程度 直接影响测试用例的准确性和全面性 为了提高测试用例编写水平和测试效率 有两个关键方面需要注意 首先 通过仔细阅读需求文档并与产品经理进行充分沟通的方式可以达到这一目标 其次 通过进行代码审查来提高代码质量