`
zhaohaolin
  • 浏览: 984107 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

克服在企业中应用敏捷方法的技术挑战

阅读更多

 

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

  建立开发环境

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

  • 需要安装的软件包列表:在我的案例中,这部分需要Java Developer Kit (JDK)、 Eclipse整合开发环境(IDE)、Apache Ant、Apache Axis 以及SQL Server精简版管理工具。
  • 每个安装包要包括安装文件的位置(网络驱动器/外部网/内部网/其他)以及安装所需的证书。例如,apache ant,在我们subversion版本库中的位置,是由subversion工作副本指定的相对路径——/Software/Apache/Ant/1.7.0。
  • 对于每个安装包,要指出在机器上需要配置的系统变量及本地变量。例如,ant需要ANT_HOME变量,axis2 需要AXIS2_HOME环境变量指向开发机器的目录结构。
  • 需要获取的其他库列表——包括任何java文档(JARS)、.NET DLL文件或是其他文件。例如,用于访问Microsoft SQL Server 2005的Java数据库连接(JDBC) JARs,或者使用IBM Websphere MQ所需的JARs。
  • 如何让用户访问消息队列服务器、数据库服务器和远程机器——联系人、以及相关步骤和表单的链接。诸如开发环境中的应用程序认证信息或用户特定的认证表单这类细节,可以在这里指定。例如,我指定了一个email模板,其中包括登录用户名、我们团队的应用程序标识符和联系人姓名,这一模板用于给我们的中间件支持组发送email,以获得访问消息队列服务器的权限。
  • 源代码是如何组织的?如何获取代码库的访问权限?这一部分会提供一个代码组织结构的概要。例如,我是基于数据域(客户数据、账户数据、文档数据)以及核心可重用的公共模块(例如:logger、router、exception handler、notifications manager等)来组织代码的。这一部分也会提供subversion主干的位置以及如何得到代码库写权限的指南。
  • 通过源代码控制系统建立代码的工作副本(或者本地开发副本)。基于企业桌面应用程序的政策,这一部分提供了关于工作副本位置的指南。例如,用户只拥有某个特定目录的写权限。
  • 关键文件的位置——应用程序日志文件、错误文件、服务器跟踪日志、线程(堆栈)信息。例如,Tomcat servlet 容器日志和Websphere MQ 绑定文件的文件路径。
  • 浏览队列和添加队列的步骤。这一部分指出了在消息队列服务器中开发人员需要注意的重要队列。这部分还会提供创建新队列的命名规范,以及相关的支持信息。
  • 浏览数据库表格,创建像数据库表格、数据库视图和存储过程之类的数据库对象。在我的案例中,这一部分包含了用SchemaSpy生成的SQL Server 2005数据库文档。
  • 开发人员使用的脚本/工具——开发人员用于自动化日常任务的工具。例如,能编译并执行JUnit测试套件的apache ant脚本,以及能基于java源码生成javadoc的脚本。

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

  1. 缺少机器的管理权限:由于安全原因和公司政策,系统管理员也许不会对开发人员开放开发机器的所有权限。这可能会阻碍软件安装、设置环境变量和执行脚本。
  2. 需要与外部部门进行协调:外部部门可能会提供安装软件,提供证书或是批准安装软件的请求。
  3. 需要利用托管解决方案:大型企业会有为中间件功能(消息队列,企业服务主线,应用程序适配器)提供支持的专用共享主机,与它们交互通常需要得到技术支持。

  这些挑战或许并不总能被解决,但还有一些办法来处理它们。对开发人员而言,所有所需的软件——不管来自何处——把它们加入源代码控制系统。确保使用一致的命名和放置规范来组织软件包,标识出版本号和程序库依赖关系。这能确保每个开发人员不用在公司内四处询问就可得到所需的软件包。

  对于那些需要由其他部门去安装的软件包,可以创建脚本来生成请求,如果可能的话,甚至可以通过程序提交请求。一旦他们从源代码控制系统中得到文件的工作副本,你就会想要建立一个“设置”脚本。在我的项目中,我有一个apache ant脚本,用于建立用户级环境变量、在开发数据库中创建用户编号/密码、从网络目录拷贝许可密钥至用户的windows配置中,并为团队支持的各种web服务生成XML消息样例。

  自动化测试和持续集成

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

  • “我有我更喜欢用的工具”——这个工具可能是开发人员自己创建的,或是来自某个特定的开源或厂商的软件套件。这个工具可能会些局限,但开发人员会拒绝承认或予以解决。
  • “没有测试数据”——尤其在需要多系统/进程之间协调数据时。

  工具问题可以通过各种方式解决。向他们说明使用如JUnit或NUnit等标准测试工具的好处,指出用脚本进行整合的好处,并具有可持续的、可重复的方式进行测试的能力。在大型企业中,不太可能所有的人都使用同一工具。更现实的做法是,同一部门的开发团队至少有一套标准的工具集。

  我所做的是,提供标准的自动化测试脚本——这些脚本用于对JUnit测试用例进行编译、执行,生成报告并通过email发送报告——这些脚本是每个开发人员开发环境的一部分。当开发人员从源代码控制系统中下载工作副本时,测试脚本已经就位,并且他们会继续加入自己的测试用例。我们团队有一个标准的测试目录结构,其中放置着测试用例和测试套件,脚本会从中选取并执行测试用例。

  另外,在代码复查期间,我会确保不但要复查代码,同时也要复查测试代码。对未包含在自动化测试中的测试用例进行重构也是复查工作的一部分。这同样适用于包含了硬编码数据的测试代码,把硬编码数据改为从配置文件或者数据库中读取。例如,一个测试方法指定用户角色为 BRANCH_SUPERVISOR,而不是从配置文件中去获得。复查时,把这一属性保存在一个由名称-值数据对组成的文件中,重构该测试方法,使之从属性文件获取用户角色。这样一来,这一属性也可以被其他测试使用了。

  对 SOA项目来说,服务中整合了应用程序服务器、遗留系统、数据源或应用程序包,一系列的系统测试也是必不可少的。最初,这些测试可以使用暂时代替后端整合点的mock对象执行。但最终你会希望在真实的整合点上运行这些测试。

  在这种情况下,测试数据以及与多系统相关的数据极为重要。缺少良好的测试数据,特别是需要跨系统的数据,是导致无效自动化测试的一个重要原因。对需要依靠数据复杂性和系统运行时依赖较多系统的情况,可以分阶段解决这一问题。可以从数据的本地副本开始,开发人员查询多种数据源并填充到本地存储。这听起来非常像是手工操作,但如果数据是新的并且ETL作业/批处理过程对数据存储的填充还未完成,这也许是启动测试更为简单的方式。

  随着时间的推移,你可以建立起一套类,封装了来自多种数据存储的测试数据,确保数据的有效性和质量,并把填充测试数据作为持续集成脚本的一部分。无论如何,如果把测试用例代码和获取测试数据的细节解耦,就更易于改变数据源策略而不影响测试代码。我的团队最初用配置文件来提供测试数据,随后把数据迁移到一组数据访问类中,并通过这些类获取所需测试数据。

  例如,我们用Data Access Object设计模式创建了一组java类,这些类封装了对客户数据和账户数据项的操作。这些类提供了一个简单的有增删查改方法的接口,JUnit的测试方法可以通过它访问这些类。如果一个测试方法需要获取客户数据,它会导入DAO工厂和特定的DAO类并调用getCustomer()方法。在提取特定客户对象时,测试可以继续执行其余的逻辑。测试不需要了解如何查询数据并将其打包至一个对象中的,而且这些接口能被其他测试重用。

  定义什么是完成

  在企业中,为完成指定一个标准是非常棘手的。在开发环境中执行地非常好的代码在测试环境下也许根本无法工作。这也许是由于安全令牌/安全政策、网络/连接问题、系统不稳定或是由于质量保证(QA)团队或终端用户更严格的质量测试。为了尽量减少迁移代码时的意外,完成标准中应当包括:

  • 建立一套全面的测试套件,这些测试套件是可复用的,并最大限度的减少(如果没法消除的话)硬编码的数据值。
  • 在持续集成的过程中加入测试套件。例如,在我的团队中,这意味着在特定目录中加入JUnit测试套件,apache ant 脚本可以从这一目录中提取并执行那些测试。
  • 自动化测试用例不但要覆盖功能测试还要覆盖性能测试(例如,使用像JUnitPerf这样的工具,通过使用性能阈值实现测试场景自动化)。
  • 获得广泛的测试数据。如果测试需要整合遗留系统,让开发遗留系统的团队同你们一起创建测试并定义测试标准。开发人员未必总能了解在遗留系统上工作需要注意的细微差别。开发环境下测试良好的一些场景,并不能反映生产环境中的实际数据。
  • 代码复查不仅要在内部团队中进行,而且也要在基础团队中进行(例如,DBA、系统管理员)。

  总结

  本文谈到了在企业中应用敏捷方法面临的一些挑战,并提出了一些应对的策略。使用自动化脚本和检查清单以一致的方式建立开发环境,使用标准的工具和透明的测试数据有助于自动化测试和持续集成,并确保对完成有一个更严格的标准。这些方法并非无所不包,但它们会帮助团队在企业环境中获得更高的生产效率。

  关于作者

  我是Vijay Narayanan,一名软件开发团队的负责人,为一家金融服务公司建立可重用的数据服务及商业过程自动化组件。我参与过的一些项目,从单用户系统到大型分布式多用户平台上的一些服务,都有涉及。我关于软件重用的博客是:http://softwarereuse.wordpress.com/

  【英文出处】:Overcoming Technical Challenges for Adopting Agile Methods in the Enterprise

分享到:
评论

相关推荐

    克服云安全挑战的方法.docx

    克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx克服云安全挑战的方法.docx

    敏捷软件测试:测试人员与敏捷团队的实践指南

    敏捷软件测试:测试人员与敏捷团队的实践指南 crispin和Gregorv定义了敏捷测试的...如何在短期迭代中完成测试任务 如何利用测试指导开发 如何克服困难实现测试自动化 是敏捷测试人员、敏捷团队及其经理和客户的必备书籍

    应用GaN技术克服无线基础设施容量挑战

    近年来,全球智能手机快速普及,LTE网络已被陆续商用,受此影响,全球移动数据的使用继续飙升。

    Scrum敏捷软件开发

    《Scrum敏捷软件开发》是敏捷联盟及Scrum联盟创始人之一、敏捷估算及计划的鼻祖Mike Cohn三大经典著作中影响最为深厚的扛鼎之作,也是全球敏捷社区中获得广泛肯定的企业敏捷转型权威参考。作者花四年时间,把自己近...

    敏捷软件开发.pdf

     5A.2敏捷方法集的演进  5A.2.1XP第2版  5A.2.2Scrum  5A.2.3实用主义和无名的  5A.2.4可预测、计划驱动和其他中心调整  5A.2.5约束理论  5A.2.6精益开发  5A.3新的方法集话题  5A.3.1敏捷项目管理  5A....

    数字化转型手册-拨云见日 克服数字化转型挑战.pdf

    数字化转型手册-拨云见日 克服数字化转型挑战

    工程软件开发之基于模型设计的敏捷方法

    为了克服这些缺点,许多团队采用了将敏捷方法与基于模型的设计相结合的开发流程。有关基于模型的设计和敏捷方法的研究表明,对工程应用而言,基于模型的设计不仅是敏捷开发的有效补充,甚至有时使敏捷开发成为可能。...

    敏捷方法论的接受:批判性审查和概念框架-研究论文

    本文探讨了可以采取哪些措施来克服敏捷方法论接受方面的挑战。 我们对有关接受传统SDM和敏捷方法论的现有文献进行了批判性审查,并基于知识管理的观点为敏捷方法论的接受开发了一个概念框架。 该框架可以为以后接受...

    基于Extendsim医疗需求预测-克服混合仿真设计和实验中的挑战.pdf

    克服混合仿真设计和实验中的挑战 弗罗茨瓦夫大学科学技术学院计算机科学与管理学院Jacek Zabawa、Bozena Mielczarek ISAT 2018——第39届国际会议 2018年9月 本研究建立在早期研究的基础上,该研究侧重于使用组合...

    高频链技术的发展与应用

    目前,DC/AC逆变电源已经在很多领域得到了十分广泛的应用,而且在新能源,如太阳能电池、燃料电池等的DC/AC变换中也得到了广泛应用。传统的低频逆变技术,采用的是工频变压器,具有体积大、重量大、音频噪声大等...

    软件工程原理方法与应用

    自20世纪60年代末期,人们为克服“软件危机”在这一领域做了大量工作,逐渐形成了系统的软件开发理论、技术和方法,它们在软件开发实践中发挥了重要作用。今天,现代科学技术将人类带入了信息社会,计算机软件扮演着...

    浅析RTK在都龙露天矿建设中的应用

    RTK技术是GPS测量技术发展的一个新突破,其蕴含着巨大的技术潜力,虽然其存在一定的缺点,但在实际应用中,采用合理的技术措施,一些缺点是可以克服的,并能取得良好质量效果和经济效益。文中介绍了RTK在云南华联锌铟股份...

    论文研究 - 项目响应理论在调查方法中的应用:在安全带数据中的应用

    在调查研究方法中不流行的一种方法是使用项目响应理论(IRT)。 由于做出预测行为的准确方法是基于观察到的数据,因此设计模型必须克服计算难题,同时还要考虑校准和熟练程度估计。 IRT模型被认为可以提供后一种...

    扩频技术在移动通信中的应用

    由于扩频通信技术有很多优点可以克服这些问题,并且可以提供更高的保密技术,因此,从20世纪80年代末,美国联邦通信委员会(FCC)规划了ISM波段并批准扩频通信使用该频段,扩频通信技术得到了快速的发展和广泛的应用...

    RFID技术在仓储管理系统中的应用.pdf

    利用RF ID技术独有的大批量数据同时采集,无需精确对 位等特点[ 8 ] ,基于RF ID仓储管理系统使得企业从大量重复作 ...度,克服了传统仓储管理中的不足,有效地控制和降低了仓储 成本,为客户创造了价值。

    论文研究 - 孟加拉国部分制造企业的环境会计挑战

    本文针对孟加拉国吉大港受污染最严重的16家选定企业在孟加拉国进行的环境会计实践挑战提出了研究。该研究的主要目的是确定孟加拉国选定制造企业的环境会计挑战。 该研究基于主要数据。 通过问卷调查和专家意见收集...

    白皮书下载:基于SOA的应用集成解决方案

    企业的信息化建设中面临的挑战是一个历史的原因,在以前,我们仅是在某一个业务领域执行了IT的建设,或者受到了某些特定技术的约束,很容易的就可以做出一个短期目标的应用,即使这个应用是有很大的局限性的,比如IT...

    传感技术中的应用GaN技术克服无线基础设施容量挑战

     移动网络运营商面临着诸多挑战,一方面要快速扩容以支持增量用户,另一方面则要尽量减少网络中断并降低成本。长期而言,5G网络有望大幅提升容量和数据速率。但是,5G技术规格仍然处于定义阶段,至少5年内不可能...

    论文研究-几何转换Boosting回归算法及其在高耗能企业负荷预测中的应用.pdf

    论文研究-几何转换Boosting回归算法及其在高耗能企业负荷预测中的应用.pdf, 针对高耗能企业的电力负荷预测问题, 提出了一种基于几何转换关系的Boosting集成预测方法. 该...

    论文研究 - 微电子学对未来数字社会的挑战:薄膜技术和高等教育的作用

    应对这些挑战的方法是,越来越多的新薄膜技术必须与VLSI技术相结合,并以足够的专业知识和适用于多学科应用的广泛知识,更好地培训学生进入这一领域。 法国国家微电子高等教育网络采用了这一策略。 在介绍了挑战...

Global site tag (gtag.js) - Google Analytics