你还在等着用户反馈BUG?
译者按: 等待用户反馈BUG,一切都晚了!实时监控线上应用才是王道。
原文: Why relying on your users to report errors is the dumbest thing you’ll ever do
译者: Fundebug
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

我们热爱coding。
当我们coding的时候,就如同从零建造一栋大楼。新的特性、新的功能、绝佳的设计都在每一次更新后被用户所使用,期待他们的喜爱和赞美。这样的一个过程让我们感到心灵上的慰藉和拥有为数不多的成就感。
然而,现实并没有想象中美好。

如果debug是移除bug的流程,那么编程就一定是将bug放进去的流程。
软件工程师将大量时间花在了其它事情上。他们需要参加各种会议、讨论需求、制定计划、将现有的冗余代码重构,以及还有一项花费时间很多的工作:修复bug。
我还没有遇到过一位喜欢在代码中去找bug的工程师,大概因为查找和复现一个bug往往要花费很多时间。
一直以来,debug就像大海捞针一样。他们需要亲自去发现问题的原因然后寻找解法,而不是依赖于用户的截屏反馈。

用户的截屏并不能告诉你足够的信息,往往你会问更多。
你用的哪个浏览器,什么版本,操作系统是哪个,可以具体一点告诉我刚刚你是怎么操作的吗,你之前在哪个页面,你是怎么到这个页面的?
就算问了用户这么多问题,也不一定能解决问题。
Debug总是要花很多时间,然而还是一头雾水。
坐等用户反馈真的好吗?
很多开发团队依然依靠用户反馈来改进产品,这其实是很荒谬的。
在快餐连锁店,客户用餐完毕之后,需要自己将没吃完的食物和用过的餐巾纸扔到垃圾桶。快餐店的食物可能一点也不好吃,客户没吃几口就扔到垃圾桶然后直接走掉。除非客户真的是一个爱抱怨的人而且恰好有时间,才会如实评价。否则,你只会认为一个客户吃完饭满意的离开了。
然而,他再也不会来这里吃了!
一些开发者会这么认为:如果没有用户反馈问题,那就代表我们的产品棒棒哒,对不对?认为“如果用户使用产品遇到问题,用户就会反馈”是比较局限的。最终你会发现只有1%的用户会反馈问题,然而事实上多得多。
开发者依靠很有限的信息去尝试debug一个问题,往往不能解决。
你开发的软件并没有你想象的那么完美!
一个在大型线上零售店工作的朋友跟我聊过他们解决公司线上订单系统的一个重大问题的故事。他们经过好几天的排查,都没有发现问题所在。最后决定使用一个专用工具来监控和诊断应用错误。
最终的发现令人惊恐!
八个服务器中的一个内存不足然后报错,导致用户的订单流程失败。也就是说:“每八个用户中有一个收到影响”。
发现和解决这个问题使得一个月的销售额提高了2万美元。事后评估发现总共影响了5000名用户,但是只收到2个用户反馈。虽然解决了bug大家都很开心,但这个错误导致了10万美元损失。
不建议这么做:一出错就给自己发邮件报警
你可以坐在电脑面前盯着错误日志流。当你休息的时候,可以雇一个小伙伴这么做。或则,当异常出现的时候,给自己发报警邮件(貌似是个不错的主意)。直到你真的这么做了,你就不会这么想了!
你需要意识到:对于小的个人项目,一有错误就通过邮件报警还可以。但如果业务量起来了,访问量打了,事情就会变得一团糟:
- 由于版本以及兼容性,很多错误信息不完整
- 很难去指定一个报警规则,报警变成噪音
- 如果一个错误刚好在循环里面,可能一晚上给你发5万封邮件
- 错误没有优先级或则严重性区别,混在一起
- 当你查看了超过100封邮件以后,你再也不回去读它们了

你会开始忽略这些邮件,甚至把它们归类到一个单独的文件夹然后发现无从下手而很少去碰。毕竟,从几千封邮件中找到严重的问题并解决很不容易。
ELMAH - 记录程序异常
ELMAH
(Error Logging Modules and Handlers)
是一个错误记录服务。它可以动态地加入到一个ASP.NET项目中,而不需要重新编译或则重新部署。ELMAH不支持所有的程序语言,他提供的功能也有点局限。ELMAH适用于小型的个人项目。

专业BUG监控
如果你想认真对待应用BUG,可以使用一个专业的BUG监控服务,比如国外的Raygun(或则我们Fundebug)。一个专业的BUG监控服务可以帮你:
- 通过过滤和排序来定位严重错误
- 配置多种报警方式,比如邮件、Slack、或则HipChat
- 使用一个监控服务来追踪多语言多平台
- 相似错误自动聚合
- 团队协作齐力解决BUG
如果你使用简单的方案(直接邮件报警),那么你需要停下手头的工作,花费两三个小时去复现一个bug。这是非常浪费时间,非常低效的做法!如果一个团队注重快速迭代,那么他们会愿意为开发者节省花费的debug上的时间,去开发产品的新功能、新特性。
总结
我们希望技术实现自动修复软件BUG。不过,软件自愈依然还有一段距离。你可以使用一些错误监控服务来使得整个debug更加简单和高效。
在你的用户发现问题之前发现,并且不要单纯依赖用户反馈问题!
版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/08/30/rely-on-users--to-report-error-is-not-good/
你还在等着用户反馈BUG?的更多相关文章
- 17秋 软件工程 团队第五次作业 Alpha 用户反馈
用户反馈 Bug 测试对不同机型进行了测试,包括: 小米NOTE, MIUI 8.5 稳定版 [已修复]点登录按钮之后自动退出: [已修复]登录界面的背景图片没有显示. 小米4 [已修复]闪退,无法打 ...
- Alpha版本 - 用户反馈
Alpha版本 - 用户反馈 使用情况 (前天发出了内测apk给身边的人小范围使用,到目前共有31名用户使用过产品) 新增用户数: 用户事件数: Bug反馈 登录/注册出现"无响应" ...
- iOS:移动端“用户反馈和客服”的几个平台SDK的介绍
简单阐述: 用户反馈功能几乎是每个app都有的一个功能点,通过反馈功能实现与用户的连接.沟通,随时随地收集用户意见反馈和Bug报告,即时和用户保持沟通,在一定程度上提升了app的竞争力.而给app评分 ...
- Android监听自身卸载,弹出用户反馈调查
1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇博客,我将讲述一下一个各 ...
- win10个人助理conrtana软件能否支持用户反馈、后续优化
上网查找了一下,win10的个人助理不支持用户反馈.这些反馈都是用户通过别的途径来发表反馈的信息,这个缺陷让用户不是特别满意,因为反馈信息不再那么简答,变得越来越繁琐.有些人还会担心自己反馈的问题会不 ...
- Android 应用监听自身卸载,弹出用户反馈调查
监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...
- Sprint 5 summary: UI 界面更新,Azure端部署和用户反馈分析 12/28/2015
本次sprint主要完成的任务有对手机APP的UI界面的更新,同时对Azure客户端的部署进行了相应的学习和有关的程序设计.同时对于ALPHA release的用户反馈做出相应的分析以确定接下来工作的 ...
- android+json+php+mysql实现用户反馈功能
相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码, ...
- 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源
用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...
随机推荐
- Web前端JQuery入门实战案例
前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...
- 第39节:Java当中的IO
Java当中的IO IO的分类 第一种分:输入流和输出流 第二种分:字节流和字符流 第三种分:节点流和处理流 节点流处理数据,处理流是节点流基础上加工的. IO中的重点: InputStream Ou ...
- 微信小程序快捷键(Mac和windows)
最近因为有点闲暇时间,所以抽空简单了解了小程序,因为小程序是使用微信开发者工具编码,不能使用其它编辑器,比如,Sublime,Hubilder等. 所以就百度了一下小程序快捷键,但总觉得不全,所以就去 ...
- springboot动态修改日志级别+权限认证
1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个 ...
- 浅谈static关键字的四种用法
1.修饰成员变量 在一个person类中,一个成员变量例如 String name,当new2个person()对象时候,这2个对象在堆的位置是不同的,给name赋值张三.李四,这两个对象的name是 ...
- 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我
一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...
- CAS单点登陆/oAuth2授权登陆
单点登陆 CAS是一个单点登录框架,即Central Authentication Service(中心认证服务) ,开始是由耶鲁大学的一个组织开发,后来归到apereo去管,github地址:htt ...
- RocketMQ
http://rocketmq.apache.org/docs/quick-start/ 解压后添加启动脚本 nohup sh bin/mqnamesrv >> logs/namesrv. ...
- Android--序列化XML数据
前言 之前有讲过在Android下如何解析XML文件的内容,这篇博客讲讲如何把一个对象序列化为XML格式,有时候一些项目中需要传递一些XML格式的数据.而对于如何解析XML,不了解的朋友可以看看其他三 ...
- 【Android基础】Fragment 详解之Fragment生命周期
上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...