说到软件开发,我们知道软件生命周期由软件定义、软件开发和运行维三个时期组成,每个时期又进一步划分成若干个阶段。总体为问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试和软件维护,这八个阶段。在软件开发开始之前,需要对软件开发周期进行预估,这是一个综合分析的过程,其中的工作包括了很多细节问题需要处理,比如:预估的准确性标准是什么、选择什么样的预估方法和工具、预估应遵守的原则和态度、预估人员的选择等。其中任何一个环节没有做到位,周期预估时间与实际时间就会产生较大差异。
对于开发周期总是超出预估时间,我认为有以下原因:
1、开发人员的经验不足,经历过的软件开发项目次数少,对软件开发过程的各种细节,时间分配等认识不够。
2、开发人员的估算过于乐观,估算不全面,只考虑到编码的时间,忽略了每个程序员的编码效率,还有需求分析、开会讨论、验证、工作中的突发事件等等。就像从旧金山出发,徒步旅行到洛杉矶那个例子一样,只看到地图上的距离,没想到实际路程的艰难。在各个阶段,应该预留一些处理突发事件的机动时间,提高开发过程中的容错率。
3、没有弹性配置开发各个阶段的计划时间。如需求分析必须在两周内完成,时间不够加班完成,但时间充足还有剩余时间,应该提前进入下一阶段,而不是提前完成了任务就可以去干别的事情。应将多余的时间分配给后面的项目。
4、开发人员的数量没有规定好。开发人员并不是人多,开发效率就会高,恰恰相反,人数越多,效率越低;
5、没有灵活的调整开发周期。软件项目常常会出现各种各样的变更,最好的办法只能是面对变化,在每次变化后对项目进行重新估算并进行相应的工作调整。
对待未知的事物,一般人总是习惯于主观臆断,自认为它应该是这样的,把处理事情的过程想的过于理想化,而忽略了现实的不可预测性,这样会可能导致我们的计划和现实出现巨大的偏差。归根结底还是对事物的认识不够,未知才是最可怕的。