项目上线出Bug:我踩过的4个大坑及事后反思

news2025/1/12 16:02:09

最近参与的拥有7大模块的系统项目,从去年11月开始开发,共5个月左右。

该项目是用Java+Node.js开发,开发人员含外包将近10位,测试人员A从头跟到尾,其他测试人员都是紧急时刻从其他项目临时调来,包含兄弟部门开发人员B、刚毕业测试人员C,仅有的1位10多年测试经验的外援同学也只加入3天时间。

部署到预生产环境后,甲方项目经理发来了3封bug邮件,让我对自己产生了怀疑和失望。于是对出现的问题进行分类,总结原因主要有以下几点:

与项目经理沟通不充分

  • 项目经理发给甲方在预生产环境试用的测试账号是我曾经发给项目经理的在测试环境的账号。

  • 甲方项目经理在预生产环境试用前,项目经理未同步消息给组员预先进行预生产环境内测。

测试流程未切实贯彻好

预生产环境未做确认。测试测试环境测试通过后,未在预生产环境与业务人员一起做回归测试,暴露出明显的bug,比如“列表页有数据但是导出Excel中数据是空的”,“测试帐号全部出现权限配置错误”。

由于测试人员病假,预生产(包括账号权限配置)未做确认测试就被上线到生产环境。

功能缺陷

  • 开始日期和结束日期逻辑关系未做校验;

  • 含税和不含税金额逻辑关系未做校验;

  • 文本字段输入超长字符(前端未做限制+数据表字段未设置合适的字段类型与长度)。

预生产环境缺少铺底测试样例数据

预生产环境样例数据不够,更加不足以支撑后期性能测试。

针对以上出现的问题,吸取前期的经验教训,便于在后续模块及发布版本中做出如下改进。

与项目经理充分沟通

像这次项目经理要求提供账号时,应该问清楚需要哪个环境的,测试、预生产还是生产环境,能避免因为账号使用问题让甲方试用时受阻。

在预生产环境做确认测试

测试环境测试通过后,需要在预生产环境做确认测试。举个例子,台账数据的列表页导出功能,在测试环境上点击导出,可以导出Excel数据到本地,而在预生产环境上导出数据却是空的。

如果在预生产上严格执行这步测试流程,不至于出现这样的功能缺陷。

这里也提醒读者,工作中出现个人原因缺席可能会影响上线等重点里程碑事件时,一定要提前跟所有干系人沟通到位,争取得到各方支援,或延迟上线或缩减上线功能,总之保证把好质量这一最后一关。

即使后期出现质量事件,也有个交代。

确认产品需求

由于项目的需求文档是乙方设计同学D编写的,其颗粒度很粗。举个简单的例子,页面的导出功能,一句话描述如下所示:“导出数据为EXCEL文档格式,数据范围与系统权限一致。”

提供的原型如下图:


除了表明导出格式这个重点信息外,其他限制未作说明,比如列表页数据表第一列是复选框,那么用户勾选某些复选框后执行导出操作,系统是导出勾选的数据还是依然导出的是列表页上的所有数据?

诸如这样的例子不计其数,几乎每个功能在需求文档上都不能完整地呈现。

这种情况下,要对功能进行多次确认,找开发、找乙方需求D,如果推不动,向上推,找到项目经理,让项目经理找D的上级,能不能解决那也是上层商务的事情了。

编写完备的测试用例集

需求确认后,测试用例编写的颗粒度需要细到单个按钮。不能急于求成,不能因为项目经理的催促或是需求的不明确或是开发同学的低水平而减少测试用例编写的详细度,囫囵吞枣,必然会造成产品质量的低劣,尤其需要重视异常场景的覆盖。

这次用户大批量试用过程中,反馈系统导入功能体验较差。分析了需求文档和测试用例后,发现异常场景除了必填项校验外几乎没有覆盖到。导入功能总结有如下的异常场景:

1、填写必填项,不填写非必填项,应该可导入成功;

2、未填必填项,填写非必填项,应该不能导入;

3、填写的日期字段不符合系统支持的格式,日期字段异常校验(日期=32,2月有30日,这些百度能搜到更详细的,不在本文叙述重点内,感兴趣的同学自行搜索);

4、填写的数字字段填写为非数值格式,比如对demical类型的字段填写成文本型;

5、填写的金额字段超出数据表设计的长度;

6、选择的下拉选项超出模板给定的下拉列表范围;

7、填写的文本字段长度超过前端限制的字符或者数据表设计的字段长度。

预生产环境添加铺底数据

通过权限配置表在后台配置各角色账号权限,每个模块每个列表页分别以不同级别的账号录入不少于11条数据(系统默认每页显示条数=10),随着每次更新迭代加入验证数据的累积,也是在积累后期性能测试的基础数据。当然,这些基础数据的子页面也是需要有各种明细数据的。

不经历风雨怎能见彩虹,希望每一位热爱测试的读者能吸取前期经验教训,在测试之路跌倒爬起来,越战越勇!


粉丝福利


为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】HOT 100(2)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

精通编辑和校对:避免常见错误的实用方法

编辑和校对是提高写作质量的关键环节。为了精通编辑和校对,我们需要了解常见的错误并学会避免它们。 以下是一些实用方法,帮助你在编辑和校对过程中避免常见错误。 1.充分理解文本内容和目的 在开始编辑和校对之前,确保充分理解文本的内容和…

今天教会你如何在Chrome中正确使用ChatGPT!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

笔记本电脑无法正常启动怎么办?

随着计算机技术的发展,笔记本电脑在性能上已经不比台式机落后,并且因其便于携带的优势,受到广大用户的喜爱。那么,在笔记本电脑无法正常启动时,我们该怎么办呢? 笔记本电脑无法正常启动的原因 笔记本电脑无…

这就是00后吗,工作没两年,跳槽到我们公司起薪20K都快接近我了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

Vue3-02-响应性 reactive

1. setup setup 是一个组件选项,组合式 API 就定义在 setup 中,包括 data、methods、computed 和 watch 等,都定义在 setup 中。 setup 实际上是一个生命周期钩子函数,执行时间点相当于 Vue2 中 beforeCreate 和 created 的结合…

springcloud-alibaba (03)Sentinel规则-笔记

sentinel Sentinel提供的各种规则的简单说明01,流量控制一,流控规则(阈值类型:QPS)二,流控规则(阈值类型:并发线程数)三,高级选项 02,熔断降级一&…

day45_项目

SQL /* 在分页查询中,有一些常见变量名 pageNo 当前页(页码),默认是1 pageSize 每页展示数据的条数,需求给定 pageCount 共多少页pageCounttotal%pageSize0?(total/pageSize):(total/pageSize)1; total 共多少条数据,select count(id)计算出 */ -- 假设,每页展示4条 …

LEAP软件操作基础/安装与注册/基本原理和数据结构

本次内容突出与实例结合,紧密结合国家能源统计制度及《省级温室气体排放编制指南》,深入浅出地介绍针对不同级别研究对象时如何根据数据结构、可获取性、研究目的,构建合适的能源生产、转换、消费、温室气体排放(以碳排放为主&…

电力系统直流潮流计算研究【IEEE9节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

JavaEE初阶学习:网络原理

1.应用层 应用层和代码直接相关的一层 决定了数据要传输什么,拿到数据之后如何使用 约定应用层数据报,数据格式,就是在自定义协议~~ 如何约定? 1.确定要传输那些信息,(根据需求走的) 外卖程序,有一个核心的功能,加载商家列表 请求 用户ID 用户的位置(经纬度) 响应 …

使用Python脚本和简单的图形用户界面轻松切割MP3文件

应用场景: 需要将大型MP3文件切割成较小的部分以便上传或发送。需要从MP3文件中提取特定的音频片段,以便用于其他目的。需要快速制作铃声或音乐片段,以用于手机等设备。 源代码: import subprocess import wxclass MyFrame(wx.…

常微分方程ODE和Neural Ordinary Differential Equations

微分方程(英語:Differential equation,DE)是一種數學方程,用來描述某一類函数與其导数之间的关系。微分方程的解是一個符合方程的函數。而在初等数学的代数方程裡,其解是常数值。 常微分方程(英…

蓝桥杯青少组python:第十二届国赛

选择题 1、设s"Hi LanQiao",运行一下哪个选项代码可以输出"LanQiao"子串() A、print(S[-7:]) B、print(s[-6:-1]) C、print(s[-7:0]) D、print(s[-7:0]) 2、已知a2021.0529,运行一下代码选项可以输出2021.0…

c# vs2013 制作水晶报表并导出为 pdf

一两年前接触的,当时没有记录,现在把他写下来。 vs2013制作水晶报表,应该要用到插件安装,可以自行搜索安装插件。 在Views/RPT文件夹下创建.rpt后缀的水晶报表文件(这里的文件夹位置根据自身随意更改)。 在…

JavaScript数组去重的常见方法 Set filter indexOf

JavaScript实现对象深拷贝的方法(5种) 知识回调(不懂就看这儿!)场景复现实现数组去重的五种方法1.Set()Array.from()2.filter() indexOf()3.for 嵌套 for,splice 去重4.利用Map()5.利用includes 实际开发问…

如何入门编程

随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?欢迎大家积极讨论 一、自学编程需要注意什么? 对于我个人的理解,其实自学编程最重要的就是兴趣。你得培养编程兴趣。 所以在学…

linuxOPS基础_linux文本文件统计及查找

wc命令 显示文件信息 语法 \# wc [选项] 文件名称选项选项说明-l表示lines,行数(以回车/换行符为标准)-w表示words,单词数 依照空格来判断单词数量-c表示bytes,字节数(空格,回车,换…

【LED子系统深度剖析】十、详细实现流程(番外篇)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、LED驱动初始化流程1.1 LED驱动匹配以及设备的创建1.1.1 gpio_led_probe1.1.2 gpi…

[SpringBoot]Service与Controller层

目录 关于Service 关于Controller 关于各组件的处理流程 补充: Service保证数据完整性是怎么体现的? 以下代表复制属性,把来源adminAddNewParam复制到目标 admin里面 关于Service Service的核心价值在于:组织业务流程&#…