System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及安全关键领域模型验证的,尤其是一种针对飞行控制系统软件的状态机自动生成代码的自动检查方法和装置。
技术介绍
1、在飞行控制系统软件的设计中,状态机模型占有很大的比重。例如,自动飞行系统大量使用复杂逻辑模态转换,采用状态机和真值表相比单纯的逻辑组合模型能够使得软件架构更加清晰、设计复杂度降低、可读性、可维护性大大提高。除此之外,在飞行控制系统的维护软件中,维护测试由开始、准备、进行中、中止、正常结束等状态组成,通过状态之间的转换和状态内的动作共同构成维护测试过程。
2、飞控系统属于安全关键领域,要求模型自动生成的代码经过一致性检查,而由于状态机模型生成的代码与状态机模型结构之间的差异较大,因此人工检查代码与模型之间的一致性变得尤为困难,且由于状态机代码量巨大,人工检查耗时耗力且容易出错。
技术实现思路
1、本专利技术的目的:提供一种状态机自动生成代码的自动检查装置;减少了模型验证人员的工作负担,增加了验证效率及正确率。
2、本专利技术的技术方案:提供了一种状态机自动生成代码的自动检查方法和装置,应用于针对飞行控制系统软件。首先,从状态机模型的xml文件解析出状态机结构,包括状态转移关系、每个状态内部动作;然后,从状态机模型自动生成的代码文件中解析出代码结构,识别出嵌套分支结构;获取代码中所有变量与状态机模型中变量的对应关系;基于状态机模型的结构,依据状态嵌套、连接关系依次遍历每个状态;基于状态机模型中的语句生成预期代码语句或代码段;在实际的代码文
3、第一方面,本申请提供一种状态机自动生成代码的自动检查方法,用于对飞行控制系统的软件模型进行验证,所述自动检查方法包括:
4、步骤1:从状态机模型的xml文件解析出状态机结构,包括状态转移关系、每个状态内部动作;
5、步骤2:从状态机模型自动生成的代码文件中解析出代码结构,识别出嵌套分支结构;
6、步骤3:获取代码中所有变量与状态机模型中变量的对应关系;
7、步骤4:基于状态机模型的结构,依据状态嵌套、连接关系依次遍历每个状态;
8、步骤5:基于状态机模型中的语句生成预期代码语句或代码段;
9、步骤6:在实际的代码文件中找到相应的代码语句或代码段;
10、步骤7:将预期代码和实际代码进行比较,判断是否相同,若不相同,则表示被测状态机自动生成代码的检查结果不通过。
11、具体的,步骤1包括:
12、解析状态机模型中每个状态或分叉点向外转移的优先级,并按照优先级解析每个转移线上的转移条件、转移动作;
13、解析状态机模型中每个状态的进入动作、退出动作、停留动作;
14、解析状态机模型中状态之间的嵌套关系;
15、其中,解析状态机模型中每个状态的进入动作、退出动作、停留动作,包括跳过模型中可能出现的各种形式的注释,直接获取有效的动作语句。
16、具体的,步骤2包括:
17、步骤21:编写状态机自动生成代码的特定文法;
18、步骤22:基于特定文法,从代码文件中平铺为大量的嵌套的分支语句的代码自动生成具有立体的、互相关联的信息的抽象语法树,抽象语法树的结构包含两部分内容:第一部分是全局变量和局部变量与其注释的映射结构,其中注释信息包含了变量与状态机模型变量的对应关系;
19、第二部分是状态的遍历顺序、状态向外转移的优先级、每个转移的转移条件、转移动作,每个状态的进入动作、退出动作、停留动作。
20、具体的,步骤22获取代码中所有变量与状态机模型中变量的对应关系包括:
21、基于从自动生成的代码和特定文法生成的抽象语法树,获取代码中所有变量与状态机模型变量的映射表。
22、具体的,步骤4包括:
23、步骤41:从顶层chart的所有子状态展开遍历;
24、步骤42:遍历其中一个状态;
25、步骤43:按照优先级遍历其所有向外的转移;
26、步骤44:判断所述状态是否包含子状态,如果是,跳转到步骤45,如果否,跳转到步骤46;
27、步骤45:从此状态的所有子状态展开遍历,跳转到步骤42;
28、步骤46:处理本状态的停留动作。
29、具体的,步骤43其中一条向外的转移,包括:
30、步骤4301:处理转移条件;
31、步骤4302:处理转移动作;
32、步骤4303:处理源状态的的退出结构;
33、步骤4304:本状态是否有子状态,若是,跳转到步骤4305:若否,跳转到步骤4306;
34、步骤4305:处理子状态的退出结构,跳转到步骤4303;
35、步骤4306:处理本状态的退出动作;
36、步骤4307:处理目标状态的的进入结构;
37、步骤4308:处理本状态的进入动作;
38、步骤4309:判断本状态是否有子状态,若是,跳转到步骤4310,若否,跳转到步骤4311;
39、步骤4310:处理子状态的进入结构,跳转到步骤4308。
40、具体的,基于状态机模型中的语句生成预期代码语句或代码段包括:
41、将状态机模型中的语句中操作符翻译成相应的代码中的操作符;
42、将状态机模型中的语句中所有变量翻译成代码中声明的对应的全局变量;
43、将状态机模型中的语句中函数调用翻译成适用于代码样式的函数调用格式。
44、具体的,在实际的代码文件中找到相应的代码语句或代码段包括:
45、在整个状态机模型生成的代码构成的抽象语法树中,依据状态标志量和抽象语法树结构标志定位到具体的代码语句或代码段。
46、具体的,将预期代码和实际代码进行比较,判断是否相同,若不相同,则表示被测状态机模型自动生成代码的检查结果不通过,包括:
47、若相应代码段的行数不相等,则判断此代码段检查结果不通过,并且不继续检查每行代码是否一致;
48、若代码段行数相等,则继续检查每行预期代码和实际代码是否一致,若不一致,则判断此代码行检查不通过,否则判断此代码行检查通过。
49、第二方面,本申请提供一种状态机自动生成代码的自动检查装置,所述装置用于对飞行控制系统的软件模型进行验证,装置包括:
50、状态机模型解析模块,用于从状态机模型的xml文件解析出状态机结构,包括状态转移关系、每个状态内部动作;
51、代码解析模块,用于把从状态机模型自动生成的本文档来自技高网...
【技术保护点】
1.一种状态机自动生成代码的自动检查方法,用于对飞行控制系统的软件模型进行验证,其特征在于,所述自动检查方法包括:
2.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤1包括:
3.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤2包括:
4.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤22获取代码中所有变量与状态机模型中变量的对应关系包括:
5.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤4包括:
6.根据权利要求5所述的状态机自动生成代码的自动检查方法,其特征在于,步骤43其中一条向外的转移,包括:
7.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,基于状态机模型中的语句生成预期代码语句或代码段包括:
8.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,在实际的代码文件中找到相应的代码语句或代码段包括:
9.根据权利要求1所述的状态机自动生成代码的自
10.一种状态机自动生成代码的自动检查装置,其特征在于,所述装置用于对飞行控制系统的软件模型进行验证,装置包括:
...【技术特征摘要】
1.一种状态机自动生成代码的自动检查方法,用于对飞行控制系统的软件模型进行验证,其特征在于,所述自动检查方法包括:
2.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤1包括:
3.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤2包括:
4.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤22获取代码中所有变量与状态机模型中变量的对应关系包括:
5.根据权利要求1所述的状态机自动生成代码的自动检查方法,其特征在于,步骤4包括:
6.根据权利要求5所述的状态机自动生成代码的自动检查方法,其特征在于...
【专利技术属性】
技术研发人员:任阳阳,薛琪琪,陈虹竹,张丹涛,张馨洋,卢钊,李相桥,苗伟涛,
申请(专利权)人:中国航空工业集团公司西安飞行自动控制研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。