CN109783344B - 选取覆盖所有源代码结构的最小代码子集的方法 - Google Patents

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

Info

Publication number
CN109783344B
CN109783344B CN201711122407.1A CN201711122407A CN109783344B CN 109783344 B CN109783344 B CN 109783344B CN 201711122407 A CN201711122407 A CN 201711122407A CN 109783344 B CN109783344 B CN 109783344B
Authority
CN
China
Prior art keywords
code
function
subset
workload
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711122407.1A
Other languages
English (en)
Other versions
CN109783344A (zh
Inventor
钱杰
王影
刘卉
殷锴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AECC Commercial Aircraft Engine Co Ltd
Original Assignee
AECC Commercial Aircraft Engine Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AECC Commercial Aircraft Engine Co Ltd filed Critical AECC Commercial Aircraft Engine Co Ltd
Priority to CN201711122407.1A priority Critical patent/CN109783344B/zh
Publication of CN109783344A publication Critical patent/CN109783344A/zh
Application granted granted Critical
Publication of CN109783344B publication Critical patent/CN109783344B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

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

Description

选取覆盖所有源代码结构的最小代码子集的方法
技术领域
本发明主要涉及航空机载软件验证领域,尤其涉及一种选取覆盖所有源代码结构的最小代码子集的方法。
背景技术
民用航空机载软件设计中,A级软件作为最高安全等级的软件,必须确保其安全、可靠。
FAA和CAAC均认可DO-178C即《机载系统和设备合格审定中的软件考虑》作为机载软件适航取证的标准,针对A级软件明确提出“满足对不可追溯至源代码的额外代码进行验证的目标”。
当前,机载软件功能越来越复杂,规模也越来越大。对于A级软件,需要进行编译器、链接器或者其它工具引入额外代码的识别,在现有的解决方案中,或者基于源代码级结构覆盖测试并补充源码目标码对比分析,或者在目标码级开展结构覆盖分析。目前结合源代码级别的结构覆盖进行源码目标码对比分析有两种方法:1)分析整个软件;2)针对软件编码规则罗列各种可能的规则组合,生成独立的测试程序进行分析。由于待分析软件中会存在相同的程序结构或者待分析软件并不会涉及所有编码规则下结构组合,因此采用这两种方法都会因为存在冗余的语法结构而导致人工识别源码目标码差异的工作量增大。
同时在现有技术中,如CN104360949A公开了一种符合DO-178B/C A级软件目标码覆盖分析方法,但是其需要首先通过识别的源码目标码对应关系以及源码目标码的差异来创建编码规则表以及额外映射表,再进行目标码覆盖分析,其未提供具体可操作的典型源代码结构定义和选择算法;CN104461882A公开了一种符合DO-178B/C A级的模型验证方法,但其是在模型验证领域中涉及从生成验证程序集选出验证程序子集的方法,此验证程序是与软件测试用例概念相对等的测试操作步骤,不是被验证的软件程序;CN104731587A公开了一种单元测试数据生成方法,通过分析源代码的结构确定测试数据的类型和构造,并生成测试数据,其源码结构分析并不涉及利用其结构分析结果进行源代码子集的选取。
现有的方法,随着软件规模的增大,在“满足对不可追溯至源代码的额外代码进行验证的目标”上,源代码目标码对比分析的工作量和成本将会越来越大。
发明内容
本发明要解决的技术问题是提供一种选取覆盖所有源代码结构的最小代码子集的方法,其能够使在对A级软件进行编译器、链接器或者其它引入额外代码的识别过程中,人工对比分析的工作量为最少。
为解决上述技术问题,本发明提供了一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集。
在本发明的一实施例中,步骤b包括:b1.对所述每个函数分析语法结构和编译过程中可能产生附加代码的结构,形成所述每个函数与各结构的追溯关系表;b2.对所述各结构进行分类、统一编号,同类结构的编号全局唯一,同时记录所述每个函数对应的源代码目标码对比分析的所述工作量;b3.对所述每个函数的结构编号进行汇总,形成具有结构类别编号、所述工作量的源代码结构分析表;b4.根据所述源代码结构分析表构造结构-函数矩阵;b5.在确保所述各结构至少被覆盖一次的条件下,根据所述结构-函数矩阵和所述每个函数对应的所述工作量构建数学模型;以及b6.对所述数学模型进行求解,选取出使所述工作量最小的所述典型结构代码子集。
在本发明的一实施例中,在步骤b1中,对所述每个函数分析语法结构包括分析函数的返回类型、参数类型、参数个数、基本类型、构造类型、预处理、运算符、过程控制类型和嵌套次数中的一个或多个。
在本发明的一实施例中,在步骤b1中,对所述每个函数分析可能产生附加代码的结构包括分析编译器对代码结构上的处理和/或对代码运行时产生异常的处理。
在本发明的一实施例中,所述编译器对代码结构上的处理包括数组处理、隐式调用库函数和循环结构处理中的一个或多个。
在本发明的一实施例中,所述对代码运行时产生异常的处理包括零除、数据溢出、数组越界和指针地址无效中的一个或多个。
在本发明的一实施例中,所述结构-函数矩阵为:
Figure BDA0001467652110000031
其中,A为结构-函数矩阵,m为结构的个数,n为函数的个数,τ012,…,τ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。
在本发明的一实施例中,所述数学模型如下:
Figure BDA0001467652110000032
其中,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语言为例进行说明,但本领域技术人员应了解,本发明中的高级语言还可以例如是C++、Java、C#等。
图1是本发明一实施例的选取覆盖所有源代码结构的最小代码子集的方法的概要示意图。请参考图1,本发明的选取覆盖所有源代码结构的最小代码子集的方法概括来说,首先,识别待分析软件源代码的种类,将源代码分为C源代码集合、汇编代码集合和库函数集合,然后在C源代码集合中选取典型结构代码子集,最后合并选取出的典型结构代码子集、汇编代码集合和库函数集合,得到待分析的最小代码子集。
对于A级机载软件,基于验证活动,获取目标码的结构覆盖率,当结构覆盖率无法满足DO-178C A级软件的覆盖率要求时,通过对照分析源代码产生额外代码的情形,识别当前测试活动未覆盖的目标码是否是由编译器、链接器或者其它工具引入的额外代码。为减少源代码目标码差异对比人工分析的工作量,本发明提出了如图2所示出的选取覆盖所有源代码结构的最小代码子集的方法。请参考图2,选取覆盖所有源代码结构的最小代码子集的方法10包括:
步骤11:将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码子集、汇编代码子集和库函数子集;
步骤12:对高级语言代码子集中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;
步骤13:合并典型结构代码子集、汇编代码子集和库函数子集,以得到待分析软件的最小代码子集。
在一实施例中,步骤12可通过如图3所示出的确定典型结构代码子集的方法20来实现。确定典型结构代码子集的方法20包括:
步骤21:对每个函数分析语法结构和编译过程中可能产生附加代码的结构,形成每个函数与各结构的追溯关系表;
步骤22:对各结构进行分类、统一编号,同类结构的编号全局唯一,同时记录每个函数对应的源代码目标码对比分析的工作量;
步骤23:对每个函数的结构编号进行汇总,形成具有结构类别编号、工作量的源代码结构分析表;
步骤24:根据源代码结构分析表构造结构-函数矩阵;
步骤25:在确保各结构至少被覆盖一次的条件下,根据结构-函数矩阵和每个函数对应的工作量构建数学模型;
步骤26:对数学模型进行求解,选取出使工作量最小的典型结构代码子集。
在步骤21中,对每个函数分析语法结构可以包括分析函数的返回类型、参数类型、参数个数、基本类型、构造类型、预处理、运算符、过程控制类型和嵌套次数中的一个或多个。
对每个函数分析可能产生附加代码的结构,可以依据编译原理,找出有代表性的可能产生附加代码的结构作为代码子集,主要可以从如下两个方面进行分析:1)编译器对代码结构上的处理,包括数组处理、隐式调用库函数和循环结构处理中的一个或多个,如数组边界的越界检查;2)对代码运行时产生的异常进行处理,包括零除、数据溢出、数组越界和指针地址无效中的一个或多个。
在一更具体的实施例中,步骤21可以以函数所在的文件为单位,为每个文件创建一个二维表,例如Excel页表,将文件内的每个函数进行语法结构分析和可能产生额外代码的结构分析,并将分析结果分别填充如下表1所示返回类型、参数类型、参数个数、函数体内的基本类型、构造类型、预处理、运算符、过程控制、产生附加代码的结构等页表中对应结构属性列。例如针对函数void XYZ(void),形成的追溯关系表具体如表1所示。同理分析其它函数形成类似的追溯关系表。
表1函数与各结构的追溯关系表
Figure BDA0001467652110000071
Figure BDA0001467652110000081
在完成上述追溯关系表后,还可以对分析结果进行评审,以确保代码结构分析的正确性和完整性。
在一更为具体的实施例中,在步骤22中可以对步骤21的结构分析结果进行汇总,并按照类型分别进行唯一编号,形成如下表2所示的表格。
表2源代码结构分析结果的编码表
Figure BDA0001467652110000082
Figure BDA0001467652110000091
Figure BDA0001467652110000101
在一可选的实施例中,函数对应的源代码目标码对比分析的工作量可以以该函数所具有的代码行数来衡量。
在一更具体的实施例中,在步骤23中将步骤21中所有结构分析的结果按照步骤22的方式分别给属性列添加对应的编号,形成如表3形式的分析表。
表3函数结构分析结果编号后的分析表
Figure BDA0001467652110000102
Figure BDA0001467652110000111
在步骤24中,可以从步骤23中的源代码结构分析表中提取所有函数集合F={f0,f1,f2,…,fn-1},所有函数F对应覆盖的结构的最小集合向量T={τ012,…,τm-1},并可形成结构-函数矩阵为:
Figure BDA0001467652110000112
其中,A为结构-函数矩阵,m为结构的个数,n为函数的个数,τ012,…,τ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。
对于如表3所示的分析表,所有函数F对应覆盖的语法结构和产生额外代码的结构的最小集合向量T={A.1,B.1,C.1,…,F.5,…,τm-1}。
在步骤25中,在确保各结构至少被覆盖一次的条件下,根据结构-函数矩阵和每个函数对应的工作量构建数学模型如下:
Figure BDA0001467652110000113
其中,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。在一可选的实施例中,Ly为函数fy的代码行数。
在步骤26中,对上述数学模型进行求解,得到向量X,将X中元素为1对应的函数放入典型结构代码子集,以选取出使工作量最小的典型结构代码子集。
虽然本发明已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,在没有脱离本发明精神的情况下还可作出各种等效的变化或替换,因此,只要在本发明的实质精神范围内对上述实施例的变化、变型都将落在本申请的权利要求书的范围内。

Claims (8)

1.一种选取覆盖所有源代码结构的最小代码子集的方法,其包括:
a.将待分析软件的源代码按照高级语言、汇编语言和库函数进行分类,得到高级语言代码集合、汇编代码集合和库函数集合;
b.对所述高级语言代码集合中的每个函数分析语法结构和编译过程中可能产生附加代码的结构,在确保所述各结构至少被覆盖一次的条件下选出使源代码目标码对比分析的工作量最小的典型结构代码子集;以及
c.合并所述典型结构代码子集、所述汇编代码集合和所述库函数集合,以得到所述待分析软件的所述最小代码子集;
其中,步骤b包括:
b1.对所述每个函数分析语法结构和编译过程中可能产生附加代码的结构,形成所述每个函数与各结构的追溯关系表;
b2.对所述各结构进行分类、统一编号,同类结构的编号全局唯一,同时记录所述每个函数对应的源代码目标码对比分析的所述工作量;
b3.对所述每个函数的结构编号进行汇总,形成具有结构类别编号、所述工作量的源代码结构分析表;
b4.根据所述源代码结构分析表构造结构-函数矩阵;
b5.在确保所述各结构至少被覆盖一次的条件下,根据所述结构-函数矩阵和所述每个函数对应的所述工作量构建数学模型;以及
b6.对所述数学模型进行求解,选取出使所述工作量最小的所述典型结构代码子集。
2.根据权利要求1所述的方法,其特征在于,在步骤b1中,对所述每个函数分析语法结构包括分析函数的返回类型、参数类型、参数个数、基本类型、构造类型、预处理、运算符、过程控制类型和嵌套次数中的一个或多个。
3.根据权利要求1所述的方法,其特征在于,在步骤b1中,对所述每个函数分析可能产生附加代码的结构包括分析编译器对代码结构上的处理和/或对代码运行时产生异常的处理。
4.根据权利要求3所述的方法,其特征在于,所述编译器对代码结构上的处理包括数组处理、隐式调用库函数和循环结构处理中的一个或多个。
5.根据权利要求1所述的方法,其特征在于,所述结构-函数矩阵为:
Figure FDA0003286449930000021
其中,A为结构-函数矩阵,m为结构的个数,n为函数的个数,τ012,…,τ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。
6.根据权利要求5所述的方法,其特征在于,所述数学模型如下:
Figure FDA0003286449930000022
其中,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
7.根据权利要求6所述的方法,其特征在于,根据所述数学模型求解X,将X中元素为1对应的所述函数放入所述典型结构代码子集。
8.根据权利要求1所述的方法,其特征在于,所述工作量为所述函数的源代码的行数。
CN201711122407.1A 2017-11-14 2017-11-14 选取覆盖所有源代码结构的最小代码子集的方法 Active CN109783344B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711122407.1A CN109783344B (zh) 2017-11-14 2017-11-14 选取覆盖所有源代码结构的最小代码子集的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711122407.1A CN109783344B (zh) 2017-11-14 2017-11-14 选取覆盖所有源代码结构的最小代码子集的方法

Publications (2)

Publication Number Publication Date
CN109783344A CN109783344A (zh) 2019-05-21
CN109783344B true CN109783344B (zh) 2022-02-18

Family

ID=66493418

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711122407.1A Active CN109783344B (zh) 2017-11-14 2017-11-14 选取覆盖所有源代码结构的最小代码子集的方法

Country Status (1)

Country Link
CN (1) CN109783344B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657140A (zh) * 2015-02-10 2015-05-27 广州华多网络科技有限公司 代码生成方法及装置
CN105404585A (zh) * 2015-12-01 2016-03-16 腾讯科技(深圳)有限公司 获取代码覆盖率的方法及装置
CN105653442A (zh) * 2015-12-21 2016-06-08 中电科航空电子有限公司 一种满足do-178c标准评审目标的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8458718B2 (en) * 2009-08-27 2013-06-04 The Boeing Company Statically partitioning into fixed and independent systems with fixed processing core

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657140A (zh) * 2015-02-10 2015-05-27 广州华多网络科技有限公司 代码生成方法及装置
CN105404585A (zh) * 2015-12-01 2016-03-16 腾讯科技(深圳)有限公司 获取代码覆盖率的方法及装置
CN105653442A (zh) * 2015-12-21 2016-06-08 中电科航空电子有限公司 一种满足do-178c标准评审目标的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Probability Sampling Protocol for Thematic and Spatial Quality Assessment of Classification Maps Generated From Spaceborne/Airborne Very High Resolution Images;Andrea Baraldi等;《 IEEE Transactions on Geoscience and Remote Sensing》;20130313;第52卷(第1期);全文 *
Toward Rigorous Object-Code Coverage Criteria;Taejoon Byun等;《2017 IEEE 28th International Symposium on Software Reliability Engineering》;20171026;第701 - 760页 *
民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究;童岳威等;《科技视界》;20161231(第20期);第3-4页 *

Also Published As

Publication number Publication date
CN109783344A (zh) 2019-05-21

Similar Documents

Publication Publication Date Title
Leotta et al. Visual vs. DOM-based web locators: An empirical study
CN100492316C (zh) 测试自动化的系统和方法
US20170192777A1 (en) Method and apparatus for business rule extraction
US20130060507A1 (en) Application testing
CN103577168A (zh) 测试用例创建系统及方法
US20150154097A1 (en) System and method for automated testing
Szpyrka et al. Proposal of formal verification of selected BPMN models with Alvis modeling language
CN102662825B (zh) 一种面向堆操作程序的内存泄漏检测方法
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
US20180025162A1 (en) Application program analysis apparatus and method
CN106933572B (zh) 一种基于llvm中间表示程序切片的度量模型
CN104461890B (zh) 一种航管训练系统开发中Qt程序内存使用静态检查方法
CN109783344B (zh) 选取覆盖所有源代码结构的最小代码子集的方法
CN110659200B (zh) 航空机载软件的源码和目标码对比分析方法及系统
Ulrich et al. Operator timing of task level primitives for use in computation-based human reliability analysis
CN115039083A (zh) 逻辑连接程序执行时生成的异步算法合法性验证使能方法
CN116523284A (zh) 基于机器学习的业务操作流程自动化评估方法、系统
US11740995B2 (en) Source quality check service
Arefin et al. Evaluating specification-level mc/dc criterion in model-based testing of safety critical systems
CN111666216B (zh) 一种智能合约分析方法及装置
Kashima et al. Comparison of backward slicing techniques for java
Delmas et al. Smt-based synthesis of fault-tolerant architectures
CN110727428B (zh) 一种转换业务逻辑层代码的方法、装置和电子设备
CN114116471A (zh) 一种自动化代码扫描方法、系统、电子设备与存储介质
EP2782005A1 (en) Verifying state reachability in a statechart model having computer program code embedded therein

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant