昂贵的质量 —— 为什么bug总在发生?

news2024/11/15 4:16:06
 “To err is human”

在过去相当长一段时间内,我都在一个负责项目维护的团队内工作。团队的特殊之处在于,我们从来不开发新功能,而是负责解决每天上报的线上问题。这些 bug 无奇不有,从无法打开页面到数据奇怪丢失,麻木早已经替代焦虑成为了我们面对 bug 时的主要情绪。 

但我时不时的抱怨依然是:为什么 bug总是在发生。

缺陷早已在丰田生产系统(Toyota Production System)中被标注为浪费之一。没有人希望看到 bug,我们不想,客户更加不想。但我们似乎都不愿承认的一个事实是:

bug是代码的副产品而已。

如果我们选择接受编码不过是人思维活动的一种形式,与思考无异,那我们也就必须接纳,人性的缺陷在代码中自然也不会缺席,恰如硬币的正反两面。

反过来说,如果你对 bug采取的是零容忍的态度,甚至不惜把此写入 KPI 中,它也未必会带来正面效应,因为自此开始,没有人会愿意重构,没有人会愿意引入新的技术方案,道理非常简单:改动越多风险越大——这是某年发生在我所属团队的一次亲身经历。 

所以我们面临的并非 bug 去或者留的选项,而是多与少的问题。

摆正质量

在 MoSCoW 方法论的框架下,我们通常可以将功能的优先级划分为四类: Must Have, Should Have, Could Have 以及 Won’tHave,如果把质量也作为功能的一个维度落入这四个区间之一的话,它一定不会在 Must Have 这个范围内。因为人们既不会因为没有 bug而选择长时间地使用一款应用,也不会因为存在 bug而成为转投它竞争对手的唯一理由。我们必须承认这样一个事实:质量永远也不是商业的核心竞争力,这也暗示着:

  • 有些功能缺陷是可以被容忍的
  • 质量被分配得到的资源永远是有限的。

前者并非我们的一厢情愿,在互联网产品的高性价比和快速迭代的商业逻辑下,用户对产品质量的预期已经被规训到一个非常「理想」的状态。 

而后者更为关键:我们应该如何最大化利用有限的资源去提升质量?如果你所在的部门也有机会组建一支类似于本文开头的团队,那不妨考虑一下这个建议:用资源换取更多的人员加入这支团队怎么样?

原谅我用一个粗俗的比喻来解释为什么这么做行不通:

我们换来的只是打扫的速度,对制造垃圾的人产生不了任何影响,效果甚至会适得其反:考虑到总有人为他们收拾残局,我们的善后工作做得越好,他们越是会肆无忌惮。

但这是当下大部分公司的现状:如果线上问题激增,是不是QA 工作不到位?我们似乎倾向把编码和测试的界限划分得一清二楚,从人员到职责到工序都是如此。而质量问题从编码中来,却想从测试中寻找解决之道,这与刻舟求剑无异。 

铺垫了如此之多,我想表达的观点依然是老生常谈:质量内建,以及最近几年我们常常提倡的测试左移。至于什么是质量内建和测试左移,并不在这篇文章的范围内,你在网上可以找到大量的专业文章来介绍他们。

质量的成本

现在我们必须回答一个核心问题:谁该对质量负责?最官方的答案是每个角色,我们可以列举出产品经理没有全面地对功能做验收,QA没有把控好质量关等等。但假定此刻我们必须指定一人将他五花大绑起来祭天,为的是有人需要为上一个让人焦头烂额的bug 负责,程序员绝对是不二之选。 

但程序员死也不会瞑目的。 

如果你是团队经理,你发现上个月线上问题数量增加了一倍,于是你冲到你的工程师团队工位前,怒不可遏地冲他们吼道:我希望这个月的线上问题不超过个位数!你觉得他们能做到吗?

我想说的是:

质量不是「希望」的结果,它是付出的收获。关键在于你愿意用什么去交换。

提升质量的诀窍一点也不神秘。口口相传的各类业内实践便是最好的灵丹妙药,比如重构、代码评审、结对编程、流水线集成等等。我们不妨就以单元测试为例,看看我们需要付出多大的成本 

首先,时间便是一笔可观的支出。以我所在的项目为例,我们为前端React 组件编写单元测试的时间,几乎与开发功能的时间相同。注意这还是在没有追求覆盖所有的边界用例,以及没有追求 100%的测试覆盖率的情况下。另外,当我们编写的代码导致之前编写的关联测试无法通过流水线时,去查找失败的原因以及修正这些错误也是隐形时间。

其次,在我看来最难以逾越的障碍在于对工程文化的重塑。对下要强调保证程序员去写、关注、修复的纪律;对上要争取理解和空间来辅助这些实践,单拎出来任何一件事推动起来都不简单。工程实践天然具有一种反商业活动的特性,它很难被量化、难以一针见效。没有人敢拍着胸脯说在xx 天之内或者当测试覆盖率至少达到 xx 水平之后, bug 数量会降至 xx。我们都不否认它会变得更好。讽刺的是实践带来的「负面」效应是立竿见影的:工程团队的交付速度变慢了。

测试的部分好处还来自未来,比如它能增强我们重构代码和变更架构时的信心,防止旧功能无意被新功能破坏。但我依然无法保证你的收益会何时何地有几倍于付出的到来。 

于是现状变成了一方面可见的迭代速度变慢,另一方面成本的付出看不到收益,质量就自然值得被牺牲。

在提升质量的过程中,我们解决的不是个体问题而是工业问题。细想这是很难的:一个团队中成员的能力不同背景不同,但我们却要设法让它们的产出质量处于某个水平之上。

还债

听上去我们只能义无反顾去相信(take a leap of faith)某些实践能够帮助我们提升质量,且付出的收益是不确定的。但换一个角度想,我们只是在做一些本该做好的事情而已,用户的宽容让质量变得可有可无。 

我不否认有时候快比好更重要,只不过当有一天质量变成我们无法再忽视的问题时,别不知所措地想不起来质量是在哪里搞丢的。 

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

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

相关文章

关于伦敦金出金时间 你需要了解这些

​在伦敦金交易中,有很多基础因素是投资者在交易之前就需要了解的,其中就有伦敦金出金时间的问题。不过我们需要注意的是,伦敦金出金时间可能会有多种不同的含义,下面我们就这个问题进行一下讨论。 首先,伦敦金出金时间…

软件测试必备技能

在软件测试领域,以下是一些必备的技能和能力,可以帮助你成为一名优秀的软件测试工程师: 1. 测试基础知识: 熟悉软件测试的基本概念、原则和流程,包括不同类型的测试(如单元测试、集成测试、系统测试&#…

局部路径规划论文汇总

文章目录 2021MRPB 1.0: A Unified Benchmark for the Evaluation of Mobile Robot Local Planning Approaches 2021 MRPB 1.0: A Unified Benchmark for the Evaluation of Mobile Robot Local Planning Approaches code: https://github.com/NKU-MobFly-Robotics/local-pla…

无人配送,成不了美团的“萝卜快跑”

文:互联网江湖 作者:刘致呈 萝卜快跑在武汉秀了秀肌肉,惊艳了四座。无人驾驶概念股,也在资本市场掀起了不小的轰动。萝卜快跑之所以能闹起来这么大动静,核心在于,萝卜快跑这个自变量一变,会导致…

昇思25天学习打卡营第XX天|CycleGAN图像风格迁移互换

CycleGAN是一种用于图像到图像翻译的生成对抗网络,它突破了传统域迁移模型的限制,无需成对样本即可学习图像在不同域间的转换。这种无监督的方法特别适用于难以获取配对数据的场景,例如艺术风格迁移。与需要成对训练样本的Pix2Pix不同&#x…

探索思维导图软件:让你的工作与学习更高效

思维导图怎么做?作为策划界的老司机,我手里头可没少试过这些提升效率的神器。今儿,我就从亲身体验出发,给大家聊聊福昕思维导图、博思白板思维导图和知犀思维导图在咱们创建方案时的那些“独门绝技”。 一、福昕思维导图 网址&a…

拓客新动力:揭秘拓客工具的三大优势,让业务增长不再难!

现如今,有效的客户拓展工具已成为提升业务增长的关键。拓客工具的出现,能够实现更高效的营销和客户管理。 下面,就和大家聊聊拓客工具的三大优势,使业务增长不再成为难题。 1、提高营销效率 这些工具通常集成了数据分析、活动管…

闻味寻瓜部落+解压舔狗式聊天机器人:你说行不行?

大家好,我是一名_全栈_测试开发工程师,已经开源一套【自动化测试框架】和【测试管理平台】,欢迎大家关注我,和我一起【分享测试知识,交流测试技术,趣聊行业热点】。 ---- 首先 ---- 非常感谢您的关注 我将…

最小例程上加OLED显示

最小例程上加OLED显示 本工程代码链接: https://ww0.lanzoul.com/i8lNa265gj7g 失效联系:qq2958360390 我们其实就加上这几个文件, 然后会调用就可以了, 具体的就看江协科技的OLED, 讲的很清楚, 我们这里只说应用, 我们的重点在使用. 下面跟着我来, 复制黏贴: 更详细请看哔哩…

黑马程序员大事件springboot3+vue3

以下内容都是本人在听课时整理的,不是黑马官方的教程 环境搭建 准备数据表 -- 创建数据库 create database big_event;-- 使用数据库 use big_event;-- 用户表 create table user (id int unsigned primary key auto_increment comment ID,username varchar(20) no…

iview的表格更新表头保持排序字段状态、手动重置排序字段状态

前提:vue2、view-design 4.7.0 问题:要实现通过切换不同的选项,表格可能新增或删除某几个字段列,除了这几个字段不可排序,其他字段皆可切换排序。实现后发现,重新渲染表头后原本排序的表头字段没有高亮排序…

【C++】VS-code 报错error C2001: 常量中有换行符(已解决,图文分享)

目录 0.环境 1.简介 2.有效的解决办法 3.尝试过但无效的方法 1)在终端设置utf-8语言 2)用Notepad 修改编码 3)在vs-code中,修改编码规则,使用【Reopen with Encoding】 0.环境 windows11 VS-code c 1.简介 一…

使用Teleport实现视频小窗口播放

效果 实现步骤 小视频窗口 <!-- 小视频窗口 --><divid"fixbox"style"width: 300px;height: 300px;position: fixed;right: 20px;bottom: 20px;"></div> 占位元素 <!-- 被监听出入视口的占位元素 --><div id"box"…

token响应

程序拿着帐密到数据库检查&#xff0c;结果为true就证明登录成功&#xff0c;则需要返回token 设置token的返回值&#xff0c;可以直接调用&#xff0c;也会显得很高级 新建类resultToken-将定义属性冰将之前定义的data改为token 构造方法里也是把入参改为string token 最…

mail发送API的邮件安全性设置有哪些要点?

mail发送API的可靠性如何测试&#xff1f;API接口性能优化策略&#xff1f; 在当今数字化时代&#xff0c;邮件成为了个人和企业之间最重要的通信手段之一。为了保证邮件的安全性&#xff0c;mail发送API的正确配置显得尤为重要。AokSend将详细探讨mail发送API的安全性设置要点…

等保测评需要专用的SSL证书吗

等保测评全称为信息安全等级保护测评&#xff0c;是中国国内针对信息系统的安全性进行的一种评估机制。这一测评机制的主要目的是确保信息系统能够达到一定的安全防护水平&#xff0c;防止因信息安全问题导致的数据泄露、系统被攻击等风险。 在做等保测评的过程中不可避免的需…

工业应用中的简化电流隔离

当使用热电偶测量电机温度时&#xff0c;会产生毫伏级电压。如果这些电压通过几米长的电缆传输到参考不同地电位的中央控制单元&#xff0c;测量信号会因电位差而失真。 如果我们总结上述现象&#xff0c;就会出现以下四个挑战&#xff1a; 危险电压与用户之间的安全屏障 空…

人事档案管理系统/公司档案管理系统/企业人事管理系统/企业考勤管理系统/公司工资管理系统

获取源码联系方式请查看文章结尾&#x1f345; 摘 要 本文论述了人事档案管理系统的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;基于ssm框架和Mysql数据库设计来实现的&#xff0c;网站主要包括员工、…

SAP--无货源清单---信息记录对配额的影响 -----PR指定供应源的影响

1.当供应商直接维护好了配额之后 2.信息记录的价格对配额时候有影响 2.1信息记录的价格为0 2.2直接创建PR时候指定货源会自动根据配额比例带出供应商 3.信息记录失效的时候 3.1信息记录不在当前有效期内 3.2PR都是可以依据配额跑出来的 4.ME15对信息记录冻结之后的影响-----就…

Re:从零开始的逆向笔记01day

0-汇编语言 运算 AND(&) OR(|) XOR(^) NOT(~) SHL(<<) SHR/SAR(>>) 加法计算&#xff1a;异或&#xff0c;与左移一位&#xff08;重复&#xff09; 通用寄存器 32位16位8位EAXAXAL、AHECXCXCL、CHEDXDXDL、DHEBXBXBL、BHESPSPEBPBPESISIEDIDI 注&#x…