军用软件组件化设计方法研究
2019-09-11邵刚
邵 刚
(南京模拟技术研究所,南京210016)
1 引 言
随着我军信息化水平的不断提高,军用软件的种类、规模和数量空前增长,软件作为信息化建设的核心,在武器装备、组织训练中发挥的作用日益凸显。运用传统设计方法开发的软件产品扩展性和适应性差[1],无法适应部队军事训练需求的快速变化,继而会因无法跟随最新要求而被快速淘汰。然而新研或升级相关软件产品的工作量巨大,无法兼顾部队实战化的训练需求。近年来实装部队和训练基地使用的军用软件种类繁多,各自独立设计,互无联系,缺乏统一标准,既不利于信息系统的可持续发展,也无法充分发挥其应有的整体综合功能[2]。软件组件化设计方法以软件平台为中心,采用组件开发向导的方式开发功能组件[3],在不改变软件总体架构的基础上,依靠其所提供的标准化服务与接口,通过组件即插即用的方式,实现业务功能[4]。采用本组件开发向导可在系统规划时设计各分系统间的标准接口,减小分系统间的耦合度,从而减少大量的重复开发工作并提升产品的可靠性,极大地提高软件的开发效率和复用能力,进一步减少后期运维工作量,及时有效地适应业务需求的变化[5]。
2 “平台+组件”技术概述
2.1 “平台+组件”基本概念
平台是指软件运行的公共基础平台,由基础框架、扩展框架和应用框架组成[6]。基础框架将软件系统通用性资源和功能需求进行了标准化集成与封装;扩展框架是对软件系统各种功能资源以及计算机操作系统资源的管理与代理;应用框架是对各种具有共性需求的功能资源的综合集成。这三部分共同作用,为各种面向具体应用的训练信息系统的开发与应用,提供了资源、服务、接口及功能的支撑,以满足训练领域内不同应用目的、对象,以及不同应用方式、内容的信息系统建设需求。
组件是指软件业务的功能封装,基于平台才能运行,是软件系统中的功能插件,可根据需要进行定制开发,该组件基于平台提供的组件开发向导创建的工程进行开发,通过向导工程可自动集成公共平台提供的标准服务和接口,在此基础上设计开发组件特定的功能[7]。
2.2 “平台+组件”技术
设计“平台+组件”的软件总体逻辑架构如图1所示。建立适合军事行业需求的领域系统架构、业务模型和组件库,提供组件向导开发模板、软件运行平台和公共服务接口。具体的技术途径是通过组件开发向导设计组件功能,将设计好的组件文件复制到系统平台指定的文件夹下,当软件运行时会自动识别各个组件,并通过平台提供的组件加载接口将各组件加载到软件系统中,以实现各个组件特定的软件功能,组件具有较强的独立性、功能性、复用性和扩展性,可以方便地实现定制开发和集成其它业务功能。该技术不仅可降低软件开发和维护费用,还能提高开发效率、异构系统的集成能力和标准化程度。
图1 “平台+组件”总体逻辑架构
3 软件组件化设计方法
3.1 设计思路
软件组件化设计思路,主要是通过软件服务模块的重用和各组件的独立并行开发,在组件即插即用和组合式应用的基础上,快速构建出功能定制、性能可靠、运行稳定的软件产品[8]。组件化的软件设计,其基本思想是将软件系统分解成公共服务、运行平台和功能组件进行设计,再通过运行平台的公共服务调用接口、组件加载接口以及数据通信总线实现系统集成。
3.2 设计方法
组件化软件设计与传统方法的不同,突出表现在以下三个方面:以标准化为前提;以服务为基础;以组合式应用为目的。
以标准化为前提,是指在统一公共服务设计标准、功能组件设计标准和运行平台调用标准的前提下,以接口为中心,实现各模块的统一设计、并行开发,在提高软件质量的同时减少系统测试和集成的工作量。
以服务为基础,是从系统中抽象出功能单一、性能稳定的模块封装成公共服务,建公共服务库,以备检索和调用。在此基础上,进行设计与开发时尽量调用公共服务构建各功能组件,实现由高成本低稳定性的功能重复开发,向低成本高稳定性的服务调用转变。
以组合式应用为目的,是以组件组合应用作为构建软件系统的核心,将所需的公共服务和功能组件通过运行平台进行调用整合,满足用户特定需求和系统的规模定制。
3.3 生命周期
基于组件化设计过程是选择公共服务、组件设计开发、组件集成的过程,与传统软件设计过程相比,具有更强的科学性和灵活性。其生命周期通常包括:需求分析,运行平台设计与开发,公共服务的设计开发,构件的开发、选择和组装,系统集成,系统测试,软件维护等。
4 工程技术实现
在此,以某系统(略称为“系统A”)为例进行组件化软件设计方法的说明。系统A 体系架构如图2所示。系统主要提供通信和地图导航,其总体设计采用三层结构体系:第一层为公共服务层,主要负责提供基础服务、数据库服务、通信服务、地图服务;第二层为运行平台层,实现功能组件的加载,同时为功能组件层提供服务接口;第三层为功能组件层,即应用层,直接为客户提供所需功能应用。
图2 “系统A”体系架构
4.1 公共服务
基于“平台+组件”的开发,就是按照平台提供的统一技术体制和方式,开发用户按需定制的功能,并按要求调用上述各类基础服务,开发出属于用户领域应用功能构件,然后再通过平台提供的重构与定制功能构建用户领域的应用系统。系统的UML 图如图3 所示。
图3 系统UML 图
为了功能组件能够共享和调用公共服务,系统A 按照统一的模式设计了各类基础功能和系统管理服务接口,共六大类,分别是:基础服务、数据库服务、通信服务、地图服务、导航服务和资源与消息服务,与之相对应的是六个接口类:CServer_Basic、CServer_Communicate、CServer_DataBase、Cserver_Map、Server_Message 和CServer_Navi,并由框架接口IMDIFrame 包含并提供调用接口。
4.2 功能组件
即时通信组件(CPlugLoad_IM)和地图导航组件(CPlugLoad_MapNavi) 同为继承自统一调用接口(CPlugLoad_Base)的动态库;AddTemplate 作为主要接口函数,负责向运行平台提供添加文档模板功能(CMultiDocTemplate),其中所指的模板包含三个基类(CMDIChildWnd、CDocument、CView)的派生类,用于实现即时通信(CPlugMDIChildWnd_IM、CPlug View_IM、CPlugDocument_IM)和地图导航(CPlugMDI ChildWnd_MapNavi、CPlugDocument_MapNavi、CPlug View_MapNavi)的相关功能。
系统A 提供“功能组件开发向导”的实际工作界面如图4 所示,其实现了类组件项目、资源、类以及组件界面风格的自定义创建,从而简化开发步骤,提高开发效率。
图4 功能组件开发向导
4.3 运行平台
运行平台为多文档MFC 应用程序,提供统一的集成框架和系统管理,平台初始化时通过调用功能组件文档模板添加接口,实现文档模板(CMultiDoc Template)的添加。
组件加载:通过MFC 应用程序的多文档加载机制,调用CMultiDocTemplate 类的OpenDocumentFile(NULL)函数实现组件加载显示。
服务调用:运行平台的CMainFrame 派生于虚接口基类IMDIFrameEx,实现基础服务、数据库服务、通信服务、地图服务、导航服务动态库的加载与初始化,各功能组件通过类IMDIFrameEx 指针进行服务模块的创建、调用和析构工作。
5 结束语
提出的软件组件化设计方法能够很好适应军事需求的快速变化,最低限度地减少软件定制开发的工作量。以平台为基础,通过组件开发快速构建软件产品的方法具备一定的先进性,可以提高软件的开发效率、复用水平以及产品可靠性,对新形势下的军用软件开发具有一定的参考价值。