APP下载

星载软件重用技术研究

2011-09-18李梦宇

上海航天 2011年5期
关键词:子程序面向对象总线

李梦宇,彭 攀

(1.同济大学 软件学院,上海 200092;2.上海卫星工程研究所,上海 200240)

0 引言

目前,一方面有大量的软件等待开发、维护,另一方面又存在大量的重复工作。如据美国加州的一项调查结果显示,在商业银行和保险业务应用系统中,75%的功能是重复的且在多个系统中出现。1968年,北约(NATO)软件工程会议上就已提出可复用库的软件重用概念[1]。经过近40年的发展,软件可重用已成为软件工程的重要技术之一。随着软件开发技术的发展,软件重用的形式和种类也不断变化。目前,国内由于开发和应用环境等因素的限制,在星载软件产品的开发过程中软件重用技术未得到广泛应用。其主要原因是星载软件一般都运行在执行特定功能的实时嵌入式系统中,嵌入式系统的软件与硬件结合紧密,软件开发基于特定的硬件完成。不同卫星的卫星平台硬件功能和软件框架各异,很难实现软件开发过程中的软件重用。为此,本文根据标准化硬件设计及其通信协议,结合库函数、面向对象、模板、构件和框架等软件重用技术,对基于层次框架的软件重用方法进行了研究。

1 软件重用技术及其发展趋势

软件重用(称软件复用或软件再用)的定义有多种,其中较权威和通用的是:软件重用是利用事先建立的软品库创建新软件系统的过程,或是在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。为能在软件开发过程中重用现有的软部件,须在此之前不断积累软部件,并组成软部件库。即软件重用不仅应讨论所需软部件的检索以及必要的修剪,而且需解决软部件选取和软部件库组织等。因此,软件重用方法学通常要求软件开发项目既考虑重用软部件的机制,又系统考虑生产可重用软部件的机制。

使用软件重用技术可减少软件开发活动中大量的重复工作,能提高软件生产率、降低开发成本、缩短开发周期。同时,由于软构件多经过严格的质量认证,并在实际运行环境中得到校验,因此重用软构件有助于改善软件质量。此外,大量使用软构件,可提高软件的灵活性和标准化程度。

2 软件重用实现途径

软件的重用技术可分为知识重用、方法与标准重用,以及软件成分重用三种。软件成分的重用又可为代码重用、设计结果重用和分析结果重用。目前,软件重用实现的技术途径有三种:基于软件的自动生成;重用部件的组合;面向对象的软件重用。

a)软件生成

按形式化的软件功能描述和一定的生成机理,由生成器系统主动生成目标程序。方法使用的可重用部件是生成器自身代码模板或隐藏于变换规则集中的模板。该技术抽象级别高,需可重用软件和知识库的支持。

b)软件组合

按一定规则组合可重用软件成分,构成软件系统或新可重用成分。其中,可重用软件成分作为被动的原子模块,在整个组合过程中不变。用底层部件库法和上层组合法可将软构件组成所需的软件。

c)面向对象的软件重用

可通过提高方法的聚合性、减小规模与交互耦合度,以及利用继承机制、委托和封装等提高软件的重用性。该技术可更方便有效地实现软件重用。“类”是较理想的可重用软构件(可称为类构件),其形式有三种。

(a)实例重用 是最基本的重用方式。因为类的封装性,使用者无需了解实现细节阶段即可使用适当的构造函数,按需要创建类的实例,随后向创建的实例发送适当的信息,启动相应的服务,完成需要的工作。此外,还可用数个简单对象作为类成员,创建更复杂的类,但设计难度较高。

(b)继承重用 面向对象方法特有的继承性提供了一种对已有类构件进行裁剪的机制。当已有的类构件不能用实例重用完全满足当前系统的需求时,可提供一种能安全地修改已有类构件以在当前系统中重用的技术。改善继承重用效果的关键是基于每个子类在继承父类属性和服务时,加入少量新属性和新服务。这不仅可降低每个类构件的接口复杂度,表现一个清晰的进化过程,提高每个子类的可理解性,而且为软件开发人员提供了更多可重用的构件。继承重用的关键是设计一合理的、具有一定深度的类构件继承层次结构,必要时应在领域专家帮助下,建立符合领域知识的继承层次。

(c)多态重用 利用类的多态性不但可降低消息连接的复杂度,使对象的对外接口更一般化,而且表示与方法相关的操作、与数据结构相关的组机制。系统运行时,根据接收消息的对象类型,用多态机制启动正确方法响应一个一般化消息,从而简化了消息界面与软构件连接过程。为充分实现多态重用,设计类构件时应注重可能影响重用特性的操作,如与表示方法、数据结构和外部设备等相关的操作,避免其妨碍类构件的重用,因此须将其与类操作分离,作为适配接口,也可将适配接口进一步细分山地转换与扩充接口。

3 影响星载软件重用的主要因素

卫星研制过程是一个系统工程,一般有具体的工作目标和执行的特定功能。在以往的卫星系统方案的设计中,不同卫星的平台设计方案差异很大。虽然受卫星在轨的空间环境或工作任务的限制,但多半是因为系统方案设计的非标准化。这同时也限制了产品的工业化生产。

卫星平台设计的差异增加了星载软件重用难度。增强星载软件可重用性的方法是卫星平台硬件设计的标准化和模块化。如目前不同卫星的星载计算机设计中,时钟管理模块各异,有的采用中断方式计时,有的采用48位计数器,这就从根本上导致了软件的设计不同,显著降低了软件可重用性。若采用相同的设计方案,则时钟管理模块可实现代码、设计文档和测试用例等的重用。

卫星平台内部以及与有效载荷间的接口与通信协议,当平台内部单机和有效载荷设计变化时,其软件设计一般也要作相应更改。采用数据通信终端的设计方案(如图1所示),平台内部以及与载荷间的所有通信均通过数据通信终端完成,单机间以及与有效载荷的接口和通信协议变化时,只需更改数据通信终端与更改方间的通信方式,这样可显著提高卫星平台的通用性和软件的可重用性。

图1 采用数据终端方案的卫星平台Fig.1 Satellite platform using data terminal scheme

星载软件设计中,不重视建立开发可重用软件,程序模块化程度低、逻辑功能不独立和可读性差等均会对软件的可重用性产生不利影响。在星载软件开发过程中,存在多个公共的逻辑和功能,但未将这些逻辑或模块从特定逻辑中的抽象出来,如与某接口通信功能在系统中多次被应用,但未将相应的逻辑功能抽象出来,而是在每次通信时都将相同的代码冗述一遍,模块间出现内容耦合,这会影响程序的可靠性、可维护性和可重用性。建立开发可重用软件意识,提高模块化程度,降低耦合度,提高内聚,使模块间不相互依赖,将明显改善软件的可重用性。

4 星载软件重用形式

软件重用的形式随编程技术的发展而不断变化。目前,在软件系统的架构过程中,常用的重用方法根据不同语言的特点有库函数、面向对象、模板、构件、框架等。库函数复用主要是应用高级语言拥有丰富的函数库的特点,在程序编程维过程中直接调用成熟的函数库。

面向对象技术提供了一种新的认知和表示世界的思维与方法。面向对象方法将对象作为描写客观信息的基木单元,它包括封装在一起的对象的标识、属性和操作。面向对象技术以对象为基础构件系统,通过一个指向对象的指针或对它的引用就可访问该对象的所有数据和方法。用面向对象技术构造的系统不仅易于管理和使用,而且源代码的可读性高。如果没有对象,在程序中须保存大量的变量和多个孤立的函数,然后在这些关连度较小的变量与函数间进行变量传递,这不仅增加了编程的复杂性,而且使程序的可读性极差。将这些存在关连的变量和函数封装在同一对象中,可显著简化编程的复杂度,提高程序可读性,并提供了一种抽象。该抽象是可扩展性的关键。正是因为面向对象技术的特点,封装和继承使其成为软构件技术的基础。

构件技术与面向对象技术紧密相关。构件和对象都是对现实世界的抽象描述,通过接口封装了可复用的代码。不同的是,首先在概念层上对象描述客观世界实体,构件提供客观世界服务;其次在复用策略上对象是通过继承实现复用,而构件是通过合成实现复用;第三在技术方法上构件通过对象技术实现,对象按规定经适当的接口包装之后成为构件,一个构件通常是多个对象的集合体。

框架是指特定领域应用软件的半成品,包括系统结构、开发模式、核心源代码和应用模板等,它是通过综合特定领域应用系统结构及需求的共性而形成的。好的框架可被多个其他应用重用。

框架的最大优点是可重用。框架能重用代码,故从已有构件库中建立应用变得非常容易,因为构件均采用框架统一定义的接口,使构件间的通信变得简单。框架能重用设计,它提供可重用的抽象算法及高层设计,并能将小系统分解成更小的构件,而且可描述构件间的内部接口。这些标准接口使在已有的构件基础上通过组装建立不同系统成为可能。只要符合接口定义,新的构件就能插入框架中,构件设计者就能重用构架的设计。框架还能重用分析,系统参与人员如根据框架分析事务,就能将系统分为若干个同样的构件,并采用相似的解决方法,使采用相同框架的分析人员间能进行有效沟通。

针对星载软件一般是嵌入式软件,开发语言有汇编语言、高级语言。可根据开发语言的特点建立软件重用库,包括程序代码本身和测试用例、设计文档、设计过程、需求分析文档等。

多数汇编语言(包括1750汇编语言)不提供标准三角函数,需软件开发人员自行开发,建立汇编语言的三角函数重用库(包括设计文档、需求分析文档等),将会缩短星载软件的开发周期。另一方面,库函数的使用者只需获知函数名称、返回值类型、函数参数与功能,就可对其进行调用,具体函数内部封装,使软件开发人员从繁冗复杂的开发中解脱出,将注意力集中到星载软件的安全性、可靠性。由于函数库内的各函数经过多方测试,甚至在轨飞行试验,因此星载软件重用库的应用将显著提高星载软件的可靠性。星载软件重用库不仅仅是三角函数,而且包括基于标准化硬件的遥控中断、遥测中断、I/O通信和时钟管理等程序模块。

采用ADA等高级语言开发星载软件,不但可建立软件重用库,而且能结合高级语言的面向对象和模板等技术,开发标准类库和程序包,将系统共有特性定义成公有的类,在后续开发过程中,可直接重用某个类的实例,也可以定义成抽象类和抽象子程序,根据实际的应用派生类或子程序。ADA语言还提供了类似模板的重用机制,子程序或程序包定义成类属子程序或类属程序包时,实例化的子程序执行的运算不依赖特定数据类型。可利用ADA语言的类属程序包机制,开发一个出入队类属程序包,类似于C语言的模板机制。其中程序包包括Enqueue,Dequeue两个类属子程序以实现循环队列的入队和出队功能。

类属程序包的声明部份,可包括两个类属参数Queue_Object(队列数据类型)、Queue_Size(队列空间大小),以及两个类属子程序分别实现入队和出队功能。类属程序包的处理方法部分,除上述两个类属子程序外,还包括了Increment(队列指针操作),Queue_Full(队列满判断),Queue_Empty(队列空判断)三个函数。因实现了对代码的封装,故对普通开发者仅Queue_Object,Queue_Size两个类属参数和Enqueue,Dequeue两个类属子程序可见。在实际应用过程中,如欲实现循环队列的功能,就只需实例化上述类属程序包,根据开发过程中的应用情况实例化相应数据类型、相应长度的循环队列,就能实现循环队列功能。说明类属程序包在利用ADA语言开发的星载软件中,可推动星载软件的重用,并提高开发效率和软件的可靠性。

5 基于层次框架的软件重用方法

星载软件是具有高实时性、高可靠性和高安全性的嵌入式软件。嵌入式软件有以围绕应用目的开发的特点,因此星载软件开发多采用手工作坊的方式进行,其中存在大量的重复开发,降低了开发效率和软件质量。因为星载软件的开发过程有强烈的目的性,多数条件下考虑的是应用目的实现,而较少考虑软件开发的效率和质量。

在星载软件开发过程中,采用基于层次构件的软件开发,利用模块化和层次化结构解决任务模块的划分,通过软件总线实现接口间的数据通信。软件总线的功能是连接软构件,控制软构件间通信时序,完成数据准确、及时地从源任务传送至目标任务。星载软件由多个应用过程组成,一个应用过程由一个或多个软构件实现,软构件间调用或通信均采用符合RS422,CAN,1553B等总线标准和协议。

星载软件层次框架模型(如图2所示),包含I/O层、软件总线层和应用层。所谓I/O层是指与硬件接口进行数据交换的模块的封装,对外界调用只提供消息传递方式进行调用。它是应用层、软件总线层与各种硬件接口间进行数据传输和联系的物理公共通道及接口界面,它完成与所有硬件接口的数据通信任务,是模型的最底层。软件总线层是应用层与I/O层间进行多种类型数据传输与交换的虚拟数据传输总线。每个I/O层构件均通过软件总线层实现与应用层的互联,通过消息传递互相提供数据通信服务。应用层是指实现系统功能的模块或软件实体单元,它与硬件接口的通信必须通过软件总线层实现。星载软件依据系统的控制时序,统一调度应用层各任务构件,控制任务构件无冲突地分时访问软件总线。

图2 基于层次框架的软件开发模型Fig.2 Software development model based on hierarchical framework

基于软件层次框架的星载软件系统的软件总线层构建如图3所示,其实质就是实现星上各单机数据交换的过程。该结构星载软件接收和发送数据主要过程是:

a)应用层某任务模块启动,并准备将要传输的数据;

b)应用层任务模块调用软件总线层,并将数据、单机地址等作为消息传递至软件总线层;

c)软件总线层根据单机地址调用相应的I/O层模块,同时将数据、单机地址等作为消息传递至该I/O层模块;

d)I/O层模块根据单机地址,将数据发送至相应的单机;

图3 基于软件层次框架的星载软件系统结构Fig.3 Space-borne software system structure based on softwarelevel framewkar

e)当I/O模块数据发送完毕,软件总线层就将数据释放,准备下一次发送和接收。

上述基于软件层次框架的星载软件系统的执行过程,其各层均相互独立,仅利用消息传送作为各层构件的输入参数。因此,每层软件因技术状态变化的更改不会对其他层次的软构件产生影响。同时增强了星载软件的内聚,降低了软件模块间的耦合。基于层次框架的软件重用是框架重用,框架重用包括代码重用和分析设计重用,是重用层次最高的系统级重用。在星载软件系统开发过程中,可重用基于该层次框架模型开发的星载软件系统,只需根据实际的应用作适应性修改(如单机址址、数据长度等)。这将提高星载软件的开发效率,并对星载软件的开发模式产生深远的影响。

6 结束语

本文利用库函数、面向对象、框架等重用技术,给出了星载软件的层次框架模型和I/O层、软件总线层、应用层的概念,研究了一种新的具有可重用性的星载软件设计方法。该设计方法对星载软件可重用性带来极大的方便。研究认为,基于层次框架的星载软件重用技术不仅可提高效率、降低成本,而且能提高星载软件的可靠性和安全性。

[1]张海藩.软件工程导论(第三版)[M].北京:清华大学出版社,1998.

[2]杨芙清,王千祥,梅 宏,等.基于复用的软件生产技术[J].中国科学,E辑,2001,31(4):363-370.

猜你喜欢

子程序面向对象总线
GEE平台下利用物候特征进行面向对象的水稻种植分布提取
面向对象方法在水蓄冷PLC编程中应用分析
面向对象的组合软件工程研究
一种基于CAN总线的误码测试方法
浅谈子程序在数控车编程中的应用
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计
子程序在数控车加工槽中的应用探索
面向对象的SoS体系结构建模方法及应用
西门子840D系统JOG模式下PLC调用并执行NC程序