选取覆盖所有源代码结构的最小代码子集的方法技术

技术编号:21184228 阅读:15 留言:0更新日期:2019-05-22 14:58
本发明专利技术提供了一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集。

A Method of Selecting the Minimum Code Subset Covering All Source Code Structures

The present invention provides a method for selecting the smallest code subset covering all source code structures, which includes: a. Source code of the software to be analyzed is classified according to high-level language, assembly language and library function, and the high-level language code set, assembly code set and library function set are obtained; B. The grammar structure and compiled of each function in the high-level language code set are analyzed and compiled. The structure of additional code may be generated in the program, and the typical structure code subset which minimizes the workload of source code target code comparative analysis is selected under the condition that the structures are covered at least once; and C. The minimum code subset of the software to be analyzed is obtained by combining the typical structure code subset, the assembly code subset and the library function subset.

【技术实现步骤摘要】
选取覆盖所有源代码结构的最小代码子集的方法
本专利技术主要涉及航空机载软件验证领域,尤其涉及一种选取覆盖所有源代码结构的最小代码子集的方法。
技术介绍
民用航空机载软件设计中,A级软件作为最高安全等级的软件,必须确保其安全、可靠。FAA和CAAC均认可DO-178C即《机载系统和设备合格审定中的软件考虑》作为机载软件适航取证的标准,针对A级软件明确提出“满足对不可追溯至源代码的额外代码进行验证的目标”。当前,机载软件功能越来越复杂,规模也越来越大。对于A级软件,需要进行编译器、链接器或者其它工具引入额外代码的识别,在现有的解决方案中,或者基于源代码级结构覆盖测试并补充源码目标码对比分析,或者在目标码级开展结构覆盖分析。目前结合源代码级别的结构覆盖进行源码目标码对比分析有两种方法:1)分析整个软件;2)针对软件编码规则罗列各种可能的规则组合,生成独立的测试程序进行分析。由于待分析软件中会存在相同的程序结构或者待分析软件并不会涉及所有编码规则下结构组合,因此采用这两种方法都会因为存在冗余的语法结构而导致人工识别源码目标码差异的工作量增大。同时在现有技术中,如CN104360949A公开了一种符合DO-178B/CA级软件目标码覆盖分析方法,但是其需要首先通过识别的源码目标码对应关系以及源码目标码的差异来创建编码规则表以及额外映射表,再进行目标码覆盖分析,其未提供具体可操作的典型源代码结构定义和选择算法;CN104461882A公开了一种符合DO-178B/CA级的模型验证方法,但其是在模型验证领域中涉及从生成验证程序集选出验证程序子集的方法,此验证程序是与软件测试用例概念相对等的测试操作步骤,不是被验证的软件程序;CN104731587A公开了一种单元测试数据生成方法,通过分析源代码的结构确定测试数据的类型和构造,并生成测试数据,其源码结构分析并不涉及利用其结构分析结果进行源代码子集的选取。现有的方法,随着软件规模的增大,在“满足对不可追溯至源代码的额外代码进行验证的目标”上,源代码目标码对比分析的工作量和成本将会越来越大。
技术实现思路
本专利技术要解决的技术问题是提供一种选取覆盖所有源代码结构的最小代码子集的方法,其能够使在对A级软件进行编译器、链接器或者其它引入额外代码的识别过程中,人工对比分析的工作量为最少。为解决上述技术问题,本专利技术提供了一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集。在本专利技术的一实施例中,步骤b包括:b1.对所述每个函数分析语法结构和编译过程中可能产生附加代码的结构,形成所述每个函数与各结构的追溯关系表;b2.对所述各结构进行分类、统一编号,同类结构的编号全局唯一,同时记录所述每个函数对应的源代码目标码对比分析的所述工作量;b3.对所述每个函数的结构编号进行汇总,形成具有结构类别编号、所述工作量的源代码结构分析表;b4.根据所述源代码结构分析表构造结构-函数矩阵;b5.在确保所述各结构至少被覆盖一次的条件下,根据所述结构-函数矩阵和所述每个函数对应的所述工作量构建数学模型;以及b6.对所述数学模型进行求解,选取出使所述工作量最小的所述典型结构代码子集。在本专利技术的一实施例中,在步骤b1中,对所述每个函数分析语法结构包括分析函数的返回类型、参数类型、参数个数、基本类型、构造类型、预处理、运算符、过程控制类型和嵌套次数中的一个或多个。在本专利技术的一实施例中,在步骤b1中,对所述每个函数分析可能产生附加代码的结构包括分析编译器对代码结构上的处理和/或对代码运行时产生异常的处理。在本专利技术的一实施例中,所述编译器对代码结构上的处理包括数组处理、隐式调用库函数和循环结构处理中的一个或多个。在本专利技术的一实施例中,所述对代码运行时产生异常的处理包括零除、数据溢出、数组越界和指针地址无效中的一个或多个。在本专利技术的一实施例中,所述结构-函数矩阵为:其中,A为结构-函数矩阵,m为结构的个数,n为函数的个数,τ0,τ1,τ2,…,τm-1表示所有函数对应的结构,f0,f1,f2,…,fn-1表示函数,zp,q取值1或0,当取值为1时,代表函数fp覆盖结构τq,当取值为0时,代表函数fp未覆盖结构τq,其中p=0,1,…m-1,q=0,1,…n-1。在本专利技术的一实施例中,所述数学模型如下:其中,L=[L0,L1,…,Ln-1],Ly为分析函数fy时的所述工作量,y=0,1,…,n-1;X=[X0,X1,…,Xn-1]T,Xi取值1或0,当取值为1时,代表选择函数fi放入所述典型结构代码子集,当取值为0时,代表选择函数fi不放入所述典型结构代码子集,i=0,1,…,n-1,[]T代表矩阵转置;bm×1=[1,1,…,1]T。在本专利技术的一实施例中,根据所述数学模型求解X,将X中元素为1对应的所述函数放入所述典型结构代码子集。在本专利技术的一实施例中,所述工作量为所述函数的源代码的行数。与现有技术相比,本专利技术具有以下优点:本专利技术选取覆盖所有源代码结构的最小代码子集的方法,能够促使最终选取覆盖所有源代码结构的子集为代码行数最少的子集,能够有效减少后续进行源代码目标码差异对比人工分析的工作量和时间成本。附图说明图1是本专利技术一实施例的选取覆盖所有源代码结构的最小代码子集的方法的概要示意图。图2是本专利技术一实施例的选取覆盖所有源代码结构的最小代码子集的方法的基本流程图。图3是本专利技术一实施例的确定典型结构代码子集的方法的流程图。具体实施方式为让本专利技术的上述目的、特征和优点能更明显易懂,以下结合附图对本专利技术的具体实施方式作详细说明。在下面的描述中阐述了很多具体细节以便于充分理解本专利技术,但是本专利技术还可以采用其它不同于在此描述的其它方式来实施,因此本专利技术不受下面公开的具体实施例的限制。如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。A级机载软件在满足结构覆盖率目标、识别额外代码过程中,需要人工进行源代码目标码对比分析。为了避免对比分析整个软件,或者对比分析编码规则对应所有结构的程序用例,或者对比分析的是源码子集但代码子集但并不是使源代码目标码对比分析工作量最小的子集,而造成对比分析工作量大,因此本专利技术在对所有源代码结构进行分析产生源代码结构分析表的基础上,使选出的代码子集不仅覆盖待分析软件的所有结构,并且使后续人工对比分析源代码目标码差异的工作量最少。机载软件中,一般由高级语言、汇编语言和编译器库函数等构成,因此需要按照源代码类型进行分类和分析。机载软件中的高级语言一般以C语言形式的源代码居多,因此下面主要以C本文档来自技高网
...

【技术保护点】
1.一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集。

【技术特征摘要】
1.一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集。2.根据权利要求1所述的方法,其特征在于,步骤b包括:b1.对所述每个函数分析语法结构和编译过程中可能产生附加代码的结构,形成所述每个函数与各结构的追溯关系表;b2.对所述各结构进行分类、统一编号,同类结构的编号全局唯一,同时记录所述每个函数对应的源代码目标码对比分析的所述工作量;b3.对所述每个函数的结构编号进行汇总,形成具有结构类别编号、所述工作量的源代码结构分析表;b4.根据所述源代码结构分析表构造结构-函数矩阵;b5.在确保所述各结构至少被覆盖一次的条件下,根据所述结构-函数矩阵和所述每个函数对应的所述工作量构建数学模型;以及b6.对所述数学模型进行求解,选取出使所述工作量最小的所述典型结构代码子集。3.根据权利要求2所述的方法,其特征在于,在步骤b1中,对所述每个函数分析语法结构包括分析函数的返回类型、参数类型、参数个数、基本类型、构造类型、预处理、运算符、过程控制类型和嵌套次数中的一个或多个。4.根据权利要求2所述的方法,其特征在于,在步骤b1中...

【专利技术属性】
技术研发人员:钱杰王影刘卉殷锴
申请(专利权)人:中国航发商用航空发动机有限责任公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1