软件学报  2021, Vol. 32 Issue (4): 904-933   PDF    
安全关键异构软件混合建模及代码生成方法
宗喆1,2 , 杨志斌1,2 , 袁胜浩1,2 , 周勇1,2 , BODELEIX Jean-Paul3 , FILALI Mamoun3     
1. 南京航空航天大学 计算机科学与技术学院, 江苏 南京 211106;
2. 高安全系统的软件开发与验证技术工信部重点实验室(南京航空航天大学), 江苏 南京 211106;
3. IRIT-University of Toulouse, Toulouse 31062, France
摘要: 随着系统复杂性的急剧增加,未来安全关键软件越来越多地采用异构构件组合架构,各种构件可能使用不同的计算模型或实现语言,使得整个软件系统呈现异构性.因此,设计此类系统需要使用复杂的建模方法.AADL(architecture analysis and design language)是一种安全关键系统体系结构多范式建模语言,丰富的可表达方式和可扩展性使其成为安全关键异构软件设计的重要选择.提出一种AADL和SDL(specification and description language)混合建模方法,支持以自底向上的方式对安全关键软件系统进行混合建模,并给出面向多核处理器平台的代码自动生成方法.首先,通过扩展AADL属性集,以支持使用SDL建模语言表达软件构件的功能行为.其次,以Ada作为目标语言,给出AADL-SDL混合模型的多任务代码生成方法.最后,实现了原型工具支持AADL和SDL混合建模及多任务Ada代码生成,并基于导航、制导与控制系统案例对所提方法的有效性进行分析.
关键词: 安全关键异构软件    混合建模    AADL    SDL    多核    代码自动生成    
Co-modeling and Code Generation for Safety-critical Heterogeneous Software
ZONG Zhe1,2 , YANG Zhi-Bin1,2 , YUAN Sheng-Hao1,2 , ZHOU Yong1,2 , BODELEIX Jean-Paul3 , FILALI Mamoun3     
1. College of Computer Science and Technology, Nanjing University of Aeronautics and Astronautics, Nanjing 211106, China;
2. Key Laboratory of Safety-Critical Software of Ministry of Industry and Information Technology (Nanjing University of Aeronautics and Astronautics), Nanjing 211106, China;
3. IRIT-University of Toulouse, Toulouse 31062, France
Abstract: Safety-critical systems have evolved to use heterogeneous components to implement complex requirements, each component may adopt different computation models or modeling languages. Therefore, it is necessary to use complex modeling approaches to design those systems. AADL, as a multi-paradigm modeling language for safety-critical system architecture, is a good choice to design safety-critical heterogeneous systems because of its rich expressibility and well scalability. This study proposes a bottom-up AADL-SDL co-modeling approach that integrates functionality modeled by SDL through the AADL architecture model and provides a multi-task code generation approach for multi-core platforms. Firstly, AADL property sets are extended to support the capability of modeling functionality. Secondly, a multi-task code generation approach is proposed to transform AADL-SDL models to Ada code. Finally, a prototype tool is implemented to support AADL-SDL co-modeling and multi-task Ada code generation. The effectiveness of the method proposed in this study is analyzed based on the guidance, navigation, and control system scenarios.
Key words: safety-critical heterogeneous software    co-modeling    AADL    SDL    multi-core    code generation    

安全关键软件(safety-critical software)[1]是指应用于航空、航天和核能等领域的安全关键系统中, 且其运行失效会引起系统处于危险状态, 从而导致人员伤害、重大财产损失或者环境破坏等灾难性后果的一类软件, 它对功能正确性、实时性、安全性等性质有极高的要求.随着系统复杂性的急剧增加, 未来安全关键软件越来越多地采用异构构件组合架构, 即构件由不同供应商以OEM(original equipment manufacturer)方式提供, 各构件可能具有不同特性, 例如使用不同的计算模型(状态机、同步数据流、异步执行模型、连续时间模型等)或实现语言, 使得整个软件系统呈现异构性[2, 3].异构软件系统的执行与交互语义也从完全同步发展到全局异步-局部同步GALS(globally asynchronous locally synchronous)方式, 即不同构件具有各自的时钟控制(称为多时钟, multi- rates), 构件之间采用异步通信方式.

近年来, 多范式建模方法MPM(multi-paradigm modeling)[4, 5]已成为安全关键异构软件设计的研究热点.多范式建模方法可以通过模型转换、模型组合、混合建模和混合仿真等方式对软件系统中使用的不同领域知识、不同视图以及不同抽象层次进行建模, 充分发挥各种建模语言的描述能力.在安全关键系统领域, 常用的建模语言主要包括Modelica[6]、SysML[7]、UML Marte[8]、AADL[9]、EAST-ADL[10]、SCADE[11]、Simulink[12]、Ptolemy Ⅱ[13]等.其中, AADL(architecture analysis and design language)是由美国汽车工程师协会SAE提出的面向安全关键系统的一种建模语言标准(SAE AS5506).AADL以层次化构件的方式表达系统的软硬件架构.一方面, AADL可以非常方便地表达多时钟、GALS、异步通信等异构软件特征; 另一方面, AADL提供定义新属性集和附件(annex)等多种扩展方式, 使得AADL逐渐成为安全关键异构软件多范式建模的重要选择.

在支持多领域知识的多范式建模方面: Modelica是一种面向对象的建模语言, 用于对大型、复杂和异构系统进行建模, 并支持多领域建模.例如, 航空航天领域的安全关键异构系统涉及机械、电气、液压控制等多种领域模型.Sodja等人[14]提出一种模型简化技术, 对基于Modelica的信息物理融合系统CPS(cyber-physical system)多领域模型进行模型简化, 以降低基于Modelica的异构模型的验证与执行过程的复杂性.

在不同抽象层次的多范式建模方面: Hugues等人[15]提出一种基于SysML和AADL的安全关键系统设计、验证及代码生成方法.其中, SysML主要用于系统高层建模与分析, 当该系统分解给软件来实现时, 就转换到AADL, 用AADL以逐步求精的方式进行软件设计与实现.Wang和Hugues等人[16]则进一步提出面向未来开放式航空电子系统的多范式建模方法, 即SysML用于系统工程建模, 转换到基于AADL的软件架构设计, 并进一步转换到基于FACE[17]的开放式航空电子系统架构实现和基于SCADE的软件构件功能实现.

在支持多种功能行为表达的多范式建模方面: AADL提供行为附件BA(behavior annex)[18]对基于控制流方式的构件功能行为进行表达; 正在制定中的AADL Hybrid Annex[19]则支持基于Hybrid CSP(communicating sequential processes)对构件的连续行为模型进行构造; Zhan和Zhan等人[20]使用AADL与Simulink进行混合建模, 扩展AADL描述系统连续行为的表达能力; 欧空局ESA提出基于AADL、Simulink和规范与描述语言SDL(specification and description language)[21, 22]的多范式建模方法TASTE[23-25].TASTE基于AADL语言子集描述系统框架, 并使用Simulink、SDL、C/Ada等描述系统功能行为, 目前, TASTE主要支持串行Ada代码自动生成和集成.

随着安全关键异构软件对计算性能要求的不断增加, 使用多核处理器成为航空航天领域的迫切需求.我们提出AADL及行为附件BA、同步语言SIGNAL、SDL、Simulink、C、Ada的多范式建模方法: AADL用于表达安全关键异构软件架构, AADL行为附件BA、同步语言SIGNAL、SDL、Simulink分别支持状态机、同步数据流、异步执行模型、连续时间模型等多种计算模型, 并基于抽象语法标记ASN.1(Abstract Syntax Notation One)[26, 27]对异构模型间的交互数据建模.SDL作为一种异步建模语言, 其主要特征是: 可以准确描述软件的异步功能行为, 用于表达安全关键软件异步行为.我们在前期研究[28, 29]中提出了同步语言SIGNAL和AADL的混合建模及多核代码自动生成方法, 本文则主要介绍AADL和SDL的混合建模(两种语言的多范式建模, 我们称其为混合建模)及Ada多任务代码生成方法.两者的区别在于: 同步语言SIGNAL主要基于数据流等式表达AADL构件的功能行为, 侧重于对数值计算相关的算法过程进行建模, 例如GNC系统中对地斜开关算法等; 而SDL则侧重基于控制流方式表达构件功能行为, 侧重于对系统控制流程进行建模, 如GNC系统中的航天器三轴姿态角度修正控制模块等.

AADL-SDL混合建模过程可分为自顶向下和自底向上两个方向: 在自顶向下的建模过程中, 首先, 采用AADL描述系统体系结构, 并基于AADL数据组件描述系统中涉及的数据类型; 其次, 对于具体功能行为采用SDL模型进行描述, 并给出AADL数据组件到ASN.1的转换, 以保证异构构件间交互数据的一致性.而在自底向上的建模过程中, 首先, 采用SDL语言描述具体组件功能, 并基于ASN.1描述SDL模型和外部环境(即其他组件或系统输入/输出)之间的交互; 其次, 基于AADL描述系统体系结构, 并通过属性集扩展的方式规定AADL体系结构模型和SDL功能行为模型之间的调用关系和数据交换方式.例如, 安全关键系统已经存在多个功能模块的SDL模型, 如何基于AADL将这些不同功能模块自底向上地集成起来, 构成完整的系统体系结构模型.

本文考虑自底向上的AADL-SDL混合建模过程, 主要贡献包括:

(1) 提出一种AADL与SDL混合建模方法, 包括AADL-ASN.1和AADL-SDL扩展属性集方法.其中, AADL-ASN.1扩展属性集主要用于描述混合模型中不同构件间的数据类型, AADL-SDL属性集用于支持在AADL体系结构模型中集成SDL模型对应的功能行为.

(2) 提出一种面向多核处理器的AADL-SDL混合模型到Ada多任务代码生成方法.首先, 基于AADL体系结构模型生成Ada框架代码; 其次, 根据混合模型中的ASN.1数据属性生成Ada数据类型代码.然后, 基于混合模型中的线程运行时属性生成Ada运行时代码; 最后, 基于SDL模型生成Ada多任务代码, 并将所有生成代码进行集成.

(3) 基于AADL开源建模工具Osate[30, 31]实现了AADL-SDL混合建模工具ASCM(AADL and SDL co-modeling tool)和多任务Ada代码生成工具AS2MTA(AADL and SDL to multi-task ada code generator), 并使用实际工业案例AOCS对本文所提方法的有效性进行了分析.

(4) 相较于前期工作, 本文扩展了AADL多范式建模框架对软件控制流程的描述能力, 在支持状态机、同步数据流、连续时间模型等多种计算模型的基础上, 增加了异步执行模型的建模过程.生成的Ada代码相较于前期工作, 增加了流程控制代码的并发过程, 提升了代码的运行效率.

本文第1节介绍AADL、SDL建模语言和ASN.1标准的基本概念.第2节概述面向安全关键异构软件的AADL多范式建模框架.第3节对本文提出的AADL-SDL混合建模方法进行详细阐述.第4节给出AADL-SDL混合模型到多任务Ada代码生成方法.第5节介绍AADL-SDL混合建模工具ASCM和多任务Ada代码生成工具AS2MTA.第6节通过对工业界案例导航、制导与控制系统GNC建模与代码生成进行分析并与部分前期研究进行比较, 对本文所提方法及原型工具进行评估.第7节对多范式建模、混合建模和代码生成相关工作进行分析.第8节总结全文, 并对未来研究内容进行初步探讨.

1 研究背景 1.1 体系结构分析与设计语言AADL

AADL作为一种针对嵌入式系统的多范式建模语言, 通过AADL构件以及构件之间的连接, 从软件结构、软件运行时环境和硬件结构这3个方面对嵌入式系统体系结构进行建模描述.

1) 软件结构: 支持通过线程、线程组、进程、数据、子程序等构件以及连接对软件的内部结构进行描述.通过上述构件的组合, 建立具有层次化的软件体系结构模型.

2) 软件运行时环境: 支持通过分发协议、通信协议、调度策略、模式变换协议以及分区机制等属性对软件执行模型进行建模.

3) 硬件结构: 支持通过处理器、虚拟处理器、存储器、外设、总线、虚拟总线等构件以及连接对系统的硬件执行平台进行建模.

此外, AADL支持基于自定义属性集(property set)和基于附件的扩展.其中, 基于自定义属性集的扩展支持AADL构件与多种异构模型之间通过自定义属性进行关联, 以实现AADL模型与多种异构模型间的集成.基于附件的扩展支持在AADL核心构件的基础上通过增加附件的方式, 提升AADL建模语言的描述能力, 例如: Behavior Annex扩展基于控制流方式的构件功能行为表达能力; Hybrid Annex扩展AADL支持对构件的连续行为模型进行构造; Error Model Annex[32]扩展了AADL描述系统故障行为的能力.AADL核心构件、AADL扩展属性集和AADL附件共同组成完整的AADL模型.

1.2 规范与描述语言SDL

规范与描述语言SDL支持使用半图形、半文本的方式描述特定类型的嵌入式系统的功能行为.SDL有图形表示法GR(graphical representation)和文字短语表示法PR(phrase representation)两种.其中, GR用一系列的符号和图形来描述系统, 比较直观; PR用语句来描述系统, 便于计算机处理.这两种表示方法在语义上是等效的, 它们之间可以互相转换.SDL建模元素主要分为结构元素、定义元素和行为元素.

结构元素: 主要用来描述整个系统模型的分层结构, 包括系统(system)、功能块(block)、进程(process)和过程(procedure).图 1给出了一个SDL系统模型结构, 其中, SDL系统层包括两个SDL功能块B1和B2, B1、B2分别通过SDL信号c1、c3与系统外界交互, B1、B2之间则通过SDL信号c2进行交互.SDL功能块B1中进程P1、P2分别通过SDL信号R1和R2与外界交互, P1和P2之间通过信号R3、R4进行交互.SDL进程P1中描述了当前进程的行为, 并且定义了SDL过程Proc1, Proc1对当前过程的功能行为进行建模.

Fig. 1 An example of SDL system model structure 图 1 SDL系统模型结构示例

定义元素: 对软件中需要使用到的各种数据(data)、临时变量(variable)和子功能模块之间的信号(signal)进行建模描述.

行为元素: 对进程(process)/过程(procedure)模块中的功能行为进行建模.行为元素包括开始状态(start)、状态(state)、触发器(trigger)、行为(action)、表达式(expression)等.其中, 开始状态和状态用来基于自动机的方式对系统行为进行建模; 触发器包含输入(input)和保存(save)元素, 用来对子系统的中断行为进行建模, 通常与通信信道组合使用, 描述中断信号的传入和相关数据的保存; 行为包含输出(output)、任务(task)过程调用(procedure call)、分支选择(switch)和进程创建等, 主要用来对具体功能行为中需要的输出操作、顺序流程、外部过程调用、分支选择和进程创建等过程进行建模; 表达式(expression)支持以伪代码的形式对具体行为进行建模描述.

1.3 抽象语法标记ASN.1

ASN.1作为一种国际标准, 用于描述通过电信协议传输的数据.ASN.1提供了一种对数据进行表示、编码、传输和解码的标准格式, 能够有效地对异构系统之间的通信数据进行建模.在网络管理、安全电子邮件、移动网络和空中交通管制等领域有着广泛的运用.国际电信联盟ITU(International Telecommunication Union)也在标准ITU-T Z.105[33]中推荐在SDL模型中使用ASN.1描述数据类型.

ASN.1中定义了整型(INTEGER)、布尔(BOOLEAN)、字符串(IA5String, UniveraslString, …)和位串(BIT STRING)等基本数据类型, 并且支持有序集合(SEQUENCE)、有序数组(SEQUENCE OF)、无序集合(SET)和无序数组(SET OF)等复杂数据类型的构造.此外, ASN.1还支持压缩编码规则PER(packed encoding rule)、可辨别编码规则DER(distinguished encoding rule)和XML编码规则XER(XML encoding rule)等数据编码、解码规则的描述.因此, ASN.1也广泛应用于需要计算机通信和其他需要编码数据的行业.

2 安全关键异构软件的AADL多范式建模框架

安全关键异构软件的AADL多范式建模框架如图 2所示.核心思路是基于AADL描述系统体系结构, 基于AADL BA、同步语言SIGNAL、SDL、Simulink、C和Ada等描述功能行为, 以及基于AADL数据构件和ASN.1扩展属性集描述异构模型间的交互数据.

Fig. 2 AADL multi-paradigm modeling framework 图 2 AADL多范式建模框架

本文主要给出AADL和SDL混合建模及面向多核处理器平台的Ada代码自动生成方法, 主要涉及图 2中红色虚线标注的部分.

(1) 提出一种自底向上的AADL与SDL混合建模方法.首先, 为了保证AADL模型与SDL模型交互数据的一致性, 提出AADL-ASN.1扩展属性集, 以支持在AADL模型中使用ASN.1进行数据建模.其次, 为了支持在AADL模型中使用SDL描述构件功能行为, 提出AADL-SDL扩展属性集, 主要包括AADL模型与SDL模型间的接口映射、多线程调度、线程分发策略等相关属性, 从而支持AADL和SDL的混合建模.

(2) 提出一种面向多核处理器平台的AADL-SDL混合模型到Ada多任务代码的生成方法.首先, 基于AADL体系结构模型生成对应的Ada框架代码; 其次, 基于AADL数据构件与AADL-ASN.1属性集生成Ada数据类型代码; 然后, 基于AADL构件与AADL-SDL属性集生成Ada运行时代码; 最后, 基于SDL行为模型生成Ada多任务代码, 并将所有生成的代码进行集成.

(3) 基于AADL开源建模工具Osate与SDL开源建模工具OpenGEODE[34]实现了AADL-SDL混合建模工具ASCM和Ada多任务代码生成工具AS2MTA, 并且使用实际的工业案例GNC系统对本文所提方法进行评估.

3 AADL-SDL混合建模方法

本节主要对AADL-SDL混合建模方法的具体内容进行详细介绍.首先, 为了支持SDL模型与AADL模型间的数据交互建模, 在第3.1节给出AADL-ASN.1交互数据属性集扩展.其次, 在第3.2节给出AADL-SDL混合建模属性集扩展以支持将SDL模型以自底向上的方式集成到AADL架构模型中.

3.1 AADL-ASN.1交互数据属性集扩展

由于SDL模型通过ASN.1描述数据类型, 在进行自底向上的AADL-SDL混合建模的过程中, 为了保证SDL模型与AADL模型之间数据交互的一致性, 本文提出AADL-ASN.1交互数据属性集扩展以支持在AADL模型中使用ASN.1进行数据建模.该属性集主要包括对基本数据类型和复杂数据类型进行建模的相关属性.其中, 基本数据类型包括整型(INTEGER)、实数(REAL)、布尔(BOOLEAN)和字符串(IA5String, UniveraslString, …)等; 而复杂数据类型包括有序集合(ASN1_Sequence)、有序数组(ASN1_Sequence_of)、无序集合(ASN1_Set)和无序数组(ASN1_Set_of)等.

AADL-ASN.1属性集扩展的主要属性见表 1.

Table 1 The ASN.1 data properties 表 1 ASN.1数据性质

其中, 属性Is_Base_Type支持与AADL数据构件绑定, 属性值的类型为aadlboolean, 用于描述当前AADL构件是否为基本数据类型.属性的定义如下:

由于ASN.1语法中支持通过数据范围定义数据类型, 因此, 在AADL-ASN.1扩展属性集中增加了实数(浮点)取值范围Real_Value_Range、整数取值范围Integer_Value_Range、串长度String_Size、数组长度范围Sequence等属性.具体定义如下:

ASN.1支持的数据类型包括基本数据类型和复杂数据类型.具体定义如下:

属性Support_Data_Type的类型为枚举类型, 定义了AADL-ASN.1属性集支持的所有ASN.1数据类型, 作为属性Data_Type的属性值, 与Data_Type组合使用描述数据类型.例如, 使用Support_Data_Type中的元素ASN1_Boolean为Data_Type赋值, Data_Type= > ASN1_Boolean定义了当前AADL数据构件的类型为ASN.1布尔类型.

除了使用Data_Type定义数据类型, AADL-ASN.1属性集还支持对4种复杂数据类型进行详细描述.需要使用的属性定义如下: 属性ASN1_Item是一个record类型, 定义了复杂数据类型中的基本元素, 即复杂数据类型中的成员变量.其中, ID_Value定义的当前变量在有序集合(ASN1_Sequence)和有序数组(ASN1_Sequence_of)中的序号, 如果是无序的结构, ID_Value默认值为–1.Name_Value定义当前变量的变量名, Type_Value定义当前变量的类型, Default_Value定义当前变量的默认值.属性ASN1_Sequence、ASN1_Sequence_of、ASN1_Set和ASN1_ Set_of分别定义上述4种复杂数据类型.其中, ASN1_Sequence和ASN1_Set的属性值的类型为list, list中的元素为ASN1_Item.ASN1_Set_of和ASN1_Sequence_of的属性值为record, record的成员item类型为list定义数组中的元素, 成员Type_Value定义数组中元素的类型, 成员Count定义数组中元素的个数, Type_Rename_To定义引用类型.

3.2 AADL-SDL混合建模属性集扩展

在第3.1节中主要介绍了AADL-ASN.1交互数据属性集扩展, 本节将给出AADL-SDL混合建模属性集扩展的主要内容.在AADL-SDL混合模型中AADL构件的功能行为使用SDL模型表达, SDL功能行为模型在执行过程中的运行时属性通过AADL-SDL混合建模属性集进行建模.属性集中主要包括SDL模型运行时的分发策略、分发周期等运行时属性, 数据构件的操作类型、访问权限属性, SDL行为模型的相关属性等.AADL-SDL混合建模属性集扩展的主要内容见表 2.

Table 2 Properties of the SDL model 表 2 SDL模型相关属性

属性Connections_Types定义AADL构件间端口数据传输的类型, 支持立即传输(immediate)和延迟传输(delay), 属性定义如下:

属性Supported_Connection_Types的类型为枚举类型, 定义了两种支持的连接类型Immediate和Delay, 作为属性Connection_Types的属性值.例如将Supported_Connection_Types中的Immediate赋值给属性Connections_ Types, Connections_Types= > Immediate定义立即传输的数据传输连接.

AADL-SDL支持对周期(periodic)、偶发(sporadic)、非周期(aperiodic)等线程分发策略进行建模, 具体使用到的属性如下:

属性Supported_Dispatch_Protocols是枚举类型, 作为属性Dispatch_Protocols的属性值支持上述3种分发策略.例如, Supported_Dispatch_Protocols中的Periodic定义了周期分发策略, Dispatch_Protocols= > Periodic绑定的AADL线程构件采用的就是周期分发策略.

属性Deadline继承了AADL的时间属性Time, 描述AADL线程的最长执行时间.例如, Deadline= > 500ms, 当前线程构件的最长执行时间为500ms.

属性Dispatch_Period描述不同分发策略下AADL线程构件的需要描述的时间片段.例如, AADL线程构件绑定Dispatch_Period= > 10ms, 在周期分发策略下, 定义了线程的分发周期为10ms.在偶发(sporadic)分发策略下, 定义了相邻触发事件的最小时间间隔为10ms.

属性Period_Offset定义了采用周期分发策略的线程的启动偏移时间.例如, 在未设置当前属性的周期线程中, 默认在系统启动时就启动线程.Period_Offset= > 10ms绑定的线程, 在系统启动后延迟10ms启动线程.

除了线程的分发过程, AADL-SDL属性集还支持对数据的操作与访问类型.数据的操作类型包含保护数据(protected)与非保护数据(unprotected).数据的访问类型包括只读、只写和读写.属性的具体定义如下所示:

其中, 属性Support_Operation_Kinds与Support_Permissions是枚举类型, 分别定义属性Data_Kind与Access_Permission的属性值.例如, Data_Kind= > Protected、Access_Permission= > Read_Only描述了当前AADL数据构件定义的数据为保护类型并且只读.

AADL-SDL属性集定义了对SDL模型的接口描述, 以确保AADL模型能够与SDL模型的接口兼容.使用到的主要属性如下所示:

AADL-SDL扩展属性集支持通过SDL system实现AADL构件的功能行为, 通过SDL signal实现数据交互.其中, 属性Supported_Element_Types定义了AADL构件支持的SDL元素, 属性Element_Name描述当前AADL构件对应的SDL实现的名称, 属性Element_Type定义了当前构件在SDL中实现为signal或system, 属性Source_ Language定义当前构件的具体实现.此外, 如果AADL中的数据传输过程含有参数, 则使用属性Signal_Type描述参数的类型.

4 Ada多任务代码生成

AADL-SDL混合模型的Ada多任务代码生成主要包括两个部分: AADL体系结构模型到Ada多任务代码的生成和SDL功能行为模型到Ada多任务代码的生成.本节将详细介绍上述代码生成方法的具体内容.

4.1 AADL模型到Ada多任务代码生成方法

AADL模型到Ada多任务代码的生成方法主要包括3个部分.(1) AADL结构模型到Ada框架代码的生成方法; (2) AADL数据构件到Ada数据类型代码的生成方法; (3) AADL线程构件到Ada运行时代码的生成方法.

4.1.1 AADL结构模型到Ada框架代码的生成方法

AADL结构模型主要由系统构件、进程构件、线程构件和子程序构件等多种构件组成.AADL结构模型生成的Ada框架代码主要包含多个Ada过程(procedure)、函数(function)、任务(task)以及相互之间的调用过程. AADL系统构件与进程构件对应Ada代码中的过程, 系统构件和进程构件中的特征(feature)、数据子构件(data subcomponent)和连接(connection)分别对应Ada过程的形参、局部变量和保护对象.AADL线程构件和子程序构件分别对应Ada代码中的任务和函数.Ada框架代码中每个Ada过程、函数、任务只包含输入输出参数、局部变量声明与调用关系, 不包含软件功能行为代码.

4.1.2 AADL数据构件到Ada数据类型代码的生成方法

AADL数据构件生成Ada数据类型代码的过程包括如下步骤: 首先, AADL数据构件通过绑定AADL-ASN.1属性集对AADL-SDL混合模型中使用的ASN.1数据类型进行建模, 得到AADL数据模型; 其次, 通过AADL2ASN1转换算法生成ASN.1数据文件; 然后, 通过ASN.1编译工具Asn1Scc[35]读取ASN.1数据文件, 并生成对应的Ada数据类型代码.AADL数据模型到ASN.1数据文件的转换算法如下所示:


算法输入为AADL数据模型AADL_Data, 输出为ASN.1数据ASN1_Data.首先获取AADL数据模型中的全部属性data_properties(第4行).通过函数setConfig和setType分别从属性中解析出ASN.1数据的名称、ASN.1数据文件路径等配置信息和ASN.1数据的类型, 并赋值给ASN1_Data(第5行~第6行); 其次, 通过函数getIs_ Base_Type获取属性Is_Base_Type的值(第7行), 判断当前数据是否为基本数据类型(第8行).如果是基本数据类型, 则通过函数setID、setRange和setValue分别获取ASN.1数据的编号、范围和默认值, 并赋值给ASN1_ Data(第8行~第11行).如果不是基本数据类型, 则通过函数getSubDatas获取复杂数据类型所有的成员变量, 并存入链表subdatas中, 遍历链表subdatas, 对链表中每个元素递归调用算法AADL2ASN1, 并将返回值添加到ASN1_Data的成员变量中(第12行~第18行).最后, 返回ASN.1数据ASN1_Data.

4.1.3 AADL线程构件到Ada运行时代码的生成方法

AADL线程构件生成的Ada代码主要包括两部分: Ada运行时代码和Ada任务执行代码.其中, Ada任务执行代码通过SDL行为模型生成(详见第5.2节), 因此本节主要介绍Ada运行时代码的生成.

根据第4.4节中对AADL-SDL属性集的介绍, 本文提出的AADL-SDL混合建模方法中, 主要支持AADL周期调度、偶发调度和非周期调度这3种线程调度策略.

Ada运行时代码生成主要采用Ada语言提供的generic机制, 即提供一种参数化模板的方式来定义Ada运行时代码模板.本节主要考虑Ada运行时代码的生成过程, 具体任务功能通过调用SDL模型生成的SDL_ procedure来实现.

AADL周期线程调度策略生成对应的Ada周期任务代码模板APTCT(Ada periodic task code template)见表 3.AADL线程通过属性Dispatch_Protocols= > Periodic定义当前线程的分发策略为周期性分发, 通过属性Dispatch_Period= > TIME(ms)定义当前线程的周期.TIME用来表示时间数值.例如, 绑定属性Dispatch_Protocols = > Periodic与Dispatch_Period= > 20ms的AADL线程对应的Ada任务通过时间触发执行, 以20ms为周期, 每隔20ms触发1次.

Table 3 Ada periodic task code template (APTCT) 表 3 Ada周期任务代码模板

周期性任务代码模板的主要参数包括变量与过程.例如, 变量Task_Period表示任务执行周期.过程SDL_ procedure为SDL行为模型生成的Ada任务执行过程代码, 通过关键字in/out设置Ada任务执行过程的传入传出参数.

AADL偶发线程调度策略对应的Ada偶发任务代码模板见表 4.AADL线程通过属性Dispatch_Protocols= > Sporadic定义当前线程的分发策略为偶发, 通过属性Dispatch_Period= > TIME(ms); 规定了任务连续分发(dispatch)的最小时间间隔为TIME(ms).例如, 绑定属性Dispatch_Protocols= > Sporadic与Dispatch_Period= > 20ms的AADL线程对应的Ada任务通过接收外部参数或者队列内参数触发执行, 即如果队列不为空, 那么读取队列内数据并触发过程; 如果队列为空, 接收到外部数据, 那么读取外部数据并触发任务.并且, 由于属性Dispatch_ Period= > 20ms规定了触发最小时间间隔为20ms, 即每次任务执行结束后, 需要等待20ms才能从队列或者外部读取下一个数据并触发任务.

Table 4 Ada sporadic task code template (ASTCT) 表 4 Ada偶发任务代码模板

Ada偶发任务代码模板ASTCT(Ada sporadic task code template)与Ada周期任务代码模板不同, 首先, Ada偶发任务的阻塞发生在任务体中, 通过调用函数Wait_For_Incoming_Events监听端口是否有事件到达; 其次, 计算最小到达间隔时间Minimal_Inter_Arrival来确保相连相邻任务分发之间存在最小时间间隔.

AADL非周期线程调度策略对应的Ada非周期任务代码模板AATCT(Ada aperiodic task code template)见表 5.

Table 5 Ada aperiodic task code template (AATCT) 表 5 Ada非周期任务代码模板

AADL线程通过绑定属性Dispatch_Protocols= > Aperiodic定义当前线程的分发策略为非周期, 非周期调度没有时间属性.例如, 绑定属性Dispatch_Protocols= > Aperiodic的AADL线程对应的Ada任务在执行过程中通过接收外部参数或者队列内参数触发执行, 通过参数触发执行的过程与偶发调度相同, 不同的是偶发调度设置了触发最小时间间隔, 而非周期调度没有.非周期任务只要接收外部参数或者队列不为空就会触发执行.

Ada非周期任务模板和偶发任务模板的主要区别是, 前者生成的代码中没有最小到达间隔时间Minimal_ Inter_Arrival的限制, 当Wait_For_Incoming_Events监听到事件时, 就触发当前线程, 执行当前线程的功能任务.

通过对上述Ada任务代码模板设置不同的参数, 实现Ada任务代码的生成, 对于多个任务间的数据交互, 使用Ada队列代码模板AQCT(Ada queue code template)实现不同任务间的数据交互, 将队列创建为Ada保护类型(protected), 以支持多任务调用, Ada队列对应的代码模板声明如下所示:

其中, queue_size定义当前队列容量; Signal_Type通过参数化的方式定义队列中元素的类型; 通过进入点put, get实现入队出队操作, put和get参数s为队列中的元素, t为入队出队延迟时间, 通过设置参数t的值, 支持在周期不同的任务之间进行数据交互; Initialize实现队列的初始化操作; Size获取当前队列中的元素个数.

4.2 SDL模型到多任务Ada代码生成

欧空局ESA开发的OpenGEODE开源工具支持从SDL模型中生成串行Ada代码, 在此基础上, 我们提出面向多核的SDL多任务代码生成方法.如图 3所示, 首先, 将SDL系统结构(system和block)转换为Ada多任务框架代码; 其次, 将SDL块结构(block)之间的异步通信(无延迟/延迟)转换为基于Ada非延迟/延迟队列的通信机制, 从而支持目标多任务通信; 最后, 基于分别编译技术, 利用OpenGEODE将SDL块中的进程和过程层编译为目标Ada代码.

Fig. 3 Ada multi-task code generated from SDL 图 3 SDL到Ada多任务代码生成

首先, 图 3深色部分给出了SDL系统结构到Ada多任务框架内代码的生成.如表 6所示, SDL system构件转换为Ada procedure, 其中, SDL模型与环境的交互转换为procedure中的参数, 以支持被AADL模型生成的Ada线程所调用.而SDL中层次化的Block结构, 将转换为对应的嵌套Ada Task结构.

Table 6 Ada code generated from SDL system structure 表 6 SDL系统结构生成方法

其次, SDL异步通信转换方法包括非延迟通信和延迟通信(如图 3红色部分所示).对于SDL非延迟通信, 本文采用Ada队列的方式实现SDL不同块间采用异步通信机制, 具体实现见表 7: 异步队列(asyn_queue)定义为保护类型, 以保证并发调用入队/出队(put/get)操作过程的正确性.

Table 7 Ada queue code template 表 7 Ada队列代码模板

对于延迟通信, 由于实际的延迟取决于真实物理环境(网络、线路)中的约束, 因此仅定义出队和入队操作.为了方便后续案例的分析与实验, 本文通过对出队操作进行随机设置延迟时间访问, 从而实现仿真延迟通信.具体实现见表 7, 包含参数传入和随机值设置两种方式, 其中, RandomGenerator函数用于生成随机延迟时间(默认范围为0~10s), delay表达式用于设置延迟出队操作.

最后, 对于SDL模型中的功能行为(由process和procedure组成, 如图 3青色部分所示), 本文利用OpenGEODE已有串行Ada代码生成功能, 自动生成对应的Ada procedure, 并根据通信类型将其对应接口和异步通信队列操作相关联, 其中, 输入对应出队操作, 输出对应入队操作.

5 原型工具

原型工具主要包含两部分: AADL+SDL混合建模工具ASCM(AADL and SDL co-modeling tool)和多任务Ada代码生成工具AS2MTA(AADL and SDL to multi-task Ada code generator).

5.1 AADL-SDL混合建模工具ASCM

ASCM支持AADL+ASN.1和AADL+SDL的混合建模功能, 支持ASN.1数据文件的生成.ASCM工具整体框架如图 4所示.

Fig. 4 The structure of ASCM 图 4 ASCM工具结构

ASCM支持AADL软件体系结构建模、ASN.1数据建模和SDL功能行为建模, 并通过ASN.1属性集和SDL属性集实现AADL体系结构模型、ASN.1数据模型和SDL功能行为模型这3种模型的集成, 最终实现AADL- SDL的混合建模.其中, 对于AADL体系结构建模ASCM使用RNL2AADL[36]支持从RNL(restricted natural language)到AADL架构模型的自动生成.

5.2 Ada多任务代码生成工具AS2MTA

AS2MTA支持AADL模型到Ada代码框架的生成、SDL模型到Ada行为代码的生成以及Ada代码框架与Ada行为代码的集成, AS2MTA工具的整体框架如图 5所示.

Fig. 5 The structure of AS2MTA 图 5 AS2MTA工具结构

AS2MTA主要分为5个部分.

1) AADL2Ada: 基于Ada代码生成工具AADL2Ada, AS2MTA支持AADL软件体系结构模型生成Ada代码框架.

2) ASN2Ada: 基于开源ASN.1编译工具Asn1Scc, AS2MTA支持ASN.1数据类型生成Ada数据定义代码.

3) SDL2Ada: 基于开源SDL建模工具OpenGEODE, AS2MTA支持SDL模型到Ada任务行为代码的生成.

4) AS2MTA支持ASN.1属性集与AADL数据构件生成Ada数据访问接口, 以支持Ada数据定义代码的外部调用.

5) AS2MTA支持SDL属性集与AADL构件生成Ada运行时代码, 以支持Ada框架代码对多个Ada任务行为代码的多任务调度.

ASCM与AS2MTA通过Java实现, 工具的具体模块与代码规模见表 8.

Table 8 Statistics of tool implementation 表 8 工具实现数据统计

工具的主要特点包括:

(1) 建模方面: ASCM工具基于AADL开源建模工具Osate进行功能扩展, 集成了SDL开源建模工具OpenGEODE, 提供了AADL-SDL混合建模平台; 扩展了AADL-ASN.1属性集和AADL-SDL属性集, 并集成到ASCM工具中, 支持ASN.1属性集与AADL数据构件到ASN.1数据文件的自动生成与同步, 简化了ASN.1数据模型的建模过程, 并保证AADL模型与SDL模型交互数据的一致性.

(2) 代码生成方面: AS2MTA基于Ada代码生成工具AADL2Ada进行功能扩展, 集成了ASN.1开源编译器Asn1Scc与SDL开源建模工具OpenGEODE, 支持AADL-SDL混合模型到多任务Ada代码的生成.

(3) 系统应用方面: 与实际工业界合作, 使用ASCM工具对GNC系统进行了AADL-SDL混合建模, 并使用AADL-SDL混合模型通过AS2MTA工具生成对应的多任务Ada代码.

6 案例分析与方法对比

本节将使用AADL-SDL混合建模工具ASCM和多任务Ada代码生成工具AS2MTA对实际的工业界案例进行AADL-SDL混合建模与多任务Ada代码生成.并且, 在仿真环境下对生成的多任务Ada代码进行运行测试, 并与前期研究进行对比分析.最后, 结合对比分析结果对本文方法的有效性进行分析评估.

6.1 姿态轨道控制系统AOCS

导航、制导与控制系统GNC(guidance navigation & control)主要负责航天器姿态和轨道确定与控制.GNC由导航传感器(例如, 导航相机、星敏传感器、陀螺仪和加速度计)、姿态轨道控制系统AOCS(attitude and orbit control system)和执行器(例如, 反作用飞轮、喷嘴和发动机)组成.其中, AOCS主要负责执行轨道确定、轨道控制、姿态确定和姿态控制等任务.此外, 通常需要在导航传感器和AOCS之间添加一个数据处理单元DPU(data processing unit), 用来对导航传感器发送的数据进行预处理.图 6所示为GNC系统的简化框图.

Fig. 6 GNC system structure 图 6 GNC系统结构

为了方便介绍本文所提出的方法, 我们主要以AOCS为例, 详细介绍AADL-SDL混合建模方法和Ada多任务代码生成方法.AOCS系统主要包括姿态确定、姿态控制、轨道计算和轨道控制等9个模块, 总计124个子模块和21种计算模式.

6.2 AADL-SDL混合建模

AADL-SDL混合建模过程主要分为4个部分.

(1) 基于SDL对子系统的功能行为建模.

(2) 基于AADL-ASN.1交互数据属性集对系统中的交互数据进行建模.

(3) 基于AADL对系统体系结构进行建模.

(4) 基于AADL-SDL混合建模属性集将SDL功能行为模型与对应的AADL构件进行集成.

6.2.1 基于SDL的功能行为建模

以AOCS系统中轨道计算模块的轨道根数计算(Orbital_Elements_Calculation)为例, 详细介绍SDL功能行为建模过程.轨道根数计算的输入参数包括轨道倾角、轨道角速度、航天器当前时钟、地面注入时间、轨道递推初始值等, 其计算过程包括长期项计算(Long_Term_Calculation)、短周期项计算(Short_Period_Term_ Calculation)、平根数计算(Mean_Orbit_Elements_Calculation)和瞬根数计算(Instantaneous_Elements_Calculation)等.对应的SDL模型结构如图 7所示.

Fig. 7 SDL behavior model of Orbital_Elements_Calculation 图 7 轨道根数计算过程SDL行为模型

首先, 使用ASN.1标准对轨道根数计算过程的数据进行建模, 以轨道倾角i_0为例, 轨道倾角的数据类型为浮点数, 范围为0~180的闭区间.因此, 定义范围在0~180之间的浮点数类型FLOAT_: : =REAL(0..180), 并使用该浮点数类型定义轨道倾角i_0:=FLOAT_.其次, 使用SDL信号(signal)将轨道倾角数据从SDL系统传递到SDL功能块中.轨道倾角的SDL信号的定义为signal i_0(FLOAT_), 参数的类型与轨道倾角的类型相同.然后, 定义读取轨道倾角并进行相关数值计算的SDL功能块roq, 并将signal i_0(FLOAT_)作为roq功能块的输入信号之一.最后, 在roq功能块内定义roq参数计算的SDL进程, 并在SDL进程内部定义具体计算行为.

6.6.2 基于AADL-ASN.1交互数据属性集的交互数据建模

在AADL-SDL混合建模过程中, 通过AADL-ASN.1交互数据属性集描述异构模型间的交互数据.本节以AOCS控制系统中的轨道根数为例, 详细介绍AADL-SDL混合模型中数据类型的建模过程.轨道根数主要包含轨道倾角(Orbital_Inclination)、升交点黄经(Longitude_Of_The_Ascending_Node)、离心率(eccentricity)、近日点辐角(Argument_Of_Perihelion)、半长轴(Semi_Major_Axis)和平近点角(Mean_Anomaly)这6个必要参数.其中, 轨道倾角、升交点黄经、近日点幅角和平点近角描述的数据使用ASN1_Real进行建模, 其角度范围为0~180的闭区间.以轨道倾角数据为例, 对应的AADL数据构件定义如下所示:

离心率对应的数据构件的数据类型为浮点数, 使用ASN1_Real进行建模, 且离心率的范围为0~1.因此, 为属性Asn1_Properties: : Real_Value_Range赋值为0.0..1.0.半长轴对应飞行器运行轨道的半长轴, 数据类型也为浮点数.离心率和半长轴对应的AADL数据构件定义如下:

轨道根数数据构件(Orbital_Elements)的类型为包含6个元素的无序集合, 通过绑定属性Asn1_Properties: : Base_Type= > ASN1_Set与Asn1_Properties: : ASN1_Set对Orbital_Elements的内部结构进行建模, 对应的AADL数据构件定义如下:

6.2.3 基于AADL的系统体系结构建模

本节主要介绍AOCS系统的AADL体系结构模型, 如图 8所示.

Fig. 8 AADL architecture model of AOCS system 图 8 AOCS系统体系结构模型

AOCS系统的体系结构模型包括AADL系统构件(AOCS_Init).在AOCS_Init构件中定义姿态确定子系统构件(Pose_Check_Init)、姿态控制子系统构件(Pose_Control_Init)、轨道计算子系统构件(Orbit_Calculate_Init)和轨道控制子系统构件(Orbit_Control_Init).Orbit_Calculate_Init构件中定义轨道根数计算对应的AADL线程构件Orbital_Elements_Calculation; 然后, 使用AADL数据构件与AADL-ASN.1属性集扩展对各个子系统间的交互数据进行建模(见第4.2节); 最后, 使用AADL-SDL属性集扩展将Orbital_Elements_Calculation与轨道根数计算过程的SDL模型进行关联(见第4.3节).

此外, AOCS系统的各个子系统构件中的不同功能模块可采用不同计算模型表达功能行为, 并通过扩展属性集的方式实现多种异构构件与AADL体系结构模型的集成.例如, 针对具有较多数据流计算特征的构件使用同步语言SIGNAL建模(如, 姿态控制子系统中的消除偏模块[28, 29]); 针对具有较多控制流特征的构件, 可以使用AADL Behavior Annex的状态机进行描述; 对于部分构件, 可以重用已有的C/Ada代码描述; 对于具有异步行为特征的构件, 可以使用SDL进行建模(如, 轨道根数计算模块).

6.2.4 AADL-SDL模型集成

本节以AOCS系统的轨道根数计算过程为例详细阐述基于AADL-SDL混合建模属性集的AADL-SDL模型集成过程.首先, 通过需求文档获取轨道根数的计算过程的相关参数与具体的计算行为细节; 其次, 以第4.3节中的轨道根数数据构件Orbital_Elements作为轨道根数计算过程的输入参数, 对航天器运行过程中的轨道瞬根数、平根数等参数进行周期性的迭代计算, 平均执行周期为1.5s.

其中, AADL子程序构件OE_Msg用来描述轨道根数计算构件与其他AADL线程构件间的数据交互.交互数据的类型为Orbital_Elements, 属性Source_Language= > SDL和Element_Type= > signal定义当前subprogram构件对应SDL模型中的signal.OE_Msg定义如下:

轨道根数计算过程对应的AADL构件Orbital_Elements_Calculation其主要结构如下所示.首先, 子程序构件OE_Msg定义了Orbital_Elements_Calculation的输入输出端口in_msg和out_msg; 其次, 属性Signal_Name描述了对应的SDL行为模型的输入输出端口为OEC_In与OEC_Out; 然后, 属性dispatch_Protocols= > Periodic和Dispatch_Period= > 1500ms描述了当前线程为周期线程, 周期大小为1 500ms.Orbital_Elements_Calculation的详细定义如下所示:

6.3 Ada多任务代码生成 6.3.1 Ada框架代码和数据类型代码的生成

首先, 基于Ada代码生成工具AADL2Ada生成对应的Ada代码框架.然后, 基于ASN.1开源编译工具Asn1Scc生成Ada数据类型代码.AOCS系统对应的代码整体结构如图 9所示, 其中, system_satellite_attitude_ orbit_control_init_impl为顶层系统, 包含功能函数库(system_commonfunc_init)、主控系统(system_ctrl_process_ init)、轨道计算(system_obtcalmain_init)、轨道控制(system_obtctrl_init)、姿态确定(system_poscheck_init)和姿态控制(system_posctrl_init)这6个子系统和数据类型定义(dataview-uniq).其中, 主控系统(system_ctrl_process_ init)中还包含8个子功能模块.

Fig. 9 Ada framework code for AOCS 图 9 AOCS系统Ada框架代码

6.3.2 Ada运行时代码生成

本节结合第4.1.3节给出的Ada运行时代码的生成过程, 以Orbital_Elements_Calculation为例进行AADL- SDL混合模型到多任务Ada代码的生成.轨道根的计算过程属于周期执行过程, 因此, AS2MTA选用第4.1.3节中提到的Ada代码模板APTCT进行代码生成工作, 由于轨道根计算过程的执行周期为1 500ms, 因此, APTCT的参数设置可见表 9.

Table 9 The parameters of Ada runtime code template in Orbital_Elements_Calculation 表 9 轨道根计算过程的Ada运行时代码模板参数设置

通过Ada代码模板生成对应的运行时代码, 通过队列模板生成各个任务间的交互代码.图 10展示了多个Ada任务通过Ada队列代码进行任务间的交互过程, AADL模型中包括轨道根数计算线程在内一共n个线程构件.以Orbital_Elements_Calculation线程构件与T2线程构件为例, Orbital_Elements_Calculation构件通过Ada周期任务代码模板APTCT生成对应的Ada周期任务代码Orbital_Elements_Calculation_a.T2构件生成对应Ada周期任务代码T2_a.Orbital_Elements_Calculation构件与T2构件之间的交互数据OE_Msg通过Ada队列代码模板AQCT生成Orbital_Elements_Calculation_a与T2_a进行交互的队列代码OEC_2_T2_Queue.

Fig. 10 Ada runtime code 图 10 Ada运行时代码

6.3.3 SDL模型到多任务代码生成

本节以第6.2.1节轨道根数计算SDL行为模型为例, 详细介绍SDL行为模型到Ada多任务代码的生成过程.轨道根数计算SDL行为模型分别对应于编译后的部分目标Ada代码, 见表 10.

Table 10 Multi-tasking Ada code from SDL 表 10 SDL多任务Ada代码

其中, Ada过程Orbital_Elements_Calculation根据SDL模型中system组件生成, 其参数列表根据SDL模型与环境交互方向分别使用关键字in和out进行标注.Orbital_Elements_Calculation过程中包括25个Ada task, 分别根据源SDL模型中的block组件生成.对于不同块之间的异步通信, 根据输入信号对应的块名声明对应的延迟队列.对于块中的具体功能, 基于OpenGEODE生成对应的Ada目标代码.以AQ块与U_块为例, U_过程为U_task的计算部分, 由OpenGEODE生成.此外, U_task中还包括两类特殊的Ada过程: RI_U_和PI_AQ, 其中, PI_U_负责从DP块对应的延迟队列中取数据, 而RI_AQ负责将计算结果放入AQ块对应的延迟队列中.

6.4 AADL-SDL混合模型分析与评估

首先, 使用SDL对AOCS系统的软件功能模块内部行为进行建模.SDL模型的统计数据见表 11.

Table 11 SDL model statistics of AOCS system 表 11 AOCS系统SDL模型统计

其次, 使用限定自然语言生成AADL工具RNL2AADL[36], 通过自然语言需求模板对AOCS系统自然需求文本中的软件架构信息进行抽取, 并通过抽取的软件架构信息生成AADL系统体系结构模型, 体系结构模型主要包括4个主系统和309个软硬件构件, 其中主要包括1个顶层系统构件、4个一级子系统构件、125个二级子系统构件、72个3级子系统构件、259个子程序构件、632个线程构件.除了描述系统结构的构件外, 还包括148个数据构件, 主要对整个系统中各个构件之间进行通信交互的数据报文建模; 1 146个数据访问连接; 902个外部过程访问连接.AADL软件体系结构模型的统计数据见表 12.

Table 12 The statistical data AADL model of AOCS system 表 12 AOCS系统AADL模型统计

最后, 通过AADL-SDL扩展属性集实现上述SDL功能行为与AADL体系结构模型的集成.

在第2节中, 我们提出了AADL及行为附件BA、同步语言Signal、SDL、Simulink、C、Ada的多范式建模总体框架, 本文主要研究AADL和SDL混合建模方法.通过和工业界的合作与确认, 这里选用适用范围、生成代码特征等指标对AADL-SDL、AADL-BA[37]、AADL-Signal[28, 29]这3种混合建模方法进行评价, 分析结果见表 13.

Table 13 The comparison and evaluation of AADL-BA, AADL-Signal, AADL-SDL 表 13 AADL-BA、AADL-Signal、AADL-SDL混合模型对比评估结果

表 13所示, AADL-BA、AADL-Signal与AADL-SDL混合建模方法的对比分析结果如下.

(1) 适用范围: 在通过混合模型进行代码生成的过程中, AADL-BA通过自动机模型生成代码, 代码生成过程采用的编程策略以系统的状态变化为核心, 生成代码适用于需要进行频繁状态切换的反应式系统.AADL- Signal通过数据流等式描述数值的计算过程, 具有同步并发的描述语义, 适用于对系统中数值计算的算法与同步调度算法进行建模与代码生成.如航天嵌入式系统中的轨道计算、姿态计算等相关算法.AADL-SDL侧重于描述系统实现过程的流程控制与异步行为, 可以清晰地展示出系统不同功能模块间的流程划分, 实现代码的解耦, 提升各部分代码的复用性.

(2) 生成代码特征: 针对AADL-BA混合建模, 由于BA将系统行为抽象为状态与状态迁移.生成代码中引入了状态机结构, 适合对软件行为中的状态变换行为进行建模.针对AADL-Signal混合建模, Signal采用数据流等式的方式进行建模, 模型抽象程度较高, 适用于对软件行为中数值计算相关的算法内容进行建模.针对AADL- SDL混合建模, SDL支持对系统行为中的业务流程与异步控制进行建模.可以准确、清晰地描述出软件行为中的流程控制行为.

对比分析结果, 正是体现了安全关键异构软件系统需要进行多范式建模的必要性.AADL-BA、AADL-Signal及AADL-SDL混合建模方法能够较完整地支持安全关键异构软件系统的建模要求.

6.5 生成代码分析与评估 6.5.1 与AOCS已有代码对比分析

首先, 针对AOCS系统AADL-SDL混合模型, 基于AS2MTA进行多任务的Ada代码生成, 并且, 选取生成代码规模和代码运行时间两个指标来对本文所提出的方法进行评估.针对这两个指标, 我们分别选取AOCS系统源代码和AS2MTA生成代码在多核仿真环境下进行实验结果统计, 其中, AOCS系统源代码的相关实验由实际工业界进行, 并为我们提供处理后实验结果数据.实验具体结果见表 14.

Table 14 The test results of generated code (Ⅰ) 表 14 生成代码运行测试结果(Ⅰ)

通过表 14中的数据可知, AS2MTA生成的代码规模比AOCS系统源码要大, 主要原因包括: (1) 生成多任务运行时; (2) 本文的代码生成方法还未包含编码策略的优化等过程.

AS2MTA生成的代码的平均执行时间与AOCS系统源码的平均执行时间的数据统计情况如图 10所示.

通过分析表 14图 10, 我们得出AS2MTA生成的代码的平均执行时间与AOCS系统源码的平均执行时间对比分析结果.相较于单核仿真环境下AS2MTA的生成代码, 多核仿真环境下的生成代码平均执行时间有所提升.但是, 与AOCS系统源码相比, 在运行代码体量较大的情况下, AS2MTA生成多任务代码的运行时间较短.但在运行代码体量较小的情况下, AOCS系统源码的执行时间较短.造成这种现象的主要原因可能是, 虽然并发运行多任务代码会提升运行速率, 但是创建多任务的过程会占用部分时间, 在运行代码体量较小的情况下, 创建多任务的时间占用了大部分的运行时间, 描述功能逻辑的代码实际运行时间只占用了运行时间的一小部分, 代码的并行执行对代码运行效率产生的提升效果无法弥补创建任务对代码运行效率产生的降低效果, 导致多任务代码的运行效率低于AOCS系统源代码的运行效率.在运行代码体量较大的情况下, 描述功能逻辑的代码实际运行时间远大于任务创建时间, 则创建任务对代码运行效率产生的影响就可以忽略不计, 并行代码的运行效率就会高于源代码的运行效率.未来, 我们将对AS2MTA的生成代码进行优化.

6.5.2 与AADL-BA、AADL-Signal生成代码对比分析

本节针对代码规模和代码运行时间两个指标, 分别选取前期研究中AADL-BA混合模型生成代码与AADL-Signal混合模型生成代码和AS2MTA生成代码在仿真环境下进行实验.实验具体结果见表 15.

Table 15 The test results of generated code (Ⅱ) 表 15 生成代码运行测试结果(Ⅱ)

AADL-BA生成代码、AADL-Signal生成代码的平均执行时间与AS2MTA生成代码的平均执行时间的数据统计情况如图 11所示.

Fig. 11 Average code execution time 图 11 代码平均执行时间统计

Fig. 12 Average code execution time 图 12 代码平均执行时间统计

通过分析表 15图 11, AS2MTA生成的代码的平均执行时间与AADL-BA和AADL-Signal生成代码的平均执行时间对比分析结果如下.

1) 单核仿真环境下的平均执行时间: AS2MTA生成代码相较于AADL-BA与AADL-Signal的生成代码的平均执行时间, 是最短的.在单核仿真环境下运行, 多任务并发对代码执行效率的提升影响较低, 影响代码运行效率的主要因素为代码结构.AADL-BA为所有生成代码引入状态机结构, 对于功能行为中的状态变换, 通过状态机代码可以提升运行效率, 对于不适用状态机的功能行为, 则由于状态机代码的结构复杂而降低了代码的执行效率, 因此, AADL-BA的平均执行时间最长.AADL-Signal侧重于考虑数值计算行为中的并发, 运行测试也只针对于数据计算的代码实现过程, 因此, 相较于AADL-BA代码的平均执行时间有所降低.AADL-SDL侧重于多个控制流程间的并发, 在单核仿真环境下, AADL-Signal与AADL-SDL生成代码的平均执行时间没有明显差距, AADL-SDL相较于AADL-BA, 由于代码生成结构的优化, 缩短了代码的平均执行时间.

2) 多核仿真环境下的平均执行时间: 相较于单核仿真环境, 多核仿真环境下3种建模方法的生成代码运行效率都有所提升.与前期研究相比, AS2MTA生成代码的平均执行时间最短, 运行效率最高.并且, 通过分析图 10可知, AADL-Signal侧重于数据计算过程的并发行为, 姿态确定和轨道计算两个模块的主要内容是航天器各种姿态参数与轨道参数的计算过程.因此, 在姿态确定和轨道计算两个模块中, AADL-Signal生成代码的运行效率较高, AS2MTA生成代码的运行效率没有明显提升.但是, 姿态控制与轨道控制模块的主要职责是根据参数对航天器的姿态与轨道进行调整, 代码结构以流程控制为主, 因此, 相较于AADL-Signal, 使用AS2MTA生成代码的执行效率有明显提升, 代码平均执行时间大幅度缩短.

7 相关工作

本文的相关工作主要包括3个方面: 多范式建模、混合建模和基于模型的代码生成.

7.1 多范式建模相关工作

Vangheluwe在文献[4]中介绍了多范式建模与仿真, 并将多范式建模的研究方向分为3个部分: (1) 多形式化建模, 涉及到描述的不同形式化模型之间的耦合和转换.(2) 模型抽象, 涉及到不同抽象级别上模型之间的关系.(3) 元建模, 描述模型的模型.

Mosterman在文献[5]中将Vangheluwe描述的多范式建模方法的3个研究方向抽象为多范式建模的3个维度: 多抽象、多形式化和元模型.并且, 基于这3个维度引入了领域独立的多范式建模框架, 通过一个混合动力系统的案例, 描述了多范式建模方法的统一框架.

Morozov将多范式建模方法应用在信息物理系统CPS(cyber-physical systems)中[38], 使用UML定义了CPS系统的元模型, 并使用汽车喷漆的案例概述了元模型的使用过程.

Blouin提出了一种对嵌入式系统架构模型进行定量分析的多范式建模语言QAML(quantitative analysis modeling language)[39], QAML通过利用AADL、SysML、MARTE、AUTOSAR等多领域建模语言对嵌入式系统架构模型进行定量分析.

Blouin和Borde在文献[40]中提出AADL作为一种多范式建模语言, 由于具有可以扩充其他形式语义的特性, 因此可以作为系统多范式建模方法的核心.同时, 介绍了ADL在MPM4CPS中的应用, 并使用一个机器人案例说明AADL多范式建模的具体用法, 描述了自顶向下以AADL架构模型为中心组合使用SysML、MARTE和UML等模型, 从需求分析开始, 然后进行系统设计、设计分析和验证, 最后自动生成代码的设计流程.

SysML[7]作为一种针对系统工程领域的图形化建模语言, 侧重于复杂系统的整体架构.适合在系统开发生命周期的初期对系统进行需求捕获、边界定义、逻辑架构设计等, 由于缺乏形式语义, 在系统详细设计与实现阶段的应用较少.AADL基于构件对软件体系结构进行建模, 提供进程、线程、子程序、处理器、外部设备等多种构件, 适合在系统开发生命周期后面的阶段进行详细的设计和具体实现.本文提出的混合建模方法主要面向多任务Ada代码生成工作, 需要对系统详细设计以及实现细节进行建模, 因此, 本文使用AADL对系统体系结构进行建模.

7.2 混合建模以及代码生成相关工作

多领域的模型集成作为一种多范式建模方法, 不同领域建模语言之间的混合建模过程是多领域的模型集成的重要组成部分.AADL主要通过扩展附件和混合建模实现多领域的模型集成.

AADL目前支持Behavior Annex[18]通过集成时间自动机模型对软件行为中的状态控制进行描述; BLESS Annex[41]则在Behavior Annex的基础上为自动机添加BLESS Assertions, 使其支持自动化的推理证明.Error Model Annex[32]通过集成故障属性、故障概率等故障模型对软件行为中的失效事件进行描述; Hybird Annex[19]通过集成Hybrid CSP对系统物理层的连续行为进行描述.

Zhan提出了AADL与Simulink/Stateflow混合建模方法[20], 相较于Hybrid Annex对系统物理层连续行为的描述, Zhan使用Simulink/Stateflow描述AADL系统体系结构模型中物理层的连续行为, 通过contract对AADL物理层构件进行约束.

Ouni使用AADL与Capella进行混合建模[42], 通过INGEQUIP保持交互信息在不同模型间的一致, 通过Capella描述系统设计初期的功能需求、非功能需求以及平台约束, 并将Capella模型集成到AADL模型中, 组合两种模型进行调度分析、行为验证、结构验证等工作.

欧空局ESA提出AADL、Simulink、SDL的多范式建模方法TASTE[23-25], TASTE通过AADL部分子集描述系统体系结构, 并通过TASTE扩展属性集将AADL系统体系结构模型与Simulink、SDL等行为模型进行集成.通过集成代码生成工具Ocarina[43]进行基于AADL模型的代码生成.通过集成Simulink Coder、Qgen、OpenGEODE等工具实现Simulink、SDL等行为模型代码的生成.TASTE基于OpenGEODE实现SDL模型到Ada代码的生成, 目前主要支持串行Ada代码自动生成和集成.本文结合TASTE的工作, 使用分别编译技术实现了SDL行为模型到多任务Ada代码的自动生成与调度, 并且支持与AADL模型生成Ada代码进行集成.

Baouyaa使用TASTE工具集对火车控制系统进行建模[44], 使用AADL描述系统体系结构, 使用SDL描述系统行为, 并对铁路系统的相关性质进行了验证.

在面向安全关键软件的AADL多范式建模的前期研究中[28, 29], 我们基于同步语言Signal对AADL语义进行了扩展, 使用Signal对AADL模型中的并发行为进行了描述, 并支持AADL-Signal混合模型到多任务代码的生成.本文基于SDL进一步扩展了AADL语义, 对软件系统中的异步行为进行了描述, 并且实现了AADL-SDL到多任务Ada代码的生成.

8 总结与未来工作

本文提出一种AADL和SDL混合建模方法, 支持以自底向上的方式对安全关键软件系统进行混合建模, 并给出面向多核处理器平台的代码自动生成方法.首先, 提出AADL与SDL混合建模方法, 包括AADL-ASN.1和AADL-SDL扩展属性集方法.其中, AADL-ASN.1扩展属性集主要用于描述混合模型中不同构件间的数据类型, AADL-SDL属性集用于支持在AADL体系结构模型中集成SDL模型对应的功能行为.其次, 提出面向多核处理器的AADL-SDL混合模型到Ada多任务代码生成方法, 包括框架代码、数据类型代码、运行时代码以及多任务功能代码的自动生成.然后, 基于AADL开源建模工具Osate实现了AADL-SDL混合建模工具ASCM和多任务Ada代码生成工具AS2MTA, 并且使用实际工业案例对本文所提方法的有效性进行了分析.

在未来的工作中, 我们将进一步开展以下3个方面的研究工作.

1) 工具扩展方面: 目前的代码生成工作依赖于开源SDL建模工具OpenGEODE, 因此, AADL-SDL混合模型中采用的SDL标准与OpenGEODE工具保持一致, SDL标准目前已经更新到SDL 2010, 未来考虑开发支持SDL 2010标准的SDL建模工具, 并实现ASCM和AS2MTA到SDL 2010的移植.

2) 组合验证方面: 研究AADL-SDL混合模型的形式化组合验证方法.由于混合模型中存在异步通信, 因此需考虑与异步通信有关的形式化验证.

3) 生成代码的智能优化方面: 面对复杂编程场景有时需要依靠编程人员的经验灵活选择编程策略, 未来将研究基于人工智能的编程策略自动优化.

参考文献
[1]
Leveson NG. Engineering a Safer World: Systems Thinking Applied to Safety. The MIT Press, 2016.
[2]
Paz A, El Boussaidi G, Hafedh M. ChecSDM: A method for ensuring consistency in heterogeneous safety-critical system design. IEEE Trans. on Software Engineering, 2020. [doi:10.1109/TSE.2020.2966994]
[3]
Benveniste A, Caillaud B, Carloni LP, Sangiovanni-Vincentelli AL. Composing heterogeneous reactive systems. ACM Trans. on Embedded Computing Systems (TECS), 2008, 7(4): 1-36. [doi:10.1145/1376804.1376811]
[4]
Vangheluwe H, De Lara J, Mosterman PJ. An introduction to multi-paradigm modelling and simulation. In: Proc. of the AIS' 2002 Conf. (AI, Simulation and Planning in High Autonomy Systems). Lisboa, 2002. 9-20.
[5]
Mosterman PJ, Vangheluwe H. Computer automated multi-paradigm modeling: An introduction. Simulation, 2004, 80(9): 433-450. [doi:10.1177/0037549704050532]
[6]
Fritzson P, Bunus P. Modelica-A general object-oriented language for continuous and discrete-event system modeling and simulation. In: Proc. of the 35th Annual Simulation Symp. IEEE, 2002. 365-380. [doi:10.1109/SIMSYM.2002.1000174]
[7]
Specification OMG. OMG System Modeling Language (OMG SysML) Specification. Version 1.6.
[8]
Gérard S, Selic B. The UML-marte standardized profile. IFAC Proc. Volumes, 2008, 41(2): 6909-6913. [doi:10.3182/20080706-5-KR-1001.01171]
[9]
Yang ZB, Pi L, Hu K, Gu ZH, Ma DF. AADL: An architecture design and analysis language for complex embedded real-time systems. Ruan Jian Xue Bao/Journal of Software, 2010, 21(5): 899-915(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/3700.htm [doi:10.3724/SP.J.1001.2010.03700]
[10]
Blom H, Lönn H, Hagl F, Papadopoulos Y, Reiser MO, Sjöstedt CJ, Chen DJ, Kolagari RT. EAST-ADL: An architecture description language for automotive software-intensive systems. In: Embedded Computing Systems: Applications, Optimization, and Advanced Design. IGI Global, 2013. 456-470. [doi:10.4018/978-1-4666-3922-5.ch023]
[11]
Le Sergent T. SCADE: A comprehensive framework for critical system and software engineering. In: Proc. of the Int'l SDL Forum. Berlin, Heidelberg: Springer-Verlag, 2011. 2-3. [doi:10.1007/978-3-642-25264-8_2]
[12]
Ursu C, Bhat R, Damodaran R. Simulink® modeling for vehicle simulator design. SAE Technical Paper, 2011. [doi:10.4271/2011-01-0746]
[13]
Ptolemaeus C. System Design, Modeling, and Simulation: Using Ptolemy Ⅱ. Berkeley: Ptolemy. org, 2014.
[14]
Sodja A, Škrjanc I, Zupančič B. Cyber-physical modelling in Modelica with model-reduction techniques. Journal of Systems and Software, 2020, 163: 110517. [doi:10.1016/j.jss.2019.110517]
[15]
de Saqui-Sannes P, Hugues J. Combining SysML and AADL for the design, validation and implementation of critical systems. ERTS, 2012.
[16]
Zhe W, Hugues J, Chaudemar JC, LeSergent T. An integrated approach to model based engineering with SysML, AADL and FACE. SAE Technical Paper, 2018. [doi:10.4271/2018-01-1942]
[17]
Cebrowski AK. FACETM Technical Standard. Edition 3.0, 2017.
[18]
Dissaux P, Bodeveix JP, Filali M, Gaufillet P, Vernadat F. AADL behavioral annex. In: Proc. of the DASIA Conf. Berlin, 2006. 32.
[19]
Ahmad E, Larson BR, Barrett SC, Zhan NJ, Dong Y. Hybrid annex: An AADL extension for continuous behavior and cyber-physical interaction modeling. In: Proc. of the 2014 ACM SIGAda Annual Conf. on High Integrity Language Technology. 2014. 29-38. [doi:10.1145/2692956.2663178]
[20]
Zhan H, Lin Q, Wang S, Talpin JP, Xu X, Zhan N. Unified graphical co-modelling of cyber-physical systems using AADL and simulink/stateflow. In: Proc. of the Int'l Symp. on Unifying Theories of Programming. Cham: Springer-Verlag, 2019. 109-129. [doi:10.1007/978-3-030-31038-7_6]
[21]
Sandhu KK. Specification and description language (SDL). In: Proc. of the IEE Tutorial Colloquium on Formal Methods and Notations Applicable to Telecommunications. IET, 1992. 3/1-3/4.
[22]
Belina F, Hogrefe D. The CCITT-specification and description language SDL. Computer Networks and ISDN Systems, 1989, 16(4): 311-341. [doi:10.1016/0169-7552(89)90078-0]
[23]
Perrotin M, Grochowski K, Verhoef M, Galano D, Mosdorf M, Kurowski M, Denis F, Graas E. TASTE in action. 2016. https://www.researchgate.net/publication/316857258_TASTE_in_action
[24]
Perrotin M, Conquet E, Delange J, Schiele A, Tsiodras T. TASTE: A real-time software engineering tool-chain overview, status, and future. In: Proc. of the Int'l SDL Forum. Berlin, Heidelberg: Springer-Verlag, 2011. 26-37. [doi:10.1007/978-3-642-25264-8_4]
[25]
Perrotin M, Conquet E, Dissaux P, Tsiodras T, Hugues J. The TASTE Toolset: Turning human designed heterogeneous systems into computer built homogeneous software. 2010. https://www.researchgate.net/publication/44708161_The_TASTE_Toolset_turning_human_designed_heterogeneous_systems_into_computer_built_homogeneous_software
[26]
Barry PT. Abstract syntax notation-one (ASN. 1). In: Proc. of the IEE Tutorial Colloquium on Formal Methods and Notations Applicable to Telecommunications. IET, 1992. 2/1-2/3.
[27]
ITU-T RX. Specification of Abstract Syntax Notation One (ASN. 1), 1988.
[28]
Yuan S, Yang Z, Bodeveix JP, Filali M, Wang T, Zhou Y. Automated Ada code generation from synchronous dataflow programs on multicore: Approach and industrial study. In: Proc. of the Int'l Workshop on Formal Techniques for Safety-critical Systems. Cham: Springer-Verlag, 2019. 57-73. [doi:10.1007/978-3-030-46902-3_4]
[29]
Yang ZB, Yuan SH, Xie J, Zhou Y, Chen Z, Xue L, Bodeveix JP, Filali M. Multi-threaded code generation tool for synchronous language. Ruan Jian Xue Bao/Journal of Software, 2019, 30(7): 1980-2002(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5754.htm [doi:10.13328/j.cnki.jos.005754]
[30]
Feiler P, Delange J. Automated fault tree analysis from AADL models. ACM SIGAda Ada Letters, 2017, 36(2): 39-46. [doi:10.1145/3092893.3092900]
[31]
Lasnier G, Pautet L, Hugues J, Wrage L. An implementation of the behavior annex in the AADL-toolset OSATE2. In: Proc. of the 16th IEEE Int'l Conf. on Engineering of Complex Computer Systems. IEEE, 2011, 332-337. [doi:10.1109/ICECCS.2011.39]
[32]
AS5506 SAE. 1A: Architecture analysis and design language (AADL) Annex Volume1: Annex E: Error model Annex. 2015. https://www.sae.org/standards/content/as5506/1a
[33]
Verhaard L. An introduction to Z. Computer Networks and ISDN Systems, 1996, 28(12): 1617-1628. [doi:10.1016/0169-7552(95)00121-2]
[34]
Verhoef M, Perrotin M. TASTE for overture to keep SLIM. In: Proc. of the 13th Overture Workshop. 2015. 132-139.
[35]
Mamais G, Tsiodras T, Lesens D, Perrotin M. An ASN. 1 compiler for embedded/space systems. 2012. https://www.researchgate.net/publication/229422184_An_ASN1_compiler_for_embeddedspace_systems
[36]
Wang F, Yang ZB, Huang ZQ, Zhou Y, Liu CW, Zhang WB, Xue L, Xu JM. Approach for generating AADL model based on restricted natural language requirement template. Ruan Jian Xue bao/Journal of Software, 2018, 29(8): 2350(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5530.htm [doi:10.13328/j.cnki.jos.005530]
[37]
Feng SZ, Yang ZB, Xue L. Automatic generation method of Ada code for aerospace embedded software based on AADL. Computer and Modernization, 2020(6): 52-59(in Chinese with English abstract). https://www.cnki.com.cn/Article/CJFDTOTAL-JYXH202006011.htm
[38]
Morozov D, Lezoche M, Panetto H. Multi-paradigm modelling of cyber-physical systems. IFAC-PapersOnLine, 2018, 51(11): 1385-1390. [doi:10.1016/j.ifacol.2018.08.334]
[39]
Senn E, Blouin D, Zendra O. A multi-paradigm DSML for quantitative analysis of embedded system architecture models. In: Proc. of the 15th ACM/IEEE Int'l Conf. on Model Driven Engineering Languages & Systems-MODELS. 2012. [doi:10.1145/2508443.2508450]
[40]
Carreira P, Amaral V, Vangheluwe H. Multi-paradigm modelling for cyber-physical systems: Foundations. In: Foundations of Multi-paradigm Modelling for Cyber-physical Systems. Cham: Springer-Verlag, 2020. 1-14. [doi:10.1007/978-3-030-43946-0_1]
[41]
Larson BR, Chalin P, Hatcliff J. BLESS: Formal specification and verification of behaviors for embedded systems with software. In: Proc. of the NASA Formal Methods Symp. Berlin, Heidelberg: Springer-Verlag, 2013. 276-290. [doi:10.1007/978-3-642-38088-4_19]
[42]
Ouni B, Gaufillet P, Jenn E, Hugues J. Model driven engineering with Capella and AADL. 2016. https://www.researchgate.net/publication/308507803_Model_Driven_Engineering_with_Capella_and_AADL
[43]
Lasnier G, Zalila B, Pautet L, Hugues J. Ocarina: An environment for AADL models analysis and automatic code generation for high integrity applications. In: Proc. of the Int'l Conf. on Reliable Software Technologies. Berlin, Heidelberg: Springer-Verlag, 2009. 237-250. [doi:10.1007/978-3-642-01924-1_17]
[44]
Baouya A, Mohamed OA, Bennouar D, Ouchani S. Safety analysis of train control system based on model-driven design methodology. Computers in Industry, 2019, 105: 1-16. [doi:10.1016/j.compind.2018.10.007]
[9]
杨志斌, 皮磊, 胡凯, 顾宗华, 马殿富. 复杂嵌入式实时系统体系结构设计与分析语言: AADL. 软件学报, 2010, 21(5): 899-915. http://www.jos.org.cn/1000-9825/3700.htm [doi:10.3724/SP.J.1001.2010.03700]
[29]
杨志斌, 袁胜浩, 谢健, 周勇, 陈哲, 薛磊, Jean-Paul BODEVEIX, Mamoun FILALI. 一种同步语言多线程代码自动生成工具. 软件学报, 2019, 30(7): 1980-2002. http://www.jos.org.cn/1000-9825/5754.htm [doi:10.13328/j.cnki.jos.005754]
[36]
王飞, 杨志斌, 黄志球, 周勇, 刘承威, 章文炳, 薛垒, 许金淼. 基于限定自然语言需求模板的AADL模型生成方法. 软件学报, 2018, 29(8): 2350. http://www.jos.org.cn/1000-9825/5530.htm [doi:10.13328/j.cnki.jos.005530]
[37]
冯思喆, 杨志斌, 薛垒. 基于AADL的航天嵌入式软件Ada代码自动生成方法. 计算机与现代化, 2020(6): 52-59. https://www.cnki.com.cn/Article/CJFDTOTAL-JYXH202006011.htm