当测试人员遇上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:揭秘代码审查绝招 的相关文章

  • 接口测试之Fiddler弱网测试

    前言 目前市面上的APP功能越来越丰富 移动端测试也越显为重要 因为用户在网速慢的情况下 你的网站 软件 总能出现各种各样的问题 请不要忽略这一点 针对在不同的网络情况下 接下来 本篇要讲述的就是在通过fiddler对APP进行模拟弱网测试
  • 软件测试|Python openpyxl库使用指南

    简介 我们之前介绍过 python在自动化办公方面可以大放异彩 因为Python有许多的第三方库 其中有很多库就支持我们对office软件进行操作 熟练的使用Python对office进行操作 可以实现自动化办公 极大提升我们的工作效率 本
  • Jmeter 压测-性能调优5大注意

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

    Python 语言有一些关键字 它们具有特殊的含义 不能被用作标识符 变量名 函数名等 False 布尔类型的假值 None 表示一个空对象或无值 True 布尔类型的真值 and 逻辑与操作符 as 用于给导入的模块起别名 assert
  • Linux终端常见用法总结

    熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率 笔者结合自身学习实践 总结以下终端用法供同行交流学习 常 见 用 法 1 快捷键 1 1 Alt 在光标位置插入上一次执行命令的最后一个参数 1 2 Ctrl R
  • Locust负载测试工具实操

    本中介绍如何使用Locust为开发的服务 网站执行负载测试 Locust 是一个开源负载测试工具 可以通过 Python 代码构造来定义用户行为 避免混乱的 UI 和臃肿的 XML 配置 步骤 设置Locust 在简单的 HTTP 服务上模
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • 外包干了3个月,技术退步明显。。。。。

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

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|使用matplotlib绘制多种折线图

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 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:揭秘代码审查绝招

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