原文作者:KRISTINE PINEDO

译者:白乐航

欢迎访问网易云社区,了解更多网易技术产品运营经验。

作为软件开发者,您只需要为客户编写和交付出色的产品和功能。 但您也知道软件开发并不总是那么容易,因为进行迭代时候可能会引入bug。 毕竟,“如果调试是删除软件bug的过程,那么编程肯定就是将bug放入去的过程”,正如Edsger Dijkstra(译者注:著名荷兰计算机科学家,我们熟知有向图最短路径算法--迪杰斯特拉算法就是他的),所说。

因为这些问题将会影响你的客户,所以你可能会感到修复应用程序中的每个bug的强大动力。

但这是一个坏主意。

应用程序稳定性和零bug

不存在零bug的应用程序,因此制定有效处理策略是至关重要。这就是为什么应用程序稳定性指标对于敏捷团队如此重要。稳定性可以定义为给定版本的应用程序交互中每个功能正常的百分比。它是通过跟踪应用程序用户遇到的崩溃(未处理的bug)的百分比来计算的。

考虑可用性对于了解稳定性指标是有帮助的。 你可能已经熟悉“五个九”的可用性(译者注:即99.999%高可用性),并且你也已经知道不要设目标为100%,即使它看起来像是一个合乎情理可能完成的目标。 超过某一程度时,你将会遇到回报递减,因为高可用性目标是昂贵的而且不总是能够带来实实在在的好处。 Sean Hull谈到了为什么高可用性的评价过高了。

事实上,以五个九的标准维持高可用性会花费很多钱。

关于稳定性的还有个类似的情况 —— 在某种情况下,由于构建新功能的机会成本很高,所以修复bug成本很高。所以你制定目标时要考虑可行性,它不应该是100%。

这就是原因。

敏捷统治世界

敏捷开发现在主导着软件开发过程,并且已经超过瀑布模型,成为构建和部署软件的实际上的方法。在VersionOne发布的2018年敏捷状态报告中,97%的受访者表示他们在他们的组织中实践过敏捷开发。敏捷团队正在以前所未有的速度构建和交付软件。许多开发者实行持续部署,这使他们能够在每周、通常是每天的基础上快速迭代他们的工作。快速的发布周期使得在发布后修复问题变得很容易,因此在发布前修复每个bug不再是绝对重要的。然而,在敏捷开发中,传统的QA和测试的可用时间也更少,这增加了引入bug的风险。

那么,如何平衡快节奏的开发和bug呢?应用程序的稳定性需要一个反馈循环,可以使用稳定性监视工具进行跟踪。

用户可以选择

客户可以选择使用他们使用的应用程序,因此,如果您想让客户随时随地提供可靠,高质量的应用体验至关重要。 这是一个常见的例子,但我们都经历过。你需要参加会议,就打开骑行应用程序中的一个。 令人讨厌的是,优步(Uber )不适合你并且看起来还崩溃了,但你仍然需要参加你的会议,所以你打开Lyft来使自己按时到达。 因为这可以很容易地发生,你可能会觉得有必要修复每一个突然出现的bug。 但关于这些bug Jeff Atwood’s 提出了很重要的问题,

“你如何区分用户可能遇到的bug,以及用户可能永远不会看到的bug?”

这是一个需要考虑的重要问题,你可以打赌你的竞争对手也会试图自己解决这个问题,这样他们就可以通过快速发布新功能来继续改进他们的产品。

客户端的西部蛮荒

并不是所有的bug都是一样的,在客户端应用程序中尤其如此。

JavaScript比以往任何时候都流行,超过69%的开发人员使用JavaScript,使其成为最常用的编程语言。JavaScript的一个难点是,一旦部署到浏览器中,应用程序运行的条件可能会有很大的不同。考虑到大量的不同的浏览器、版本、扩展和其他可能影响应用程序稳定性的因素,几乎不可能考虑所有可能的场景。而且由于存在如此多的差异,大量的稳定性问题将成为不会影响大多数用户的边缘问题。例如,由于非常低的使用率和奇怪的怪癖,调查Internet Explorer 6(译者注:非常老的浏览器,2001发布2014微软停止维护)引起的bug可能毫无意义。

移动应用程序为开发人员带来了类似的挑战。Android设备中的设备种类是非常多的。你知道2015年市场上有超过24000种不同的安卓设备吗?

部署到移动设备可能更加不可预测,因为设备和设置可能会有很大的不同,并在与应用程序交互时导致问题。像JavaScript一样,很多突然出现的bug都是边缘情况,只会影响少数罕见的手机。

花几个小时修复一个只影响少数用户的bug是不值得的。

特性或bug?选择一个。

正如Eric Sink所写的,“关于软件质量的决策可能是艰难而微妙的,当我们做出这些决策需要非常明智。有时一个“bug”不应该被修复。那么,有什么更好的方法来看待bug呢?

将稳定性转化为团队的KPI。

选择一个可以实现的,有意义的目标,你的团队可以为此负责。稳定性指标可以帮助你决策关于工程资源的数据驱动。当你计划短期加速进度时,你应该分配时间来解决问题,还是应该在产品路线图上全速前进?应用程序稳定性帮助你做出决定。

值得重新检查你的警报堆积,以确保你有必要的反馈循环,或者是否有改进策略的空间。我留给你们几个重要的问题要考虑:

-你的团队是否考虑过应用程序的稳定性?

-你目前如何选择修复bug和构建新特性?

-你的团队如何跟踪和优先处理bug修复?

原文:https://blog.bugsnag.com/application-stability-monitoring/

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 优化云课堂直播间性能的一些思考与总结
【推荐】 实现自己的前端模板轻量级框架

【译文】不是所有的 bug 都值得修复的的更多相关文章

  1. 写给测试人员:不是所有的bug都需要修复

    用户往往对产品中各种各样的bug抱怨不已,而测试人员往往认为自己的职责就是揪出这些所有的bug并把它们全都修复.然而,这是一个误区.微软卓越测试工程总监Alan Page近日撰文,再次解释了有哪些bu ...

  2. 你连Bug都抓不住,还谈什么参与感?

    林子大了什么鸟都有,APP市场也是这样.举个例子,有段时期图片社交井喷式发展,各类图片社交APP一时充斥着市场.各种或重视图片加工或主打社交元素的APP“来得快去得快”.“你方唱罢我登场”,这些短命A ...

  3. 关于线上的bug什么时候修复的思考

    这里系统专门指的是那种用户量大的系统,比如有几百万或者上千万的注册会员.因为小系统因为用户量少,不存在这种思考,考虑有时候是多余的.另外还有内部系统,给自己公司内部人员使用的,即便是出现了问题,也不会 ...

  4. 用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载.

    用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载地址,不是github上的那个链接.去作者官网论坛我那个链接地址,或关注 ...

  5. 太极限了,JDK的这个BUG都能被我踩到

    hello,大家好呀,我是小楼. 之前遇到个文件监听变更的问题,刚好这周末有空研究了一番,整理出来分享给大家. 从一次故障说起 我们还是从故障说起,这样更加贴近实际,也能让大家更快速理解背景. 有一个 ...

  6. 在 Java 中运用动态挂载实现 Bug 的热修复

    大多数 JVM 具备 Java 的 HotSwap 特性,大部分开发者认为它仅仅是一个调试工具.利用这一特性,有可能在不重启 Java 进程条件下,改变 Java 方法的实现.典型的例子是使用 IDE ...

  7. curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复

    curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...

  8. 一例 Go 编译器代码优化 bug 定位和修复解析

    https://mp.weixin.qq.com/s/Tyl6dSb7mHBuqqN6WvEuaw

  9. Java5~11新特性

    Java5~11版本新特性 Java5 Java6 Java7 Java8 Java9 Java10 Java11 Java5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性 ...

随机推荐

  1. c#文件下载---以文件流形式

    /// <summary> /// 文件下载 /// </summary> /// <param name="FileName">文件名< ...

  2. Sersync + Rsync 代码分发

    简介: Sersync 是基于 inotify 来编写的 Linux 系统文件监控工具,当监控到文件发生变化时,调用 rsync 同步文件. 类似的功能,以前有用 rsync + inotify 实现 ...

  3. ios开发中view.layer.shouldRasterize = YES 的使用说明

    在做一个NavigationController push 子页面时,发现push和pop时很卡,研究了一大阵子后,发现在子页面里影响UI流畅的只有UIImageView的圆角设置:然后我就关闭了圆角 ...

  4. iOS学习之UIDatePicker控件使用

    iOS上的选择时间日期的控件是这样的,左边是时间和日期混合,右边是单纯的日期模式. ,   您可以选择自己需要的模式,Time, Date,Date and Time  , Count Down Ti ...

  5. Hello Build To Win!我们是奶牛小分队!——记第一次团队作业

    Hello Build To Win!我们是奶牛小分队! section 1 组建团队 1.  队员介绍: 姓名 学号 风格 擅长技术 编程兴趣 希望软工角色 吴建瑜 2016012024 努力学习, ...

  6. kali linux: 网卡监听及扫描网络

    一.网卡监听: kali不支持内置网卡,仅仅支持usb网卡.我用的虚拟机.首先在虚拟机的可移动设备里打开usb网卡的连接,执行ifconfig命令,如下: eth0接口是本地有线网卡信息,lo接口是本 ...

  7. c++ 享元模式(flyweight)

    举个围棋的例子,围棋的棋盘共有361格,即可放361个棋子.现在要实现一个围棋程 序,该怎么办呢?首先要考虑的是棋子棋盘的实现,可以定义一个棋子的类,成员变量包括棋子的颜色.形状.位置等信息,另外再定 ...

  8. kalman处理realsense数据

    代码来自:https://www.cnblogs.com/zjuhjm/archive/2012/12/29/2838472.html import numpy as npimport matplot ...

  9. mysql sql left right inner join区别及效率比较

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  10. xStream完美转换XML、JSON(转)

    xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...