软件工程之美学习笔记九 08 | 怎样平衡软件质量与时间成本范围的关系?

《软件工作之美》材料地址:https://time.geekbang.org/column/article/85302

1. 什么是软件项目管理金三角?

软件工程之美学习笔记九 08 | 怎样平衡软件质量与时间成本范围的关系?
在软件项目中,也有一个类似的平衡关系,就是软件质量(产品的质量,客户的满意度)与范围(需要实现多少功能)、时间(多久可以完成)、成本(花多少钱)四个要素之间的平衡。
软件工程之美学习笔记九 08 | 怎样平衡软件质量与时间成本范围的关系?
这个就是项目管理金三角。
“质量”这个因素一般不会妥协,因此把“质量”放在三角形中间,然后在时间、成本、范围这三条边之间寻求平衡。

2.如何应用“管理金三角”做决策?

(1)压缩时间:
调整范围和成本:减少功能,增加人手。
(2)增加需求:
调整时间和成本:延期,增加人手。
(3)降低成本
调整时间和范围:延期,减少功能

3.瀑布模型和敏捷开发如何平衡时间成本范围的关系?

软件工程之美学习笔记九 08 | 怎样平衡软件质量与时间成本范围的关系?

瀑布模式下,范围是确定的(用户需求签字确认),所以可以通过加人手或者延期来提高项目质量
敏捷模式下,迭代的周期和人手都是固定的,所以可以通过调整范围来确保每次迭代的交付质量。

4. 如何平衡好软件质量与时间成本范围的关系?

从时间、成本和范围这三条边中找出来固定的一条或者两条边,再去调整另一条边。
(1)成本角度:
除了增加人手,还可以考虑购买工具集和现成产品,多买*。
(2)时间角度
通过极限编程:持续集成、自动化测试、够用产品原则
(3)范围角度
MVP(minimum viable product,最小化的可行性产品)模式

5. 我的留言

传统的大企业(不是指BAT这类大企业),比如我们企业,IT项目牵涉到三个部门,一个是业务需求部门,一个是IT部门,一个是财务预算审批部门,采取的形式一般都是采用外包方式,而且往往是固定合同,也就是合同价格是确定的,需求范围也是确定的,这样的话,金三角的两条边就定下来了,剩下来的就是时间和质量的关系问题了。
按照金三角的理论,我们就可以知道前面所述的场景下项目组该重点抓什么了:作为甲方项目经理,重点抓的就是质量和时间了。如何通过提高效率,使单位时间的产出比原来的多(相当于增加了时间),来提高项目的交付质量,是我们甲方IT项目经理最关心的事。所以这时候,我们的方法是建立统一软件框架、提供公共服务组件、制定代码和测试规范、培训乙方团队、搭建CICD平台和自动化测试平台、sonarqube自动代码检测平台等,使原来几周一次测试变成一周几次测试,使原来低质量的代码快速变成高质量的代码… 反正是采用各种方法,提高工作效率,用于抵消业务部门不时提出的变更导致的项目进度的风险。当然在开发模式上,也会衡量敏捷的开发模式(特别是scrum的管理模式)和传统瀑布及衍生模式哪种模式更高效。
当然,理解了金三角,对于前期申请项目预算也是有帮助的,比如,可以和预算部门谈判,如果要砍预算,在时间一定的情况下,就只能减少项目范围,这是我们业务需求部门所不能接受的。这样,就可以使IT项目经理名正言顺地把预算部门和IT部门的矛盾转嫁到预算部门和业务需求部门去。
当然,最合理的做法应该是向BAT公司看齐,IT部门转变为利润中心,自己管预算、自己有开发团队,那么金三角的三条边就都可以进行调优了。
补充说明一下,前面所讲的买工具,提供培训,提供公共组件服务,以及搭建CICD平台和自动化测试平台等,也可以理解为增加成本。但对于我们企业来说,这笔成本就不算在具体的某个开发项目里了,所以我把它归结为提高效率,实际上也可以理解为TTM (Time To Marketing)指标。