一种软件组件、软件组件运行时自检视方法、装置及系统与流程

文档序号:33473786发布日期:2023-03-15 09:26阅读:30来源:国知局
一种软件组件、软件组件运行时自检视方法、装置及系统与流程

1.本发明属于软件诊断测试领域,更具体地,涉及一种软件组件、软件组件运行时自检视方法、装置及系统。


背景技术:

2.软件制品在运行时需满足一定的约束条件,包括环境变量、配置文件、依赖动态库、软件版本等。
3.对于一个大型的分布式系统,包含成百上千个软件组件,每一个软件组件都有自己独立的运行时约束条件,这些条件只有得到正确、完整的满足才能确保软件运行状态的正确。
4.逐一手工检查每个软件组件的约束条件是不现实的,工作量大且容易疏漏。如果只针对关键、重要的组件进行抽检,当次要组件配置不正确时会由于组件之间的耦合性和传递性而引发蝴蝶效应。
5.即使通过技术手段保证了全系统部署初期各组件的约束得到了满足,但随着系统的持续维护和升级,各组件的约束条件必然会发生变动,如果不能及时揭示该变化就会在系统中埋下隐患,引发各类运行时问题。


技术实现要素:

6.针对现有技术的缺陷,本发明的目的在于提供一种软件组件、软件组件运行时自检视方法、装置及系统,旨在解决现有软件组件运行环境约束检查方法依赖人工方式无法进行快速、全面、准确检查的问题,提前消除运行环境不适配而埋下的隐患。
7.为实现上述目的,第一方面,本发明提供了一种软件组件运行时自检视方法,包括如下步骤:
8.在软件组件的可执行文件中插入检视代码;所述检视代码包括:检视代码节和检视数据节;所述检视数据节包括所述软件组件期望满足的运行环境约束条件信息;所述检视代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
9.将所述软件组件的入口点地址修改为所述检视代码节的首地址;
10.运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;
11.若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;
12.若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
13.在一个可选的示例中,所述可执行文件为elf格式文件。
14.在一个可选的示例中,所述运行环境约束条件信息包括但不限于:运行环境变量、
配置文件、依赖动态库以及软件版本。
15.在一个可选的示例中,在软件组件的可执行文件中插入检视代码,具体为:
16.对运行环境约束条件信息的数据结构进行声明,该数据结构由多个数据项组成,数据项为固定长度的字符串,指代某一维度的运行环境约束条件信息;数据项之间按照线性关系顺序存储;
17.在检视代码的源文件中以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,对该文件进行编译,生成命名为check_env.o的可重定位目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;
18.按照正常的步骤对软件组件的源代码进行编译链接,生成自检视功能未被激活的可执行文件;
19.针对每一个软件组件收集其运行环境约束条件信息,按照运行环境约束条件信息的数据结构进行组织,将该信息覆写至可执行文件中的检视数据节,并将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件。
20.第二方面,本发明提供了一种软件组件,包括:功能代码、检视代码以及检视数据;
21.所述功能代码包括:第一数据节和第一代码节;所述第一数据节包含软件组件既有的业务数据;所述第一代码节包含软件组件既有的业务代码;
22.所述检视代码包括:第二数据节和第二代码节;所述第二数据节包含运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中占位;所述第二代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和预设的运行环境约束条件信息进行对比;
23.所述第二数据节与第一数据节合并入所述软件组件的可执行文件,映射为具备可读写权限的加载段;所述第二代码节与第一代码节合并入所述可执行文件,映射为具备可执行权限的加载段;
24.所述检视数据包括:预设的所述软件组件期望满足的运行环境约束条件信息对应的数据,覆写可执行文件中的第二数据节;
25.所述可执行文件的入口点地址被修改为第二代码节的首地址;
26.所述软件组件被运行时,首先执行所述第二代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述第二数据节中的数据一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
27.在一个可选的示例中,所述可执行文件为elf格式文件。
28.第三方面,本发明提供了一种软件组件运行时自检视装置,包括:
29.检视代码插桩单元,用于在软件组件的链接过程中插桩检视代码;所述检视代码包括:检视数据节和检视代码节;所述检视数据节的内容遵循运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中进行占位;所述检视代码节包含诊断代码,
用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
30.检视数据写入单元,提供人机界面,用于采集所述软件组件期望满足的运行环境约束条件数据,将该数据覆写至可执行文件中的检视数据节;
31.入口地址修改单元,用于将所述软件组件的入口点地址修改为所述检视代码节的首地址;
32.组件运行自检单元,用于运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;以及若所述实际运行环境参数信息和所述检视代码节中的数据不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
33.在一个可选的示例中,所述检视代码插桩单元在软件组件的编译链接过程中插入检视代码,具体为:所述检视代码插桩单元将检视代码中的检视数据节与软件组件功能代码中的数据节合并入可执行文件,映射为具备可读写权限的加载段,以及将所述检视代码中的检视代码节与软件组件功能代码中的代码节合并入可执行文件,映射为具备可执行权限的加载段;
34.所述检视数据写入单元在软件组件发布之前向可执行文件写入检视数据,具体为:检视数据写入单元采集所述软件组件期望满足的运行环境约束条件数据,将该数据覆写至可执行文件中的检视数据节,并指示入口地址修改单元将可执行文件的入口点地址修改为检视代码节的首地址。
35.第四方面,本发明提供了一种软件组件运行时自检视系统,包括:存储器和处理器;
36.所述存储器,用于存储计算机程序;
37.所述处理器,用于当执行所述计算机程序时,实现上述第一方面提供的方法。
38.第五方面,本发明提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,当所述计算机程序被处理器执行时,实现上述第一方面提供的方法。
39.总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
40.本发明提供一种软件组件、软件组件运行时自检视方法、装置及系统,针对二进制软件制品按需注入、删除自定义的功能节,可在不改变源代码、不影响日常开发流程的基础上对软件制品批量化添加新的运维管理能力;
41.本发明提供一种软件组件、软件组件运行时自检视方法、装置及系统,将诊断代码和诊断数据内置于二进制软件制品并进行运行时自动诊断,无需另行搭建诊断环境并简化了诊断步骤。
附图说明
42.图1是本发明实施例提供的软件组件运行时自检视方法流程图;
43.图2为本发明实施例提供的软件组件运行时自检视方法原理示意图;
44.图3为本发明实施例提供的软件组件运行时自检视方法流程示意图;
45.图4是本发明实施例提供的软件组件运行时自检视装置架构图。
具体实施方式
46.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
47.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
48.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
49.本发明的目的在于寻求一种对软件运行环境进行自动诊断方法,确保运行环境的合规性。
50.图1是本发明实施例提供的软件组件运行时自检视方法流程图;如图1所示,包括如下步骤:
51.s101,在软件组件的可执行文件中插入检视代码;所述检视代码包括:检视代码节和检视数据节;所述检视数据节包括所述软件组件期望满足的运行环境约束条件信息;所述检视代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
52.s102,将所述软件组件的入口点地址修改为所述检视代码节的首地址;
53.s103,运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;
54.s104,若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;
55.s105,若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
56.在一个可选的示例中,所述可执行文件为elf格式文件。
57.在一个可选的示例中,所述运行环境约束条件信息包括但不限于:运行环境变量、配置文件、依赖动态库以及软件版本。
58.在一个可选的示例中,在软件组件的可执行文件中插入检视代码,具体为:
59.对运行环境约束条件信息的数据结构进行声明,该数据结构由多个数据项组成,数据项为固定长度的字符串,指代某一维度的运行环境约束条件信息;数据项之间按照线性关系顺序存储;
60.在检视代码的源文件中以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,对该文件进行编译,生成命名为check_env.o的可重定位
目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;
61.按照正常的步骤对软件组件的源代码进行编译链接,生成自检视功能未被激活的可执行文件;
62.针对每一个软件组件收集其运行环境约束条件信息,按照运行环境约束条件信息的数据结构进行组织,将该信息覆写至可执行文件中的检视数据节,并将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件。
63.具体地,本发明第一方面,提出一种收集软件制品运行约束条件信息的方法,所述方法包括如下技术方案:
64.对运行环境约束条件信息的数据结构进行声明,该数据结构由多个数据项组成,数据项为固定长度的字符串,指代某一维度的运行环境约束条件信息;数据项之间按照线性关系顺序存储;
65.检视数据写入单元,提供人机界面,用于采集所述软件组件期望满足的运行环境约束条件数据,按照运行环境约束条件信息的数据结构进行组织,并将该数据覆写至可执行文件中的检视数据节。
66.本发明第二方面,提出一种对elf格式文件注入诊断代码的方法,适用于采用gcc工具链的c/c++编程语言,如图2所示,所述方法包括如下技术方案:
67.elf格式目标文件的内容按照用途的不同分别组织为不同的节(section),例如执行指令位于代码段.text,全局变量和局部静态变量位于数据段.data。目标文件链接生成可执行文件或动态库时,将相同性质的节合并映射为段(segment),例如具有可读可执行权限的节组成一个段,具有可读可写权限的节组织为另一个段;
68.在检视代码的源文件中以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,对该文件进行编译,生成命名为check_env.o的可重定位目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;
69.按照正常的步骤对软件组件的源代码进行编译链接,生成自检视功能未被激活的可执行文件;
70.针对每一个软件组件收集其运行环境约束条件信息,按照运行环境约束条件信息的数据结构进行组织,将该信息覆写至可执行文件中的检视数据节,并将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件。
71.本发明第三方面,提出一种基于内嵌的诊断代码对运行环境进行诊断的方法,所述方法包括如下技术方案:
72.运行软件组件的可执行文件,首先执行检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地
址,正常执行所述软件组件;以及若所述实际运行环境参数信息和所述检视代码节中的数据不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
73.请参阅图3,本发明提供的软件组件运行时自检视方法适用于采用gcc工具链的c/c++编程语言,如图3所示,所述方法包括:
74.s1、检视代码插桩单元依据运行环境的检查清单开发诊断代码,以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,保存为check_env.c文件;
75.s2、对check_env.c进行编译,生成命名为check_env.o的可重定位目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;
76.s3、针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;
77.s4、按照正常的步骤对软件组件的功能代码进行编译链接,插入检视代码,生成自检视功能未被激活的可执行文件;
78.s5、检视数据写入单元针对软件组件收集其运行环境约束条件数据,按照运行环境约束条件信息的数据结构进行组织,每一个数据项为固定长度的字符串,如果填写的内容少于长度规范,则自动在内容之后补零直至长度规范;
79.s6、检视数据写入单元将运行环境约束条件数据覆写至可执行文件中的检视数据节;
80.s7、入口地址修改单元,将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件;
81.s8、运行软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;以及若所述实际运行环境参数信息和所述检视代码节中的数据不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
82.图4是本发明实施例提供的软件组件运行时自检视装置架构图。如图4所示,包括:
83.检视代码插桩单元410,用于在软件组件的链接过程中插桩检视代码;所述检视代码包括:检视数据节和检视代码节;所述检视数据节的内容遵循运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中进行占位;所述检视代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
84.检视数据写入单元420,提供人机界面,用于采集所述软件组件期望满足的运行环境约束条件数据,将该数据覆写至可执行文件中的检视数据节;
85.入口地址修改单元430,用于将所述软件组件的入口点地址修改为所述检视代码节的首地址;
86.组件运行自检单元440,用于运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环
境约束条件;若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;以及若所述实际运行环境参数信息和所述检视代码节中的数据不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
87.可以理解的是,上述各个单元的详细功能实现可参见前述方法实施例中的介绍,在此不做赘述。
88.另外,本发明实施例提供了另一种软件组件运行时自检视系统,其包括:存储器和处理器;
89.所述存储器,用于存储计算机程序;
90.所述处理器,用于当执行所述计算机程序时,实现上述实施例中的方法。
91.此外,本发明还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,当所述计算机程序被处理器执行时,实现上述实施例中的方法。
92.基于上述实施例中的方法,本发明实施例提供了一种计算机程序产品,当计算机程序产品在处理器上运行时,使得处理器执行上述实施例中的方法。
93.基于上述实施例中的方法,本发明实施例还提供了一种芯片,包括一个或多个处理器以及接口电路。可选的,芯片还可以包含总线。其中:
94.处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字通信器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤。通用处理器可以是微处理器或者该理器也可以是任何常规的处理器等。
95.接口电路可以用于数据、指令或者信息的发送或者接收,处理器可以利用接口电路接收的数据、指令或者其它信息,进行加工,可以将加工完成信息通过接口电路发送出去。
96.可选的,芯片还包括存储器,存储器可以包括只读存储器和随机存取存储器,并向处理器提供操作指令和数据。存储器的一部分还可以包括非易失性随机存取存储器(nvram)。
97.可选的,存储器存储了可执行软件模块或者数据结构,处理器可以通过调用存储器存储的操作指令(该操作指令可存储在操作系统中),执行相应的操作。
98.可选的,接口电路可用于输出处理器的执行结果。
99.需要说明的,处理器、接口电路各自对应的功能既可以通过硬件设计实现,也可以通过软件设计来实现,还可以通过软硬件结合的方式来实现,这里不作限制。
100.应理解,上述方法实施例的各步骤可以通过处理器中的硬件形式的逻辑电路或者软件形式的指令完成。
101.可以理解的是,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。此外,在一些可能的实现方式中,上述实施例中的各步骤可以根据实际情况选择性执行,可以部分执行,也可以全部执行,此处不做限定。
102.可以理解的是,本技术的实施例中的处理器可以是中央处理单元(cen tral processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、晶体管逻辑器件,硬件部件或者其任意组合。通用处理器可以是微处理器,也可以是任何常规的处理器。
103.本技术的实施例中的方法步骤可以通过硬件的方式来实现,也可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,ram)、闪存、只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)、寄存器、硬盘、移动硬盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。
104.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
105.本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1