不一样的敏捷开发实践

互联网 | 编辑: 宋杰 2007-01-31 00:00:00转载-投稿 一键看全文

不一样的开发实践(2)

引入敏捷开发

其实我公司不是第一次尝试敏捷开发,只是这个项目由于前期做了“细致”的文档,所以没有按照惯用的快速迭代模式进行开发。但新系统在排除了“人”的障碍后,采用敏捷开发的条件已经很充分了。

User Story

我首先和客户方派来的代表一起模拟了权限系统的运作方式,最终得到了一个和最初设计功能近似,但具备充分实用性的权限系统设计方案。

模拟过程类似角色扮演游戏。我先在许多张卡片上写好各个部门及员工的名字、职位信息。然后我和客户代表一起,手持不同的卡片扮演不同的角色。然后将不同角色之间的交互过程记录下来。这个过程就是敏捷开发中倡导的“User Story”,虽然简单,但是非常有效。不但能够真正理清各个角色之间的关系,还能找出实际运用时的不足之处。

在我和客户代表的模拟过程中,开发人员则迅速创建一个符合我们演示过程的权限系统来验证权限系统的可行性。当然,如此高要求的快速开发还需要借助公司从以往项目中积累的大量可复用代码以及高水平的开发人员。

快速决策和充分沟通

由于在客户企业,一个很简单的决策可能也要层层批复。所以经过我公司的艰苦努力,客户企业最终决定由一位领导来专门负责该项目的决策。所以大部分决策可以在较短的时间内获得反馈意见。

而客户代表在整个新系统开发期间,几乎一半时间都在我公司上班。这也保证了我公司和客户之间的充分沟通,并且当面沟通也比通过电话更容易说服客户接受我的意见。

实际上,不管采用何种开发模式,充分的沟通都是保障项目成功的关键因素之一。沟通越充分、双方协作程度越高,项目就会进行得越顺利,成功的几率也更大。而在敏捷开发中,由于是通过小步前进的快速迭代来逐步逼近项目最终目标,所以沟通就更为重要。否则一次迭代完成后,却得不到及时和正确的反馈,那么项目也无法进行下去。

有限的单元测试

持续集成虽然非常有用,但是对于这个项目却不太适合。不过为了保证子系统的修改不至于影响到全局系统,我仍然编写了一些重要的单元测试。

准确来说,这几十个单元测试都不太符合“单元测试”的标准。因为每个测试实际上都要用到子系统的许多接口。但在项目时间压力下,这些测试既能很大程度上保证子系统的修改不至于对全局系统产生太大的破坏作用,又不用花太多时间去维护。所以是一个折衷的选择。

不过这里我认为这里做得很好的地方就是单元测试是由我来编写的,并不是开发人员自己编写的,所以更能够反映我和客户的意图。同时测试重点也更偏重业务领域,而不是程序行为。

版本控制系统

虽然敏捷开发没有对版本控制系统做要求,但使用版本控制系统可以很明显的提高开发效率。例如我和客户代表验证一个想法后,发现这个设想并不好,那么通过版本控制系统,开发人员几分钟就可以退回到先前的代码或者切换到其他阶段的代码。

而且版本控制系统在需求变动激烈的项目中,更是充当了一种保险机制。无意中用错误版本的代码覆盖工作拷贝的事情可以得到彻底解决。

灵活运用敏捷开发

实际上,我从来没有采用过完整的敏捷开发。因为我认为既然敏捷开发本身强调的就是应对变化,那么敏捷开发过程本身也应该是可剪裁的。像结对编程、持续集成这些,对公司本身和开发人员的要求相对来说都更高。如果要一一达标,确实不太可能。所以有选择性的实行敏捷开发,是我最常用的方式。

例如对于User Story,除非是客户充分配合,否则是难以实施的。这个时候应该在前期将工作做细致,尽可能明确大部分需求。然后以最快的速度做出原型系统后,和客户进行沟通获取反馈意见。

同时,即便采用User Story,对于较复杂的系统,也应该深入客户企业,了解客户企业员工的工作流程。因为有时候客户方负责项目的人士很可能会按照自己的想法渲染实际的工作流程或者环境,这对项目的中后期是非常不利的。

在国内,一个项目要做得顺利,项目负责人还要懂得“做人”。和客户方负责人、联系人保持良好的关系是非常非常重要的,否则他们一句话可能就会让项目的开发成本增加不少。这些东西的内容远远超过了技术领域,但却是我们不得不面对的问题。

迟来的成功

新系统花了一个月就开发完成了,因为除了权限系统是完全重做的外,其他部分都大量利用了已有系统的结构和代码。虽然在模拟权限系统时花了不少时间,但这样模拟的结果保证整个系统具有充分的可用性。

这个项目是我公司迄今为止用FleaPHP应用程序开发框架(http://www.fleaphp.org)开发的最复杂的应用程序。不算FleaPHP自身在内,应用程序的核心有100多个类,6700多行代码。从与客户意向性洽谈到最后完成,足足花了六个月时间,期间开发实际上只进行了三个月不到,而且还是做了两次。其他时间全花在沟通、协调、开会上了(有时候不得不抱怨一下国有企业僵化的机制)。

如果我一开始能够耐心说服客户接受我的意见,那么整个项目的开发过程可能就会顺利得多。或者说我能在项目初审发现问题后通过其他渠道争取支持,那么也可以避免后来的二次开发。不得不说我在如何“做人”方面还有许多需要学习的东西。

这个故事虽然不够精彩,但是很真实。

后记:

就在本文完稿时,客户企业提出希望能够将网站系统和他们已有的销售系统集成。这将是又一次艰难的开发工作还是一次愉快的合作呢?更多请关注我的博客http://www.phpchina.com/,ID:dualface

提示:试试键盘 “← →” 可以实现快速翻页 

总共 2 页< 上一页12
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑