质量免费吗?

本文首发于个人网站「BY林子」,转载请参考版权声明。


两个场景

场景一:有限经费与质量改进

“要写自动化的单元测试、E2E测试,就会需要更多的钱,可是我们经费有限暂时做不了。”

“CI上配置SonarQube扫描,对于扫描出来的问题我们也没有经费修复,这个举措也是没法实现。”

……

某IT团队在推进质量改进系列举措的时候总能听到这样的声音,就是由于经费有限很多的举措都实施不了。这似乎成为了一个困扰许多团队的难题,因为供应商往往要求额外费用来支持自动化测试和安全漏洞修复等。

这种困境的核心问题在于,有限的经费似乎成为阻碍团队提高质量的主要障碍。其实,需要全面理解质量改进的投入:质量改进是一项短期支出,更是一项长期的投资。

短期内去修复已有的代码Bug、安全漏洞,或者在原本没有自动化测试的情况下去增补自动化测试,确实需要额外的投入,因为这不属于新功能开发部分的工作内容。但是,代码漏洞的修复可以提高代码整体质量,而自动化测试能对代码改动提供快速反馈,能更有效地保障软件的质量。从长远来看,这些举措的收益都是大于短期投资的。

场景二:业务压力与质量折扣

“我们业务方太强势,上线日期定了以后给到我们很大压力,我们完全是Deadline驱动,交付时间很紧,得满足最后期限,很难保障质量。”

“我们想跟业务方交涉,要保障质量他们得让我们有足够的时间和投入,但是业务方认为市场竞争太激烈,上线日期定了就不能动了,只能压缩我们的时间,同时也要求我们保障质量。”

某IT交付团队如此描述他们的现状,感觉很无助。这种情况下,团队往往感到被迫在时间和质量之间做出抉择,导致质量无法得到充分保障。

快速交付和高质量真的是矛盾的吗?其实不然,快速交付和高质量是完全可以和谐共存的。 通过合理的开发流程,小步迭代式开发,从需求源头开始把控质量,在每个环节做到快速反馈,实现缺陷预防,既可以做到短期内快速交付,也可以长期内保持高质量。

当然,过短的时间内要求开发过多的功能确实也是不现实的,尤其是需求都没有清晰描述还需要开发团队不断去澄清的情况。因此,负责交付的IT团队需要采取合适的策略跟业务方进行沟通。

IT跟业务方应该是同样服务于业务目标的,不应该是利益冲突的对立方,不能说“你不给我更多的时间我就没法交付更高质量的产品”,而是需要加强沟通与合作。IT需要跟业务方对齐业务目标,基于业务目标,考虑如何最大化业务价值的交付,并且能保障质量。 这就可能涉及到对需求重新梳理,进行价值排序,调整合适排期,对需求质量的把控等一系列的优化。

质量免费

美国管理学家菲利浦·克劳士比于1979年出版的书籍《质量免费(Quality is free)》被誉为质量革命的圣经,是管理学的经典名著,中文版也于2011年面市。虽然书的年代比较久远,且内容主要关于工业制造的质量,但核心思想对今天的软件交付一样是适用的:追求零缺陷,一次性把事情做对,质量不仅是免费的,长远来看能降低成本。

零缺陷理念

零缺陷的要旨是预防缺陷的态度,它的意思就是“第一次就把工作做对”,如此而已。

—— 《质量免费》 【美】菲利浦·克劳士比

软件交付确实比工业制造要复杂得多,而且今天的软件生态也存在居多不确定性因素,但我们同样可以以追求零缺陷的心态去开发软件,做好缺陷预防工作,减少返工浪费。

可能有朋友会记得我在讲质量是什么的时候提到过“质量不是零缺陷,不是…,不是…”,为什么现在我又提到要追求零缺陷呢?这两者表达的含义是有区别的。

1. 软硬件质量要求的差异

《质量免费》中提到的“零缺陷”是针对硬件制造来说的,我们知道硬件质量通常比绝大多数的软件质量要求要高,硬件产品中的某个零配件如果有缺陷有可能导致整个硬件产品不工作,而软件产品对于某些不是那么关键的功能甚至是可以允许带着缺陷上线的,只要能满足用户使用即可。

2. 质量不是零缺陷

质量不是零缺陷,意思是软件质量不能一味追求没有缺陷,而是要结合业务目标考虑,符合业务需求、能满足用户使用,当然,也会有相应的非功能需求需要满足。总之,软件质量要以业务价值驱动,只需做到恰到好处。

3. 软件开发也需要追求零缺陷

“零缺陷”虽然是从硬件制造行业提出,但其强调的是一次性把事情做对的关键理念。我们经常提到的质量内建就是强调的缺陷预防,在每个环节都尽量做好,将质量内建到软件产品中,这跟零缺陷理念是完全契合的。

软件开发中的“一次性”把事情做对

克劳士比在《质量免费》中提出了质量成本的概念,强调了预防质量问题的重要性。他认为花费在预防和纠正质量问题上的成本是“免费”的,因为这些成本相比于质量问题导致的损失来说是微不足道的。

我们从下图的变更成本曲线图也能清晰看到不同阶段成本的差异:

缺陷修复成本曲线

因此,如果能一次性把事情做对,实现缺陷预防,质量不仅是免费的,最终还是可以降低质量成本的。

当然,人无完人,加上软件开发的复杂性,要求所有人所有环节都能一次性把事情做对显然是不现实的,这也是我前面标题中给“一次性”加引号的原因。我们认为,质量内建并不是严格意义上的不能有任何缺陷暴露,而是需要在软件开发生命周期中尽早地把事情做对,并且通过持续的获取快速的反馈来纠偏

质量内建可以理解为在软件开发全生命周期中,从需求到线上频繁地执行PDCA环,小步前进,持续反馈验证,及时调整改进。如下图所示:

频繁PDCA

软件行业质量内建相关实践

质量内建的核心主要有测试左移、测试右移、快速反馈和全员负责四个方面,对应的典型实践通常有(不限于)以下这些:

质量内建典型实践

一些前沿的互联网科技公司,比如Google、Amazon和Facebook等,通过全流程的标准化和大规模的自动化将这些质量内建实践实施的更为到位,软件交付的质量和效能都得到了很大的提升。

(PS:思维导图原图可从我的博客网站网页顶端菜单栏【资源下载】页面下载,或点击此链接进入资源下载页面。)

总结

零缺陷就是要求尽可能把事情做对,实现缺陷的预防。软件行业的零缺陷理念不是一味追求没有缺陷,而是要做好质量内建,将质量做到恰到好处。

从头开始一次性把事情做对,质量就是免费的。很多人认为质量不是免费的,那是因为已经欠债了,需要花钱去还。

IT交付团队要跟业务方对齐业务目标,加强沟通与协作,从需求源头把控质量,共同追求质量和效率的平衡,以实现最大价值的交付。

【推荐阅读】
  • 《质量免费(Quality is free)》,【美】菲利浦·克劳士比
  • 团队为质量负责
  • 敏捷测试的核心
  • 构建测试的体系化思维(进阶篇)
  • 敏捷团队的质量保障赋能
  • 业务价值驱动的测试
  • Google、Amazon和Facebook的质量内建实践思维导图

本文首发于个人网站「BY林子」,转载请参考版权声明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

godot 报错Unable to initialize Vulkan video driver解决

版本 godot 4.2.1 现象 godot4.2.1 默认使用vulkan驱动,如果再不支持vulkan驱动的主机上,进入引擎编辑器将报错如下 解决 启动参数添加 –rendering-driver opengl3 即可进入引擎编辑器 此时运行项目仍然会报错无法初始化驱动 在项目设置中配置编…

Vue-Pinina基本教程

前言 官网地址:Pinia | The intuitive store for Vue.js (vuejs.org) 看以下内容,需要有vuex的基础,下面很多概念会直接省略,比如state、actions、getters用处含义等 1、什么是Pinina Pinia 是 Vue 的存储库,它允许您跨…

储能:东风已至,破浪在即——安科瑞 顾烊宇

今年的各省政府工作报告已经陆续发布,新能源是各省能源工作的重点,从目前31个省(区、市)相继公布的2022年经济增长数据来看,一些提前布局新能源产业的省市纷纷交出不错的成绩单,新能源成为当地GDP增速的重要…

饥荒Mod 开发(二三):显示物品栏详细信息

饥荒Mod 开发(二二):显示物品信息 源码 前一篇介绍了如何获取 鼠标悬浮物品的信息,这一片介绍如何获取 物品栏的详细信息。 拦截 inventorybar 和 itemtile等设置字符串方法 在modmain.lua 文件中放入下面代码即可实现鼠标悬浮到 物品栏显示物品详细信…

微信小程序云开发-下载云存储中的文件

一、前言 很多时候我们需要实现用户在客户端下载服务端的文件(图片、视频、pdf等)到用户本地并保存起来,小程序也经常需要实现这样的需求。 在传统服务器开发下网上已经有很多关于小程序下载服务端文件的资料了,但是基于云开发的…

苹果怎么备份QQ的聊天记录?这3招教你快速备份!

QQ聊天记录是我们与好友之间的重要互动和沟通记录。但是,有时可能会由于各种原因,比如系统崩溃、更换手机、自身误操作、QQ闪退等,可能会导致聊天记录丢失。 因此,备份QQ聊天记录显得尤为重要。那么,苹果手机怎么备份…

SAP CO系统配置-与PS集成相关配置(机器人制造项目实例)

维护分配结构 配置路径 IMG菜单路径:控制>内部订单>实际过帐>结算>维护分配结构 事务代码 OKO6 维护结算参数文件 定义利润分析码

ZED-Mini 标定完全指南(应该是最详细的吧)

标定 ZED-Mini 相机主要为了跑 VINS-Fusion 以及后期的联合标定相关事宜 双目相机标定 出厂标定数据 关于ZED相机的内参,使用出厂标定的数据就好了,如果安装ZED的SDK时使用的是默认的安装路径,可以在/usr/local/zed/settings下面找到一个SN…

漏洞处理-未设置X-Frame-Options

漏洞名称&#xff1a;iFrame注入 风险描述&#xff1a;系统未设置x-frame-options头 风险等级&#xff1a;低 整改建议&#xff1a;为系统添加x-frame-options头 知识 X-Frame-Options 响应头 X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <fram…

通过 Bytebase API 做数据库 Schema 变更

Bytebase 是一款数据库 DevOps 和 CI/CD 工具&#xff0c;适用于开发人员、DBA 和平台工程团队。 它提供了一个直观的图形用户界面来管理数据库 Schema 变更。另一方面&#xff0c;一些团队可能希望将 Bytebase 集成到现有的内部 DevOps 研发平台中。这需要调用 Bytebase API。…

搭建Nginx文件下载站点

一、下载Nginx 首先&#xff0c;确保你的服务器上已经安装了Nginx&#xff0c;使用编译安装&#xff0c;下载最新版Nginx。 wget https://nginx.org/download/nginx-1.25.3.tar.gz tar -xf nginx-1.25.3.tar.gz二、安装Fancyindex和Nginx-Fancyindex-Theme模块 # 下载Fancyin…

外贸中的很多跟想的不一样的事情

说说最近遇到的几个客户情况&#xff0c;以及对一些事情刷新的认知。 第一个客户姑且称为A吧&#xff0c;这个客户在询价的时候&#xff0c;产品的名称以及数量以还有走货的方式写的很清楚&#xff0c;客户A要的产品不是很多&#xff0c; 顶多算是个样品单。 一般情况下&…

腾讯云2核4G服务器CVM标准型S5实例5年优惠价格表

腾讯云服务器续费贵所以一次性买3年或5年&#xff0c;腾讯云轻量应用服务器3年价格有优惠&#xff0c;CVM云服务器5年有特价&#xff0c;腾讯云3年轻量和5年云服务器CVM优惠活动入口&#xff0c;3年轻量应用服务器配置可选2核2G4M和2核4G5M带宽&#xff0c;5年CVM云服务器可以选…

学习笔记11——Spring的XML配置

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://www.baobeihuijia.com/bbhj/contents/3/192584.html SSM框架——IOC基础【BeanSetter注入加载xml】 框架总览 Spring Framework 谈谈我对Spring的理解 - 知乎 (zhihu.com)java - 【架构视角】一篇文章带你彻底…

2023年12月25日学习总结——MLP

&#x1f4a1;我准备每一天都写一个学习总结&#xff0c;周末再把每日的学习总结汇总成专门的文章 &#x1f506;我的学习总结主要是为了自己的个人学习&#xff0c;没有商业用途&#xff0c;侵删 okkk开始今日学习 目录 1、今日计划学习内容2、今日学习内容深入学习MLP&#…

AI赋能金融创新:ChatGPT引领量化交易新时代

文章目录 一、引言二、ChatGPT与量化交易的融合三、实践应用&#xff1a;ChatGPT在量化交易中的成功案例四、挑战与前景五、结论《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》&#x1f4da;→ [当当](http://product.dangdang.com/29658180.html) | [京东…

Android/iOS APP备案流程指南

Android/iOS APP备案流程指南 摘要 本文通过详细介绍了工信部对移动互联网应用程序&#xff08;APP&#xff09;备案的要求&#xff0c;解释了APP备案的定义、时间节点、办理流程以及腾讯云、阿里云的备案流程&#xff0c;最后提供了常见问题的解答。 引言 随着移动互联网的…

MyBatis见解4

10.MyBatis的动态SQL 10.5.trim标签 trim标签可以代替where标签、set标签 mapper //修改public void updateByUser2(User user);<update id"updateByUser2" parameterType"User">update user<!-- 增加SET前缀&#xff0c;忽略&#xff0c;后缀…

C# 初识System.IO.Pipelines

写在前面 在进一步了解Socket粘包分包的过程中&#xff0c;了解到了.NET 中的 System.IO.Pipelines&#xff0c;可以更优雅高效的解决这个问题&#xff1b;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库&#xff0c;旨在使在 .NET 中执行高性能 I/O 更加容…

C/C++ 指针和const

const用于指针有一些很微妙的地方。可以用两种不同的方式将const关键字用于指针。 第一种方法时让指针指向一个常量对象&#xff0c;这样可以防止使用该指针来修改所指向的值&#xff1b; 第二中方法是将指针本身声明为常量&#xff0c;这样可以防止改变指针指向的位置。 首先…