Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >昂贵的质量——为什么bug总在发生?

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

作者头像
ThoughtWorks
发布于 2024-07-29 02:58:14
发布于 2024-07-29 02:58:14
1450
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

“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而成为转投它竞争对手的唯一理由。我们必须承认这样一个事实:质量永远也不是商业的核心竞争力,这也暗示着:

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

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

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

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

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

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

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

质量的成本

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

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

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

我想说的是:

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

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

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

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

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

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

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

还债

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ThoughtWorks洞见 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
敏捷软件质量保证的方法与实践
来源:https://www.cnblogs.com/wintersun/p/5297352.html
顾翔
2019/12/11
2.3K0
敏捷软件质量保证的方法与实践
说好的团队为质量负责呢?
在蓝鲸项目,似乎大家对质量的关注意识有些欠缺,于是在项目上的不同角色、不同工作年限的人之间采样做了一次访谈,上面这个问题就是其中访谈的问题之一。有同事曾提醒我说这种题就是送分题,肯定不会有人回答不出。可是,事实并非如此…
测试开发社区
2019/09/30
8550
说好的团队为质量负责呢?
如何通过质量内建提升交付能力?
测试圆桌派是老张和CC、chenkl老师无意中闲聊时候产生的一个想法,抱着试一试的态度举办了第一期,结果反响出乎意料的好,因此决定继续办第二期甚至更多的直播分享。
周辰晨
2022/09/20
1.1K0
如何通过质量内建提升交付能力?
开发高质量软件的5大原则
多少次的惨痛教训告诉我们,在软件应用发布维护版本或者补丁之前,应该避免使用其最新版本。虽然每个人都知道初始发布版本V和稳定发布版本V.n之间存在软件质量鸿沟,这个问题却一直没有得到解决。 本文将会讨论5个具有可操作性的原则,以帮助开发团队跨越质量鸿沟 1. 使用代码覆盖率反映测试完整性 软件测试的目的都是为了保证软件能在最终用户使用时是正常运行的。然而,软件测试面临着挑战,如何保证测试的完整性?很多开发组织会制定测试规程去匹配需求文档或者用户文档。这种测试方法可以验证正常操作路径,但是测试边界、错误场景都无
DevOps时代
2018/02/02
2.2K0
开发高质量软件的5大原则
在一个“去QA化”的项目中,QA能做什么?
第一次在某篇文章里看到“去QA化”这个概念,我当时也就是随随便便翻看了一下,并未多加关注。第二次是在QA社区群里看见更资深的同事在谈论“去QA化”,当时我小小的脑袋里,单纯觉得“去QA化”离我还是很有一些距离的。 万万没想到!没过多久,当我上到一个项目之后,TL跟我说,我们有些项目确实是没有QA的,隔壁项目组有一个QA,但是在整个开发流程中也没有专门的测试阶段。听完之后,我眼睛瞪得像铜铃(夸张修辞):那谁来做测试策略呢?在什么阶段测卡了?什么时候做探索式测试呢?TL顾及我作为QA的尊严,立马跟我强调:“我觉
ThoughtWorks
2022/04/27
8900
在一个“去QA化”的项目中,QA能做什么?
怎么提高代码质量?-来自Google的研发经验总结
代码质量本身并没有一个特别明确的量化指标,而且根据公司发展的不同阶段,团队规模的大小不同,项目性质的不同等,对代码质量的要求也不尽相同.不过如果项目中出现以下情况时候,就说明代码质量要值得重视了.
lyb-geek
2021/09/23
1.8K0
内建质量,你真的了解么?
内建质量作用在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。其核心目的就是减少因为质量问题导致的返工,而浪费大量人力成本。
JFrog杰蛙科技
2020/05/09
1.4K0
内建质量,你真的了解么?
解析《2020国内软件质量调查报告》
今天收到某个群友转发的《2020国内软件质量调查报告》,其中的很多报告论点很有意思。今晚抽时间写了篇博客,针对其中的某些论点,谈谈个人的一些看法。
老_张
2021/01/14
1.1K0
持续测试持续反馈
首先感谢中国DevOps社区提供的平台,让我有机会去分享这个话题。对于持续测试这个话题,最近也比较火,大家都有不同的实践和认知。所以借这个机会和大家分享一下我的看法。也感谢当时线上听讲的小伙伴们。本文主要针对议题内容做一个整体的回顾,若有疑问,欢迎私聊。
周辰晨
2021/12/27
6680
持续测试持续反馈
大厂不再招测试?软件测试左移开发合理吗?
最近两年,互联网大厂的招聘中,测试工程师岗位似乎显著减少。在腾讯内部,随着一些 BG 的研效改革逐渐深入,测试工程师这个岗位开始逐渐减少。似乎正在印证一个现象:测试岗位的未来已经不那么乐观? 但软件测试伴随着软件行业的出现经过了几十年的进化,花了很多时间和汗水才走到今天,测试这个领域是不会消失的。不少人都议论过岗位和角色的消失是否合理,一般都分成两派,一派认为测试工程师是独立且专业的岗位应该保留,合理缩减比例;另外一派认为软件测试领域并不复杂,觉得自己对于测试和自动化测试已经非常熟悉,完全可以胜任。 不管你属于哪一派,首先要熟悉软件测试才能更有发言权。熟悉是个模糊的说法,我们可以思考一个简单的问题,测试自动化和自动化测试这两个名词有什么区别?如果区分不出来或者没有概念的话,这篇文章非常适合你,这是专门写给开发的测试漫谈。
腾讯云开发者
2025/04/04
4291
大厂不再招测试?软件测试左移开发合理吗?
剧透:2020国内软件质量调查部分结果
软件质量报道公众号 联合 腾讯WeTest、ThoughtWorks社区发起 “2020年国内软件质量调查” 已经启动20天了,还有最后两天就结束了,不妨先透露一些调查结果。完整的调查报告,元旦之后发布。   这次调查总共有21个问题,包括: 您所在*团队*目前采用什么开发模式? 您所在团队软件交付的周期多长? 在您的团队中,如何保证软件需求质量? 您对需求质量的感受是什么? 您所在的团队,如何保证设计质量的? 您感觉哪部分的设计质量*不好*? 您所在团队,代码质量是如何保证的? 如果用每千行(
WeTest质量开放平台团队
2020/12/31
5560
去测试化真的可行吗?
当前业界对于软件测试和质量相关的讨论非常广泛,各种不同的声音此起彼伏。其中包括质疑测试人员的必要性、去测试人员化、强调测试技术化和工程化、探讨测试与质量的协同作用、讨论敏捷测试、持续测试以及全程自动化测试等等。
ThoughtWorks
2024/01/03
2600
去测试化真的可行吗?
在企业推行DevOps,先规划好这几件事
企业IT建设中想要推行DevOps,第一步先做好质量内建,质量内建的方式有哪些呢?首先我们通过自动化测试、重构、简单设计等手段,可以使在编码阶段引入的缺陷变少,因为我们代码写清楚了,bug就藏不住了。同时当我们做到自动化测试等工作时,在编码阶段发现的缺陷也变多了。那么通过质量内建,我们在编码阶段就把大部分的问题都捕获到,同时引入的缺陷更少,降低了软件的开发成本。
用户7533190
2020/07/14
9630
在企业推行DevOps,先规划好这几件事
敏捷驱动QA改变
敏捷理念由来已久,若从敏捷软件开发宣言的发布算起,今年已经是20周年了。在这漫长的岁月里,越来越多的团队在“四个高于”的价值观引领下,以十二项原则为指导,欣然求索而持续演进,在实践中探寻更好的软件开发方法。虽然敏捷自身一直在变化,不同团队对敏捷实践的落地也多有差别,但人们对敏捷核心的理解趋于一致。“追求更短的反馈环” -- 便是其中被大家广泛认可的一项核心目标。假如以终为始来看,那么: Inception的采用,拉近了项目团队与产品团队/用户的距离,在获得需求有效澄清的同时也对软件设计进行快速反馈和更新。
ThoughtWorks
2022/04/22
6590
敏捷驱动QA改变
什么是软件质量?
Functional Quality - How well software complies with or conforms to customer specifications.Structural Quality - How software meets non-functional requirements that support the delivery of the functional requirements, such as robustness or maintainability.质量是个很抽象的相对概念,如果打个比喻的话,会觉得质量和安全感有很多相似之处。安全感是什么?看不见摸不着,是不怕走夜路?不怕下水?抑或可以自在独处?每个人对安全感的要求是不一样的,同一个人在不同的年龄段对安全感的要求也不一样。襁褓中的婴儿大部分都很怕和母亲分离,因为他们和母亲从生命开始的那一刻起就有了切不断的联系,他们怕离开母亲独自面对子宫以外的环境。有些人可能因为小时候有溺水的经历,即便成年之后,也无法涉水,对河流,大海有难以言状的恐惧。同样的,在不同行业,有不同的质量标准。广义上讲,我们有食品质量,有工程质量,有软件质量等等。狭义到我们的软件开发,即使同一产品,不同的用户对产品质量的高低感受肯定也是有个体差异的。另外质量像安全一样是个相对的概念,一般情况下我们会认为家里相对马路上来说是更安全的。但这是一般大概率的情况下,但当地震发生的时候,空旷的马路上也许就比家里安全多了。质量也一样,软件质量的优劣,是需要满足特定行业特定用户群体的产品诉求,符合某一年龄段或者特定性别用户的使用习惯,兼容大部分目标用户特定设备需求等等。软件质量是一个抽象的存在软件质量在线的时候我们是比较难察觉它的存在的,我们不知道它就存在于我们的每一次需求讨论中、每一念的设计斟酌里、每一回车的代码提交时。但是一旦有客户抱怨产品不好用,或者发现产品缺陷时,质量这个隐形的存在似乎就变得特别醒目。貌似跟我们的健康一样,我们健健康康的时候,很少觉察到健康的重要性,快乐地熬着夜撸着串。但是一旦我们生病了,这要忌口,那要注意,我们惊觉原来健康和我们的一餐一眠,一时一刻的情绪都息息相关。软件质量是各个质量属性的综合通常情况下,人们习惯说好的软件质量就是实现了客户对软件的所有需求。但是什么是需求呢?在敏捷开发环境下,我们用用户故事来管理,沟通产品需求。而用户故事我们通常会归类为功能需求和非功能需求。举个例子,小区门禁系统通过人脸识别实现自动开门,这是个很明确的功能需求。满足了功能需求我们就能说这个软件的质量很好了吗?某天某位业主画了个浓妆,或者剪了个刘海,该系统无法识别了,功能无法满足了。你会发现,通常功能性需求和非功能性需求是交织在一起的,很多非功能性需求是为了辅助功能性需求的更好实现。软件质量一定是需要去界定质量特性,及满足这些特性应该具备哪些质量属性。再举个例子,我们可以拿生活中送礼物这事儿来类比。比如情人节到了,我们或多或少会期望收到一份来自另一半的礼物。而且还期待对方能无需提示,主动自愿,悄咪咪地准备一个自己心仪的礼物。把‘收到礼物’ 看作‘What’,那‘无需提示,主动自愿,悄咪咪地准备’,就是‘How’。如果跟你说:钱都在你那里,你想买什么自己买就是了。毫无仪式感和主动性,这个礼物会让人开心吗?质量模型作为一个妈妈(被迫营业的非专业的育儿家),我知道孩子的安全感是可以被定义为很多维度的:满足感,可控感,信任感等等。而且这些不同的安全感有其特定的建立阶段,例如一岁之前,如果孩子能得到父母很好的照顾,持续的慈爱,婴儿的满足感就能被适当建立。我相信育儿专家们对孩子的安全感一定有更专业的系统定义、建立及评估方法。质量也一样,即使很抽象,具有行业差异,但是IT从业者从来没放弃过对其进行定义和评估,因此产生了各种不同的质量评估模型。
ThoughtWorks
2021/09/15
1.4K0
如何避免做了也白做的困境,来看看度量的起手式
你度量开发人员每天的代码量,就会得到越来越多的......(垃圾)代码。那如果要度量线上缺陷,会不会得到更多的线上缺陷?
Antony
2023/11/01
3450
如何避免做了也白做的困境,来看看度量的起手式
如何成功的组织Bug bash
如果我们把项目的开发过程比作驾驶过程,产品质量就是安全驾驶,那么测试就像是驾驶中看挡风玻璃的过程,需要融入到整个开发中。总之,产品质量需要在开发的各个环节中来保证,Bug Bash作为常规测试的有效补充,也是产品上线前的重要一环,组织成功的Bug Bash必能使产品日趋完善。
ThoughtWorks
2020/09/01
4860
如何成功的组织Bug bash
​CODING DevOps 系列第四课:DevOps 中的质量内建实践
随着时间的推移,我们项目的开发效率会逐渐降低,直到几年之后整个项目可能就无法维护,只能推倒重来。具体的表现首先就是随着时间推移,我们会发现整个需求列表里面能做的需求越来越少,因为每当我们增加一个新特性,需要改动的代码就非常多,所以最后每提出一个新的需求,团队评估出来的改动成本都非常高,导致最后难以增加新的特性。
腾讯云 CODING
2020/06/18
1.3K0
测试全程度量探索
测试左移:有数据分析,单元测试可以发现代码中60%~70%的问题。测试左移即将测试工作前置,提前发现问题。
用户5521279
2020/04/15
1K0
测试全程度量探索
加班多、Bug少就是好程序员?别再被忽悠了
研发效能度量的出发点虽然很好,但是如何正确、有效地度量却是一个颇有难度的技术活儿。近期围绕如何进行效能度量的讨论不绝于耳,但如何构建度量的体系化框架、如何进行度量指标的选取、如何进行度量分析、如何进行落地运营,却鲜有文章具体阐述。在这一背景下,张乐老师撰写了《研发效能度量核心方法与实践》系列文章,对以往经验进行了总结和提炼,包括以下内容: 1. 效能度量的难点和反模式 2. 效能度量的行业案例和关键原则 3. 效能度量的实践框架和指标体系设计 4. 效能度量的常用分析方法 5. 效能度量的落地实施建议 以上内容将以五篇连载文章的形式发布,共计超过 3 万字,本文是第三篇。
深度学习与Python
2021/10/13
4640
相关推荐
敏捷软件质量保证的方法与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档