两周前我开始了一个新的项目,最近这半年一直耳濡目染敏捷开发的各种好处,所以这个项目准备拿来练练手,试试使用敏捷开发中的提倡的各类实践来实际操练一下。

这次开发由我和另一个同事半结对进行,为什么是半结对呢,因为同事之前没有了解过敏捷开发,所以思想上可能还是传统一点,完全结对可能会延误项目周期。所以我最后决定的开发方式是,上午讨论需求,下午动手写实现,下班之前一个小时我们会review今天的代码,进行重构。上午的时候我们会结对进行编码, 会给出sql的实现,以及各类主体框架代码,保证整个代码的结构是统一的,这样我们后期维护的时候会很方便,因为我们采用的是同一种思路进行编码。还有另一个好处两个人对项目都有充分的了解,后续项目其实是不需要交接的。而且我们两个人对业务的理解各有优劣,我们结对讨论需求的时候会更容易出结论。

上午讨论需求过程中我们会将业务上的疑惑点记录下来,发给产品,让其给出相应的解释,同时会记录在项目的备忘录(思维导图)中。我们在搭建项目模块结构的时候采用代码生成工具,避免了手写带来的错误。之前一直都是多人合作开发,也没有任何相关的规范,所以也没有精力去整理这些结构化代码的功能。导致我们之前的开发,效率极低,而且没有统一的规范,后面维护起来非常费劲。到目前为止,我们项目组其他同事还是采用手动的方式进行搭建模块结构,这样不但容易出错,而且还浪费时间。

我现在开发使用的工具链是 eclipse + sublime + vim插件。eclipse中的快捷键我已经十分熟悉了,所以写起代码效率还是非常高的,使用快捷键还不容易使代码出错,我使用sublime处理一些需要批量处理的一些逻辑,因为vim现在还不能非常熟练的使用,所以很多批量的代码修改工作我还是使用sublime,vim的话我主要用来进行一些代码的复杂处理。三者配合起来使我的开发效率得到了很大的提升。另外在web环境这层我们使用热部署,是我们不用每次修改都需要重启tomcat.热部署的插件我使用的是jrebel.

另外在开发过程中我觉得对我帮助比较大的就是todo list.我会将需要做的事情列到todo清单中,完成了相应的任务我会进行标记,在完成任务的过程中如果有什么其他几位我会增加我的todo list清单,这样实现下来,效果非常好,因为我之前的开发方式经常会漏掉很多东西。导致提交测试的时候总会有很多bug.现在有了todo list,我再也不用担心遗漏掉任何功能了。

我们采用先写服务,后画页面的形式进行开发,因为服务便于单元测试,而且和业务紧密相关。我们先将所有服务的单元测试用例都先给出,采用TDD的思路,反推实现,在这过程中频繁运行单元测试,保证我们的改动的正确性,看见绿灯亮会是我们更加安心。

我们将近五天的时间把后台服务全部完成之后开始进行前端页面的开发工作了,由于我们做的是报表类的需求,前端的页面比较简单,查询条件+表格展示+导出。代码结构都是一致的。配上之前所说的Jrebel热部署,是我们快速进行页面和服务的联调。我们使用了两天的时间就完成了页面的开发和服务的联调工作。

项目预估的工作量是18个工作日,到目前为了我们已经完成了百分之七十的开发工作,花了大概五分之二的时间。下周我们就可以完成第一个版本的迭代,然后给产品和业务部门进行展示,留下剩余一周的是时间进行改进。让我们后期有充足的时间应付变化。

总结下来,这次的项目实践中我担任主程,最大的感触就是各种工具带来的效率提升,另外一方面,同事由于对此种方式可能不太熟悉,不太熟悉各种工具和快捷键,可能效率还是比较低,不过经过这次实践之后,大家的默契度会越来越高。

这是一个好的开端,希望以后团队能够多进行一些敏捷方面的实践,让我们的效率得到最大的提升。另外之后阶段想学习的是 持续集成的实