软件工程之美
宝玉
Groupon资深工程师,微软最有价值专家
立即订阅
6741 人已学习
课程目录
已完结 54 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 你为什么应该学好软件工程?
免费
特别放送 | 从软件工程的角度解读任正非的新年公开信
学习攻略 | 怎样学好软件工程?
基础理论 (9讲)
01 | 到底应该怎样理解软件工程?
02 | 工程思维:把每件事都当作一个项目来推进
03 | 瀑布模型:像工厂流水线一样把软件开发分层化
04 | 瀑布模型之外,还有哪些开发模型?
05 | 敏捷开发到底是想解决什么问题?
06 | 大厂都在用哪些敏捷方法?(上)
07 | 大厂都在用哪些敏捷方法?(下)
08 | 怎样平衡软件质量与时间成本范围的关系?
“一问一答”第1期 | 30个软件开发常见问题解决策略
项目规划篇 (8讲)
09 | 为什么软件工程项目普遍不重视可行性分析?
10 | 如果你想技术转管理,先来试试管好一个项目
11 | 项目计划:代码未动,计划先行
12 | 流程和规范:红绿灯不是约束,而是用来提高效率
13 | 白天开会,加班写代码的节奏怎么破?
14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决
15 | 风险管理:不能盲目乐观,凡事都应该有B计划
16 | 怎样才能写好项目文档?
需求分析篇 (5讲)
17 | 需求分析到底要分析什么?怎么分析?
18 | 原型设计:如何用最小的代价完成产品特性?
19 | 作为程序员,你应该有产品意识
20 | 如何应对让人头疼的需求变更问题?
“一问一答”第2期 | 30个软件开发常见问题解决策略
系统设计篇 (4讲)
21 | 架构设计:普通程序员也能实现复杂系统?
22 | 如何为项目做好技术选型?
23 | 架构师:不想当架构师的程序员不是好程序员
24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
开发编码篇 (7讲)
25 | 有哪些方法可以提高开发效率?
26 | 持续交付:如何做到随时发布新版本到生产环境?
27 | 软件工程师的核心竞争力是什么?(上)
28 | 软件工程师的核心竞争力是什么?(下)
29 | 自动化测试:如何把Bug杀死在摇篮里?
30 | 用好源代码管理工具,让你的协作更高效
“一问一答”第3期 | 18个软件开发常见问题解决策略
软件测试篇 (4讲)
31 | 软件测试要为产品质量负责吗?
32 | 软件测试:什么样的公司需要专职测试?
33 | 测试工具:为什么不应该通过QQ/微信/邮件报Bug?
34 | 账号密码泄漏成灾,应该怎样预防?
运行维护篇 (6讲)
35 | 版本发布:软件上线只是新的开始
36 | DevOps工程师到底要做什么事情?
37 | 遇到线上故障,你和高手的差距在哪里?
38 | 日志管理:如何借助工具快速发现和定位产品问题 ?
39 | 项目总结:做好项目复盘,把经验变成能力
“一问一答”第4期 | 14个软件开发常见问题解决策略
经典案例解析篇 (7讲)
40 | 最佳实践:小团队如何应用软件工程?
41 | 为什么程序员的业余项目大多都死了?
42 | 反面案例:盘点那些失败的软件项目
43 | 以VS Code为例,看大型开源项目是如何应用软件工程的?
44 | 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?
45 | 从软件工程的角度看微服务、云计算、人工智能这些新技术
“一问一答”第5期(内含彩蛋) | 22个软件开发常见问题解决策略
结束语 (1讲)
结束语 | 万事皆项目,软件工程无处不在
软件工程之美
登录|注册

08 | 怎样平衡软件质量与时间成本范围的关系?

宝玉 2019-03-12
你好,我是宝玉,我今天与你分享的主题是:怎样平衡软件质量与时间、成本、范围的关系。
《从软件工程的角度解读任正非的新年公开信》这篇文章中,我已经提到了“软件项目管理金三角”的概念。由于这个内容对于软件工程来说,非常之重要,所以我今天特别展开再讲一下。
你会发现,在实际的软件项目中不乏这样的例子:
一个项目,正常估算,要三个月才能完成,但是老板或客户要压缩到一个月完成,而你不知道如何说服他们;
项目开发一半,产品经理告诉你,有一个非常紧急的功能,要增加到这个版本中,你不知道该不该拒绝,或者如何拒绝;
听说迭代模型很好,你也尝试使用迭代模型,但是每次迭代时间到了还是完不成,只能把迭代时间延长,最后又做回传统的瀑布模型了;
你们组用瀑布模型开发,一到项目后期总免不了加班加点赶进度,为什么他们用敏捷开发的加班要少一些?
其实,这些日常项目中涉及时间、成本和范围的问题,都离不开“软件项目管理金三角”的概念。
掌握好这个知识点,学会平衡软件质量与时间成本范围的关系,可以帮助你更好的驾驭项目中的各种问题,也可以帮助你更好地理解软件工程中各个模型,尤其是瀑布模型和敏捷开发。

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

在现实生活中,我们都知道,做产品想“多、快、好、省”都占着,是不可能的,最多只能选两样。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件工程之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(26)

  • javaadu
    1. 如果希望软件做得又快、有低成本,得到的软件应该是质量差、功能可能不全的软件
    2. 如果希望软件免费,又得快速交付,那么得到的软件应该是质量没有保障,功能大概率不全的软件
    3. 快速、便宜、质量好的软件是不存在的
    4. 之前的工作中,好像没有一个项目可以达到质量和时间、成本之间良好的平衡,最后的结果都是为了保障质量和时间,然后增加人力成本(加班),如果加班也搞不定就对时间做出妥协(延期),范围这个指标倒是比较容易调整的一个指标。
    5. 读完这篇文章的收获:(1)软件项目管理本质上就是在成本、范围、时间三个要素中做出合适的妥协的过程,质量是软件项目的目标,不能妥协;(2)管理金三角有助于在软件管理中进行良好有效的沟通,将精力花在事情上,而不是花在PK上,PK不是目标;(3)对于个人成长,也有同样的指导意义,我们的目标是取得个人的成功(名或利),影响这个目标的要素有时间、成本、范围,个人管理的过程也是在这三个要素中做妥协和平衡,例如,我现在积极参加这些知识付费的课程,就是希望用成本来提高自己的学习效率,这样可以在时间和范围上获得一些机会;我如果现在去健身,也会花钱请私教,同样是用成本来提高自己的健身效率,做出这样的选择的原因是我自己感觉相对于这些课程的价格来说,我的时间更加宝贵;但是有些时候,如果价格超出了我的承受能力,那我就不得不做出选择——自己花时间去搞定事情;有时候,成本我也不在乎,但是我的时间还是有限的,那我就只能做减法(少做一些事情)

    作者回复: 赞,你这个感悟很深刻,不只是项目中,都已经应用到日常生活中了👍

    2019-03-16
    1
    17
  • koradji
    对金三角有了进一步的认识和理解,以前只认为它是个三角形而已,还不会用,谢谢老师

    作者回复: 是呀,这个真的非常实用的,软件项目中很多现象都可以从它身上找到解释,很多问题都可以通过它找到合适的方案。

    2019-03-12
    10
  • 草裡菌
    金三角的确很有说服性,理论级的支撑。

    1 用户体验很差的软件。性能低,学习成本高,缺陷多。
    2 开发成本很高。但是投入产出比会有一个边界,无限的砸钱也不可能等比提高效率与质量。
    3 开发周期长。开发周期长,比较容易出现需求变动,错失良机等问题。
    4 不存在。
    5 没什么能稳定使用的功能,会牺牲用户体验(比如加广告),性能低,安全容易出纰漏。
    6 需求面很窄,小而美的那类软件,个人情怀很到位,开发时间很长。
    7 也不存在。

    作者回复: 💯
    我也认同4,7不存在

    2019-03-12
    5
  • helloworld
    我认为文中关于三要素的说法是错的。专栏里,提到这个三角的时候又总是同时提到质量,时间成本范围又同时影响着质量,对质量的要求又影响了时间成本范围,那么质量应该是要素之一。
    有些文章说三要素是时间成本质量,这也是错的,范围没有了。
    PMP提到了,三要素是成本质量范围,时间属成本。
    花费了成本,换了别的东西,成本沉没了,再也回不来了。时间也是,花了时间和其它成本,换了别的东西,时间沉没了,再也回不来了。

    作者回复: 时间可以算作成本,但是三要素不代表就必须要将成本和时间合并。

    对于一个软件项目来说,时间和成本都是很重要的纬度,有无限的钱和最牛的人,不代表就可以用很短的时间做出来产品。

    对于项目各种因素的约束,本身就存在各种不同的解读,我不认为一定就只有一种正确答案,你选择自己认为正确的就好。

    2019-06-28
    4
  • alva_xu
    留言中讲的买工具,提供培训,提供公共组件服务,以及搭建CICD平台和自动化测试平台,也可以理解为增加成本。但对于我们企业来说,这笔成本就不算在具体的某个开发项目里了,所以我把它归结为提高效率,实际上也可以理解为TTM (Time To Marketing)指标。

    作者回复: 谢谢补充🤝

    2019-03-13
    4
  • 小先生
    从这篇文章,我至少学会了不要怼产品。而是要从成本,时间,范围,三原则中寻找妥协。

    作者回复: 💯
    对,重点不是怼,而是协商

    2019-03-15
    3
  • 风再起时
    老师请教一下,敏捷开发中是怎样做成本估算的?按您所说,开发过程中每个Ticket由开发团队集体估算,但在项目开始前即立项阶段,只有初步的大概的需求,具体的Ticket还没有制定出来或者不完备,如何准确确定项目的合同金额或预算?瀑布模型开发又是如何预估成本的呢?都是采用专家估算或领导拍脑袋估算成本和工期吗?软件工程书籍中介绍的估算模型如COCOMO或其他算法模型在实践中有人用吗?功能点、用例点等软件规模的估算方法实践中还有人用吗?这些方法是不是过时了?您觉得CMM或CMMI中对开发过程中的很多方面进行量化度量的做法在当今时代的软件开发中还实用吗?一口气问了这么多问题,先谢啦😊

    作者回复: 首先,软件项目的成本,主要是人力成本、采购的软硬件成本以及其他办公运营等成本。

    其中人力成本的估算其实就是:人员工资x时间

    无论是瀑布模型还是敏捷开发,要估算人力成本,就是要算出来要多少人月

    在原始需求出来后,要对需求进行分解,越细致越好,然后对于分解后的细项再凭经验估算。

    基于细分的需求:
    瀑布模型的话,要把阶段分出来,各个阶段预计的时间和人员投入估算出来。然后就能大致算出成本。
    敏捷开发的话,要估算需要多少个Sprint,多少人参与这个项目。也能大致算出成本。

    你说的“软件工程书籍中介绍的估算模型如COCOMO或其他算法模型”我不知道你指的哪本书,我也确实不太清楚这部分知识,也不知道是不是过时了。

    > CMM或CMMI中对开发过程中的很多方面进行量化度量的做法在当今时代的软件开发中还实用吗?

    还是看项目场景吧,如果是应用CMMI模型的软件项目,肯定是适用的。我觉得现在软件开发整体上还是在往“敏捷”上发展的。

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

    作者回复: 谢谢补充👍

    非常有价值的分享!

    2019-03-13
    3
  • AICC
    备注:理论上快,好,便宜是不存在的,但实际能否存在呢,可以只能加进一个新的维度“少”
    所以围绕多,快,好,省(对应少,慢,差,贵)来确定1-7会是什么样的软件
    1.快 + 便宜 = 质量很差并且多数伴随功能少
    2.快 + 好 = 费用成本高多半是早期软件,功能少只实现核心功能但体验不错
    3.好 + 便宜 = 开发周期长,但开发时间长费用成本不见得少,所以多半也伴随功能少
    4. 快 + 便宜 + 好 = 如备注所说,这会是一个体验不错但功能少的软件,比如微信早期版本只能语音
    5.免费 + 快 = 这样的软件也很多,质量基本没谱了可能还有安全风险
    6.免费 + 好 = 这样的软件也很多,比如某零杀毒软件,当年就是以免费出道,但成本就很高开发周期一般也比较长
    7.免费 + 好 + 快 = 单点功能的软件,比如微信里像抽奖助手的小程序,一个功能好用简单,还有像一些优秀的开源软件插件啥的
    但通常免费多数是赚的流量费,广告插入到处是

    作者回复: 7的话可能还是有点争议,整体总结的非常好👍

    2019-03-12
    3
  • dancer
    很多的游戏公司这三个角都想要,就导致抄袭很严重!

    作者回复: 抄袭我觉得就相当于节约了需求分析的时间和成本

    2019-03-18
    2
  • Felix
    谢谢宝玉老师教的砍需求大法,而且还有理论支撑,以后PK再也不虚了🙊

    作者回复: 只要是为了“质量”,就没什么好虚的👍

    另外沟通的时候,还是以协商为主,毕竟大家目标是一样的,是为了保障质量的前提一起协商做一些调整,并不是要PK个输赢 :)

    2019-03-15
    2
  • hypo
    如果时间、成本、范围等比例缩小,三边围成的面积也缩小了,是否意味着软件的质量也是缩小了?但现实中一般认为质量并没有缩小。

    作者回复: 金三角反应的更多是各个因素之间的关系和约束,并不是严格的比例限定,否则2个孕妇能5个月生孩子了

    2019-06-30
    1
  • 果然如此
    这篇把零散的知识点形成体系,强化了时间、成本、范围、质量的关系,更能联系实践!
    能够提高与产品经理打太极的水准!

    作者回复: 大家目标都是为了项目质量,至于如何平衡还是要多沟通多协商,互相妥协 :)

    2019-03-21
    1
  • 一路向北
    通过金三角这个概念一分析,明白了瀑布型和敏捷的你中有我,我中有你。
    按照时间切片,切完片之后再来一个微型瀑布。

    作者回复: 敏捷的Sprint严格来说不是一个微型瀑布,迭代模型才是。

    请参考“05|敏捷开发到底想要解决什么样的问题”,里面有对这个进行对比和解释。

    2019-03-13
    1
  • 张驰
    金三角模式很实用,不过对于每个sprint是否可以按照需求来划分呢,因为如果是一个成熟的产品可能规定的时间内都不会有迭代的需求,而是按照产品经理某一天提出来的story进行迭代的。

    作者回复: 敏捷开发的Sprint,如果按照需求来划分,而不是按照固定时间,那么最终发布的时间就很难确定,这个Sprint就会变回小瀑布的,就很难敏捷起来。

    增量模型是按功能划分的。

    2019-03-13
    1
  • Bradley_Cai
    最怕的就是时间和范围固定,要求加成本的情况。因为在国内这个加成本往往就是加班,而且还没有加班费。

    作者回复: 加班就是加时间🤦‍♂️

    2019-03-13
    1
  • 小西
    受益匪浅,利用项目管理金三角理论,使我在项目中遇到到一些问题豁然开朗。

    作者回复: 👍赞,能把学的东西用上,是最开心的了!

    2019-03-12
    1
  • 纯洁的憎恶
    “多、快、好、省”,软件工程的四难选择问题。由于质量是软件工程压倒一切的要素,因此“好”必须留在“盘子”里。剩下的要素都是可以根据具体情况权衡取舍的。四难选择变成了三难选择。于是,工程师在实践中面对不确定时,也能够有底气做到“不抵触,讲条件”了。

    延长时间的另一面是提高效率。借助工具、优化流程、节约资源等方法,可以在一定程度上“冲销掉”延长的时间。

    非常欣赏MVP模型,既可以快速见效,又降低了大量返工的可能。在瀑布模型中,通过会有过度设计的现象。一开始想了很多,结果发现恨不能80%都是瞎想。先拿出核心功能,再根据用户使用的情况,有指向性的完善,步步迭代演进,十分靠谱。唯一令人担忧的是,在外包模式中,如果没有明确的需求,就难以估算出较为准确、合理的预算,进而无法立项、采购。如果先做一版需求申请下来预算再说,再用MVP模型步步试探。那么最后做出来的东西可能与需求文档严重不一致,存在较大的审计、内控风险。也许企业大了、规矩多了,做起事来确实别扭。

    作者回复: 总结的非常棒👍

    迭代模型和MVP是非常好的组合,因为迭代的时候,会优先选取最重要的功能,慢慢的那些不重要的功能甚至永远不会被加入迭代中,就因为不需要浪费时间在上面了

    2019-03-12
    1
  • 胡鹏
    估时我觉得还和人之间的关系有关,有的人习惯估时长,领导习惯了也不压,有的人做的快,估时短,如果某次估时长,老板还会说,,,, 金三角以后我也要用这种方案试一下了

    作者回复: 是的,金三角是帮助你提供理论支持的,还需要根据环境灵活运用。

    2019-03-12
    1
  • BibuYing
    终于找到一套可以说服老板的说辞了

    作者回复: 不要想着说服老板,而是给他更多选择😂

    2019-03-12
    1
收起评论
26
返回
顶部