2009年5月11日星期一

论软件过程中的效率问题

软件开发过程中,主要参与者包括开发人员与各个领导,开发人员负责执行流程,而领导负责制定流程。

在实际项目过程中,领导需要项目开发过程中的很多数据,它可以选择自己去从各地方去收集,费时费力。所以领导就制定流程,要求执行人员自己到某一个地方去填写它所需要的数据,这样领导就不必各个地方去收集,提高了自身的效率。在他的心目中,每个程序员只是打开一个页面,填写一个数据,用不了5分钟,如果自己来做,也许要几个小时。

当公司越来越大的时候,程序员上面的领导也越来越多,而这些领导对开发过程中关注点也不同,这些领导为了自身的效率,都会要求修改开发流程,从而减轻自身的工作量。

就这样,开发人员所面对的流程越来越多,其效率也越来越低。举个例子,在CMM中,为了达到对项目的按时完成,其要求精确到人天,这时要求程序员准确记录工作时间,来计算代码行/时间。这对于领导来讲很好,我能精确控制项目进度,对于开发人员来讲,简直就是噩梦,你让领导也试试每天记录自己的工作时间。这种方法也许是能够准确控制项目时间,但开发效率是否提高了呢?如果本来2天干完的活,我说4天做完,我是能确保在第4天做完。

个人认为,CMM已经走偏了,它太强调了开发过程的可控,而忽视了开发过程的效率,所以对于小公司来讲,你上CMM就得死。

提高软件开发过程的效率

在做流程优化之前,我们先要分析软件开发效率的瓶颈在什么地方,是在管理者还是执行人员?

在分析瓶颈时,要深入到流程当中,看其具体运行情况,不要为一两个人的效率所影响。比如说开发人员每解决一个bug,其要走一套相关的流程。如果领导需要每个月对这些数据统计,每个月可能要花费2个小时来收集数据,为此他想改变一下流程,让程序员每解决1个bug,多花费1分钟填写一下,这样他就可以节省2个小时。

如果在每个bug上多花费1分钟,那么按照100个程序员,每天解决2个bug计算,一个月所多花费的时间就是1*2*100*20(天)=4000分钟。

2个小时VS4000分钟,哪个效率更高一点呢?很多时候,效率就是这样一点一点浪费的。

从提高软件开发整体效率来讲,以社会分工的理论来讲,每个人分工尽可能的细,这样他才能专注,他才能在这个领域不断的提高效率。也就是说与其让每个人花费1分钟时间,不如一个人花费2个小时。

之所以出现因为一两个的人利益,而损失了大多数人的利益在于,大多数人每人损失了一点不太在意,而且一两个人又位高权重,负责制定流程。

提高软件开发效率的方法:

1、
减少开发人员在流程上所花费的时间,使其精力真正花费在有价值的东西上,去掉一些没用的东西。在实际项目流程中,开发人员填写了很多无用的项目,这些项目可能是一开始就没有用,也可能是开始有用后来没用。管理人员认为,反正你也是填表,多填一项也就是1分钟的事,可这一分钟是一个循环。

2、
改进开发流程的管理软件,使各个软件尽量相通,有些流程该合并的合并,这样程序员只需要填写少量的数据,就可以满足各个领导的要求。实际中,开发人员可能干这个事情,去一个地方。干那个事情,去另外一个地方,同样的数据,在多套系统中流转。

3、
将程序员一些经常的工作提取出来,由专门人来完成,利用社会分工理论来优化效率。如果觉得这么一点事由一个专门人来做太少的话,还可以让他去兼职其他的项目。

现在的软件开发流程,很多都是从管理层面由上至下制定出来的,管理者有其自身的目标:按时、保质、高效的完成。而这3个目标当中,以"按时"最为重要,管理者希望他管理的项目可控,至于效率,它完全可以推到开发者这里,毕竟IT业界对于开发效率没有一个具体的评估方法。他们是以一个管理者的角度,去看待软件开发流程,自觉不自觉的考虑到自身的利益,很少考虑开发人员自身的效率问题。而由开发人员改作项目管理的人来讲,其又会受到CMM和PMP等思想的影响,认为当初影响自身工作效率的那些条条框框是理所应当的,就这样程序员的利益再一次被忽视,每天重复做一些无价值的东西。

对公司来讲,开发效率是最重要的,但有趣的是却很少有人关注开发人员的效率问题,大多数人把开发看成一个黑盒,认为是一个不可控的东西,效率低下是很正常的东西。技术本身的复杂程度也许是我们所无法改变的,但为开发人员减负,使其专注于开发本身,从而提高效率,是我们可以做到的。

以程序员的眼光,重新审视开发流程,倾听程序员的声音。

没有评论: