1敏捷开发概述
敏捷开发是一种以人为核心,迭代、循序渐进的开发方法。是为了解决项目的复杂性,以最快的方式实现需求的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目和多个子阶段,各个子项目和各个子阶段的成果都经过测试,具备集成和可运行的特征,而各个子阶段是在上一个子阶段经过测试审查完成以后才开始下一个子阶段。敏捷开发方法的应用是以小组为前提的。小组包含有两种角色:产品所有者(ProductorOwner)和开发团队,产品所有者的主要职责包括:确认小组所有成员都在追求一个共同的目标,告知对于软件系统预期的功能以及展现形式,确定功能的优先级以便开发团队总是在完成最有价值的工作,回答开发团队提出的疑问等。开发团队里的人员包括了系统架构师、需求分析师、软件工程师、测试人员以及文档编写者。敏捷开发小组需要定期开讨论会就不合需求之处讨论实施方案。
2敏捷开发系统实例分析
2.1项目背景及需求分析
2014年8月,笔者为某公司开发技术支持信息平台,以提高该公司运作效率,节约成本。前期需求分析用了比较长的时间。首先开发团队进驻该公司,向各个部门管理人员和工作人员深入了解各个岗位的具体工作内容并做了详细记录;其次从该公司人事部门获取了组织机构图及各个岗位的人员安排,并将软件架构设计及数据结构设计讨论形成完整的方案,形成了前期需求文档。依照该方案约定,设计了系统框架,再次跟客户讨论,对不合理之处进行了调整。接下来进行功能需求调研,调研之后发现该公司存在如下问题。
1)由于该公司业务特性,大部分员工长期在项目服务机构工作,甚至有部分海外项目,短期内无法回本部,当遇到政策或技术等问题时无法获取本行业相关实时资料,从而造成了项目潜在风险。
2)由上级公司以及国家相关部门发布的体系文件、规范标准、法律法规等文件公司必须及时获取并提供给公司全员以作为引导,但线下资料共享困难,以至于对国家及总公司的政策响应缓慢。
3)由于驻外项目组成员工作随意性较大,公司管理人员对驻外人员管理效率低下,驻外人员是否在岗,工作进展等实时情况反馈不及时。
4)企业管理人员、项目经理、项目成员、各部门工作人员之间沟通、协作困难。
5)项目员工之间缺乏经验交流。
2.2系统技术架构
通过本文依托的系统需求,结合系统目标进行分析,提出以Microsoft.NET平台为系统架构基础。.NETFramework是一种新的计算平台,它简化了高度分布式Internet环境中的应用程序开发。.NETFramework具有两个主要组件[4]:公共语言运行库和.NETFramework类库。公共语言运行库是.NETFramework的基础。可以将运行库看作执行是管理代码的代理,它提供核心服务,而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性[5]。.NETFramework的另一个主要组件是类库,是一个综合性的面向对象的可重用类型集合。建立在.NETFramework之上的ASP.NET提供了一个Web应用程序模型,并且包含使生成ASPWeb应用程序变得简单的控件集和结构。ASP.NET包含封装公共HTML用户界面元素的控件集,这些控件在Web服务器上运行,并以HTML的形式将数据推送至用户界面上。在服务器上,这些控件公开一个面向对象的编程模式,为Web开发人员提供了面向对象的编程的丰富性。该系统引入DeveloperExpress控件集合替代ASP.NET控件集,并结合JavaScript脚本语言为用户提供了更好的使用体验以及更为强大的数据提取和处理功能。为遵循敏捷开发原则,系统使用VisualStudio2012内集成的TeamFoundationServer服务平台,使系统开发人员进行源代码共享、代码审阅和数据收集,为更加准确的实现系统功能做好铺垫。文中系统架构主要基于以MicrosoftVisualStu-dio2012.Net集成开发环境为开发工具。采用面向对象语言C#与DeveloperExpress无缝结合,为系统通信和相关服务提供支持,以SQLServer为底层数据支持。为了开发的便利和数据安全的考虑,系统采用多重数据备份和加密工作。搭建系统的操作系统采用了WindowsServer2008R2虚拟机的形式使用Hyper-V虚拟化技术存放在WindowsServer2012服务器系统中。硬件方面采用了双机热备技术,以保障数据安全性。
2.3系统功能模块
该系统开发进程遵循敏捷开发原则,参照针对客户的中期需求调研情况和无纸化办公、解决实际存在的问题为目标,对主要功能采取逐个突破原则。据此,将系统功能模块进行了有效划分,包括门户网站和技术支持平台两个主要板块。技术支持系统以用户管理、项目管理、机构管理、岗位管理、权限管理为核心的系统架构体系,以及技术支持、公司业务、人员动态、交流论坛四个主要功能以及个人信息、通知通告、证书管理、周月报汇总、证书汇总,员工信息汇总等辅助功能。
2.3.1系统架构
系统架构是一步步搭建并走向成熟的,从页面和代码的分离以及数据结构基础设计到三层架构,再到现在的多层,每一步的发展,使得程序逻辑更加清晰,代码可复用性更强,可读性更高,可维护性更好。用户体验方面,初期添加新的以部门为顶层的树状组织机构只能由开发人员更改XML数据文件进行添加,到现在由客户完全自主配置。
2.3.2开发过程
企业信息系统的开发有其自身的特点。一旦系统架构确定下来,剩下的工作就是在这个架构体系下,不断做重复工作实现所有规划的系统功能。第66页图1为一个敏捷开发小组针对一个功能块的完全开发流程,前四个角色共同组成开发团队,最后一个角色是产品所有者。在前期需求调研完成的情况下,项目经理制定一个灵活的开发计划,计划的时间不宜太长,否则因为客户需求的不断变化,执行起来就会非常困难。开发计划交由需求分析员进行详细设计,需求分析员需要画出具体图形或者制作静态网页将具体功能设计出初始形状,在提交由项目经理进行评审。如评审通过,则向开发组分配任务,开发组开始功能。当开发组开发完结后交由测试组进行代码整合并集成测试;如评审未通过,需求分析员需要对详细设计方案进行调整或重新设计。测试组测试无误,则交由客户代表进行业务层面测试;如测试组发现BUG,则开发人员需修改代码,消除BUG。客户代表如测试通过,则此功能开发完成;如果客户有异议则将问题提交至系统测试组,再做重新调整。
2.3.3功能开发实例
该系统开发的第一个主要功能就是技术支持。技术支持是一个信息共享平台,针对该公司上级单位制定的体系文件、国内外法律法规文件、行业内的成功经验以及公司内部开展的培训课件等体量庞大的文件系统,建立在线共享平台。客户代表向项目经理提出要包括9大目录板块(包括体系文件、法律法规、规范标准、培训课件、事故案例、公司业务、办公文件、知识分享及学习园地),每个大目录需要其做到其公司系统管理员可以自行配置,区分上传文件(包括下载和查看)、下载文件(包括查看)、查看文件3种不同权限。项目经理制定了1个月的开发计划,交由需求分析员进行详细设计,由于在架构设计阶段已经将权限分配体系基础搭建完成,需求分析员在2天以内设计出了技术支持的功能界面。得到项目经理认可后交由开发组进行开发,开发组花9天时间将功能原型开发完成。交测试组进行集成测试,测试组在向开发组提交并确认了两次代码BUG后交客户代表测试。当测试组将交由客户代表进行体验层测试时,客户代表确认了展现形式,但向某一目录下上传了50个文件,该目录打开变慢,继续上传了100个文件后,技术支持功能打开变得异常缓慢,并将问题反馈至开发团队测试组。测试组在经过同样测试后得到类似结果并将问题反馈至开发组,开发组在进行单步调试以后提出两个结论:第一个是文件显示控件在提取大量文件时默认读取了文件数据字段导致变慢;第二个是功能加载将对应数据表中所有数据全部提取以致速度变慢。并就此确定了解决方案,更改WEB展示风格,提升了加载速度。在此交由客户代表测试后,客户代表提出,由于公司业务拓展,需要将第六部分公司业务从技术支持提取出来形成独立功能模块,每项业务下包含有历年项目,需将项目按年分类并按从新到旧的顺序排列。针对客户需求,开发组将项目数据与技术支持数据进行了组合查询,并在导航树设立虚拟的年份结点,从而将公司业务功能完成。如此不断迭代循环,经过大概两个月的修改以后最终获得了客户代表的认可,技术支持系统的功能开发就此完成。
2.4系统应用评价
通过该系统的实施不仅解决了企业资源无法实时共享的问题,而且帮助管理者提高了管理、监控和决策水平,缩短了解决问题的时间。同时,由于系统本身的B/S架构特性,使得该公司所有员工随时随地都可感受到系统带来的便利。
3敏捷开发经验总结
3.1快速适应需求的变化
敏捷开发方法能够尽可能容易和有效地适应变化。尽管大多数人都同意反馈很重要,但是他们忽视了一个重要的问题,就是反馈结果往往代表的就是变化。敏捷开发能够驾驭这种变化,因为推动变化比企图阻止变化更加有效。实际工作中,开发团队和客户对于软件开发方面往往站在不同的角度,理解容易产生分歧,只有不断地沟通才能达到预定目标。在该项目中,客户不断向开发团队反馈使用中的种种体验方面的问题,而开发团队则积极响应客户诉求,同客户一起讨论有效的解决方案。
3.2降低软件开发风险
来自需求的风险是软件开发项目必须直面的问题。敏捷开发方法同时也要求至少有一位系统实际用户实时与开发团队讨论需求,回答开发团队的问题,对开发完成的功能进行确认。这是解决软件开发中需求不确定的切实有效的办法。假如客户只认为给出开发团队模糊需求就撒手不管,造成的结果极有可能是返工重做或大面积修改,这也就为软件失败埋下伏笔。
3.3形成明确的代码规范
敏捷开发对于编程规范的要求很高,通过制定严格的代码规范来进行团队内部沟通。一个明确的代码规范不仅可以节约时间,而且可以大幅提升代码的复用性,同时还可以提升软件品质。软件开发人员的编程习惯不同,是软件项目失败的重要原因,彼此短时间读不懂对方代码,就无从下手,从而造成大量时间浪费。项目开发团队由项目技术负责人搭建系统架构,指定代码规范,经过短时间磨合,所有成员形成默契,开发效率不断提高。
作者:刘致良 陈于 程铁信 张敬芳 单位:天津工业大学管理学院 太原重型机械集团煤机有限公司 太原科技大学