首页 理论教育 完美软件开发方法:估算方法的形象

完美软件开发方法:估算方法的形象

时间:2023-11-21 理论教育 版权反馈
【摘要】:而估算正是达成这一目的的主要手段。总结来看,完美的估算方法具有如下的特征。帕金森定律和项目的失败率有些事情如果参照起来看就特别有意思,比如说帕金森定律和项目的失败率。而IT这个行业中加班相对比较多,这一事实似乎可以证明帕金森定律深入人心—为防止它起作用管理人员都在制定乐观的日程。

完美软件开发方法:估算方法的形象

让我们回想一下前面多次提到过的那辆车。要想高效前进,3件事情最重要:方向不能错,跑得要快,车不能散架或翻倒。

如果目标只是从苏州跑到北京,而没有任何时限上的约束,那么不做任何估算工作也没有关系—大可以想跑就跑,不想跑就歇息一下。只可惜现实往往并非如此,而是希望能预先知道到达目的地的时间,并且希望能够尽快到达。这样就必须在两个极端间取得平衡。既不能跑得过慢,浪费能力;也不能把万米当百米来跑,累死在半途上。最好是能保持一种恰当的、均衡的行进速度。

对于软件开发而言,由于变数太多,寻找这一均衡点尤其艰难。而估算正是达成这一目的的主要手段。总结来看,完美的估算方法具有如下的特征。

●对软件进行分类,在特定类别下统一单位。

●详细分解,使用彼此独立的不同视角进行多次估算,互相参照。

●控制精度在一定的程度上适可而止。

●确保估算数据能够和实际数据进行比对(当然也要有基于统一单位对最终结果进行度量的工具)。

除此之外,需要再次强调的是

到现在为止,许多估算和度量方法似乎都遗漏了一个关键的东西,即表达软件规模需要两个数字而不是一个数字。

软件是一种固化的思维,那么其两个关键产出物是:固化什么(需求规格说明),固化成了什么(代码)。这两个东西说的是同一个东西,但表现视角和形式不一样。

从估算和度量的角度看,事实上需要分别对两者(需求和代码)进行估算和度量。眼下来看,可以用来度量需求的单位是功能点,可以用来度量代码的则是代码行。

单纯从估算人月的角度看,分别估算似乎是不需要的。但从追踪进度和估量投入产出的角度看,两者则是同时需要的。

假设说,一个杯子的平均成本是5元,那A公司花了100元钱,做了15个杯子,无疑是差的,而B公司花了100元钱做了30个杯子,那生产效率是高的。其中100元是投入,而15个或30个杯子是产出。有投入有产出,就可以计算投入产出。

在软件中,需求类似于杯子数,而代码行则类似于花的钱。有需求的规模,也有代码的规模,才知道程序是否写的合适,才知道进度是否真的合适。比如说,一般来讲,1个功能点对应100行代码,那么如果执行过程中,完成100个功能点写了15000行代码,那很可能是代码质量出问题了。

缺乏这个维度,事实上除了Review和判断,很难找到有效的数字来对软件项目进行横向比较,即使是模糊的数字。(www.xing528.com)

当前的问题是,无论功能点和代码行都会导入比较多的偏差,尤其是代码行。在8.1节中我们会提出一个改善的方案来度量代码的规模。

帕金森定律和项目的失败率

有些事情如果参照起来看就特别有意思,比如说帕金森定律和项目的失败率。

帕金森定律说:不管你给项目组多少时间,项目组都能够把它耗完。

而IT这个行业中加班相对比较多,这一事实似乎可以证明帕金森定律深入人心—为防止它起作用管理人员都在制定乐观的日程。

与此相应的另一个现实则是很多软件项目并不成功。

根据CHAOS的报告,2009年的统计数据是:

32%的项目取得成功,成功意味着不延期,不超支,功能完整。

44%的项目受到挑战,受到挑战是指或者超支,或者延期或者取消某些预定的功能。

24%的项目彻底失败,失败是指项目取消或者从来没有被使用过。

如果能有一份国内的数据会更有意义,但可惜国内暂时好像还没有机构做类似的统计,因此只能暂时使用国外的。

这两项事实让我们看到一个充满矛盾的现象:在一个并不乐观的行业中,却往往有比较乐观的任务安排。

人浮于事一定是不好的,但为防止人浮于事而制定相对紧张的进度,其中所得未必就大于所失去的。而为想更好地把握这其中的尺度,首先需要回归到尽可能客观的标准,而唯有尽可能精确的估算,才可能构筑这种尽可能客观的标准。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈