今年暑假我在一家公司实习时曾参与了其敏捷开发过程,对于并没有太多实际开发经验的我来说,一切都是新的。那时我还从来没有接触过敏捷开发方面的知识,只是看到公司中每天的站立会议,看他们对着一面贴满五颜六色便利贴的白板进行讨论,感觉十分新奇。这几天浏览了Martin Fowler——敏捷开发的创始人之一所写的详细的敏捷开发的论述,这才比较系统地了解到那究竟是什么。
在上个学期的面向对象课程中,我们也或多或少了解了一些软件工程的知识,也以团队形式合作过小项目。现在看来我认为那是一种较为传统的开发方法。它很注重需求分析和方案设计,要写出十分规范和详尽的需求文档,包括各种UML设计。然而在开发过程中我们也发现,项目的变化可以说是一直伴随在开发过程中的,每一次变动都可能与我们最开始的设计相差很大,相应地,其变更成本也很高。另外团队里各个成员的交流也一直是困扰我们的一个很大的问题,没有找到一个有效的交流方式,导致有时解释一个并不重要的东西所花的时间成本却很高。一个人的工作进程对于其他人来说很难有效地了解,大家脑子里对于这个项目的思路也都有一定差异,不容易达成一致。而了解了敏捷开发之后,我发现它所关注并致力于解决的正式这些问题。下面是敏捷开发给我的印象比较深的两个方面:
有效响应变化
在敏捷开发过程中,团队对于项目中发生的各种变化是以积极的状态去适应的。比如它将客户直接纳入到团队中,以实际的软件而不是各种文档来确定用户的需求,随时准备接受各种变更,采用增量交付与敏捷实践耦合的方式降低变更成本。其实个人认为每日站立会议是一个十分有效地响应变化的方式。在站立会议中,每个人都要论述自己目前的状况以及所遇到的困难。当有其中一个人发现问题需要进行某种变化时,所有的人都可以知道。
团队合作
通过敏捷开发的方式,团队中的个人可以清楚地了解到其他人工作上的进展。在面对面进行交流的站立会议中,不管是开发者还是管理人员都要参加,大家会逐渐建立其互相的理解和信任,对每个人的个人能力素质也能有比较清晰的了解。这样的团队将会有很高的交流的效率。反观传统的开发方式中,管理人员和开发者之间平时交流达不到如此频繁,导致其并不能很好地理解对方的想法,也就相对提高了交流的成本。而在敏捷团队中,在逐渐开发的过程中,团队会拥有很强的凝聚力。
因此我认为相对于传统的开发方式,敏捷在对于开发比较大的项目时是效率更高的。希望在今后能从敏捷开发中学到更多的东西。