一般说来,人们投资于一项事业的目的是为了在将来得到更大的好处。开发一个软件系统也是一种投资,期望将来获得更大的经济效益,经济效益通常表现为减少运行费用或增加收入。但是,投资开发新系统往往需要冒一定的风险。系统的开发成本可能比预计的高,效益可能比预期低。把钱存到银行或贷给其他企业也有明显的经济效益(利息),而且风险很低。那么,在什么情况下投资开发新系统更划算呢?
成本/效益分析的目的正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确低作出是否投资于这项开发工程的决定。
为了对比成本和效益,首先需要估计它们的数量
成本估计
软件开发成本主要表现为人力消耗(乘以平均工资则得到开发费用)。成本估计不是精确的科学,因此应该使用几种不同的估计技术以便相互校验。
1,代码行技术
代码行技术是比较简单的定量估算方法,它把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。通常根据经验和历史数据估计实现一个功能需要的源程序行数。当有以往开发类似工程的历史数据可供参考时,这个方法是非常有效的。
一旦估计出源代码行数后,用每行代码的平均成本乘以行数就可以确定软件的成本。每行代码的平均成本主要取决于软件的复杂程度和工资水平
2,任务分解技术
这种方法首先把软件开发工程分解为若干个相对独立的任务。在分别估计每个单独的开发任务的成本,最后累加起来得出软件开发过程的总成本。估计每个任务的成本时,通常先估计完成该项目需要的人力,再乘以每人每月的平均工资而得出每个任务的成本。
最常用的办法是按开发阶段划分任务。如果软件系统很复杂,由若干个子系统组成,则可以把每个子系统再按开发阶段进一步划分成更小的任务。
典型环境下各个开发阶段需要使用的人力的百分比大致如下表。当然,应该针对每个开发工程的具体特点,并且参照以往的经验尽可能准确估计每个阶段实际需要使用的人力(包括书写文档需要的人力)。
任务 | 人力(%) |
可行性研究 | 5 |
需求分析 | 10 |
设计 | 25 |
编码和单元测试 | 20 |
综合分析 | 40 |
总计 | 100 |
3,自动估计成本技术
采用自动估计成本技术可以减轻人的劳动,并且使得估计的结果更客观。但是采用这种技术必须有长期搜集的大量历史数据为基础,并且需要有良好的数据库系统支持。
成本/效益分析的方法
成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。上面已经简单介绍了估计开发成本的基本方法,运行费用取决于系统的操作费用<操作员人数,工作时间,消耗的物资等)和维护费用。系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。因为运行费用和经济效益两者在软件的整个生命周期内都存在,总的效益和生命周期的长度有关,所以应该合理地估计软件的寿命。虽然许多系统在开发时预期生命周期长达10年以上,但是时间越长,系统被废弃的可能性也越大,为了保险起见,以后在进行成本/效益分析时一律假设生命周期为5年。
应该比较新系统的开发成本和经济效益,以便从经济角度判断这个系统是否值得投资,但是,投资是现在进行的,效益是将来获得的,不能简单地比较成本和效益,应该考虑货币的时间价值。
1.货币的时间价值
通常用利率的形式表示货币的时间价值。假设年利率为i,如果现在存人P元,则n年后可以得到的钱数为:F=P(1+i)"
这也就是P元钱在n年后的价值。反之,如果n年后能收入F元钱,那么这些钱的现在价值是:P= F/(1 + i)"
例如,修改一个包有的库存清单系统, 使它能在每天送给采购员一份订货报表。修改已有的库存清单程序并且编写产生报表的程序,估计共需5000元;系统修改后能及时订货,这将消除零件短缺问题,估计因此每年可以节省2500元,5年共可节省12500元。但是,不能简单地把5000元和12 500元相比较,因为前者是现在投资的钱,后者是若干年以后节省的钱。
假定年利率为12%,利用上面计算货币现在价值的公式可以算出修改库存清单系统后每年预计节省的钱的现在价值,如表所示。
年 | 将来值(元) | (1+i)" | 现在值(元) | 累计的现在值(元) |
1 | 2500 | 1.12 | 2232.14 | 2232.14 |
2 | 2500 | 1.25 | 1992.98 | 4225.12 |
3 | 2500 | 1.40 | 1779.45 | 6004.57 |
4 | 2500 | 1.57 | 1588.80 | 7593.37 |
5 | 2500 | 1.76 | 1418.57 | 9011.94 |
2.投资回收期
通常用投资回收期衡量一项开发 工程的价值。所谓投资回收期就是使累计的经济效益等于最如投资所需要的时间。显然投资回收期越短就能越快获得利润,因此这项工程也就越值得投资。
例如,修改库存清单系统两年以后可以节省4225.12元,比最初的投资(5000元)还少774. 88元,第三年以后将再节省1779.45元。774. 88/1 779.45=0.4,因此,投资回收期是2.44年。
投资回收期仅仅是一项经济指标 ,为了衡量- 项开发工程的价值,还应该考虑其他经济指标。
3.纯收入
衡量工程价值的另一项经济 指标是工程的纯收人,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。这相当于比较投资开发一个软件 系统和把钱存在银行中(或贷给其他企业)这两种方案的优劣。如果纯收人为零,则工程的预期效益和在银行存款一样,但是开发一个系统要冒风险,因此从经济观点看这项工程可能是不值得投资的。如果纯收人小于零,那么这项工程显然不值得投资。
例如,上述修改库存清单系统,工程的纯收人预计是
9011. 94-5 000=4011. 94(元)
4.投资回收率
把资金存人银行或贷给其他企业能够获得利息,通常用年利率衡量利息多少。类似地也可以计算投资回收率,用它衡量投资效益的大小,并且可以把它和年利率相比较,在衡量工程的经济效益时,它是最重要的参考数据。
已知现在的投资额,并a已经估计出将来每年可以获得的经济效益,那么,给定软件的使用寿命之后,怎样计算投资回收率呢?设想把数量等于投资额的资金存人银行,每年年底从银行取回的钱等于系统每年预期可以获得的效益,在时间等于系统寿命时,正好把在银行中的存款全部取光,那么,年利率等于多少呢?这个假想的年利率就等于投资回收率。根据上述条件不难列出下面的方程式:
P=F/(1+j)+F2/(1+j)*+.+F./(1+j)”
其中,P是现在的投资额;F:是第i年年底的效益(i=1,2.,n);n是系统的使用寿命;j是投资回收率。
解出这个高阶代数方程即可求出投资回收率(假设系统寿命n=5)。
例如,上述修改库存清单系统,工程的投资回收率是41%~42%。