写点什么

到底谁应该对软件开发的质量负责?

2019 年 3 月 03 日

到底谁应该对软件开发的质量负责?

本文关键点:

  • 随着软件开发越来越追求质量,每个团队成员都要为质量负责。

  • 质量的定义不再仅仅有正常运行时间和可靠性,有了供用户选择的各个方面。

  • David A. Garvin 1984 年的《定义质量的五种方法》将质量定义为卓越的质量、基于价值的质量、基于用户的质量、基于产品的质量和基于制造的质量。

  • 除了基于制造的质量之外,大多数类型的质量是不可测量的,但是团队又必须要考虑它,并且常常要直接与用户一起来做这件事。

  • 行为驱动的设计(BDD)是一种在编写代码之前规划用户旅程和测试用例的方法。


敏捷软件开发和 DevOps 除了强调用户体验,还让我们关注产品背后的人。但是这些过程重要吗?或者只是为了证明方法是不是正确?伦敦P3X(People, Product, and Process Exchange非常关注这三个 P 的交集,也许最后一个 X 是最有趣的,因为它凝聚了更多的缩写,比如测试驱动开发(TDD)、行为驱动开发(BDD)、持续交付(CD)、领域驱动开发(DDD)等等,以帮助团队审视如何系统性地建立更好的系统。


Janet Gregory 是敏捷测试协会的联合创始人,近期她完成了一场主题演讲,主题是关于追求软件质量的过程,在演讲结尾,她问大家是否感受到敏捷团队的魔力,如果能感受到他们在传递质量意识,举手示意。结果整个房间里,大概只有几个敏捷实践者举起了手。


敏捷宣言签署以来,已经走过了这 17 个年头,我们是怎样过来的,为什么仍有一些人看它如镜花水月一般?也许我们仍然没有进行正确的交流,也许我们没有和合适的人在一起协作,或者我们的过程中根本就不包括交流。


尽管这份宣言将个人和交互置于流程和工具之上,但流程中的某些内容也是以人为本的。也许通过审视我们的过程,我们可以更好地响应变化,增加协作,减少 bug,所有这些都是为了尽早和经常地满足客户。Gregory 拿出一个世代相传的质量方法,将其应用于现代敏捷软件团队,希望每个人都能对发布的内容有主人翁的精神。



究竟什么是“质量”

Gregory 指出,必须先为质量给出主观定义。她引用David A. Garvin在 1984 年提出的“定义质量的五种方法”,以这种方法开始为质量下定义:


  • 卓越的质量:氛围,天生的卓越气质,举世公认的成就

  • 基于价值的质量:价格和成本

  • 基于用户的质量:对某些人(一考虑质量大多数人就会想到的那些人)的价值

  • 基于产品的质量:你的用户在寻求什么?(比如你提供的牛奶)

  • 基于制造的质量:实践、过程、标准、要求、规范,我们做得对么?


Gregory 将每个类别的重要性进行了可视化,并将其应用到现代敏捷环境中。如下图所示,从最必要的中心向外辐射。



基于制造的质量

首先,有件事得顺利开展下去,因此基于制造的质量必须在第一位。


Gregory 说,这与测试驱动设计有关,因为“通过创建清晰的代码,可以显著减少返工”。


让我们第一次就把事情做对,使我们不会有其他的缺陷,可以满怀信心地发布。


TDD,这是一个在软件测试之前先设计自动化测试的实践,它倒推迫使软件解耦,是制造质量的重要组成部分。Gregory 引用了一项研究成果,该研究指出,与不进行 TDD 的团队相比,进行 TDD 的团队会少 60%到 90%的缺陷,但是 TDD 平均用时要多花 15%到 30%。


许多团队都在面对这种质量和速度的权衡。


“也许 PO(产品负责人)说,与提高质量相比,我宁愿你加入新功能。是谁,正在做出这些决定?”


Gregory 说,除了 TDD,基于制造的流程还包括:


  • 针对可维护性的编码

  • 针对错误日志的监控

  • 持续集成

  • 在故事上开展探索式测试

  • 验证产品是否符合规格的测试

  • 为快速反馈而创建自动化测试

  • 平台的静态分析

  • 明确定义完成标准


最后,她说,“像 DevOps 之类的实践是在设法在向客户发布产品时降低给客户带来的风险。”


基于产品的质量

简单来说,如果基于制造的质量是为了确保某些事正常开展,那么基于产品的质量则是为了确保产品按预期正常工作。例如,我们希望付钱追求更高的品质,但如果虽然某样东西坏了,但它的成本很低甚至为零,我们也会更宽容。如果有例外,那可能是我们通常期望的又能免费而又能工作良好的应用程序。


Gregory 指出,什么是基于产品的质量,这取决于目标受众。会计人员会希望键盘托盘能从当今大多数笔记本电脑中分离出来。


这其实是在问这样的问题:


  • 我们打造的是正确的东西吗?

  • 我们加入了我们想要的功能吗?


这包括:


  • 验收测试驱动开发(ATDD),有时也称为故事测试驱动开发,它是将关键客户引入到 TDD 阶段

  • 安全性测试

  • Bug bashes——就像一个团队黑客马拉松,寻找尽可能多的 Bug

  • 持续交付

  • 特征的探索式测试

  • Beta 版本

  • 性能测试

  • 负载测试


基于用户的质量

对于这个观点,存在的分歧最大。按照 Gregory 的说法是:“人各有所好,不同的人有不同的选择。他们有不同的需求。如果我们想让顾客选择,就让顾客满意。”


但别忘了,她接着说,“我们假设了一个大前提,那就是消费者掌握足够的信息,他们可以做出一个合格的决定。”


她提到一款曾经使用过的应用,自己觉得它非常不友好。事实证明,用户喜欢它的原因,是因为它完全遵循了他们的工作方式。她并不在那个领域工作。所有都是为了满足特定用户的特定用例。


基于价值的质量

这很简单,这就是人们愿意为之买单的东西。价值很难判断,如果不与潜在客户交流,基本上不可能做出判断。



基于价值的质量可以通过以下几种方法进行评估:


  • 有效性

  • 效率

  • 舒适度

  • 信心

  • 复杂性

  • 环境适应性


卓越的质量

最后是最难以评估的质量——卓越。Gregory 说,这是因为情感是最难度量的,这种评估要把卓越的质量与艺术性、参与度和客户忠诚度结合起来。


我们如何度量软件的质量?


总的来说,如果您接受 Garvin 的质量级别,那么软件质量的大部分内容都很难度量。她引用了Isabel Evans 在《软件质量度量》一书中的说法。基于制造的质量有很多例子:


  • 生产环境中的缺陷数量

  • 生产环境中的缺陷的严重性

  • 从上次发布到生产环境至今的天数

  • 自上次发布生产环境的 X 天内获得的新支持票数

  • 构建发射源总保持绿色

  • 没有古怪的自动化测试(随机性的失败)

  • 代码库的静态代码分析结果是健康的

  • 返工率很低

  • bug 不会重复出现


你还可以做做用户满意度调查,以这种形式度量基于用户的质量。


然而,你无法真正度量基于产品的、基于价值的或卓越的质量。但是,您可以讨论和评估质量的所有五个层次。测试是度量质量的重要手段,但 Gregory 提醒说,产品团队不能否定在彼此之间、与用户以及与竞争对手讨论质量的价值。


当然,团队需要在希望避免错误和追求速度之间找到平衡。


整个团队对质量负责

很清楚的一点是,质量保证不仅仅是测试部门的责任,开发人员不能把代码丢给他们就算了,或者质量保证这种叫法本身就有点问题。



整个团队都在把控质量

“如果你的组织、你的公司以质量为出发点,很可能就会取得成功,因为其他一切都很到位。一切都很正常。但是如果你们一开始认为速度最重要,不关注质量,那么就很有可能长期进行大量的返工,会出现很多不可维护的代码,质量将更进一步地下降”Gregory 说。


但她并没有提供一个追求品质的完美秘方。


“不管你用定性的还是定量的,那没所谓,但你得问问自己,你在寻求什么,它能让你满怀信心地发布吗?”Gregory 说。


“度量过程的质量就是度量产品的质量吗?”她引用了《BDD Book 1: Discovery 》的合著者 Seb Rose 的话:“当度量成为目标时,那么它就不再是好的度量了。”


Gregory 说:“无论你如何度量它,它都应该引发一场讨论,看看你们到底需要什么。”


她继续说:“团队掌控着质量,但你们必须考虑得更长远一些。过程中的质量和实践中的质量。


你的团队的能力,你如何交付软件的能力。


她最后说,在这个方向上展开每次对话时,如果大家都从试图解决问题开始,那是最好的了。


Gregory 说:“让我们将质量管理纳入我们的流程,并学会谈论我们做什么。”


关于作者

Jennifer Riggins 目前居住在伦敦,是一名科技故事讲述者和作家,在故事里,数字转型与文化交汇,希望能让世界变得更美好。你可以在推特上关注她@jkriggins


敏捷测试协会的联合创始人 Janet Gregory 花了 14 年的时间帮助团队过渡到敏捷软件开发环境,她专门帮助测试人员和业务人员理解他们是“整个团队方法”的一部分角色。


查看英文原文: Who is in Charge of Quality in Software Development


2019 年 3 月 03 日 08:005342

评论 1 条评论

发布
用户头像
好文
2019 年 03 月 04 日 09:07
回复
没有更多了
发现更多内容

BML CodeLab发布重磅更新 一键配好Windows WSL2 AI开发环境

百度大脑

Selenium 利用 JS/JQ 操作元素、鼠标键盘事件、Cookie 操作

梦想橡皮擦

Python 28天写作 2月春节不断更 selenium

基于grpc手撸一个RPC框架

cloudcoder

连接AI与用户,京东云推出视音频通信技术方案

京东科技开发者

IoT 通信 视频会议

又一里程碑!阿里新产SpringBoot笔记,差距不止一点点

Java成神之路

Java 程序员 架构 面试 编程语言

性能优化知多少

圣杰

sql 性能优化 dotnet

华为大神珍藏版:SpringBoot全优笔记,面面俱到太全了

互联网架构师小马

Java 架构 微服务 Spring Boot Spring Boot 2

为了让你在“口袋奇兵”聊遍全球,Serverless 做了什么?

阿里巴巴云原生

云计算 Serverless 云原生 监控 调度

全网最全Java程序员必知必会计算机网络、数据结构与算法进阶宝典开源分享!

Java成神之路

Java 程序员 架构 面试 编程语言

狂补计算机基础知识,让我上了瘾

沉默王二

计算机基础 计算机

LeetCode题解:152. 乘积最大子数组,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

最新大厂Java面试题库,测试一下你能坚持到哪一面 “美团+字节+腾讯”三面技术问题

Java架构之路

Java 程序员 架构 面试 编程语言

【死磕JVM】JVM快速入门之前戏篇

牧小农

跨平台 虚拟机 Java虚拟机 JVM虚拟机原理 hotspot

一道好题!我觉得面试如果考察「双指针」的话,这题是刚刚好 ...

宫水三叶的刷题日记

LeetCode 数据结构与算法 面试数据结构与算法

「TcaplusDB知识库」概念(表、键、记录、索引)

TcaplusDB

数据库 技术 数据 TcaplusDB Tcaplus

程序员需要搞理财吗?

三石

理财 话题讨论

bat文件调用cmd命令批量提取文件夹中的文件名(批量修改文件扩展名)

明金同学

阿里内部Spring源码教程笔记开源!Spring源码其实也可以这么简单

Java成神之路

Java 程序员 架构 面试 编程语言

Android NativeCrash 捕获与解析

vivo互联网技术

c++ android NativeCrash

小程序开发-云开发技术总结

魔王哪吒

小程序 程序员 前端 28天写作 2月春节不断更

关于央行数字货币若干问题的思考 | 比较

CECBC区块链专委会

数字货币

Agora 实时音视频调查工具水晶球

john

计算机视觉--opencv及paddlepaddle 环境安装

cloudcoder

不是吧阿sir!这么“快”的吗?不愧是鹅厂内部强推Java优化手册,爱了爱了!

Java成神之路

Java 程序员 架构 面试 编程语言

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

Java 程序员 架构 面试 编程语言

牛掰!面试不再慌,苦刷这份2020最全的“基础-中级-高级”面试题库,已涨17k

Java架构之路

Java 程序员 架构 面试 编程语言

深度丨从货币历史看比特币的诞生

CECBC区块链专委会

比特币

构建“金融+司法”新局面:兴业消费金融区块链电子存证系统正式上线

CECBC区块链专委会

金融

热点浅谈:低代码开发平台发展前景与市场规模!

优秀

低代码 低代码开发 低代码开发平台

区块链电子合同存证,电子合同区块链服务平台

13530558032

神操作:就靠这份“Java核心技能精讲”,竟收割了22个Offer

比伯

Java 编程 架构 面试 计算机

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

到底谁应该对软件开发的质量负责?-InfoQ