提高软件开发生产力的秘方
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:在所有的软件开发项目中,存在一种共通的东西,需要经常地花时间反省和学习。学什么?一切:成员彼此、技术、问题域、客户,等等。学得快的团队才会成为赢家。本文将详细分析这种困扰团队表现的看不见的“学习瓶颈”。
你和你的团队要花多少时间来重新完成这个系统呢?
当我们提出这个假想的情形——提问的对象中很多都有着超过二十年的软件开发经验——他们的答案多数在第一次完成时间的20%到70%之间变动。也就是说,原来要花一年时间开发的系统,重新完成一次只需要2.5到8.5个月。这是一个很大的差别!很难再找到另一个因素能够对软件开发有这么大的影响了!
那么,问题到底在哪里?第二轮开发中到底有什么不一样了?是团队。他们一整年都粘在一个团队中,因而互相了解。他们又理解了真正的需求——不仅仅是写下来的那些需求。他们还学会使用手中的工具,理解了在整个软件开发中浮现出来的问题领域的种种特质;基本上在创造并交付一个成功的软件解决方案之前,他们已经解决了所有未知的东西。学习过程正是软件工程的瓶颈。[2]
学习过程的存在占据了工作量的很大比例。实际上,我们估计它消耗了30%到80%的开发时间。正是出于同样的理由,敏捷实践才如此成功——它们的主题就是识别并应对变化。
敏捷实践,从测试驱动开发和持续集成,到迭代和回溯,共同组成了一个帮助团队学习得更快的链条。通过反复运用种种实践,敏捷团队加速了学习的过程,直面软件工程的瓶颈。我们可称之为“科学方法”、“持续改进”或者“检验一切”。
以“学习过程是瓶颈”的眼光
检验敏捷
敏捷软件开发是可行的——这已经是一个确立的事实。在过去的八年中已经记录下了数以百计的成功故事。敏捷开发中特别有趣的一点是,大多数实践都不是什么新东西——实际上它们都颇有些年纪了。敏捷仅仅是把许多最成功的软件开发实践提炼出来,并把它们放到一起。实际上,敏捷宣言并没有在创造新事物,而是在自90年代以来已经获得成功的许多轻量级方法当中寻找共通点(Jim Highsmith和Uncle Bob [4]分别对这些方法作了总结)。对大量被认为最有效的实践的反思揭示了一些非常有意思的共通点……
来源:InfoQ中文站 作者:郭晓刚 责编:豆豆技术应用