速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

  • 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:302620

评论

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

Web 3.0是什么?区块链热潮下2022年必懂的科技概念

CECBC

READS: Salesforce服务健康指标最佳实践

俞凡

微服务 最佳实践 可观测性 大厂实践 Salesforce

架构训练营模块六

刘帅

电商系统微服务拆分

邹玉麒

「架构实战营」

电商系统微服务拆分实践

IT屠狗辈

微服务 架构实战营 电商系统架构 架构拆分

Vuex在TSX中的改造方案:TS改造Vue2项目Vuex如何处置?

zhoulujun

Vue3 vue2 tsx vuex-class vuex-module-decorators

《直击本质》——读后上

圣迪

系统性思考 直击本质 金字塔原理 本质

电商系统拆分为微服务

凌波微步

「架构实战营」

【架构实战营】毕业总结

wgl

架构实战营

另一个 effective go 中文版

蓬蒿

深度学习优化层技术

Clarke

Salesforce服务可观测性设计模式

俞凡

微服务 可观测性 大厂实践 Salesforce

拆分电商系统为微服务

石小天

「架构实战营」

模块六作业

Geek_ec866b

架构训练营

「架构实战营」模块六 电商微服务框架设计

hxb

「架构实战营」

「架构实战营」模块九《十万级到亿万级 IM 架构实战》作业

DaiChen

作业 「架构实战营」 模块九

一文搞懂I2C总线通信

不脱发的程序猿

嵌入式 通信协议 I2C协议

JS中的函数参数默认值是如何写的?

Changing Lin

3月月更

架构训练营 模块六

Geek_16d2b8

架构训练营 模块六

失眠的岁月,我们都交了哪些科技智商税?

脑极体

[Day1]-[广度搜索(BFS)] 二叉树最小高度

方勇(gopher)

LeetCode BFS 数据结构算法

底什么是伪静态?为什么要做伪静态?

源字节1号

网站建设 SEO伪静态

【架构实战营】毕业设计项目

wgl

架构实战营

一文概述:云端常见的攻防及实践

穿过生命散发芬芳

3月月更

架构训练营第一期作业

Geek_bc9c8d

模块九作业-设计电商秒杀系统

CH

架构实战营

电商微服务架构拆分

Fingal

架构实战营

如何保持知识与技能的先进性

长沙造纸农

学习方法 方法论 认知提升 学习笔记 技能提升

公平的获得财富的机会,区块链通证经济是未来的必然趋势

CECBC

毕业总结

黄秀明

「架构实战营」

电商系统微服务拆分

随欣所遇

架构训练营5期

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