范晓峰,李 明,徐煜明,宋 钰
(中国铁路南宁局集团有限公司 信息技术所,1.高级工程师,2.工程师,广西 南宁 530029)
软件研制过程包括需求调研、概要设计、详细设计、编码、测试、投产等生命周期。一个软件研发团队在没有积累的情况下完成这些工作,会耗费较大的人力和时间成本,即使在团队本身有大量代码积累时去实施研发,也会由于对积累代码缺乏管理和控制导致开发风险急剧上升。当团队中的骨干开发人员发生岗位变更时,这种风险又将被放大,严重制约着项目的健康发展。
传统的软件开发模式,从了解需求开始,搭建系统框架,编写系统代码,开发效率低。即使开发是从原有积累代码开始,也会因为对原始代码缺乏管理、缺乏重构,导致不可预知的开发风险。因此,研究构建基于软件模板的快速开发体系,结合长期积累的开发经验,重视软件模板整体性、高复用性、高可用性和高效率性设计,总结并形成具有普遍代表意义的公共基础模块,提高模块间的复用性,优化管理软件模板,降低模板之间耦合度,使模板更具灵活性、扩充性和移植性,适应更多软件项目设计要求。
为了有效地提高软件研制效率和控制风险,建立一套软件项目快速开发管理体系势在必行,该体系应包括一个用于积累团队技术资源、研发模板的平台和团队合作衔接的技术规范;将一些已经在各项目中应用成熟的低风险的软件模板集成至其中,这些模板是从各个项目中提炼出来的共用部分,并通过良好的架构设计和项目本身脱离了耦合关系,可以服务于绝大多数其他项目的研制工作。
构建软件项目快速开发管理体系能简化软件研制过程,利于团队开发,控制项目风险,节省项目开发时耗费的人力和时间成本,节省项目维护升级时耗费的人力和时间成本,使开发人员把更多时间投入到对铁路运输业务的梳理、研究中去,开发出更能贴合铁路运输实际,超越铁路运输要求,为铁路运输安全、效率、效益提供可靠支持的信息系统。
为了应对大量具有一般普遍性需求的传统应用系统,将快速开发模式尽可能的覆盖大多数应用开发,首先要理清应用系统的一般开发方式,通常可以通过归纳需求而将系统分成三个层次:即用户界面层、应用服务层和数据持久层。三个层次具有普遍意义的代表性,用户界面层通常作为人机交互的接口而存在,即基于B/S模式的Web浏览器和基于C/S模式的应用客户端;应用服务层接收业务请求,进行业务处理,其中包含了与数据库层的交互和业务的逻辑封装,因业务需求通常是复杂而特殊,所以该层是三层中最具特殊性和灵活性的一层,同时也是三层应用的核心;数据库层完成了对象的持久化存储,各数据库厂商已为不同的开发语言适配了相应的数据存储接口,通用性和可靠性已今非昔比,目前数据库层的重点已转移到对数据安全的保障。
构建面向传统三层应用系统的管理体系,可以采用由上到下或是由整体到局部的设计思路,规划每个层次的主要方面。体系结构如图1所示。
图1 体系结构图
2.1.1 数据实体类的描述方式 数据库表是对实体类的抽象表示,实体类是数据库表的形象表示又可以抽象为业务逻辑的最小组成单元,将实体类映射为数据库表的一个个持久化类,该类由一条或多条记录组成,表述业务对象并实现持久化存储。
2.1.2 数据的存取方式 采用数据库永久存储数据实体,涉及如何映射表与实体对象的关系,以何种格式作为约定来达到便捷交互、快速存取的目的。
2.1.3 业务逻辑的组织方式 传统的应用系统是基于面向对象设计与开发,业务逻辑通常构建在实体对象上,通常实体对象中承载了用来标记业务状态和传递消息的逻辑字段,在进行应用服务层的设计时需要花费大量精力来处理业务逻辑的组织方式,力求做到保证逻辑处理的正确性和可靠性,字段的表述清晰明了,选取的标志具有规范性和限制性。
2.1.4 业务服务的提供方式 传统应用努力将复杂的业务逻辑以模块化的方式划分并以接口的方式对外提供相应的服务,通过应用服务层将复杂的业务逻辑封装,尽可能地划分业务逻辑边界,为更方便更清晰的组织业务逻辑服务,与表示层进行交互;另一方面,模块间的功能调用也可以作为服务提供方式,保证系统的高内聚低耦合,提高系统的容错性,降低开发风险。
结合实际应用,对用户界面层、应用服务层和数据库层的三层结构进行了进一步的扩展。将应用服务层分为四个子层,即实体定义层、数据访问层、业务逻辑层和业务外观层。
2.2.1 实体定义层 以XML或其他格式描述数据实体结构,不仅需要清晰映射数据实体与数据表的字段信息,还要清晰描述各数据表间的关联信息、各表的关键字段。同时,实体定义层的数据描述需要符合相应的对象实体描述语言规范,数据访问层需要借助实体描述实现关系映射与数据存取。
2.2.2 数据访问层 数据访问层定义了一系列抽象的数据库对象(表、视图和存储过程等)的操作方法,并将这些方法置于接口内,作为外界访问的唯一标准。数据访问层根据不同的数据库(如:SQLServer、Oracle、MySQL、SQLite等)分 别 提 供 适 配 器(Adapter)实现上述接口。这样的设计彻底解除了业务逻辑层对不同数据库访问语法的耦合关系。使得业务逻辑层可以用同样方式访问不同的数据库,消除了业务逻辑层对某种具体数据库的直接依赖,最终使得项目能适应更广泛的数据环境。
2.2.3 业务逻辑层 出于快速构建的目标,针对常用的业务规则(如某业务对象的CRUD方法、批量生成和删除方法、权限控制、合法性判断等)提供参数化定义,并以XML方式进行描述,然后根据规则,使用可复用的通用程序库(非代码生成)实现常用业务的零代码构建。另外,如果某些实际业务和通用业务存在略微差异,再根据实际需求对复用的程序进行扩展、重写或弃用。基于配置的快速构建加自由扩展的业务逻辑层构建方式可以极大地提高软件项目的开发效率。
2.2.4 界面层 界面层负责通过友好可视的人机交互界面接收用户的各类指令,完成与用户的交互过程。出于快速构建的目标,针对常用的界面模块风格,使用可复用的脚本库实现常用界面风格的零代码构建,扩展部分通过脚本的“注入”和“事件响应”等方式实现交互界面重新布局,风格变化、自定义用户控件等。基于脚本复用的快速构建模式可以使软件开发工作从一个很高的起点开始。
为了使应用程序的结构和编码风格标准化,便于开发人员的后期维护,提高开发维护效率,制定一套开发规范和标准势在必行。为此,确定了命名规范、代码书写规范、类成员使用规范和数据库设计开发规范,用于快速构建可复用的代码库、脚本库、资源及文档首先使用该开发规范进行开发实现。
统一认证模块具备统一授权和身份认证两个基本功能,可以为不同的业务系统提供一套标准、安全、可靠的授权方式,减少重复编码工作,也可有效整合团队使用技术架构不统一造成后期整合困难的问题。用户通过统一认证模块访问各业务系统时,模块提供用户访问的身份认证工作,校验身份的合法性,实现用户在不同业务系统之间的一站用户登录。管理员可以通过统一认证模块,对用户进行不同系统使用、操作权限的设置。
2.4.1 扩展性 系统设计时需要考虑到系统的可扩展性,随着接入应用的增多,系统也要支持横向扩展来满足高并发的需求。
2.4.2 安全性 设计时需要考虑系统应用的安全性,从数据安全到传输安全,保证认证平台安全稳定运行。
2.4.3 跨平台 用不同技术开发的系统,可以按统一认证接口进行认证。例如,用NET开发平台或Java技术开发的系统都可以通过统一认证模块实现统一认证,进而实现跨平台的一站式用户登录。
货运基础管理平台就是该模块的一个应用实例,通过该平台可以为平台内不同应用系统进行统一用户权限分配,提供统一用户认证,实现用户在这些系统内的用户一站式登录。
使用软件项目快速开发体系进行信息应用系统开发,开发前期的需求调查、需求分析、功能设计、数据表设计,这些步骤与传统模式相同。而在系统的详细设计上则有很大区别,开发者不再是通过写代码方式实现系统,而很大程度上是通过对应系统进行配置来实现系统的各项功能。
具体搭建一个新应用系统,需要进行的配置有:菜单配置、数据表配置、插件配置、系统后台配置等。
自软件项目快速开发管理体系研究构建后,中国铁路南宁局集团有限公司信息技术所已经利用该体系开发了多个信息系统,取得良好效果。《铁路局货运营销决策支持系统》是应用该体系进行研发的典型。在收到研发任务后,研发人员紧扣业务需求,应用该体系在1个月内迅速构建出系统原型,然后每半个月按业务部门需求对原型进行一次完善,3个月内实现了系统在全局的试用。如果采用常规的开发模式,从了解需求,再从头搭建系统框架,编写系统代码,至少需要一年的开发周期。而通过使用软件项目快速开发管理体系,使研发人员更专注到业务需求的了解、概括、抽象,并快速实现,同时体系更适合团队开发的特点也得到突出体现。系统的快速、高质量的研发和应用,使货运营销体系改革能够迅速铺开,货运管理人员、营销人员通过该系统可以掌握全局货运情况包括货运生产信息、货场设施、营销方向,掌握集团公司54家大客户在内的厂矿企业的原料、产品运量、去向、价格,以及这些企业通过公路、水路、铁路等运输方式的发运情况等,为最终实现全局货运精准营销,全局货运运量的突破提供了有力支持。
在中国国家铁路集团有限公司不断深化强基达标、提质增效工作中,信息技术不断创新是一个重要支撑。而软件项目快速开发管理体系的研究和应用,节省了项目开发人力和时间,提高了信息系统的研发效率,缩短了信息系统的研发周期,更好地满足了铁路安全、生产、经营对信息系统研发的需求,为交通强国、铁路先行提供了有力的信息技术支持。