如何将bug扼杀在摇篮里

2023-10-30 16:20
文章标签 bug 扼杀 摇篮

本文主要是介绍如何将bug扼杀在摇篮里,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于bug,我想大家都不陌生,就像是产品世界里的‘恐怖分子’ 也是最不招人喜欢的家伙,主要是因为bug经常潜藏于无形之中,而一旦发作轻则影响用户体验,重则造成经济损失,我们来看一组兑吧近半年的bug数据。



通过bug统计数据图可以看出,线上bug逐月再下降 。那么问题来了:

有人会问:怎么做到bug每月都是递减的呢?

通过对历史bug数据的分析,有关产生bug的原因,得出结论如下:

  • 需求快速迭代的模式下,发布频繁造成了一定比例的线上bug;

  • 开发修改代码后未经过测试环节,直接发布至生产环境,导致线上bug;

  • 测试同学在用例设计及执行阶段因测试覆盖度不够导致漏侧;

针对以上出现的问题和原因,我们做了哪些预防措施呢?

总体采用 “事前预防”,“事中控制”,“事后总结改进”的思想:




事先预防

主要做的3件事


交付流程规范


(1) 开发在新增/变更中提交代码后,触发单元测试,检查代码中基本的逻辑问题,实践中单测的覆盖率和维护由开发同学自己保证,目前jenkins核心应用的覆盖率在50%左右。

(2) 部署开发环境,开发进行联调自测,主要对新的功能进行基本的验证。

(3) 自测完成后发布测试环境,由测试同学进行集成测试,包括回归测试和新功能的验证,以及对核心接口的小压测。

(4)测试完成后发布预发环境,由测试同学进行回归测试,预发环境与生产环境在同一个网络中,共享同一个数据库,但是它具有一个独立的依赖环境,如独立的上下游和中间件。

(5) 预发测试完成后,正式发布生产环境并对生产环境执行冒烟测试。

以上是一个变更的生命周期,也是一次完整的持续交付流程,我们可以在持续交付的流程中实现测试的卡点,测试不通过,无法进入下一个阶段的发布。

发布周期控制

从每周不限次数的发布到规范后每周的周二/周四的发布,控制由发布频繁造成的线上问题,我们通过‘火车模型’来讲述现在的发布流程,火车通常都是提前售票,固定时间点发车,到点发车,错过只能搭下趟车。


分支管理


曾经因分支絮乱,争抢测试环境,一方面导致需求delay;另一方面,测试质量不能把控,通过规范分支管理流程,极大提高研发效率和代码质量。


线上质量监控

在正式发布生产环境时或周末无人值守时,通过cat工具对线上质量进行监控,一旦有问题通过告警就能及时发现解决,避免问题的大面积扩大。主要包括:

  • 系统日志监控报警:监控各个系统的异常日志及告警;

  • 业务数据监控:监控各个业务点的历史及当前值;

  • 数据库及缓存监控:监控数据库和缓存的运行情况;

  • 系统间依赖及调用情况:提供系统间依赖调用和接口访问数据的分析;



提前暴露问题(发布生产环境前)

主要采用分层的测试模型



  • 需求测试:在需求评审期间,对需求文档进行业务逻辑测试,提前规避业务逻辑上的bug。

  • 单元测试:在开发阶段一旦有代码变动,能快速最低成本发现问题,最重要的是:单元测试是验证业务流程的第一道防线。

  • 集成测试:是验证业务流程第二道防线,也是重中之重的一道防线,通过人工手动进行新功能验证+自动化进行地毯式的回归测试,测试覆盖度 达100%,从某种程度来说,解决了因测试同学覆盖度不够导致漏测的问题

  • UI测试:是验证业务流程的最后一道防线,采用静态测试+动态测试的方法,验证其正确性。

通过以上每道防线的验证,可以事先预防80%的bug的产生,有人又会问:为什么是80%而不是100%呢?因为剩下20%可能来自于外部因素引起,而这些外部因素又是人为不可控制的,举个例子:停电了,服务器停止运行,所有依赖服务器上的应用都会停止运行。

事中控制

通过下面的内容来聊聊,遇到问题我们是怎么处理的呢?。

快速处理

产生bug后,第一时间复现和定位问题,遵循‘今日事今日毕’的原则,倘若遇到难以定位和难以解决的问题,首先会给出预估的修复bug的时间节点,其次若因外部原因阻碍了bug修复,2天内给予答复。

研发质量规范和提升

研发质量的提升目前主要包括代码审核、代码质量检查

  • 代码审核:提测时开发owner对组内开发同学请求合入分支的代码进行审核,通过code review提高代码质量和代码规范,减少较低级的错误。

  • 代码扫描:使用sonar进行代码质量管理, 通过sonar可以监控代码的bug,覆盖率,坏味道,复杂度等代码指标。

事后总结与改进

当出现bug后,不要怕,要对它深入分析,我们可以明白这个bug的机制:为什么会产生?如何去预防它?下一次我们如何更容易地发现它?只要花一点时间去理解我们的 bug,而不是仅仅是尽快修正它,我们就可以从中得到经验。这样,因为一个缺陷所浪费的时间也可以转化为投入。在很大程度上可以提前预防bug的产生,确保类似的错误永远不会再发生,就可以将bug扼杀在摇篮里。

感谢来自兑吧技术团队Ms. Zhang的投递


这篇关于如何将bug扼杀在摇篮里的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309122

相关文章

JavaBug系列-解决SpringBoot返回Xml结构的问题

JavaBug系列之SpringBoot返回Xml结构的问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 作者:Java医生 教学: Java企业项目辅导,专注于辅导新入职员工,解决各种问题! V:study_51ctofx 一、关于错误信息 如图,SpringBoot请求返回Xml格式信息 通过以上信息分析,

JavaBug系列- Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class load

JavaBug系列之Mysql驱动问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 Java/一对一零基础辅导/企业项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 V:study_51ctofx 一、关于错误信息 APPLICATION FAILED TO START Description: Fai

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考:又报gyp ERR!为什么有那么多人被node-sass 坑过? 主要有如下三方面错误,请自查: 1.node,npm版本需与node-sass版本匹配,像node-sass(^4.14.1)就得node 14.x版本才可以,node 16不行 gyp ERR! build error15 gyp ERR! stack Error: `

排查 MyBatis XML 配置中的 IF 语句与传值名称不匹配的 Bug

文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 前言,在改一个bug得时候发现一个有意思得问题,就是mybatis得xml中if判断得问题,传值名字不匹配依旧可以进行判断,如下图 传值userName,但是有意思得事情出现了,进了if,并且没有报错,尝试了两次都是这

彻底解决魅族手机无法彻底卸载应用的bug

使用Flyme系统的同学可能会遇到一个问题: 卸载了某些软件(例如通过开发者模式调试安装的应用)后,实际这个应用还残留在系统,当你用低版本或者其他签名的apk覆盖安装的时候会提示“安装失败”,要求你卸载后重新安装。 可是无论你从应用列表寻找还是清理垃圾,都根本找不到这个应用。 闹鬼?这个bug一直伴随着flyme,可怜工程师们竟然一个都没发现。 今天笔者教大家一招解决这个问题。

今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致Map<String,String> dataMap = new HashMap<String,String>();dataMap.put("username", "张三");dataMap.

【软件测试】软件测试-----什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

博客目录 一.软件测试的生命周期二.BUG的定义和级别2.1 bug的概念.2.2 如何描述一个bug.2.3bug的级别2.3.1 bug分级的意义.2.3.2 bug的四种级别. 三.BUG的生命周期.四.当与开发人员发生冲突该如何处理(高频面试)五.总结 一.软件测试的生命周期 软件测试贯穿于软件的整个生命周期,针对这句话我们一起来看一下软件测试是如何贯穿软件的整个生命周

【ListView】有关填充bug

假设要实现如下效果 ListView里若使用RelativeLayot则会出现错误 得不到垂直线的填充 线性布局的高度设置为match_parent会使高度为0,必须给它一个固定值,比如20dp ListView建议使用LinearLayout在最外层,而最外层的宽高无论如何设置都无法确定的,建议第二层也使用linearLayout来布局 【实现

ListView数据只有显示不全bug

Android编程中,ScrollView嵌套ListView时,会无法正确的计算ListView的大小。解决的办法有如下两种: 解决方案1: 直接把包含ListView控件的ScrollView控件从布局文件中去除,留下ListView控件,这是最简单快捷的解决办法,如果一定要在ScrollView中包含ListView,则参考解决方案2:

ScrollView嵌套listview滑动位置底部bug

三种方案,个人推荐第三种: 1 sv.fullScroll(ScrollView.FOCUS_UP); 2 sv.setScrollY(0); 3 sv.smoothScrollTo(0,20); 滑动冲突解决listView: public class ListViewForScrollView extends ListView {public ListVie