作为一个测试工程师, 日常工作就是找bug, 那么我们一般都会遇到什么类型的bug,对于这种bug,有什么预防的方法呢?

软件测试工程师的作用

测试工程师分为QA 和 QC 两种方向. QA 是通过构建质量测试体系方案来保证产品质量,QC是通过测试人员的技术手段发现bug 来管控质量.对于我个人暂时的理解来说,QA偏向于对测试团队流程的管理, QC是偏向于对个人技术的深入挖掘.

遇见的bug

作为一个测试工程师, 对于找bug, 就是日常的工作, 那么我们来讲讲这些bug 要如何区分呢?
我认为,遇见的bug, 分为四大类型, 一个是设计缺陷(很可能是新旧业务逻辑冲突), 一个是项目流程造成的, 一个是开发人员的技术实现导致的,最后一个是环境原因.

设计缺陷

设计缺陷导致的bug, 分为以下的几种情况:
一是真的设计有缺陷.例如有个需求, 前端要轮询拿到爬虫端实时采集的数据,但是没有限制轮询次数和时间,导致有些时候,该次采集没有拿到结果,但是前端一直在轮询,假设用户不刷新页面 ,当前页面就会一直继续轮询,会对服务器的性能造成很大的影响.
二是新的业务逻辑和旧的业务逻辑有冲突,导致新功能做出来的时候,旧的功能受到影响一并出现问题了, 有时候还倒霉一些,会捅到了历史bug, 影响了整体的进度. 我试过,提出的一个bug, 开发说看了看, 这里的代码有两千行,还都没有注释,好几年之前的代码来.
三是设计不合理, 对前端的性能或者后台服务器的性能有很大的损耗. 例如产品在设计的时候, 光考虑了美观,做了很多没有必要的js 渲染, 前端页面性能太差,进来一个页面,要三四秒才能加载完成.

项目流程造成的缺陷

由于项目流程不规范,人员信息不同步,导致出现的bug, 这种一般是可以提前预防的,但是往往又很难预防到.
例如, 0到1 的项目首次上线的时候, 上线之前, 爬虫端的服务器资源,由于高层认为该项目短期内不能盈利,不愿意给太好的配置,导致要生产和测试要共用一台服务器,共用一个sql 服务器. 在上线前一天, 才开始做数据隔离. 假设测试没有提前想到这点, 而其他人也没有想到,就会导致数据污染.
也例如, 我还有一次0到1 的项目上线, 上线那一天, 发现安卓和IOS的数据都无法提交到java 后台, 最后发现是人员沟通不同步导致的. 由于APP端把 生产服务器的域名搞错了,把数据提到到了 另一个项目的服务器上了, 导致了这个项目的真正生产服务器没有收到数据. 这个就是沟通不同步导致的.
也例如,还有一种常见的,就是上线之前,一直加需求,导致测试时间和质量变差, 上线之后,就出现了一些非主流程的bug, 遭到了客诉.
前面两个都可以预防,但是第三种情况往往无解,由于公司的盈利模式决定的,要精耕细作之后再上线的前提是这个项目足够盈利.

开发人员的技术实现

开发人员的技术高低,往往也会有不同程度的bug出现.
一般来说, 应届生或者刚毕业一两年的开发,他们的代码质量会比三四年左右的开发差一些的.曾经项目组里有一个刚毕业的前端开发, 他的代码质量较差,一般他的需求提测就需要认真测试, 而项目组里的另一个前端, 则是毕业好几年的开发,他的代码质量就比较高, 一般只要不是遇到环境问题, 基本提测的时候冒烟都很顺利.
当然, 就是老开发,也有容易犯错的地方, 一般老开发不会在什么边界值这种低级地方犯错,他们往往是在业务理解上犯错.

环境原因

这种就没啥好说的了, 环境原因不可避免,还经常发生.
例如,我当前有个项目,前端用的是微服务和分布式, 代码跑在k8s上, 每次重构都是重新去国外拉取前端的包,重新生成一个干净的前端环境. 然后就经常更新的时候,发版本失败, 好不容易发版本一个成功了, 由于是分布式,还要再发另一个包, 搞不好就更新很久. 还试过有发版本的发布机挂了, 而正好发布机坏了的这个时候, 运维部门在聚餐, 加上还是跨部门合作,效率很低.
这种情况下,我们项目组后面决定把服务器的权限,自己拿回来了, 我们自己来维护, 不用再走跨部门合作.

总结

开发不容易,测试也不容易, 老是守着上线, 还要深入理解业务逻辑, 每次上线完成后,就感觉累的很, 线上质量不好还要背锅,很倒霉的.