【软件项目管理篇】怎样平衡软件质量与时间成本范围的关系?

你会发现,在实际的软件项目中不乏这样的例子:

  • 一个项目,正常估算,要三个月才能完成,但是老板或客户要压缩到一个月完成,而你不知道如何说服他们;
  • 项目开发一半,产品经理告诉你,有一个非常紧急的功能,要增加到这个版本中,你不知道该不该拒绝,或者如何拒绝;
  • 听说迭代模型很好,你也尝试使用迭代模型,但是每次迭代时间到了还是完不成,只能把迭代时间延长,最后又做回传统的瀑布模型了;
  • 你们组用瀑布模型开发,一到项目后期总免不了加班加点赶进度,为什么他们用敏捷开发的加班要少一些?

其实,这些日常项目中涉及时间、成本和范围的问题,都离不开“软件项目管理金三角”的概念。

掌握好这个知识点,学会平衡软件质量与时间成本范围的关系,可以帮助你更好的驾驭项目中的各种问题,也可以帮助你更好地理解软件工程中各个模型,尤其是瀑布模型和敏捷开发。

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

在现实生活中,我们都知道,做产品想“多、快、好、省”都占着,是不可能的,最多只能选两样。

想要便宜和质量好,就要花时间等;想要快还要质量好,那就得多花钱;想要又便宜又快,那就得接受难用、质量差。

img

而在软件项目中,也有一个类似的平衡关系,就是软件质量(产品的质量,客户的满意度)与范围(需要实现多少功能)、时间(多久可以完成)、成本(花多少钱)四个要素之间的平衡。

img

上面这个图就是著名的项目管理金三角(以下简称“金三角”),三条边分别是时间、成本和范围,中间是质量。

为什么四个要素,是“质量”放在三角形的中间?

因为软件工程的目标就是要构建和维护高质量的软件,所以项目的质量是高于一切的。也就是说,“质量”这个因素一般不会妥协,因此把“质量”放在三角形中间,然后在时间、成本、范围这三条边之间寻求平衡。

质量往往也是其他三个因素平衡后结果的体现,想要做的快、成本低、功能多,最后一定是个质量很差的产品。

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

项目管理其实就是项目中一系列问题的平衡和妥协,而“金三角”理论则为我们的平衡提供了理论指导,了解这三个因素分别对项目其他方面产生的影响,可以帮助你在做决策时进行权衡取舍。

当你接手一个项目,项目的进度、成本和范围指标很容易可以跟踪到。有了这些信息,你就可以及时发现问题,调整“金三角”的边,及时解决,以防止这些小问题发展成大问题。

我来举两个例子,看看“金三角”是如何应用的。

  • 老板要压缩项目时间怎么办?

当项目经理,常遇到的问题之一就是时间被压缩,比如文章中开头举的例子,老板问我一个项目多久能完成,我按照经验,觉得要三个月,老板觉得三个月太久了,要砍到一个月就上线。

最开始的时候,我就是据理力争,说这不科学,肯定不行呀。老板说时间点很重要,必须要一个月上线。结果就是大家吵得不欢而散,最后还得加班加点做,质量也不好。

后来我学乖了,先用“金三角”知识分析了一下:老板希望时间是 1 个月,也就是说时间这条边被缩短了,那么结果就是会影响到另两条边:范围和成本,如果另外两条边可以调整,也不是不可以。

于是再遇到这种问题,我就换了一种方式跟老板沟通:“一个月也不是不行,就是我们的需求调整一下,第一个版本只能做一些核心功能,剩下的后面版本再加上(调整范围)。另外还得给我加两人,不然真做不完!(增加成本)”

这样的方案一提出来,就好沟通多了,最后重点就变成了砍多少功能和加多少人的事情了。

  • 产品经理要临时加需求怎么办?

在文章开篇我提到一种情况,项目开发一半,产品经理告诉你,有一个非常紧急的功能,要增加到这个版本中,怎么办?我们拿“金三角”知识先套用一下。

增加需求,也就是范围这条边要增加,那就必然对成本和时间这两条边造成影响,要么延期,要么增加成本。

面对这种临时加需求的情况,我们也不需要直接说不能加,而是清楚的让产品经理认识到这样做的后果:进度延期,需要更多的成本。如果这个功能真的太重要,可以接受延期,也不是不可以接受,那就重新制定新的项目计划好了。

所以你看,如果我们能应用好“金三角”的知识,很多软件项目中问题,一下子就多了很多方案可以选择了。

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

除了可以将“金三角”的知识应用在软件项目中,还可以应用它来理解和应用软件工程中的开发模式,尤其是瀑布模型和敏捷开发这两种典型的开发模式。

瀑布模型有严格的阶段划分,有需求分析、系统设计、开发和测试等阶段,通常在开发过程中不接受需求变更,也就是说,我们可以认为瀑布模型的范围是固定的,其他两条边时间和成本是变量。

所以使用瀑布模型开发,如果中间发现不能如期完成进度,通常选择的方案就是延期(加班),或者往项目中加人。

img

我们再来看敏捷开发,敏捷开发中,是采用固定时间周期的开发模式,例如每两周一个 Sprint,团队人数也比较少。所以,在敏捷开发中,时间和成本两条边是固定,就只有范围这条边是变量。

这就是为什么在敏捷开发中,每个 Sprint 开始前都要开 Sprint 计划会,大家一起选择下个 Sprint 能做完的任务,甚至于在 Sprint 结束时,没能完成的任务会放到下个 Sprint 再做。

img

这时候再想想文章开头我们提到的问题:

听说迭代模型很好,你也尝试使用迭代模型,但是每次迭代时间到了还是完不成,只能把迭代时间延长,最后又做回传统的瀑布模型了。

你现在是不是就明白了:如果不能固定“时间”这条边,就会导致时间也成了变量,迭代自然无法正常推进。

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

那么怎么样才能平衡好软件质量与时间成本范围的关系呢?

前面我们说日常生活中“多、快、好、省”最多只能选两样,其实如何平衡好软件质量与时间成本范围的关系也是一样的道理,我们只能最多选择两样,然后在另一边或者另两条边去寻找平衡。

所以第一件事就是:从时间、成本和范围这三条边中找出来固定的一条或者两条边,再去调整另一条边。

下面,我来分析一些案例,帮助你更好地理解。

  1. 淘宝网站第一个版本是怎么做到一个月上线的?

这个故事其实我是从极客时间《从 0 开始学架构》专栏看来的,李运华老师在《架构设计原则案例》一文中举了淘宝网站的例子:

2003 年 4 月 7 日马云提出成立淘宝,2003 年 5 月 10 日淘宝就上线了,中间只用了一个月时间。

好,如果你是当时的淘宝网站负责人,马云要你一个月上线淘宝网站,功能还不能少,你怎么办?

第一件事当然是先应用“金三角”分析一下:时间这条边被固定了,只能一个月;功能也不能少,范围这条边也限制住了,那就只能在成本上想办法了。要么一下子雇很多牛人,要么直接买一个现成的电子商务网站,然后修改。

显然,直接买一个网站,再雇一堆牛人的方案最好,所以淘宝网站就这样在一个买来的网站基础上,由一堆牛人快速搭建起来了。归功于淘宝网站的快速上线,刚推出后,正好赶上“非典”,网购需求增大,淘宝网一下子就火爆起来了。

  1. 极限编程是怎么做到“极限”的?

极限编程(eXtreme Programming,XP),是目前敏捷开发主流的工程实践方法,极限编程的“极限”(Extreme),意思就是如果某个实践好,就将其做到极限。比如:

  • 如果做测试好,就让每个开发人员都做测试 ;
  • 如果集成测试重要,就每天都做几次测试和集成 ;
  • 如果简单的就是好,那么我们就尽可能的选择简单的方法实现系统功能 ;
  • ……

极限编程的“极限”理念,产生了很多优秀的实践方法,例如持续集成、自动化测试、重构等。

这些实践帮助我们可以在短时间的迭代中,产生高质量的代码。我们用“金三角”的理论来分析一下极限编程在 Sprint 中的应用。

在一个 Sprint 中,计划好了当前 Sprint 要做的工作内容后,那么极限编程怎么帮助我们提高代码质量呢?

一个 Sprint 要做的内容是确定的,相当于成本和范围这两条边都固定了,时间这条边就成为变量了。要么通过加班延长工作时间,要么通过提升效率、减少浪费帮助我们提升时间利用率。

极限编程,就是通过帮助我们提升效率和减少浪费这方面来做的。比如说:

  • 持续集成,通过自动化的方式帮助我们部署,节约了大量需要人去手动部署的时间;
  • 自动化测试,通过自动化测试,节约测试时间,另外,有了自动化测试,可以避免后面修改代码产生 Bug,减少了大量的浪费;
  • 只做刚好的设计,避免设计时考虑了太多不必要的可能,造成浪费。

其实我们在项目中也有很多地方可以借鉴这种思路,比如说写代码的时候,少自己造轮子,多使用成熟的开源或者商业组件,可以提升效率;比如把需求想清楚搞清楚再去开发,可以减少很多返工的时间成本!

  1. MVP 模式是怎么诞生的?

这些年流行的 MVP(minimum viable product,最小化的可行性产品)模式,是一种快速推出产品的模式:一开始只推出最核心的功能,满足用户最核心的需求,然后在用户的使用过程中收集反馈,进一步升级迭代。

这种模式怎么诞生的呢?还是应用“金三角”理论,要快速推出产品,还想成本不用太高,那就意味着时间和成本这两条边是固定的,剩下范围这个变量。

所以最简单有效的办法就是砍掉一些重要性不那么高的功能需求,只保留最核心的需求。通过缩小范围的方式,达到快速推出高质量产品的效果。

类似的道理,我们程序员,在遇到很多功能忙不过来的时候,可以主动的去和项目经理协商,砍掉一些不那么重要的需求,把精力放在核心需求上,保证项目可以如期上线。

总结

其实,要平衡好软件质量与时间成本范围的关系并不难,你只需要记住,最重要的是根据“金三角”的三条边,找出来固定的一条或两条边,然后去调整剩下的边,达到平衡。

软件项目的“金三角”很多人都知道,主要是不知道如何应用到实际的项目中,希望这篇文章能为你提供一些思路,帮助你在项目中真正应用好这个非常实用的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程

原文链接:Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx3&sn2b98c8d5c99878ce78c8fade559bdae5&chksmfa821e9ccdf5978a7e63a1d514f2a643158a595fa75ac751c5ca47769…

socket网络编程——多进程、多线程处理并发

如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。 如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送…

MySQL存储引擎的区别和比较

MyISAM存储引擎 MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。 MyISAM主要特性有: 1、大文件(达到63位文件长度&#x…

信号:干扰类别及特征提取

目录 第一部分:干扰类别 1.压制干扰 1.1噪声调幅瞄准式干扰(单音干扰) 1.2噪声调频阻塞式干扰(宽带噪声干扰) 1.3噪声调频扫频式干扰(线性调频) 2.欺骗干扰 2.1距离欺骗干扰(幅度调制干扰&#xff0…

前端_调试工具_Chrome Devtools

目录 一、上左侧菜单功能 1.选择功能 2.手机/电脑 显示切换功能 3.内存 4.元素 5.控制台 6.源代码/来源 7.网络 8.应用 9.性能 10.安全 11.Lighthouse 12.记录器 13.性能数据分析 二、上右侧菜单功能 1.警告 2.设置 3....更多功能 谷歌浏览器自带了调试工具C…

Google Guice超轻量级依赖注入容器

Google Guice是Goolge开源的一款超轻量级依赖注入容器,超轻量的特点主要体现在:可与其它依赖注入容器混合使用,例如和Spring/Spring Boot的IOC容器混合使用;不需要任何配置信息,只需要引入几个有限的依赖包即可以使用&…

无线和移动网络

背景 两个重要的挑战 无线:通过无线链路通信移动:需要网络处理移动(不同变换所接入的网络)用户 无线网络中的组件 无线主机(无线并不总是意味着移动的)基站(base station 或者叫AP&#xff0…

知乎知+广告推广开户充值的返点政策是怎样?

如何让您的品牌精准触达目标受众,实现高效传播与转化,成为了每一位市场人面临的挑战。为此,云衔科技作为业界领先的数字营销解决方案提供商,正式宣布全面支持知乎知广告开户及一站式代运营服务,旨在帮助各行业客户在知…

网鼎杯 2020 玄武组 SSRFMe

复习一下常见的redis主从复制 主要是redis伪服务器的选择和一些小坑点 <?php function check_inner_ip($url) { $match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url); if (!$match_result) { die(url fomat error); } try { …

【iOS】——Runtime学习

文章目录 一、Runtime介绍二、Runtime消息传递三、实例对象、类对象、元类对象四、isa_t结构体的具体实现五、cache_t的具体实现六、class_data_bits_t的具体实现七、Runtime消息转发动态方法解析备用接收者完整消息转发 一、Runtime介绍 iOS的Runtime&#xff0c;通常称为Obj…

带你了解消防安全与应急救援,2024北京消防展6月盛大开启

带你了解消防安全与应急救援&#xff0c;2024北京国际消防展6.26盛大开启 在日益关注安全问题的今天&#xff0c;消防安全与应急救援已经成为社会发展的重要一环。为了提高全民消防安全意识&#xff0c;推动应急救援技术的发展&#xff0c;2024年北京国际消防展将于6月26日盛大…

纷享销客安全体系:物理与环境安全

纷享销客的物理设备托管在经过严格准入制度授权的TIER3级别以上的专业数据中心&#xff0c;这些数据中心均通过了等保三级与IS027001安全认证&#xff0c;确保电力、制冷等基础设施提供相应级别的冗余&#xff0c;以增强IDC环境的安全性。 业务操作系统平台采用当前广泛使用的…

点云获取pcl点云以某个点云的已经分块得区域的交集

首先将点云分块得到区域后&#xff0c;获取每个块的box的最大最小点云&#xff0c;然后提取box内的点云。 pcl::IndicesPtr indexes(new pcl::Indices());pcl::getPointsInBox(*cloud_1, min_pt, max_pt, *indexes);// --------------------------取框内和框外点--------------…

手持终端RFID电子标签读写器超高频手持机

RFID手持机具备RFID读写功能&#xff0c;可以对RFID标签进行识读&#xff0c;是有特定功能的PDA(便携式移动终端)。 作为现代化信息管理工具的重要组成部分&#xff0c;其强大的功能和便捷的操作性正在越来越多的领域得到应用。从物流仓储到零售管理&#xff0c;从生产制造到医…

OZON海关税费是多少,OZON要交关税吗

在跨境电商领域&#xff0c;OZON作为俄罗斯知名的电商平台&#xff0c;吸引了众多国内外商家的目光。然而&#xff0c;当商家考虑在OZON平台上开展业务时&#xff0c;一个不可回避的问题就是海关税费和关税问题。本文将详细探讨OZON海关税费的相关内容&#xff0c;帮助商家更好…

使用C++实现YOLO图像分类:从环境搭建到性能评估的完整指南

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

面试题------>JVM虚拟机!!!

一、Java对象内存布局 二、JVM 内存结构 程序计数器: 线程私有的(每个线程都有一个自己的程序计数器),是一个指针.代码运行,执行命令.而每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了.记录代码执行的位置. Java虚拟机栈: 线程私有的(每个线程都有一个自己…

Vitis HLS 学习笔记--接口聚合与解聚-AXI主接口

目录 1. 简介 2. 用法及语法 3. 详细解读 4. 总结 1. 简介 在使用 Vitis HLS 工具进行硬件设计时&#xff0c;如果你在接口上使用了结构体&#xff0c;工具会自动把结构体里的所有元素组合成一个整体。就像把一堆零件组装成一个玩具一样。这样做的好处是&#xff0c;数据可…

mysql中 redo日志(上)

大家好。我们知道InnoDB 存储引擎是以页为单位来管理存储空间的&#xff0c;我们进行的增删改查操作其实本质上都是在访问页面。而在真正访问页面之前&#xff0c;需要把在磁盘上的页缓存到内存中的Buffer Pool之后才可以访问。那么我们思考一个问题&#xff1a;如果我们只在内…

沃通CA参与《证书透明规范》及《自动化证书管理规范》两项商密标准制定

沃通CA加入由零信技术牵头的两项商密标准《证书透明规范》及《自动化证书管理规范》编制工作。沃通CA作为国内依法设立的电子认证服务机构与领先的SSL证书服务商&#xff0c;很荣幸参与到两项商密标准的编制工作中&#xff0c;不仅提供多年SSL证书领域的应用经验&#xff0c;还…