吴旭光, 牛 云, 吴 祥
一种基于Eclipse的雷载软件重用技术
吴旭光, 牛 云, 吴 祥
(西北工业大学 航海学院, 陕西 西安, 710072)
为提高雷载软件的开发效率和产品质量, 需要将传统的作坊式软件开发模式转变为基于软件重用技术的生产线开发模式。本文首先分析了雷载软件重用的意义, 针对雷载软件的特点, 根据功能将雷载软件进行了可重用任务划分, 在此基础上基于构件的方法研究了可重用雷载软件开发的技术路线, 讨论了雷载构件的接口标准化问题及代码自动生成方法和远程调试方法。最后基于Eclipse平台提出了一种具有软件重用功能的雷载软件生产线集成开发平台框架。该平台作为一种高性能、可扩展的集成开发环境, 可以有效支撑本文提出的可重用雷载软件的开发技术。
鱼雷软件系统; 软件重用; 软件生产线; Eclipse集成开发环境
随着鱼雷战技指标的提高, 雷载软件系统的规模和复杂度也不断加强, 而如何提高雷载软件开发效率和产品质量, 一直是制约鱼雷综合电子信息系统建设和发展的瓶颈之一。
目前, 雷载装备硬件已基本脱离传统手工业的单件生产模式, 转向构筑在标准化零部件基础上的高效率、高质量的新型生产方式, 使得雷载装备硬件的可靠性、可维护性大大提高[1-2]。但雷载软件领域面临的现状是, 一方面大量软件要开发和维护, 另一方面又有大量的重复性工作存在。为了解决这一问题, 提高雷载软件的生产量、可靠性和可维护性, 基于软件生产线的软件重用技术作为一个重要的解决手段应该引起业界人士的广泛关注。
本文研究的雷载软件是指装备中区别于硬件模型的软件程序和其他软件开发文档, 它们是逻辑的、非具体的物理实体。因此, 软件重用的对象不仅涉及源程序代码, 还包括项目计划、成本估计、体系结构、需求模型和规格说明、系统设计、源程序代码、用户文档、技术文档、用户界面、数据结构、测试用例等。
所谓重用是指利用现有的软件及其构件或者它们的抽象层次来构造新的软件系统, 即将原有软件或系统中的代码、数据和方法或者由它们抽象而得的构件作为其中一部分直接引用。
软件重用技术是软件工程中一项重要的技术,采用该技术能为软件开发带来以下好处。
1) 提高软件生产率。软件重用技术是软件开发中利用现有的有用资源, 避免重复劳动, 从而大大提高编码效率及代码利用率的技术。
2) 由于重用的软件都是经过反复测试过的软件, 使重用软件质量和可靠性大幅提高。
3) 避免对大量冗余编码的投入, 减少开发时间和费用, 降低开发风险。
4) 开发的软件系统可维修性好, 可降低维护成本。
5) 利用可重用的软件测试手段, 可提高系统的可测试性和软件生产的安全性。
软件重用技术的优势在实际装备软件开发中已经逐渐显露出来, 尤其是航天软件和航空软件系统[3-4]。但是由于种种原因, 目前鱼雷行业还未开展软件重用技术的研究。
为了达到软件重用的目的, 其软件研制工作过程和要求应完全按软件工程化的过程要求实施, 不能降低要求, 特别是不能降低对文档和测试的要求。这样随着产品的研制和任务复杂性的提高, 重用模块库才能不断扩充, 也才能提高和加快新产品的研制速度和降低研制费用。
软件重用技术包括3个基本问题: 重用对象、重用范围及重用方式。
软件重用的关键在于领域分析, 根据应用领域的特征和相似性预测软件构件的可重用性。
软件重用包括2个相关的过程: 可重用软件(构件)的开发和基于可重用软件(构件)的应用系统构造(集成和组装)。解决好这2个方面的问题才能实现真正成功的软件重用。
要解决目前雷载软件研制过程中的各类问题, 达到节约资源、缩短软件开发周期、提高软件开发质量的目的, 就需要进行雷载航行软件的通用化研究。由于雷载软件系统的复杂性, 对雷载软件的任务进行抽象和划分来确定软件的模块是软件重用的关键因素。抽象的层次不同, 软件重用的粒度就不同。软件重用按粒度可分为函数库和类库重用、构件级重用和框架级重用, 如图1所示。框架是一个可重用的设计, 它规定了应用的体系结构, 阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程, 它强调的是软件的设计重用性和系统的可扩充性。构件重用是抽象层次高、重用粒度大的重用形式, 是软件工程技术中的热点研究课题, 由于它能够带来更高的生产率和开发质量, 在业界使用也相当广泛。
图1 按软件构件粒度划分的重用层次
Fig. 1 Levels of reuse dividing by granularity of software component
首先对鱼雷制导系统按各任务进行如图2所示的功能分解, 将其分解为若干独立的子功能模块(如制导系统的导航计算、导引计算和控制律计算等), 使子功能模块集覆盖目前所有任务。
图2 任务的功能分解图
然后根据系统模型对各个功能建立相应的数学模型, 并按照统一规范编写可重用的软件构件。其中对已建立数学模型的功能, 搜集其在以往各个任务内的实现代码, 进行比较筛选及优化处理, 形成认为具有通用价值的模块。
最后在对所有生成的构件进行测试后, 连同其相应的设计说明及测试等相关文档一并入库管理, 形成一个可重用的构件库。通过调用该库中的不同模块, 便可生成实现不同任务的软件。
Eclipse就是一个可重用框架[5], 它通过使用插件机制, 可以动态地增加系统功能而无需修改系统代码, 还能重用Eclilpse平台提供的众多扩展点[6]。
为了加快软件开发进度, 提高软件质量和生产率, 在软件开发过程中, 应尽可能重复使用已有的软件元素, 这种可重用的元素称作软件构件。在开发可重用构件时, 必须要按规定的构件规范来开发新的构件。
构件隐藏了具体的实现, 只用接口对外提供服务。构件之间是相对独立的, 其开发与使用也是相对独立的。因此, 构件可以作为独立单元被用于不同的体系结构和软件系统中, 实现构件的重用。在不同层次上, 构件均可以将底层或高层上粒度更大的新构件, 甚至直接封装到一个系统中, 使模块的重用从代码级、对象级、构架级到系统都可以实现, 从而使软件像硬件一样能够任意装配定制。
构件的描述方法是指对构件的功能与接口进行说明, 为构件的组装提供必要的信息。描述构件的方法有多种, 可以采用形式化的规格描述方法, 也可以用其他非形式化的描述方法。
构件可以用一个四元组来表示: 构件∷=(构件标识符, 构件说明, 构件体, 接口)。
目前, 由于可扩展标记语言(extensible markup lanuage, XML)的广泛使用, 出现了利用XML来描述构件的研究, 利用XML技术可以大大提高构件描述语言的开放性和扩展性。
图3表示了基于构件的雷载软件开发技术路线, 其中构件库是基于构件的软件系统的一个重要部分, 它对构件的提取、分类、存储、检索及组装等过程进行有效的管理。构件库是按照一定语义和组织结构的可重用构件的集合, 包括向用户提供构件所需的过程和函数, 用来存放构件。由于各个组织的规模、目标领域、组织模式和重用成熟度不同, 导致构件库在组织中的角色和作用也不相同, 可以归纳出以下4种典型的构件库: 1) 面向项目的构件库; 2) 面向领域的构件库; 3) 面向构件共享的构件库; 4) 面向构件市场的构件库。从1)到4)标志着构件库规模越来越大, 目标领域越来越清晰和广泛, 重用成熟度也越来越高。一般而言, 构件库主要分为2大部分: 构件库管理系统和构件库, 它们通过研究单位内部的局域网络进行通信。
图3 基于构件软件开发基本思路
软件重用技术的基本原则是在开放式系统中构件使用接口标准, 对于稳定接口标准的依赖, 使得开发系统更容易适应技术的进步。同时使用符合接口标准的实现。这些是软件重用开发中的设计决策, 同时也为系统间的互操作提供了保证。
软件构件是具有特殊功能的软件模块, 这种软件模块遵守一定的接口规范, 提供实现互操作的机制, 符合接口标准的构件可以方便地以“即插即用”的方式组装到系统中, 实现软件重用。这样, 在符合接口标准的前提下, 雷载软件的标准构件就可以独立地进行开发, 从而形成独立的构件供大多数型号装备的系统使用。
构件模型的接口规范是十分重要的, 构件接口规范是解决构件之间的接口, 实现重用的基础。经过多年的发展, 构件的模型及其规范已经提出, 较有影响的三大流派有组件对象模型(component object model, COM)、通用对象请求代理体系结构(the common object request broker architecture, CORBA)和分布式企业服务(enter- prise java beans, EJB)。CORBA技术是最早出现的, 利用CORBA技术可以代理不同操作系统的系统调用, 从而实现不同操作系统对用户的透明。1991年, 对象管理组织(object management group, OMG)颁布了CORBA1.0标准; 微软的COM系列从最初的COM发展成现在的COM10; 而基于Java平台的EJB, 除了语言外还有构件的标准以及构件之间协同工作通信的框架。
具体如何选用这3种分布式对象技术, 可从集成性、可用性、可扩展性3个方面来考虑。
1) 集成性。主要反映在基础平台对应用程序互操作能力的支持上。它要求分布在不同机器平台和操作系统上、采用不同的语言或者开发工具生成的各类商业应用必须能集成在一起, 构成一个统一的企业计算框架, 这一集成框架必须建立在网络的基础之上, 并且具备对于遗留应用的集成能力。
2) 可用性。要求所采用的软件构件技术必须是成熟的技术, 相应的产品也必须是成熟的产品, 在企业应用中能够稳定、安全、可靠地运行。另外, 由于数据库在企业计算中扮演着重要角色, 构件技术应能与数据库技术紧密集成。
3) 可扩展性。集成框架必须是可扩展的, 能够协调不同的设计模式和实现策略, 可以根据企业计算的需求进行裁剪, 并能迅速反应市场的变化和技术的发展趋势。通过保证当前应用的可重用性, 最大程度地保护企业的投资。
由于目前雷载软件大多使用嵌入式软件, 其主要工作还是由软件设计人员手工设计及经验集成, 为进一步提高工作效率, 有必要采用代码自动生成和远程调试技术, 即开发雷载软件集成开发环境来提高雷载软件的开发效率和质量。文献[3]提出的鱼雷自导系统集成开发环境, 其代码自动生成和远程调试就可以利用Eclipse平台的插件技术实现此功能。
如图4所示, 开发人员将通用模块数据库中的通用模块写成独立的库文件(或包含文件), 供底层调用连接使用, 用可视化语言实现用户界面, 将该界面作为外壳软件, 设计人员可以使用该软件进行系统需求输入。由系统设计人员和软件设计人员共同使用该用户软件完成任务的时间-事件表, 将任务中涉及到的所有事件写入表中, 并将任务使用的各种弹道数据、导航参数和控制律等填写在该用户界面上, 将所有的任务信息输入完成后, 就可以自动生成雷载软件的源程序, 甚至自动生成可供下载的目标代码。
图4 基于GCC的编译过程和代码生成
交叉编译是指程序在一台计算机上编译, 然后把编译好的可执行代码放到另一台计算机上运行。采用交叉编译是因为, 主机系统一般比目标系统要快得多, 而且具有更多的可用资源, 这样在编译过程中可以获得更快的速度和更多的系统支持。基于同样的道理, 嵌入式系统的调试器运行在主机系统上, 而被调试的程序则运行在目标系统上。在本课题研究的调试过程中, 宿主机端GNU工程调节器(GNU Project Debugger, GDB)与目标端的调试桩通过物理通讯介质进行信息交互, 如图5所示。
图5 GDB远程调试模型
根据对雷载嵌入式软件开发的调试工具和GDB图形前端的分析, 最终确定了交叉调试器的功能需求, 包括建立交叉调试环境、源代码显示、程序调试、程序运行、单步跟踪、单步步进调试、跳出当前函数调试、继续执行程序, 以及断点功能, 包括添加、删除、显示、更新断点的功能。
程序控制需要实现基本的调试指令, 配合断点功能就可以满足用户一般的程序调试功能。交叉调试器的图形界面应该在源代码显示窗口中表明断点, 并且应该有一个断点窗口显示所有断点及其状态。
程序上下文查看包括变量查看、寄存器查看、内存查看、堆栈查看和表达式查看等。
软件生产线(software produet line, SPL)是指一组具有下列特征的软件密集型系统[5]。
1) 它们共享一组满足特定任务或特定市场需求的公共可管理的特征;
2) 它以某种预先指定的方式从一组公共核心资产中被开发出来。
软件生产线的定义与传统工业的生产线定义是一致的, 但又增加了一些新的东西, 表现在它对软件生产线中开发软件的方式进行了限制。
鱼雷制导系统的核心软件开发应该是基于开放式平台和构件重用技术的软件生产线, 该生产线的主要功能包括快速装配、动态发现和集成、代码自动生成、文档自动生成和测试用例生成等, 具体如下。
1) 支持从构件库中选择构件并快速集成, 支持生成目标机代码、文档和测试用例;
2) 支持生成基于运行平台的快速原型, 包括开发符合鱼雷制导系统应用程序接口的构件、构件的修改和测试, 以及在系统运行中的再装载;
3) 生产线支持多操作系统, 并且可以扩充, 包括VxWorks, Linux,mc/os-II等。
软件生产线除了图3所示的构件库和构件管理系统外, 还包括一个鱼雷制导系统(torpedo guidance systems, TGS)的集成开发环境(integ- rated development environment, IDE)[3]。TGS IDE提供的功能包括以下几个方面。
1) 软件和文档的配置管理、需求跟踪、开发与生成等工具;
2) 软件的编辑、链编、链接和远程调试;
3) 友好的用户界面, 支持图形化的环境配置;
4) 通过Eclipse平台集成, 具有开放式, 支持软件工具厂商。
组件库的完善是一个积累的过程, 只能先将重用度最大的部分添加到组件库中, 在采用Web可视化组件管理平台对Web应用进行设计开发时, 组件库也就得以日益充实和完善。
Eclipse作为著名的跨平台自由IDE, 最初主要用来Java语言开发, 但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台, 但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性, 许多软件开发商以Eclipse为框架开发自己的IDE。基于Eclipse本身的跨平台、插件丰富、开发方便的特点, 在Eclipse上集成可视化组件管理平台, 将具备良好的可扩展性和移植性。
本文所实现的可视化组件管理平台将基于Eclipse的架构, 采用可视化开发环境, 构建不同功能的组件, 并对组件进行分类管理。考虑到现有的集成于Eclipse的可视化插件中内置的组件管理功能的缺陷及功能单一薄弱, 课题将重新设计一个独立于该可视化环境外的组件库, 与该可视化编程环境进行交互, 以实现对其组件管理功能的完善。
本文所设计的雷载软件生产线集成框架平台采用典型的层级结构, 共有4层组成, 体系结构如图6所示。目前已经完成Eclipse支撑平台的开发、编辑和编译窗口的实现、远程GDB调试, 还基本完成实时多任务嵌入式系统mc/os的输入/输出驱动的扩展等项目。
软件重用技术的实质在于它能显著提高软件的生产效率, 增强软件可维护性和鲁棒性, 从而达到延长软件的生命周期, 降低开发成本和缩短开发周期的效果, 因此, 对软件重用方法的研究一直是软件工程中的重点和热点。传统上的软件重用一般是指程序源代码的重用, 但这并不能给软件开发效率带来数量级上的提高。事实上,重用还包括软件的分析、设计、实现、维护阶段以及相应的文档、知识等一切与软件开发过程有关的内容。为更好地利用前期的开发成果, 在最初的分析、设计过程中就应该以一种重用的思想来指导整个建设过程。
图6 雷载软件生产线集成框架平台
要达到真正意义上的软件重用, 必须有一个良好的软件开发平台。本文详细研究了当前软件开发技术中的软件重用, 提出基于Eclipse的开源式平台和软件生产线技术的雷载软件开发环境。雷载软件开发不是一个孤立的技术, 它涉及包括嵌入式系统、实时现场总线、快速控制原型、硬件在回路仿真和网络控制系统等, 而这些都是目前计算机和控制中的最新技术和理论。通过建立雷载软件生产线和研究雷载软件的重用技术, 可使鱼雷制导系统中软硬件开发遇到的许多现在无法解决的问题, 或者不易解决的问题, 有可能获得解决。
针对如何处理鱼雷中包括DSP, MCU, 单片机等多种处理器共存时, 通过为Eclipse集成开发环境配置相应的工具链, 即可实现与硬件无关的代码的复用, 而硬件相关的底层驱动程序, 由于硬件的不同是无法复用的, 这属于软件移植的范畴, 非本文讨论范围。
[1] 徐德民, 吴旭光, 任章, 等. 鱼雷自动控制系统[M]. 西安:西北工业大学出版社, 2001.
[2] 吴旭光, 赵勋峰, 王艳. 基于开放式控制平台的鱼雷制导系统结构[J]. 鱼雷技术, 2006, 14(4): 23-27. Wu Xu-guang, Zhao Xun-feng, Wang Yan. Framework of Torpedo Guidance System Based on Open Control Platform [J], Torpedo Technology, 2006, 14(4): 23-27.
[3] 姜兆义. 星载嵌入式软件集成开发环境设计与关键技术研究[D]. 长沙: 国防科学技术大学, 2004. Jiang Zhao-yi. Design of Integrated Development Environ- ment for On-board Embedded Software and Research on the Key Techniques [D]. Changsha: National University of De- fense Technology, 2004.
[4] 刘杰. 软件重用技术及在航天飞行软件中的应用[J]. 载人航天, 2008(3): 60-64.Liu Jie. Software Reuse Techniques and Its Application on Soft- ware Used for Spacecraft[J]. Manned Spacecraft, 2008(3): 60-64.
[5] 甘树满, 王秀明. Eclipse插件开发方法与实践[M]. 北京: 电子工业出版社, 2006.
[6] 吴旭光, 牛云, 王昊, 等. 鱼雷制导系统集成开发环境的结构研究[J]. 鱼雷技术. 2010, 18(5): 371-375. Wu Xu-guang, Niu Yun, Wang Hao, et al. Framework of Inte- grated Development Environment for Torpedo Guidance Sys- tem[J]. Torpedo Technology, 2010, 18(5): 371-375.
A Torpedo Software Reuse Technology Based on Eclipse
WU Xu-guang, NIU Yun, WU Xiang
(College of Marine Engineering, Northwestern Polytechnical University, Xi′an 710072, China)
To improve the development efficiency of software used in torpedo system, it is necessary to transform a traditional individual mode of software development into a product line mode based on software reuse technology. In this paper, the necessity of the software reuse technology is discussed, and torpedo software is divided into reusable tasks according to the functions and the characteristics of torpedo software. Then, the key technologies in developing reusable torpedo software about software component, code generator, remote debugger, etc. are discussed. Moreover, a scheme of integrated development environment for torpedo software product line is proposed based on Eclipse platform. This scheme can provide a high performance and extendible integrated development environment to support the reusable torpedo software development.
torpedo software system; software reuse; software product line; Eclipse integrated development environment
TJ630; TP311
A
1673-1948(2011)02-0091-06
2010-05-04;
2010-06-28.
吴旭光(1954-), 男, 教授, 主要从事鱼雷控制、系统建模和仿真、鲁棒控制理论、嵌入式系统及现场总线技术领域的研究和教学.
(责任编辑: 陈 曦)