【IT168 专稿】“敏捷”这个词2002年在微软的官方网站上出现,在IT业快速流行。2007年下半年,专业媒体以重头文章或专题大肆渲染敏捷开发、敏捷业务、敏捷企业,相当多的业内精英从不同侧面表达了对敏捷的理解。
笔者空闲时或准备编写架构级程序时,常会上SAP、Oracle、IBM、微软的官方网站逛逛。看过媒体的报道,有一些有别于这些精英的看法,借此阐述一下笔者的观点,为读者更好地理解这一风靡IT业的术语提供一点体会。
软件硬件都要硬 才可能“敏捷”
笔者当开发部部门经理,掌管公司整个开发部、测试部、技术支持部时,经常问大家:“你们每天有多少时间在思考?”在IT业,特别是软件业,我们的起跑线和国外程序员是一样的,为什么国内的软件书籍只能出些应用级的,说的都是皮毛,而专业的书籍绝大部分都出自国外程序员之手?
国内公司招聘程序员时,动不动要求“精通”,精通Delphi、VB、VC、J2EE架构、精通Hibernate、Spring、Struct等等,试问国内有几人敢说精通?硬件发展这么多年了,一旦出现故障,只能送厂家换,最多测测电阻,焊接一下。就算是开源的Hibernate,国内又有几人把那10万行的代码都看懂或看过5遍以上了?
所以,还请大家认真回溯到源头,思考微软2002年所提的“敏捷商务”概念。
微软所提的敏捷商务包括:敏捷开发、敏捷业务和敏捷企业三个方面。笔者的观点是:首先建立敏捷的开发环境和系统架构,实现软件的敏捷开发;然后提炼客户业务,实现业务的分离,即高内聚低藕合;实现业务的开发修改,以软件的敏捷,带动企业处理商务的敏捷,从而为企业在相同时间内带来更多的利润。
我们看两个案例:笔者分别在上午、中午、下午去银行办理小业务,排队的时间平均达1小时。笔者还曾经去中国电信办理电话业务,用了两个小时在电信的业务大厅看电视广告,以消磨时间代替排队,一个下午什么事情都做不了。
当然了,这些企业的办事效率并非都很差,比如扣钱就非常及时,手机一欠费立马停止呼出,再停止呼入。这两个案例,显示出了敏捷业务和不敏捷企业的正反两面。当企业所有的硬件都达到了敏捷的时候,企业的软件如服务和精神文化也要跟上,才能达到敏捷企业的标准。
解剖腾讯QQ的敏捷开发模型
对IT行业而言,面对不断更新的技术和环境,建立敏捷的开发方式和团队,建立敏捷的业务分析和模式,建立敏捷商务的运作模式,让公司成为敏捷企业以快速应对不断变化的客户需求,才能在市场中立于不败之地。
目前最典型的是腾讯公司的运营模式。腾讯公司凭借中国最大的用户群、快速应对市场的能力,获得“秒杀对手”的称号,它每进军一个行业,都让整个行业的竞争对手感到恐慌。对手不得不推出相应的甚至是自己不需要的产品,来应对腾讯的竞争,即使如此,市场份额还是被腾讯无情地划走。
腾讯公司可说是敏捷企业的一个代表。大家看到腾讯这些年进军棋牌类、休闲类、竞技类游戏市场甚至新闻业等等,都在不断蚕食这些市场。棋牌类的,硬是从老牌的联众手中抢走了一半以上的市场份额,竞技类的也是如此,门户网站更是为留住用户而大伤脑筋。
腾讯凭什么具有如此大的杀伤力,让业内人士感到恐惧?除了它拥有庞大的客户群、快速应对市场的能力,还有就是它构建在技术基础上的业务模式。笔者所在团队2003年所开发的企业应用管理软件(HR,人力资源管理软件),也是模仿腾讯QQ和联众的开发模式。
大家都知道,QQ和联众的棋牌类游戏是先下载一个大厅,再下载相应的应用软件包,然后用户登陆服务器,实现各应用软件的功能。在此,笔者结合团队开发的软件,从两个方向谈谈这些软件是如何敏捷开发的,希望让更多的朋友了解敏捷开发的模式。
首先要开发一个服务架构,解决通信问题、服务负载平衡问题,以及缓存处理和延时处理问题,其中最重要的,是要完成各服务包的注册和寻址,并实现实体类的方法。上面可分在两个包或同一个包实现,不然,联众的棋牌也可以在QQ游戏大厅中的棋牌室玩了。
然后就是大厅软件包的开发。大厅除了我们都看得到的功能外,还有游戏的引擎和公用服务,如登陆、语言通信、广告以及计分等,这里分服务端公用服务包和客户端服务公用包。另一个重点是游戏的注册,注意,上面是注册的方法,这里是完成具体游戏的注册。而这些具体游戏完全可以放在外面的一个文件中,如果不考虑加密机制,直接存成XML文件就好。
再接着就是客户端软件的开发。根据各种不同的棋牌规则,开发相应的程序,根据业务的变化,调整相应的代码,完成快速开发。如果某些游戏存在问题,只要跟踪相应的游戏代码就可以解决问题。这样的架构模式,使腾讯有时间、精力在平台上快速开发其他新游戏。

这是一个非常具体的敏捷开发模型。当然,QQ和联众的具体系统架构图,和笔者的分析会有所不同,但思想及分层应当不会差太多。业界朋友有兴趣的话,可以把他们的程序破译,看看和笔者的分析是否一样。
敏捷开发对管理软件的借鉴意义
笔者再从企业管理应用软件的角度,来分析敏捷开发模式。我们先看个软件公司都会遇到的问题:软件公司开发出产品给客户使用时,客户提出这样、那样的不同意见及新的需求,软件公司就得组织一班人马,进行分析,开发测试后再给客户。有时要不断重复这些循环。
这类事是程序员的家常便饭,很多人见怪不怪,只知道要不断加班了。其实处在更高的位置管理团队时,就会问自己,是什么原因引起的?我们的工作量有多少?如何保证我们减少返工量?如何缩短我们的开发周期?如何保证程序员修改程序时,不会涉及到其他已完成的功能模块?
通过这些日常管理的思考,我们很容易发现,我们需要敏捷的开发方式和良好的系统架构。最好的方式就是类似联众或QQ游戏那种开发方式。笔者强调的是要设计一个好的架构,再开发一个公用的软件业务包,实现企业公用的业务逻辑,然后再加上数据字典和模板,以分层的思想来考虑整个软件体系,就可以快速开发出用户所需的业务模块了。

采用这种模式,不论是新增加的模块,或是修改旧有模块,都可以快速实现。因为程序员考虑的只是业务逻辑的处理,具体的页面和数据库及显示,完全交给系统来处理,一小时可以拼出十几个业务表单。
用这些软件可以满足用户不断变化的需求,以及未来发展所需的业务变更。软件厂商在业务没有发生重大变革之前,完全可以把工作交由客户维护人员,扩充所需的功能。软件厂商和企业用户共同实现敏捷处理事务的功能,实现了真正意义上的双赢。