提高软件开发生产力的秘方
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:在所有的软件开发项目中,存在一种共通的东西,需要经常地花时间反省和学习。学什么?一切:成员彼此、技术、问题域、客户,等等。学得快的团队才会成为赢家。本文将详细分析这种困扰团队表现的看不见的“学习瓶颈”。
“识别并应对变化”的循环
那么我们如何学习呢?我们从自身的错误中学习(只要我们留心,许多人都做不到这点)。我们怎样学得更快?更快地犯(小)错——“Fail Fast”。马上运用我们学到的东西,是巩固学习过程使之牢固的关键。通过在下一个循环中立即运用我们学到的东西,我们重复利用了学习的效果(就像复合利息一样!)。
我们一再遇到的一个非常典型的循环过程如下:

循环过程
这个简单的循环正是敏捷开发中许多实践的基本:
◆测试驱动开发(TDD):1)编写一个会失败的测试,2)编写代码以让测试通过,3)运行测试——它通过了吗?4)如果测试仍然失败则学习其原因所在然后转到2)。
◆每日循环:1)全体一起设立本日要完成的任务,在每日的站立会议上作报告,2)开始工作,3)第二天回来报告完成的进度和遇到的阻碍,4)在第二天的计划中应用学到的东西。
◆测试驱动的需求(Test Driven Requirements,TDR):1)把需求定义成测试,2)开发软件,3)运行测试;如果通过了就算完成,如果没有就进行4)找出原因并回到2)。
◆迭代:1)定义一个“完成状态”,2)确定一组需求作为本次迭代的要交付的工作(Backlog),3)进行迭代完成要交付的工作,4)测试每个项目是否达到完成状态,将之标志为完成,或者将之放回未交付工作待后考虑,并据此结束迭代。
◆产品演示(Demo):通常在迭代结束的时候进行,它给了客户一个机会去检验预想的需求在实现出来之后是否真的能够解决手头的问题。1)(隐含地)确定需求所针对的业务需求/价值,2)定义需求,3)在迭代中满足需求,4)按照业务上的需要来评估需求的实现。
来源:InfoQ中文站 作者:郭晓刚 责编:豆豆技术应用