在企业中应用敏捷方法是一项具有挑战性的任务。实现敏捷不像安装软件那样能在内完成。而是需要适应企业环境,其中包括:文化、技术和组织方面。本文将探讨面临的一些挑战,这些挑战与建立开发环境、自动化测试、持续集成相关,并且同在企业环境中明确完成的定义(DoD)相关。

  建立开发环境

  每位技术负责人和开发经理都想缩减团队成员建立开发环境的时间。然而,为了在项目中获得较高的产出,开发人员要持续投入许多精力,让事情变得有条不紊。缺乏文档,是建立开发环境时间过长的关键原因。第二个关键原因是建立过程中包含多少手工步骤。那么,如何克服这些挑战呢?关于文档我遵循几个信条——简单,注重细节和自动化。简单是指,让文档的创建、维护、查看以及传播保持简单。在为我的团队建立开发环境相关的内容时,我使用wiki来管理。wiki页面有一名所有者,它会作为迭代的一部分被更新。注重细节是指,记录建立环境所需的内容时,要形成明确且易懂的指南。这表示,为了让开发人员开始编写代码并与团队的其余工作进行整合,要记录下开发人员所需的所有细节。下面是我在有关开发环境的wiki页面中所记录的:

  需要安装的软件包列表:在我的案例中,这部分需要JavaDeveloperKit(JDK)、Eclipse整合开发环境(IDE)、ApacheAnt、ApacheAxis以及SQLServer精简版管理工具。

  每个安装包要包括安装文件的位置(网络驱动器/外部网/内部网/其他)以及安装所需的证书。例如,apacheant,在我们subversion版本库中的位置,是由subversion工作副本指定的相对路径——/Software/Apache/Ant/1.7.0。

  对于每个安装包,要指出在机器上需要配置的系统变量及本地变量。例如,ant需要ANT_HOME变量,axis2需要AXIS2_HOME环境变量指向开发机器的目录结构。

  需要获取的其他库列表——包括任何java文档(JARS)、.NETDLL文件或是其他文件。例如,用于访问MicrosoftSQLServer2005的Java数据库连接(JDBC)JARs,或者使用IBMWebsphereMQ所需的JARs。

  如何让用户访问消息队列服务器、数据库服务器和远程机器——联系人、以及相关步骤和表单的链接。诸如开发环境中的应用程序认证信息或用户特定的认证表单这类细节,可以在这里指定。例如,我指定了一个email模板,其中包括登录用户名、我们团队的应用程序标识符和联系人姓名,这一模板用于给我们的中间件支持组发送email,以获得访问消息队列服务器的权限。

  源代码是如何组织的?如何获取代码库的访问权限?这一部分会提供一个代码组织结构的概要。例如,我是基于数据域(客户数据、账户数据、文档数据)以及核心可重用的公共模块(例如:logger、router、exceptionhandler、notificationsmanager等)来组织代码的。这一部分也会提供subversion主干的位置以及如何得到代码库写权限的指南。

  通过源代码控制系统建立代码的工作副本(或者本地开发副本)。基于企业桌面应用程序的政策,这一部分提供了关于工作副本位置的指南。例如,用户只拥有某个特定目录的写权限。

  关键文件的位置——应用程序日志文件、错误文件、服务器跟踪日志、线程(堆栈)信息。例如,Tomcatservlet容器日志和WebsphereMQ绑定文件的文件路径。

  浏览队列和添加队列的步骤。这一部分指出了在消息队列服务器中开发人员需要注意的重要队列。这部分还会提供创建新队列的命名规范,以及相关的支持信息。

  浏览数据库表格,创建像数据库表格、数据库视图和存储过程之类的数据库对象。在我的案例中,这一部分包含了用SchemaSpy生成的SQLServer2005数据库文档。

  开发人员使用的脚本/工具——开发人员用于自动化日常任务的工具。例如,能编译并执行JUnit测试套件的apacheant脚本,以及能基于java源码生成javadoc的脚本。

  建立开发环境重要的方面或许是自动化了。自动化有几个优点——在整个流程中坚持自动化,算不能消除错误,也能显著地减少错误。下面是一些自动化所面临的挑战:

  缺少机器的管理权限:由于安全原因和公司政策,系统管理员也许不会对开发人员开放开发机器的所有权限。这可能会阻碍软件安装、设置环境变量和执行脚本。

  需要与外部部门进行协调:外部部门可能会提供安装软件,提供证书或是批准安装软件的请求。

  需要利用托管解决方案:大型企业会有为中间件功能(消息队列,企业服务主线,应用程序适配器)提供支持的专用共享主机,与它们交互通常需要得到技术支持。

  这些挑战或许并不总能被解决,但还有一些办法来处理它们。对开发人员而言,所有所需的软件——不管来自何处——把它们加入源代码控制系统。确保使用一致的命名和放置规范来组织软件包,标识出版本号和程序库依赖关系。这能确保每个开发人员不用在公司内四处询问可得到所需的软件包。对于那些需要由其他部门去安装的软件包,可以创建脚本来生成请求,如果可能的话,甚至可以通过程序提交请求。一旦他们从源代码控制系统中得到文件的工作副本,你会想要建立一个“设置”脚本。在我的项目中,我有一个apacheant脚本,用于建立用户级环境变量、在开发数据库中创建用户编号/密码、从网络目录拷贝许可密钥至用户的windows配置中,并为团队支持的各种web服务生成XML消息样例。

  自动化测试和持续集成

  开发人员因各种各样的技术原因而不进行自动化测试。我常听到下面这些理由:

  “我有我更喜欢用的工具”——这个工具可能是开发人员自己创建的,或是来自某个特定的开源或厂商的软件套件。这个工具可能会些局限,但开发人员会拒绝承认或予以解决。