霍 宏 刘俊阳 李兰兰 刘学士
北京航天自动控制研究所,北京 100854
在型号任务高速增长、发射任务密集的形势下,运载火箭飞行控制软件研制周期越来越短、结构越来越复杂且规模越来越大,由软件问题造成的事件呈上升趋势。当前,传统的软件研制模式已不能适应航天运载火箭软件研制的任务要求,亟需运用新的设计手段提高软件研制效率和降低软件维护成本[1]。研究发现将可重用软件开发技术应用在运载火箭领域飞行控制软件研制过程中,可以提高软件开发效率、缩短设计周期。
提出一种运载火箭飞行控制软件可重用架构设计方法,结合具体实例阐述了在软件需求分析、概要设计和详细设计阶段可重用软件的开发技术,对缩短运载火箭飞行控制软件研制周期、提高飞行控制软件质量具有一定的实用价值。
可重用软件开发的关键点在于领域分析:根据应用领域的特征和相似性,分析软件构件的可重用性,从而界定并构建可重用资产。可重用软件开发过程应该按照软件工程化大纲的要求开展工作,包括需求分析、概要设计、详细设计及实现、测试等过程和阶段[2]。本文重点阐述需求分析、概要设计及详细设计阶段的内容。
可重用软件开发需求分析阶段的主要目标是分析相关领域可重用软件的需求,分析可重用软件的通用性和可变性,最终建立可变性模型。
可重用软件开发概要设计阶段的主要目标是将需求阶段分析的通用性和可变性分解到高层设计框架,并形成可重用架构、可复用构件及接口。
可重用软件开发详细设计阶段的主要目标是根据可重用架构,完成可变构件、接口和配置参数的详细设计。
飞行控制软件作为强实时嵌入式软件,其主要功能是完成航天运载火箭飞行过程中的导航、制导和姿态控制等周期性控制任务,控制航天运载火箭按预定轨道稳定飞行[3]。由于不同火箭型号之间的系统架构、任务要求以及研制人员不同,导致飞行控制软件在软件架构设计、接口设计及功能模块设计等方面的风格不同,增加后期维护成本。通过对目前各型号航天运载火箭飞行控制软件的分析,可知该类软件在运行调度、转级转段、制导姿控算法和输入输出控制等多方面的重要需求均有很大的相似性,完全可以通过开发运载火箭飞行控制软件可重用架构提高设计效率,降低维护成本,为型号飞行控制软件研制服务。
按照领域分析方法,需求可以分成3个部分,即通用性需求、可变性需求及特异性需求[4]。可重用软件的需求分析的核心是分析通用性需求和可变性需求。本文将对它们进行精确的描述。
通用性需求是指所有型号飞行控制软件共同的需求;可变性需求是指不同型号飞行控制软件中部分需求描述不同,但这些需求可以通过预先定义的可复用构件组合实现,它又分为内部可变性和外部可变性需求,内部可变性需求对用户不可见,由软件开发人员针对功能、性能选择满足要求的内部可变性需求,外部可变性需求对用户可见,用户可根据任务要求通过配置选择特定的外部可变性需求;而特异性需求则是面向各个飞行控制软件的特定任务需求,无需为飞行控制软件的特异性需求建立构件。可重用飞行控制软件需求分析过程主要是获取飞行控制软件的通用性需求和可变性需求的过程,同时要建立可变性模型,分析可变性模型与需求阶段模型(如用例图、数据流图等)之间的关系。
2.1.1 通用性分析
采用基于优先级的分析方法进行通用性需求分析,由用户和软件设计方对所有需求的优先级进行评定,确定通用性需求[5]。表1为飞行控制软件的通用性需求分析结果。
表1 飞行控制软件通用性需求分析结果
从表1的分析结果看出,第1类为飞行控制软件的重要组成部分,若去掉这些基本需求就不能表现领域的特点,因此这类需求作为飞行控制软件的通用性需求。第2类和第3类不是飞行控制软件的强制需求,这2类需求定义为飞行控制软件的可变性需求。
2.1.2 可变性分析
按照“变化内容、变化原因、变化模式和变化主体”的思路对表1中的第2类和第3类作进一步分析,表2为飞行控制软件可变性需求分析过程。
表2 飞行控制软件可变性需求分析过程
从表2的分析过程确定4个可变点:硬件通讯、姿态控制、制导控制和辅助修正,对应4个外部可变性需求。其中,硬件通讯对应的3个可变点实例为:1553B总线通讯、串口通讯和I/O端口通讯;姿态控制对应的2个可变点实例为:伺服机构输出指令计算和喷管输出指令计算;制导控制对应的3个可变点实例为:摄动制导控制、迭代制导控制和推力矢量控制计算;辅助修正对应的2个可变点实例为:姿态修正和导航修正。其中,“制导控制”可通过不同的程序角计算方法实现,选择“迭代制导控制”和“推力矢量控制”方式时,须考虑增加程序角滤波功能;“导航修正”可通过不同的滤波算法实现。因此,“程序角算法”和“滤波算法”被识别为新的可变性需求,不同的程序角计算和滤波算法有各自的可变点实例。但用户可以不关心软件具体采用“程序角算法”和“滤波算法”2个可变性需求中的哪个可变点实例,“程序角算法”和“滤波算法”为内部可变性需求。这2个可变点分别与“制导控制”和“辅助修正”形成了可变点实例之间的需要约束。
2.1.3 可变性建模
采用正交变化模型的图形化描述对“硬件通讯”、“姿态控制”、“制导控制”和“辅助修正”4个外部可变性需求进行建模,如图1所示;“程序角算法”和“滤波算法”2个内部可变性需求的依赖关系如图2所示。
概要设计过程的核心内容是根据飞行控制软件需求分析阶段的通用性和可变性分析结果设计可重用的飞行控制软件架构,划分飞行控制软件独立构件,制定设计规则,确定各部件之间的接口约束规范[6]。
2.2.1 通用性和可变性设计
将需求分析结果按照功能类划分情况如表3所示,将通用性需求和可变性需求按照功能类进行划分,架构设计中通过控制周期任务调度构件实现通用性需求和可变性需求的调度,通用性需求对应相应的通用性需求构件,可变点实例对应相应的可变性需求构件,概要设计阶段的架构具有一定的通用性和可扩展性,可以提高软件架构的灵活性。
图1 外部可变性需求的变化模型和用例图的映射关系
2.2.2 软件架构设计
依据需求分析和概要设计过程的通用性和可变性分析结果,可重用飞行控制软件架构设计应包括通用性需求和可变性需求,通过构件实现通用性需求构件和可变性需求构件的控制逻辑和调用关系,可变性需求可变构件向用户提供用于配置外部可变性需求的外部接口,用户根据提供的外部接口选择具体需要的外部可变性需求构件组合。内部可变性需求构件在满足外部可变性需求功能、性能要求的前提下,同样具有可选择性和可替换性。
图2 内部可变性需求的约束关系
表3 飞行控制软件通用性需求和可变性需求的归类表
下面以典型的运载火箭飞行控制软件的运行控制流程为主线,创建可重用飞行控制软件架构的运行模型,并说明飞行控制软件可重用架构与可变性模型之间的映射关系。图3为飞行控制软件在每个控制周期内的运行流程,“▭”为构件接口,通过可重用架构设计可以满足不同型号对相关领域的要求,图3中的实线所经历的流程是满足“1553B硬件通讯+伺服机构输出控制+迭代制导控制+姿态修正+导航修正”的飞行控制软件任务要求的软件运行流程实例,图4以迭代制导控制构件为例,内部可变性需求由软件开发人员根据迭代制导控制功能构件的功能、性能等要求,选择相应的“程序角算法”和“滤波算法”中提供的具体的内部可变性需求构件。实线描述了迭代制导控制构件内部选择 “迭代制导计算算法”,计算出迭代制导控制的程序角,并通过“程序角滤波网络计算算法”对计算出的程序角进行滤波处理的运行实例。
图3 飞行控制软件架构设计运行流程实例
图4 迭代制导控制功能构件约束关系示意图
软件架构的可重用软件资产包括:可重用构件、接口和配置规则等。如何设计软件架构的接口和构件是软件详细设计阶段的主要工作。可重用的飞行控制软件架构设计是否满足灵活性、可适应性和可扩展性是详细设计的重要工作。
2.3.1 通用性需求构件设计
2.3.1.1 控制周期任务调度构件
控制周期任务调度构件是根据飞行控制软件制导、姿控和综合等核心功能抽象出来的调度构件,完成通用性需求构件和可变性需求构件的调度。通过调度策略实现可变性需求构件的创建、运行和结束,进行可变性需求构件的生命周期管理;控制周期任务调度构件不关注具体的可变性需求构件的实现,通过统一接口调用,有效地解决各型号任务之间的差异性,实现对可变性需求构件的统一管理,具有很强的通用性和适应性。
控制周期任务调度构件提供的可变性需求构件的接口包括创建构件和控制运行过程2部分。通过定义统一的接口信息,实现可变性需求构件的调度。
1)创建构件:构件的基本信息包括:唯一标识名称、属性、依赖关系和过程调用接口,如表4所示。过程调用接口是控制周期任务调度构件和可变性需求构件的连接器,形参是可变性需求构件的当前运行状态,可变性需求构件根据当前运行状态完成相应的功能;
2)控制运行过程:按照可变性需求构件的属性和依赖关系,依次实现从“开始”到“结束”的状态转移控制,“结束”表示该可变性需求构件完成任务,以后不再调用该可变性需求构件。用户根据表4功能构件的接口约定和配置规则、编码实现具体的可变性需求构件。
表4 可变性需求构件的注册信息表
2.3.1.2 其他通用需求构件
除了控制周期任务调度构件以外的通用性需求构件满足一定的通用性,为规模较小、功能较为简单的独立构件,不随具体的任务要求变化。架构设计中通过封装实现具体的通用性需求功能,对用户隐藏了内部具体实现,一个通用性需求构件通过一个或多个接口与其他构件交互。供给接口定义了构件必须实现的操作,请求接口定义了在特定环境下其他构件需为本构件提供的操作。接口的定义有多种形式,可以定义结构体、数组等类似函数间的形参传递,也可以向其他构件提供功能对应的接口函数。
3.3.2 可变性需求构件设计
内部可变性需求和外部可变性需求的每一个可变点实例对应一个可变性需求构件,由于各个可变点实例之间的差异性较大,各个可变点实例应当按照控制周期任务调度构件设计中定义的接口要求进行注册,如表4所示,注册后形成可变性需求的配置参数。实例化具体的可变性需求构件,进而控制周期任务调度构件才能实现统一调度可变性需求构件。当需要根据任务要求增加其他可变点实例时,通过注册信息表进行动态注册,可在不改变控制周期任务调度构件的前提下,增加新的独立的可变性需求构件。
架构中通过使用条件编译的方式决定各个外部可变性需求中可变点实例的组合情况,使应用架构中不存在多余功能构件,提高了外部可变性需求构件的可维护性,使外部可变性需求构件具有可替换性和可选择性。以“辅助修正”可变点设计为例,通过2个宏定义分别表征“姿态修正”和“导航修正”2个可变点实例的相关操作,当任务要求中只包括“姿态修正”这个可变点实例时,仅定义“姿态修正”这个外部可变性需求构件的宏定义,源码编译过程中不包括“导航修正”这个外部可变性需求构件,同理,可实现“导航修正”这个可变点实例,体现外部可变性需求构件的可替换性;当任务要求中没有“辅助修正”这个外部可变性需求时,不定义“姿态修正”和“导航修正”这2个外部可变性需求构件的宏定义,源码编译过程中不包括“姿态修正”和“导航修正”这2个外部可变性需求构件的任何操作,体现外部可变性需求构件的可选择性。
通过外部需求构件的选择,在满足外部需求构件功能、性能要求的前提下,由软件开发人员通过使用条件编译的方式选择具体的内部可变性需求构件,内部可变性需求对用户不可见。以迭代制导控制功能构件为例,当用户选择“迭代制导控制”这个外部可变点实例时,软件开发人员通过之前宏定义的设定和参数配置,架构中自动选择了“迭代制导计算算法”和“程序角滤波网络计算算法”2个内部可变性需求构件,如图5所示。
图5 迭代制导控制功能构件配置参数
某运载器1的飞行控制软件采用了可重用架构设计方法,在需求分析阶段提出了通用性和可变性需求,在概要设计阶段设计出软件架构,在详细设计阶段设计出具体的通用需求构件和可变性需求构件,运载器1飞行控制软件代码总计20000余行,运载器2的飞行控制软件为某型号新研软件,通过重用分析,运载器2飞行控制软件在运载器1飞行控制软件的基础上,只需针对特异性需求进行设计,代码修改量总计1000行左右,重用情况分析如表5所示,大大减少了软件开发和测试验证成本,提高了软件研制效率。
表5 运载器1与运载器2飞行控制软件重用分析
详细阐述了基于可重用软件开发技术的飞行控
制软件架构,及其在需求分析、概要设计和详细设计阶段的设计方法,通过理论和实践证明,该架构在运载火箭飞行控制软件的应用不仅能够提高软件研制效率,降低研制成本,而且能够降低设计人员主观因素的影响造成的各种缺陷,不断提升软件产品质量,提高软件的可维护性。运载火箭飞行控制软件可重用架构设计的开发模式为运载火箭控制系统软件传统研制模式提供了新的思路,具有一定的借鉴意义和实用价值。
参 考 文 献
[1] 杨锦清.软件工程化开发实践与避错技术研究[A].中国航空学会控制与应用第八届学术年会论文集[C].1998.
[2] 田继鑫.软件工程化研究[D].2001.
[3] 彭涛.某型火箭飞行器控制软件研制[D].2011.
[4] 普尔.软件产品线工程[M].国防工业出版社.2010.
[5] 李伟刚 李易.软件产品线工程原理与方法[M].科学出版社.2015.
[6] 丁晓明.基于构件的软件开发关键问题研究[D].2012.