最近有这样的一个辩论,功能点VS代码行,辩论的焦点就是用哪一种来代表软件规模更好一点。项目规模的度量大有学问,如果您想去听听专业的软件功能点法课程,您可能要付上高昂的学费,并且有可能学了后还不知道如何用上这个办法。这里我不想谈论这两种办法,这些方法可能仅是理论上可行,目前我也没有见到过一个成功实践这类方法的案例。
软件规模就这么难度量吗?以前我的领导曾经问过主任评估师,我们把工作分解得足够细,直到我们可以估计工作量的程度,这不就把工作量估出来了?
没错,我想说的就是这种办法,而我们亲爱的微软,就是采用这样的方法来估算规模的。这样的办法虽然原始,但有效,并且容易掌握。虽然这种办法被扣上主观成分大、项目间难以横向对比的、难以积累历史数据等多种“罪状”,但不好意思,用功能点法或者代码行法就很准吗?我们亲爱的软件工程师们认可功能点法或者代码行法吗?搞功能点法代码行法等这些“虚”办法,还不如老老实实地WBS,直接估算每个工作的工作量。
中国的软件公司所做的大部分项目都会出现不同的新情况,功能点法和代码行法只适用项目类似的情况,或者是做外包时和对方讨价还价用的。下面介绍的软件规模度量办法,是所有公司都能马上采用的办法,而且将会让工程类人员乐于接受,我暂且把这个估算办法叫做“傻瓜估算法”。
第一步:把公司内部最有项目经验最有估算经验的工程们召集在一起,制订组织级别的估算表框架。
软件开发活动,可以分类以下几类:
l 直接生产软件的活动,如:需求开发、设计、编码、测试等工程类活动。
l 项目管理类活动,如:编写项目计划、计划跟踪、发布评审等活动。
l 项目支持类活动,如:配置管理、QA检查等。
l 维护类活动,项目验收后的数据整理、修改缺陷、系统维护等活动。
根据公司的实际情况,列出各类项目活动,可以根据不同的项目类别而列出不同的活动,尽量把这些活动种类细化,如考虑设计时,还需要考虑设计评审的时间,考虑编写计划时,需要考虑主计划、子计划的编写等等。
把这些框架定好,并设计出估算表模板,供项目组使用。
据我的经验,很多估算没有做好的缘故,常常是忘记或者是没有估算好估算管理类、支持类、维护类的活动。当一个公司的估算精英聚集在一起的时候,大家要列出公司估算中常常遇到的问题,全部考虑到估算表模板中,并写上足够清晰的指导。当项目组用这些模板的时候,相当于用了估算精英们的脑袋来思考本项目的估算了。
第二步:项目组选用合适的估算表模板,进行由底而上的估算。
项目组根据自己项目的特点,选用合适的估算表模板,然后项目组成员一起在这个模板的基础上,继续细化,进行详细的WBS,列出要完成这个项目所需要的全部工作,并且把这些工作落实到具体的项目组成员身上,由负责该任务的人来估算自己完成这个任务需要多少时间,而不是由项目经理分配一个完成时间。这就是由底而上的估算办法,这是微软MSF中的估算办法,这个办法有以下好处:
1. 最终该任务是由这个人来完成的,他估计多少时间才能做完,这个时间才是最接近实际的。
2. 负责该任务的人进行估算的时候,肯定需要认真思考这个任务的风险,需要做哪些具体的工作,这样更容易在未开始工作之前就发现更多的潜在问题。相反如果由项目经理来分配时间,这个人就可能不会去思考这个任务了。
3. 做这个任务的人会有被重视和尊重的感觉,他会很重视自己承诺的完成时间,并且想法设法按时间完成。这样会减少很多项目管理时间,因为每个任务负责人都会主动地跟踪好自己的工作。
第三步:持续完善模板,持续改进。
每个项目使用模板进行估算后,都可以对模板提出改进建议,把本项目的成功经验融入到模板中,让后面的项目收益。
“傻瓜估算法”非常直接有效,能很准确地估算出项目的工作量。学院派的人士会认为应该先估算出规模,然后再由规模估算出工作量,但我想说的是,估算规模的目的还不是为了估算工作量,如果有办法直接准确地估算工作量,干嘛还要去估算规模,干嘛还要去想功能点法好还是代码行法好?当时我们主任评估师也认可这样的做法,他也认为某些情况下工作量可以直接代表项目规模。CMMI也没有规定非要用什么功能点法代码行法来度量软件规模。
软件的工作量估算是很重要的一项工作,是整个项目成功的基础,用“土方法”也可以把工作量估好估准!
对于软件规模的度量,我们有两层的目的:
1. 能准确地估算出本项目的工作量,为整个项目控制打好基础。
2. 能在不同项目间进行横向比较,为度量组织的生产力打好基础。
如果目标一还没有实现的情况下,就不要直接去追求目标二了,要一步一步来。功能点法、代码行法无疑在理论上是可以同时满足两个目标的,但如果做不到就不要硬来,不要做“拔苗助长”的事情。先把目标一做好了,再考虑目标二。
那“傻瓜估算法”能不能满足目标二呢?
是可以的!做第二步进行WBS进行由底而上的估算时,这些WBS其实是可以分解成功能点或者是代码行的。当公司已经成功用“傻瓜估算法”满足目标一时,可以认真学习以下功能点法、代码行法的精髓,利用这些办法来提高估算的准确率。功能点法、代码行法这里就不详细论述。
CMMIonline 版权所有
欢迎转载,但请给出指向本网站的链接:
http://www.cmmionline.net
版权声明见:
http://cmmionline.net/forums/thread/1340.aspx