“价值”的概念有很长的历史,可以追溯到软件商业出现前几千年。在公元前四世纪的雅典学派时期,亚里士多德(384-322)实际地指出,一个事物的价值是基于对它的需要程度的。一千年后,基督教堂的领导人物表达了这样一种观点:工作与生俱来是好的。该观点导致了一种模型,它认为价值是一个用于生产的工作量的函数。这一“成本加价”价值方法的先驱在其后的一千年里一直处于统治地位,直到威廉 杰文斯(1835-1882)和卡尔 门格尔(1840-1921)在他们1871年发表的“边际分析”理论中重新将亚里士多德的思想具体化。这一理论认为“价值完全取决于功用”。无论在生产中成本是如何被引起的,一旦产品进入市场,它的价值就完全取决于购买者期望获得的用途。

“功利价值”的概念无疑会受到环境的影响,这在经典辩论“一杯水的价值在特定条件下可能超过一整杯钻石的价值”中得到了体现。价值还受到市场实践的影响——例如,品牌——这种实践试图增加产品的心理价值。

在这篇文章中,我将首先使用三种典型和为人熟知的评估技术探讨可接受的评估实践。然后我将简单介绍建模和仿真技术。最后,我将就长期的IBM Rational开发实践如何作为一个“现实的选项”方法被重新构造来达到在软件项目管理中支持灵活性的目的以在软件产品中创造更多价值给出建议。

在下面的讨论中有两个重要术语:产品价值。一个软件产品不止是一个可执行程序;它还可以指软件服务,系统,或过程。价值被表示为价格,并通过在其生存周期中流向软件的生产者和消费者的收益来衡量。本文的适用范围限于以市场心理需要为目标的软件项目;它不包括那些按照合同来满足具体客户需要的执行项目。

软件经济

IBM Rational1一直走在软件经济实践的前列,其主要的强项是估计项目成本。下面这个来自COCOMO II的等式在整个Rational社区中是非常著名的:

工作量 = (人员) (环境) (质量) (规模过程*)2
*表示过程有效性

这个等式抓住了以下关键因素:

  1. 工作量:完成项目需要的人月
  2. 人员:考虑团队能力的因素
  3. 环境:考虑工具和技术的因素
  4. 质量:考虑需要的产品质量的因素
  5. 规模:组成最终产品的人工产生的代码行数
  6. 过程:基于产生最终产品的过程的有效性的公式

在宣传软件经济分析中,软件经济的“成本方面”是Rational的传统强项,而经济问题的“价值方面”则由Barry Boehm和Dan Port的一篇关于“基于价值的软件工程 (VBSE)”的论文3探讨。在文中他们做了如下定义:

VBSE涉及软件和信息系统产品,过程技术,以及它们与人类价值的互动。它使用风险分析来平衡软件规范和灵活性,并解答其它关键“多少是足够的”的问题。

Boehm和Port论及并向软件设计增加价值:

我们的路线图的目标被一个关键中间结果所支持:所有层次的设计者必须做出在增加价值的意义上比他们今天所做出的决定更好的设计决定。设计决定对产品和过程设计,更大规模项目的结构和动态管理,在项目组合策略实现中项目的分布,以及国家软件政策是十分重要的。更好的决策对更多的价值增长有关键推动作用。


回页首

评估技术

图1列举了由简单到复杂的几种著名的项目评估技术:

图1:价值估量技术通过由从低到高的黑色曲线表示。图片来自2002年10月的“IT选择分析”,ISMC Orlando,Nancy Burchfield,原则性IT优化,IBM全球化服务。
点击放大

下面的章节将简要解释图1所示的项目评估技术。

第一组项目评估技术是相当有知名度的:

  1. 投资收益 (ROI)
  2. 净现值 (NPV)
  3. 内部收益率 (IRR)

第二组技术通常在软件产品被开发或加强以满足一个市场心理需求的情况下被应用:

  1. 敏感性分析
  2. 蒙特卡洛模拟

对第三种技术,不动产选项,我将从IBM Rational软件开发原则和实践的角度进行探讨,它出现在“选择权分析”的大标题下。

三种熟悉的评估技术

让我们先来看看图1中所示的前三种评估模式:ROI,NPV,和IRR。

ROI/偿还期

价值可以以ROI(投资收益)的形式直接计算,它以如下方式决定了偿还时间:

ROI是一个相对直接的投资度量,它表达了收回原始投资需要的时间(偿还期)。它也可以被表示为一个百分数——ROI%。

ROI是这样计算的:

根据这一公式计算,最佳投资是偿还期最短的投资。例如,如果一个项目的成本是$100,000而期待的收益是每年$20,000,那么偿还期就是$100,000 / $20,000,即五年。

ROI/偿还期方法有三个主要问题:

  1. 它忽略了偿还期后可能出现的利益,也就是不能度量长期利润。
  2. 它忽略了金钱的时间价值——折扣率。
  3. 在任何种类项目的失败风险超过百分之五十的情况下,它仍然没有考虑到风险。由于这些原因,一般其它资本预算方法比如NPV,IRR更为常用。

尽管如此,“简单的”ROI仍不应该被忽略。它被广泛使用,而且,随着为软件投资寻找更短的偿还期的趋势,它还具有价值和流通性。考虑下面来自CFOEurope.com的调查,它要求七所主要学院描述首席财务官(CFO)创造价值的最佳方式:4

当Kees Koedijk与他Erasmus大学的同事开始准备关于资本预算的调查时,“我们想要知道他们脑子里在想什么,”他说,“我们已经很好地了解了资本结构概念,我们不清楚的是促使财务经理把他们的投资决策建立在何种技术的基础上的观念。”

调查进行于2004年下半年,涉及了来自英国,荷兰,德国,以及法国的三百余名财务总监,其结果令Koedijk感到惊讶。最常用的资本预算技术是ROI/偿还期技术,远远超过了净现值(NPV)和内部收益率(IRR)技术。

..

.

与之形成对比地,Koedijk引用了一项2001年的调查,它指出IRR和NPV在美国公司中更受欢迎。

此外,Rational统一过程(RUP)内部的“商业案例”®®引用了ROI:

对一个商业软件产品来说,商业案例应该包括一组关于项目和投资收益(ROI)的数量级的假设。例如,如果项目在一年内完成,ROI的数量级是5,如果在两年内完成,数量级是2,如果项目不能在两年内完成,数量级是一个负值。这些假设在精化阶段结束时会再次被检查,那时对项目的范围和计划的知识将是更为准确的。收益是基于成本估计和潜在收入估计的。5

IRR(内部收益率)

IRR经常用于资本预算,它是使得所有现金流动的净现值为零的利率。

RUP在商业案例模板中引用了IRR:

在对内部收益率的计算中,净现值被设为零,要计算的是使净现值为零的内部收益率。然后项目的这一内部收益率(IRR)被与风险相近的项目的最小要求收益率进行比较。如果项目的IRR比要求的最小收益率大,那么项目对公司就有正的净经济效益。6

NPV(净现值)

NPV是一种用于资本预算的方法,在预算中要从现金流入的现值中减去现金流出的现值。它通过比较一美元在今天的价值与其在未来的价值——考虑到通货膨胀和收益——来度量项目的盈利性。NPV分析对一项投资或一个项目在未来产生的现金流入的可靠性敏感。

这是计算NPV的公式:7

C = 现金流动,流入或流出项目;r 是每个时期(t)的折扣(利)率

RUP商业案例模板也引用了NPV:

对内部软件项目来说,收益或是以项目的‘净现值’计算,或是以内部收益率计算。以净现值计算时,项目未来的现金流动被估计(包括与项目开发和支持相关的负现金流动),然后按照一个由基于项目风险的组织决定的要求收益率进行折算。净现值大于零说明项目对公司有正的净经济效益。

如果一个计划中的项目的NPV为正,那么该项目应被接受。但是,如果NPV为负,项目可能就应该被拒绝,因为现金流动也将为负。

敏感性分析和模拟

在我们进入对下两个评估技术的解释前,我们应该先了解一些关于评估模型的概念。模型——通常是数学的——是对现实的抽象。在本文中我们已经提到了一个模型: COCOMO II等式,它把工作量(成本)与人员,环境,质量,规模和过程联系起来。一个软件产品的价值模型可以是一个公式或是算法,它帮助我们估计在产品的生存周期中可以以什么样的价格卖出多少产品。

当一个软件产品是为了满足一个市场心理需求而开发的时,总是存在关于:

  1. 产品的市场价值
  2. 产品能获得的市场份额

最基本地,价值估计应该是基于最好,最坏,和最有可能的价值情境的。由于这个原因,RUP为产品引用了一系列不同的价值情境:

价值可以通过保守的,激进的,或一般的状态(计算)区分并应在分析中被考虑。保守的状态通常包括硬储蓄或非常可能的储蓄领域(可见或可预测),而一个激进方法将在ROI的计算中同时考虑到硬储蓄和软储蓄的例子。一般情况将采取折中的方式,并将与多数可接受/可信的ROI案例分析保持一致。激进估计经常被用于软钱储蓄,或者基线数据无法证实的情况。9

价值模型的输入包括市场规模,增长率,价格,折扣,其他产品的销售广告,等等;模型计算出这些组合起来的输入如何变为产品销售。模型还可能包括环境因素,比如宏观经济增长统计,竞争和规则需求,定价(折扣),等等,它们将影响价值。

在所有情况下,一组,甚至只是几个价值估计要比基于一切“都将顺利进行”的假设的单独“一点”的估计要好。换句话说,只有一个结果并不比没有结果好,特别是在涉及到市场的情况下。

现在让我们开始讨论敏感性分析和蒙特卡洛模拟。

敏感性分析

敏感性分析是一种可以决定价值模型输入中哪些不确定性将对输出——软件产品价值——产生最大影响。如果一个很小的变化,比如,市场增长率的变化引起了价值相对较大的变化,那么这个特定输入必须被精确测量和紧密跟踪,因为输出对这个特定输入显然是“敏感的”。

敏感性分析研究价值模型是如何依赖于它的输入,结构,和它内在的假设的,它可以指出模型的输出如何可以被定量或定性地分配给输入中不同的变化源。

敏感性分析还可以通过提供对模型如何对输入中的变化(比如校准数据,模型结构,或其它独立于模型的变量因素)做出反应的理解被用于增加对模型和预测的信心。

蒙特卡洛模拟

蒙特卡洛模拟涉及了使用随机数和概率来找到复杂问题的解决方案。这个术语最早是由S. Ulam和Nicholas Metropolis在引用机会游戏(摩纳哥王国的蒙特卡洛市流行的游戏)时杜撰的。

PMI(项目管理协会)是这样定义蒙特卡洛模拟的:

一种多次执行项目模拟来计算可能结果分布的技术。

蒙特卡洛模拟通常使用随机数10发生器通过从不同的输入变量的概率分布中重复采样来产生一个模型的多个情境。

如果有足够的数据,且模型是实际的,那么模拟的最终结果就是带有一些变数度量(NPV的一个标准方差)——它们表达了项目的风险——的项目价值估计(通常由NPV表达)。对风险的估计是由模拟产生的价值(NPV)估计的分布(曲线)表达的。

不动产选项

软件开发项目是昂贵而有风险的,并在其商业生存周期中带给赞助组织很多不确定性。总体来说,经理可以通过尽量延长承诺向一个项目投资或锁定一组特性前的等待时间来获利。用实用的话来说,拖延对项目的承诺有两种好处:

  • 它保护了可以提供给项目的投资资本库。
  • 它持有该资本库直到找到可能的最好设计特性。

另一方面,拖延会带来错过机会的风险。我们如何在好处和风险之间取得平衡呢?

“不动产选项”是由Stewart Myers 在1977年杜撰的一个术语,指的是将选择定价理论应用到非金融评估或“不动产”投资中。

在1972年,Parnas将信息隐藏作为一种为软件设计修改模块化结构的方法引入。11该方法大大提高了软件的可适应性,现在已经成为广为接受的面向对象分析和设计理论的原则。

Baldwin和Clark12似乎是最早发现模块化在(计算机系统)设计中的价值可以作为选项被建模的人。他们做了一个统计上的假设:一个已有模块的独立开发部件的价值是呈正态分布的。

今天,基于选择性模型的软件工程过程正在变得更易于理解。13例如,Boehm和Port引用Parnas提出的“为变化进行设计”和“信息隐藏”方法:

例如,Parnas信息隐藏模块概念的提出是基于如下的基本原则的:一个软件系统的生存周期的大部分成本来自悬而未决的变化[Lientz-Swanson, 1980]。一个系统如果要创造价值,一次增量的成本应与它产生利益呈正比;但是如果系统设计没有考虑到变化,变化的成本(重写代码)将与利益不成比例[Parnas, 1972]。信息隐藏模块化是为变化进行设计的关键。因此在我们能正确预期变化的前提下,为变化进行设计就成为了最大化价值的策略。尽管这是一个巨大的启发,我们还缺乏足够的连接这一技术概念与给定条件下的价值创造的模型。14

更进一步地,Dean Johnson et al. 指出,对于未来市场方向的不确定性可以通过在项目早期把模块(比如,一个可移植层)设计到应用中进行管理:

包含这样一个层涉及了额外的早期开发成本。尽管如此,它可以省钱,或通过允许设计者迅速做出变化而不是重写大量代码在后面的开发阶段创造价值。我们使用不动产选项方法来估计这种可移植性带来的灵活性的价值。敏感性分析被用于检验可移植性价值和一些因素的变化之间的关系,这些因素包括应用程序不得不重写的可能性,期望的应用程序寿命,以及未来重开发的成本,等等。15

在IBM developerWorks,2005年8月刊中,“面向服务的敏捷性:成功的面向服务构架 (SOA)的开发方法,第二部分:如何混合油和水”16一文的作者在他们的“原则3:尽可能晚地做决定”中引用了可以作为一个成功的SOA开发的“灵活的”不动产选项方法:

尽可能晚地做出决定意味着保留服务接口细节开放,直到获得对它们的清楚描述,而不是假装知道一切。这迫使开发团队频繁地与公司其他部门进行同步,这导致了更好的服务模型。

作者在“定型的经济模型”一节中明确提及“基于选择权的软件经济”:

从传统上来说,软件开发被视为消耗性活动。近期以来,软件开发渐渐被视为产生能帮助利用经济选择性的效益的活动。基于选择性的软件经济可与金融市场进行类比:发布可被视为不动产选项的运行软件的短迭代。和金融选择性一样,实物期权提供了这样一种好处:你可以有机会通过现在投资一点在不确定的未来有所收益。但是并不需要多复杂的操作:如果你建立一个简单的契约经济模型并用它驱动开发决策,即时一个SOA契约也会获利。手头有了经济模型的时候,团队成员就有能力自己确定商业中的重要因素:它们都来自相同的假设。如果你考虑消除一些特性,你的市场部可能会推算说没有这些特性他们的销售量将会降低“X”个百分点。17

灵活性被植入由RUP描述的迭代方法中。实际上,RUP迭代可以看作有计划,发布,和评估的“迷你项目”。它们还可以从价值和商业的角度被视为保持软件设计进行,同时计划和估计不断精确,不确定性减少的“迷你投资”。换句话说,迭代开发引入了拖延的优点,同时管理了与它相关的错过市场机会的风险。

多年来,RUP已经发展为一个过程工程平台,现在称为IBM Rational Method Composer。RMC使得团队能够定义,配置,调整和实践一个持续的软件开发过程。一个RMC发布过程提供了一个完整的生存周期模型,该模型包括了被细化的在方法内容中的工作分解结构(WBS)。软件设计人员可以创造并把他们的过程作为一个过程网站发布,或者作为一个工作分解结构输出到 IBM Rational Portfolio Manager 。

然后项目经理可以执行项目并使用各种生成价值度量跟踪项目,同时 IBM Rational Portfolio Manager 可以评估投资度量,比如NPV,IRR,以及 IBM Rational Portfolio Manager 工具集的项目组合仪表特性的总利润。


回页首

创造可持续价值

IBM为软件项目评估提供的工具和方法本身并不能创造价值,但是它们可以帮助客户理解哪些项目可以为他们的生意创造可持续价值。有了这一观念,项目经理和商业领导人就可以使他们的项目更具灵活性和可适应性,这将为整体软件项目组合增加价值。

为了合理分配资源以产生有竞争力的第一步,软件开发经理需要方式,方法,和语言来评估项目的经济价值。外行人比如客户,投资者,涉众,和审计员通常会认为重要的商业决定是基于合理和可靠的评估方法的。

使用IBM Rational产品的从业人员可是采用诸如NPV和IRR的技术来评估软件的经济价值,采用基于COCOMO II的算法来评估工作量。更进一步,他们可以在Rational统一过程中,Rational Method Composer和 IBM Rational Portfolio Manager 的使用中采用软件开发原则和实践来为他们的客户创造价值,同时管理成本,风险,以及他们自己的产品的上市时间。

评估软件项目的经济价值相关推荐

  1. 软件项目规模评估方法之软件源代码行法

    软件项目规模的评估方法有很多,我们近期会把这些方法一一进行梳理然后发布出来供大家学习了解.今天我们来说说软件项目规模评估方法中的软件源代码行法. 软件源代码行法(SLOC)是以软件的源代码行数量来计算 ...

  2. 如何对一个软件项目的成本进行评估或估算?

    在对一个软件项目进行成本估算或评估时,应该包括从项目立项直至项目研发活动结束所花费的资源总和,并且可以按阶段进行估算或测量. 软件成本估算的基本过程是什么呢? 软件成本估算的过程可分为:估算规模.估算 ...

  3. 软件项目成本评估中,关于接口开发的工作量评估有什么标准方法吗?

    问:软件项目成本评估中,关于接口开发的工作量评估有什么标准方法吗? 答:如果是外部接口,就正常识别功能点即可,接口通常对应事务功能,但有可能有变化的数据功能.(来源:中基数联)

  4. 开源软件项目的定性和定量分析指标 ———— CHAOSS 指标解析

    点击蓝字关注我们 "科学管理在实质上要求任何一个具体机构或机构中的工人及管理人员进行一场全面的心理革命,没有这样的心理革命,科学管理就不存在."  ---- 泰勒 <科学管理 ...

  5. 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手...

    别人总觉得是在显吧,干脆把这个项目认为是小项目了,不知道把这个项目是小了,别人会不会又觉得又显吧了?说大也不行.说小也不行,也的确没招了. 我想主要把项目里遇到的问题分享给大家一起探讨,也并不是为了什 ...

  6. 软件项目开发流程RUP上

    RUP(Rational Unified Process,统一软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论.根据Rational(Rational Rose和统一建模语言的开发 ...

  7. 软件项目经理需具备什么样的技术水平?

    满意答案 抒发下个人观点,个人觉得项目的整个阶段还是需要项目经理与开发人员共同协作 1.项目经理在对接需求时候要能够比较详细了解客户需求,能够根据需求罗列出具体功能模块,要跟客户多次确认需求,确保在需 ...

  8. 软件项目风险管理介绍

    软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响.软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目 ...

  9. 【原创】民航业——软件项目管理经验点滴

    民航业--软件项目管理经验点滴 李文杰    厦门民航凯亚有限公司 一.研究背景 在这几年的软件项目管理中,一些失败的软件项目给我留下了深刻的印象.后来,我们结合项目管理的知识(参加了信产部<集 ...

最新文章

  1. 重磅!监管再升级!微信、淘宝、抖音或将纳入“超级平台”监管
  2. Java--缓存热点数据,最近最少使用算法
  3. 九度oj 题目1354:和为S的连续正数序列
  4. 数据加密和数据签名的本质区别 解释
  5. nginx location 匹配 多个规则_你需要知道的Nginx配置二三事
  6. Linux教程:内核怎样管理你的内存
  7. nginx开启core dump文件
  8. 原型链的理解_javascript之快速理解(原型链)
  9. js如何监听元素事件是否被移除_javascript – 如果一个DOM元素被删除,它的监听器也从内存中删除?...
  10. 木马的隐藏及其启动方式 (转)
  11. IIS管理器FTP站点中FTP防火墙支持页面
  12. 25个深度学习相关公开数据集
  13. linux ls 配色方案,Terminal 配色方案
  14. 解决克隆RHEL7后网络无法启动问题
  15. win10安装vs2015出现“安装包丢失或损坏”解决办法
  16. 移动二班钟静雯1853230244 0416
  17. 武汉市服务业领军企业认定条件、流程及申报政策奖励补贴标准
  18. 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)
  19. autoconf使用环境
  20. KnockoutJS的使用及分析

热门文章

  1. 安心收纳各种重要物品,不在家也能时刻守护安全,VOC智能保管箱G300上手测评
  2. 英语知识点整理day04
  3. Base64 混淆加密+迭代次数,Base64前后端加解密不一致、Base64 js加解密结果与java加解密结果不一致,Base64中文加密乱码
  4. CASIA-HWDB2.x 数据集DGRL文件解析(python)
  5. mysql中对数据的去重
  6. python爬虫爬取东方财富网股票走势+一些信息
  7. misc.imresize
  8. Eclypse-Z7 + Zmod ADC 1410 基础环境搭建(SDK部分)
  9. python中map函数返回值类型_Python学习第42课-map()函数
  10. windows 安装metis_Metis 5.1.0 安裝心得 in Win10