弹载飞行控制软件重用技术研究

2015-04-30 13:03刘思思刘迪卢娥
软件导刊 2015年4期

刘思思 刘迪 卢娥

摘要摘要:针对弹载飞行控制软件研制现状,探讨软件重用的目的、意义及技术途径;结合弹载飞行控制软件的组成和设计原则,分析可重用软件应满足的基本条件;提出一种基于领域工程的弹载飞行控制软件重用实施方法;从软件工程化要求、编码要求、软件测试要求和硬件设计要求等方面建立弹载飞行控制软件通用构件库的可重用构件选取标准。最后,用实例说明了弹载飞行控制软件重用的可操作性。

关键词关键词:弹载飞行控制软件;软件重用 ;可重用构件

DOIDOI:10.11907/rjdk.151201

中图分类号:TP3-0

文献标识码:A文章编号文章编号:16727800(2015)004002304

0引言

我国航天事业正处于高速发展时期,型号发射任务密集,对弹载飞行控制软件研制周期提出了更高要求。开发人员往往迫于项目压力,优先进行软件产品开发,而忽视软件重用问题。当前弹载飞行控制软件研制实行项目管理,不同项目团队开发的软件框架不同,开发人员所使用的数据结构也不同,软件重用难以推广。此外,不同型号弹载计算机硬件平台的不同,也直接导致了底层驱动软件的不可重用。

1弹载飞行控制软件重用

1.1软件重用的目的和意义

早期的弹载计算机电路是由模拟电路搭建而成的,随着电子技术的发展,弹载计算机电路设计实现了数字化,弹载飞行控制软件研制快速兴起。但受现实条件的约束,每个型号弹载飞行控制软件研制都不得不重复编码、测试、调试、编写文档、系统联调等工作。

当前弹载飞行控制软件研制工作量大、时间紧、任务重,从开发效率、企业成本,以及软件工程化、标准化、软件测试等角度考虑,实施弹载飞行控制软件重用迫在眉睫。弹载飞行控制软件不同于其它商业软件,需要找到符合自身特点的重用技术途径和实施方法。

1.2软件重用的技术途径

软件重用的技术包括库函数、模板、面向对象、设计模式、组件、框架、构架等。图1为软件重用的主要技术、实现途径以及实例。

面向对象技术主要针对使用面向对象的语言开发的软件,弹载飞行控制软件作为嵌入式软件,一般采用C语言,或者C语言和汇编语言混合编程进行开发。因此,可以综合考虑库函数、模板、构件、架构、框架等技术途径,选取符合弹载飞行控制软件自身特点的重用方法。

构件、架构、框架三者呈现层次递进的关系,同时又存在交集。对于弹载飞行控制软件而言,可以将各函数单元划分为功能构件;架构主要指软件的组织结构,即逻辑时序和构件的调用关系;框架则可理解为工程的文件目录结构,包括头文件的定义和引用关系等。只有正确理解上述概念,才能正确区分弹载飞行控制软件的构件、架构和框架,为重用打好基础。

1.3可重用软件

重用最重要的是要有可重用的软件。导弹分类方法较多,如根据作战使命不同可分为战略导弹和战术导弹;根据发射载具不同可以分为空空导弹、面空导弹等;根据制导体制不同可以分为雷达制导导弹、红外制导导弹等。不同类型导弹其弹载飞行控制软件研制任务需求和弹载计算机硬件平台不尽相同,底层驱动,接口协议,算法模型等较难重用。同一类型导弹弹载飞行控制软件的研制需求和弹载计算机硬件平台往往具有共同特性。可以从总体需求层次区分出不同的软件系统,新研弹载飞行控制软件可以在同一系统类型的弹载飞行控制软件的基础上加以改进。

从系统角度来讲,可重用的弹载飞行控制软件应满足以下条件:①软件模块划分及其框架、架构布局合理;②软件运行的硬件平台DSP及数据接口选型标准;③通信协议制定规范。以上3个条件也是对软件控制算法功能模块划分、软件运行硬件平台和通信协议提出的通用化要求。

除此之外,结合航天特点,可重用的弹载飞行控制软件相关配套文档要齐备;软件必须通过单元测试、确认测试和第三方评测,所发现的问题都已经改正且通过回归测试。此外,应经过型号研制所有阶段的飞行试验验证。

2弹载飞行控制软件组成与设计原则

弹载飞行控制软件通常由底层硬件驱动软件、接口协议层软件和应用层软件组成。其中,底层硬件驱动软件主要完成硬件端口的初始化,设备自检和数据输入输出控制;接口协议层软件主要完成数据组包发送和接收解包;应用层软件主要完成制导控制计算和指令形成计算。上述3层软件由时间驱动的事件响应机制,即弹上时序和逻辑控制来实现任务调度。弹载飞行控制软件组成如图2所示。

弹载飞行控制软件具有实时性高、时序和逻辑复杂,可靠性强的特点。其设计需遵守以下原则:

(1)自顶向下的原则。即在确定弹载计算机硬件平台的前提下,首先确定软件的基本结构,然后细化到实现这些功能的每一个具体的软件模块,形成详细的软件开发卷宗,直至定义某一个具体的函数、变量和指针,使设计做到有条不紊,开发过程清晰明了,从宏观上把握软件设计质量。

(2)结构化设计原则。包括程序和数据的结构化设计。通过细化软件模块,形成由所有软件模块按照一定的接口关系和数据交换关系构成的软件结构,做到结构完整,易读、易查、易测试。

(3)针对弹载计算机的实时性应用特点,以导弹工作时序为主线,进行合理的实时任务调度,通过弹载计算机系统在规定时间内可靠地完成设计任务。

3弹载飞行控制软件重用方法

弹载飞行控制软件与其它商业软件不同,必须探索出一条符合航天型号软件特点的重用途径。近年来,相关研究成果丰富。2006年,北京航天自动控制研究所孟小韦、马卫华[1]认为,可以从模块级和任务级两个方面来进行软件通用化设计,并提出了开发飞行控制软件集成开发工具原型。2007年,中国空间技术研究院提出了可重的星载软件构件应具有的基本特性[2]。2011年,上海卫星工程研究所提出了基于(I/O层、软件总线层和应用层)层次框架的星载软件重用方法[3]。

领域工程强调为一组相似或相近系统的应用建立基本能力和必备基础(包括产品空间、构件、体系结构)的过程,是实现构件获取和重用的有效方法[4]。相关研究表明,相似领域的软件更容易重用。在弹载飞行控制软件重用过程中,可以根据导弹系统类别从纵向领域确定可重用软件系统框架和架构,进而根据软件总体研制需求从横向领域选择可重用的构件。

因此,从领域工程的角度出发,可以按照领域分析、领域设计、领域实现3个活动过程来实施弹载飞行控制软件重用,如图3所示。具体步骤如下:

第一步:领域分析。分析弹载飞行控制软件的系统类别,获得领域模型;参照导弹种类划分,如战术和战略、空空和面空、雷达制导和红外制导等区分弹载飞行控制软件;同时兼顾弹载计算机硬件平台,确定软件领域模型,即可重用软件选型。

第二步:领域设计。按照软件研制任务需求,确定软件框架,设计软件架构。不同领域模型的软件架构可能有所不同,但是软件框架基本相同。因此,可以在选择好可重用软件的基础上进行框架和架构设计。

第三步:领域实现。将满足需求的功能构件组成软件系统。

4弹载飞行控制软件可重用构件标准

一套可重用软件不一定包含所有的可重用构件。从图2可以看出弹载飞行控制软件组成层次和功能模块,可在此基础上,建立可重用的弹载飞行控制软件可重用构件库,该库由弹载飞行控制软件的功能模块(构件)组成。

4.1软件工程化要求

航天系统从1996年开始,就已从标准化和加强测试入手,推行航天型号软件的工程化开发。1998年召开的航天系统第四次责任人会议提出提高航天型号软件质量,全面加强航天型号软件产品开发,初步确立了型号软件的管理体制,并着手确定箭(星)载计算机的选型,确定了统一型号软件的运行环境[5]。

航天型号实施软件重用和推进型号软件工程化工作是相互促进的。弹载飞行控制软件开发过程一般包括:系统需求分析与设计、软件需求分析、概要设计、详细设计、软件实现、组装测试、确认测试、系统联试、验收交付、运行维护等10个阶段。实施弹载飞行控制软件重应参照航天型号软件工程化相关要求,如Q/QJA 30A2013《航天型号软件工程化要求》等,规范软件研制各阶段的技术和管理。

4.2编码要求

正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性、可移植性等是软件的质量属性[7]。在软件设计过程中应全面考虑每个属性,确保型号发射成功,实施“零缺陷”的质量管理。代码编写质量越高,软件出错概率就越小,程序执行效率越高,资源余量就越大。因此,可重用构件必须充分考虑软件质量属性,设计高质量的程序模块。

当前弹载飞行控制软件主要有两种变量作用域(数据类型)使用体系。全局变量参数传递和结构体类型变量进行参数传递,两种用法各有优劣。

全部变量增加了函数间数据联系的渠道,如果在一个函数中改变了全局变量的值,就可能影响到其它函数。在程序设计中,模块划分要求内聚性强[6],与其它模块的耦合性弱,而全局变量不符合这一原则。使用结构体类型数据传递参数,则可以将函数有效封闭起来,切断与外界的联系。全局变量会降低程序的清晰性,在执行各函数时都可能改变外部变量的值。而结构体数据类型可以将一组变量组织成一个组合项,能清晰反映该组变量之间的内在联系,但由于结构体变量必须使用引用的方式访问,因此代码不够简洁,调试查找不方便。

因此,在建立可重用的构件库的过程中,全局变量和结构体数据类型应结合使用,发挥各自的优点,提高程序的可读性和可靠性。

4.3软件测试要求

可重用构件必须经过充分的软件测试,使圈复杂度、基本复杂度、扇出数、函数形参个数等指标在符合标准C语言要求的基础上,满足(GJB53692005)《航天型号软件C语言安全子集》、(GJBZ1412004)《军用软件测试指南》等规范,以及相关军种软件编码标准要求。弹载飞行控制软件安全关键等级一般为A级,动态度量指标应满足修正语句覆盖率、条件覆盖率和条件判断覆盖率(MC/DC)均为100%的要求。

测试人员在做静态测试时,经常遇到单个函数代码行数超过200行的情况,很难满足动态测试覆盖率指标要求。对于复杂算法的模型文件,软件开发人员应按照算法功能模块将代码拆分并封装成几个子函数。这样,既增强了程序的可读性,也利于测试,否则很难达到100%的覆盖率指标要求。动态指标中的MC/DC覆盖率对代码分支判断程序结构设计要求很高,可重用构件应满足MC/DC覆盖率指标100%的要求。

4.4硬件设计要求

弹载计算机硬件环境及外围环境直接影响底层驱动软件能否重用。

当前各型号弹载计算机硬件平台不尽相同,有C32、C6000和C28XX系列等,有的是单CPU系统,有的是多CPU系统。目前同一领域的导弹弹载计算机硬件DSP基本已经统型,外围接口也基本一致。

随着导弹不断小型化,计算机硬件设计也向一体化和小型化方向发展。即采用一体化设计的飞行控制设备,制导、导引和引战等系统实现一体化设计。因此,要求硬件环境和外围环境的变化不会对重用产生影响,即要求弹载计算机在“多合一”前后硬件电路功能和底层驱动软件不变,实现底层驱动软件构件的可重用。

4.5其它要求

(1)命名规范。可重用构件的函数和变量命名应该规范化,例如全局变量和局部变量应有明显可区分标识,变量名中应包含变量类型缩写和度量单位缩写,并区分大小写。

(2)文件结构清晰。文件结构主要包含源文件(.c文件)和头文件(.h文件),也可以理解为软件的“框架”[7]。框架作为构件的一种,其源文件和头文件所包含的元素应该分类定义在不同的.c和.h中,且顺序(结构)合理。例如,弹载飞行控制软件中的模型、协议、底层驱动程序按不同功能模块安排在不同源文件中,而头文件则包括外部变量及全局函数声明、常量及宏定义、全局函数原型等。合理的软件框架也有利于使用自动化软件测试工具进行单元测试。

5结语

弹载飞行控制软件重用的理想状态是,在新软件研制过程中可以直接使用被重用的构件,研制技术流程不进行需求分析、软件设计、编码、单元测试、组装测试、确认测试、软件评测等重复工作;软件开发人员有更多精力开展验证、开发管理、软件自动生成等关键性技术工作;促进弹载飞行控制软件研制走上具有航天特色的软件产品化、标准化之路,建立现代工业流水线生产模式的弹载飞行控制软件研制工厂。

参考文献参考文献:

[1]孟小丰,马卫华,控制系统飞行控制软件重用技术研究[J]. 航天控制,2006(6):8183.

[2]郭坚,叶志玲,陆岚,星载软件复用技术探讨[J]. 计算机测量与控制,2007.15(4):541543.

[3]李梦宇,彭攀,星载软件重用技术研究[J]. 上海航天,2011(5):6367.

[4]李楠.基于特征的领域工程及构件技术应用研究[D].成都:西南交通大学,2013.

[5]刘正高,启动软件重用库工程,推进航天型号软件标准化[J]. 航天标准化,1999(2):58.

[6]谭浩强,C语言程序设计教程[M],北京:清华大学出版社,2007.

[7]林锐,韩永泉,高质量程序设计指南——C++/C语言[M]. 北京:电子工业出版社,2007.

[8]刘杰,软件重用技术及在航天飞行软件中的应用[J]. 载人航天,2008(3):6064.

[9]马永杰,蒋兆远,张燕,基于功能构件的软件复用方法[J]. 计算机应用与软件,2009(8):7577.

[10]张选刚,刘如松,软件复用在航空嵌入式软件测试中的应用研究[J]. 航空计算技术,2009(5):8791.

责任编辑(责任编辑:杜能钢)