最近在温习软件工程的课程,对软件项目成本估算模型有了些认识,以下是我的一些心得,希望与大家分享.
    首先我们需要明确的是为什么要做软件项目预算.首先软件项目是不同于一般工程项目的项目类型.受用户需求,开发方式的影响很大.没有明确的预算,会导致软件开支的不可控制,随着项目的进行,开发放要承担的风险也会增加.另外如果没有预算,更不可能与客户达成开发协议.没有人会傻到委托别人做一个自己都不知道要花多少钱才能完成的项目.最后也就是我个人对项目预算的看法,好的项目预算应该包括团体预算与小组或个人预算两部分,好的项目经理应该了解自己的团队,对突发事件等的考虑应该放在项目预算之中,然后将项目的开支细化到小组乃至个人,这一点看似多余,但是却很有必要.比如在实际的开发过程中,由于为了缩短工期而招收新的程序员,这就需要对新程序员进行培训.新程序员消耗的团队成本是要考虑在内的.这也就是传统意义上的peron-monthes所不能完全表达的部分.
    新增人员的开支是不能被忽略的.这需要在实际开发过程中统计得到数据,来精确计算.
    项目策划任务集:
       
1.明确项目范围
        2.确定可行性
        3.分析风险
        4.确定需要的资源
           a.确定需要的人力资源
           b.确定可复用的软件资源
           c.标识环境资源
        5.估算成本和工作量
           a.分解问题
           b.使用规模,功能点,过程任务或用例等方法进行两种以上的估算
           c.调和不同的估算
        6.制定项目进度计划
           a.建立一组有意义的任务集合
           b.定义任务网络
           c.使用进度计划工具制定时间表
           d.定义进度跟踪机制
    在项目策划任务集中,每一步都涉及到软件开发成本.对人员,环境,可复用软件的资源的统一调度,将直接影响成本.其中受软件开发的特殊行,人力资源成本是最不好控制的.相对来说环境资源就容易控制得多.
    环境资源包括软件工具,硬件,网络资源等,当然还要包括公司的日常费用(刨除开发团队佣金与开支,因为这部分属于人力资源成本).这些无非是买来或者维持,成本是很容易计算的.
    可复用软件资源就要考虑到软件的具体设计,功能模块的关系以及系统架构等具体信息.专家建议是将软件资源分为如下四部分:
    1.成品构件:指能够从第三方直接购买的商品构件.或者以前项目中完全相同的构件.
    2.具有完全经验的构件:以前项目开发过的,与当前需求相似的功能构件.
    3.具有部分经验的构件:为以前项目开发,与当前项目要构造的软件有关的已有规格,设计,代码或测试数据.但是需要从新架构.
    4.新构件
    开发的成本可像而知,是升序排列的.所以在软件开发的一开始就应该考虑的使用以后技术,对可复用软件资源进行整理,不能在开发过程中才考虑,要知道一个关键构件的重用会为软件开发带来多大的效益.不过凡事也不是必然,不已有构件的扩展要考虑到原构件设计,开发文档的完整性等因素.
    还是就人力资源进行分析,由于跟人能力与技术方向的不同,programmer不可能像一般意义上的工人或者机器一样有效地预期成本.我们可以开发一个原型,利用原型数据来对应分析每个人的价值与成本.但是应该考虑的是,随着程序员的个人因素的变更(年龄,职务,时间,身体状况等),原型数据只能作为一个一般参考.例如SARS期间,或流行性感冒的传播,人力成本就会变得不好控制.(极限情况下,这将使一个项目面临流产~)
    目前流行的估算模式大致可分为如下几类:
    分解估算:
       1.
软件规模估算.
       2.基于问题的估算.
       3.基于loc估算.(loc:代码行数)
       4.基于fp估算.(fp:functionpoint 功能点)
       5.基于过程估算.
       6.基于用例估算.
       ......
    经验估算:
       
典型的经验估算模型是通过回归分析从以往的软件项目中收集的数据得来的.这种模型的总体结构表现为下面的形式:
       E=A+B*(e)^C
       其中A,B,C都是经验常量.E是工作量(单位:人*月),e是估算变量(loc或者fp).除了公式表达的方式以外,还有一些形式的项目调整成分,如问题的复杂程度,开发人员经验,开发环境等,一下列出些常用的调整系数:
Personnel Attributes

  • Analyst capability  (ACAP)

  • Programmer capability  (PCAP)

  • Applications experience                (AEXP)

  • Virtual machine Experience  (VEXP)

  • Programming language experience  (LEXP)

Project Attributes

  • Modern programming practices  (MODP)

  • Software Tools                 (TOOL)

  • Required Development schedule  (SCED)

这些系数都应该应该根据具体的项目进行调整和设计.
 cocomo:(constructive cost model)
 
这种模型是Barry Boehm在其论述"软件工程经济学"中介绍的一种层次结构的软件估算模型.现在已经被广泛应用.主要应用于应用组装模型,早期设计阶段模型,体系结构后阶段模型.将在以后的日志中对大家进行更深入的介绍.

posted on 2007-12-04 22:23  lzlynn  阅读(2066)  评论(4)    收藏  举报