写点什么

敏捷开发下平衡质量和进度

  • 2014-08-21
  • 本文字数:1744 字

    阅读完需:约 6 分钟

敏捷软件开发团队必须确保他们开发出来的产品质量能够满足要求,管理团队也经常希望开发团队能够提高速度以实现为客户提供更多的功能。本篇文章中多个作者探讨了质量和速度之间的关系,并提出了一些既能提高质量也能加快进度的方法。

Bob Galen 曾今在他的博客中发表了读懂我的唇语 - 敏捷并不快速的文章,在其中写到了追求软件开发进度下质量的重要性。

敏捷是一个“质量游戏”,如果你以正直,承诺以及平衡的心态来玩这个游戏的话,那么结果将会是非常好的“速度游戏”,但它(速度)却并非没有代价。。。

如果你无法玩转这个质量游戏,你所采纳的敏捷开发方法甚至比你以前使用的开发方法更慢。

团队必须致力于把工作在一个迭代中完成,这也就意味着这些工作需要满足定义工作完成的所有标准。

很多敏捷团队允许返工 – 修复漏洞,完成测试自动化,重构,或者设计不良导致 sprint 迭代的延误。即使大多数的敏捷工具允许拆分用例故事以捕捉在 sprint 迭代中已经完成的工作对比延期的工作,我也还是认为这给团队传达了错误的信息,让他们认为工作不在一个 sprint 迭代内完成是可以接受的。

读懂我的唇语 – 并不是把所有事情做完,做完,做完!

正如 Bob 解释的:一个组织不应该总是力图让进度变得更快,而应该更加注重质量。

因此,下一次当你听到有人在激情澎湃的谈论着敏捷代表了更快的速度时,请打断他们,尝试向他们解释敏捷并不是一个“速度游戏”,而是应该强调敏捷是一个“或许能够快速运转的质量游戏”。

Tim Ottinger 曾今写过关于敏捷团队进度的 14 个奇怪观点,其中一个观点中就提到了质量和速度之间的关系。

尽管大家通常会降低质量要求以求在较短时间内尽快完成工作,但是如果团队所开发的代码质量不高的话,经过全部 sprint 迭代后的进度最终都还是会被降低。

Stephen Haunts 在他的题目为进度并不是目标或者目的博客帖子中,描述了当管理者设定团队的进度目标后对质量会产生什么影响:

(…)为了增加交付的功能点数目以满足绩效目标,团队会牺牲掉系统的质量,但从长远来看这样最终还是会降低团队的进度,并且会引入技术隐患。敏捷团队最好关注正在开发系统的质量与流程过程(持续交付和集成等等),以及负责开发系统的团队成员本身。

软件开发者必须在进度和质量之间掌握平衡,正如 Blake Haswell 在文章什么是代码质量中解释的那样:

虽然经常会有很多的外部压力向进度方面倾斜,但是如果你不够重视质量的话,进度最终还是会趋于缓慢以及停滞,以至最终整个项目走向颠覆。考虑到一个项目的代码质量决定了它能够在多大程度上适应需求的变化,一个可以持续改进的事情是你需要花费一部分时间来优化自己项目的代码质量。

Blake 提供了一个可以用来检查代码质量的属性列表:

  • 可理解性: 代码需要在各个层面上能够被容易地理解。理想情况下,软件应该非常简单,并没有非常明显的缺陷。
  • 可测试性: 代码需要被编写的非常容易被测试。
  • 正确性: 代码需要满足功能和非功能性的需求。
  • 有效性: 代码需要有效的使用系统资源(内存,CPU,网络连接,等)。

Hugo Baraúna 在他的博客文章名为内部质量低下软件的症状中解释了软件是如何因为变更而“变得更糟”的,最终导致质量低下并且降低进度。

假如你正在领导一家创业公司的技术或者产品团队,你是首席技术官,并且已经推出了你们产品的第一个版本,做的还挺成功的。你们的业务模型已经得到了验证,现在你们正处于快速发展期。这真是太棒了!但这也是有代价的,它带来了一系列新的挑战。

你们产品的第一个版本工作的很好,但是代码库却无法满足持续发展的要求。或许你的团队进度并没有像以前那样好了,团队成员一直在抱怨代码的质量问题,首席执行官和产品经理想要一些新的功能,但你现在代码规划根本无法满足业务的需求。

他提供了一个指示质量低下的症状列表,这个列表能够帮助你来决定是否需要重写或者重构:

  • 所有事情都很艰难
  • 进度慢
  • 测试套件运行缓慢
  • 无法避免的缺陷
  • 你的团队是消极的
  • 知识缺乏共享
  • 新开发人员成长周期太长

你又是如何平衡质量和进度的呢?

查看英文原文 Balancing Quality and Velocity in Agile


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-21 00:302674

评论

发布
暂无评论
发现更多内容

波卡创始人 Gavin Wood:波卡治理 v2 会有哪些变化?

One Block Community

区块链 科技

让企业数字化砸锅和IT主管背锅的软件供应链安全风险指北

FinClip

盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣

One Block Community

区块链 科技

【用户文章】P4合并实践指南之实例拆解Resolve

龙智—DevSecOps解决方案

P4合并 解决冲突

没有可观测性,DataOps 注定失败|TheNewStack

观测云

直播带货系统源码

开源直播系统源码

软件测试 APP开发 直播系统源码 直播带货系统源码

【容器篇】Docker怎么限制资源使用

技术小生

Docker 7月月更

数据库每日一题---第23天:游戏玩法分析 l

知心宝贝

数据库 程序员 算法 后端 7月月更

代码合规性:开发人员使用Helix QAC的5大原因

龙智—DevSecOps解决方案

静态代码分析 Helix QAC 静态代码分析器

网络安全网格概念以及特点简单普及

行云管家

网络安全 网络安全网格

游戏有什么用?| 游戏应用价值研究案例征集

易观分析

游戏

红象云腾大数据基础平台与龙蜥社区操作系统再次完成联合测试

OpenAnolis小助手

开源 操作系统 龙蜥社区 红象云腾 兼容性互认证

助力开发者,全方位解读 APISIX 测试案例

API7.ai 技术团队

开源 测试 APISIX 网关

在 Polkadot 中进行创建的三种方式 —— 平行链、平行线程、智能合约

One Block Community

区块链 科技

了解JVM语言

沃德

Java 程序员 7月月更

一文搞懂│什么是跨域?如何解决跨域?

前端 经验分享 跨域 7月月更

华为影像XMAGE:求尽世间像,终见菩提心

脑极体

西山居如何用 ONES 打造游戏工业流水线?|ONES 行业实践

万事ONES

AI简报-模型集成 SAM 和SWA

AIWeker

深度学习 7月月更

自定义spring boot starter三部曲之三:源码分析spring.factories加载过程

程序员欣宸

Java springboot 7月月更

用对工具,CI事半功倍

龙智—DevSecOps解决方案

ci 持续集成 ⾃动化构建 ⾃动化部署

Gartner:无需数据中台,API就能胜任连接前端和后端的工作

雨果

数据中台 API

知识干货:基础存储服务新手体验营

hum建应用专家

数据库

大数据培训 Hive 相关知识的全面总结

@零度

hive 大数据开发

java培训4种Map遍历 key-value 的方法

@零度

JAVA开发 map

MySQL 添加用户并授予只能查询权限

叫练

C# 使用ToolTip控件实现气泡提示

IC00

C# WPF 上位机 7月月更

leetcode 605. Can Place Flowers 种花问题 (简单)

okokabcd

数据结构与算法 贪心算法

焱融科技入选北京市 2022 年度“专精特新”,领航混合云文件存储

焱融科技

全球云市场增势迅猛,数据安全进入法治化的强监管时代

行云管家

云计算 网络安全 数据安全

怎么学习Object.defineProperty | 一篇文章带你们快速学会

bo

JavaScript 前端 7月月更

敏捷开发下平衡质量和进度_架构_Ben Linders_InfoQ精选文章