一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

Java程序中自定义类型故障模拟方法和装置与流程

2022-11-30 10:44:52 来源:中国专利 TAG:

java程序中自定义类型故障模拟方法和装置
技术领域
1.本发明涉及混沌工程技术领域,尤其涉及一种java程序中自定义类型故障模拟方法和装置。


背景技术:

2.软件设计和开发中极其重要的一步就是抽象,经过抽象系统中定义映射了各种不同的复杂自定义类型,各个方法和上下游之间的业务调用都是基于这些自定义类型完成的。真实环境中软件系统的整个调用链路经常会出现由于各种软件和硬件环境故障导致系统抛出各种类型的异常。以jvm类型异常故障为例,其中不仅包含了java已定义的nullpointerexception、ioexception等已知类型异常,另外最常见的异常类型则是用户抽象的各种自定义类型异常。对于自定义返回值故障注入为例来说,经常被注入的方法返回值并非基础类型string,int等,也是返回抽象的复杂类型。
3.申请人通过调研发现目前常用的混沌工具比如chaosmesh、chaosd大多都只实现了java框架普通异常类型(ioexception)或方法返回值基本类型(string)的注入,无法模拟注入自定义复杂对象类型和自定义异常类型的注入。chaosblade虽然实现了部分自定义异常和自定义类型的故障模拟,然而在容器环境中注入该种类型的故障时只支持container层面,不支持pod、node层面,支持的层次不够全面。
4.可见,目前市面上暂无能够在混沌工程领域中实现统一注入自定义返回值复杂对象类型和抛出自定义异常类型的故障模拟方法。因此急需一种java程序中自定义类型故障模拟的方法,其可以覆盖混沌工程领域自定义故障类型模拟的不足,不仅能够在方法返回值注入返回自定义复杂对象类型,也能在方法中注入抛出自定义异常类型。同时,该方法还需能够同时适用于虚拟机和容器不同基础设施环境中各种层面的此种故障类型的模拟。


技术实现要素:

5.有鉴于此,本发明提供了一种java程序中自定义类型故障模拟方法和装置,以解决上述提及的至少一个问题。
6.为了实现上述目的,本发明采用以下方案:
7.根据本发明的第一方面,提供一种java程序中自定义类型故障模拟方法,所述方法包括:依据自定义类型故障模型完成java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义;通过所述自定义类型故障模型所定义的模板来输入故障规则参数以生成故障规则实例;加载解析所述故障规则实例得到解析数据;根据所述解析数据来调用jvm执行与所述故障规则对应的故障注入,并返回故障注入模拟结果。
8.根据本发明的第二方面,提供一种java程序中自定义类型故障模拟装置,装置方法包括:模板定义单元,用于依据自定义类型故障模型完成java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义;实例生成单元,用于通过所述自定义类型故障模型所定义的模板来输入故障规则参数以生成故障规则实例;加载解析单元,用于加载解
析所述故障规则实例得到解析数据;执行单元,用于根据所述解析数据来调用jvm执行与所述故障规则对应的故障注入,并返回故障注入模拟结果。
9.根据本发明的第三方面,提供一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,处理器执行所述计算机程序时实现上述方法的步骤。
10.根据本发明的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
11.根据本发明的第五方面,提供一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述方法的步骤。
12.由上述技术方案可知,本技术提供的java程序中自定义类型故障模拟方法和装置,可达到注入自定义返回值为复杂对象类型和自定义异常类型的目的,并且该方法可同时适用于虚拟机和容器不同的底层基础设施环境。因此本技术不仅完善了混沌工程领域故障模拟的类型,并且可扩展到容器和虚拟机环境java程序运行时动态注入各种类型和异常,既为测试人员提供了质量保障的有效手段又同时提升了测试的效率,也为开发人员的编码调试自测环节提供了便捷。
附图说明
13.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
14.图1是本技术实施例提供的一种java程序中自定义类型故障模拟方法的流程示意图;
15.图2是本技术实施例提供的进行模板定义的流程示意图;
16.图3是本技术实施例提供的加载解析故障规则实例的示意图;
17.图4是本技术另一实施例提供的一种java程序中自定义类型故障模拟方法的流程示意图;
18.图5是本技术实施例提供的一种java程序中自定义类型故障模拟装置的结构示意图;
19.图6是本技术实施例提供的一种模板定义单元的结构示意图;
20.图7是本技术另一实施例提供的一种java程序中自定义类型故障模拟装置的结构示意图;
21.图8是本技术实施例提供的电子设备的系统构成示意框图。
具体实施方式
22.为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
23.首先对本技术涉及的技术术语进行简单介绍:
24.术语“jvm”:是java虚拟机(java virtual machine)的缩写,是一个虚构出来的虚拟机。通过使用java虚拟机可屏蔽与具体平台相关的信息,使得java语言编译程序只需生成在java虚拟机上运行的目标代码(字节码),就可以在多个平台上不加修改地运行。
25.术语“自定义类型”:通常,我们会将现实世界中的事物抽象成代码,自定义的复杂数据类型则是映射描述这些现实世界中的事物。自定义类型并非系统预先提供好的字符串、整型等基本类型,而是程序员自己定义的一种引用数据类型。
26.术语“故障模拟”:指的是通过模拟生产环境中可能发生的故障如业务响应超时、cpu打满、磁盘损坏、线程池满等操作,对系统进行故障注入来测试系统的响应,通过发现系统存在的问题来不断优化达到提升系统的容错能力和健壮性的目的。
27.如图1所示为本技术实施例提供的一种java程序中自定义类型故障模拟方法的流程示意图,该故障模拟属于混沌实验的一部分,该方法包括如下步骤:
28.步骤s101:依据自定义类型故障模型完成java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义。
29.在本实施例中,自定义类型故障模型是在大量的jvm混沌实验数据的基础上抽象而成的模型,其是本技术故障模拟方法所依据的基础模型。
30.优选的,如图2所示,该步骤可以具体包括如下子步骤来进行模板定义:
31.步骤s1011:获取人工模拟故障实践过程中所产生的自定义类型故障模拟数据,所述自定义类型故障包括自定义类型异常和返回复杂对象类型故障。
32.步骤s1012:分析自定义类型故障模拟所需的元素和事件。
33.步骤s1013:根据所述元素和事件得到自定义类型故障模型,并对其进行模板定义。
34.优选的,在本实施例中得到的自定义类型故障模型可以为如下模型:
[0035][0036]
由上述模型描述克制,该自定义类型故障模型包括:规则、class类、方法和do操作事件。将该自定义类型故障模型定义为模板即完成了java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义。
[0037]
步骤s102:通过所述自定义类型故障模型所定义的模板来输入故障规则参数以生成故障规则实例。
[0038]
优选的,对应于上述自定义类型故障模型,本步骤中输入的故障规则参数可以包括:规则名字(rulename)、注入故障的class类名(classname)、method方法名(methodname)和故障行为do操作事件。基于上述模板输入上述故障规则参数,即可生成不同的故障规则实例。下面以自定义类型的复杂对象返回值故障模拟和注入自定义异常执行为例来展示具体的故障规则实例。
[0039]
对于自定义类型的复杂对象返回值故障模拟来说,在实际的实验中,即使是自定义类型,这个类型已经抽象定义完成的类型,并不是程序中未定义的类型。因此,如果定义的规则中注入故障的class类不存在,也将直接导致实验报错失败。下面是生成的返回值为自定义的student的故障规则实例:
[0040][0041]
对于注入自定义异常的具体故障规则实例如下,其可以抛出新异常"boom":
[0042][0043]
步骤s103:加载解析所述故障规则实例得到解析数据。
[0044]
该步骤通过对步骤s102中生成的故障规则实例源数据进行加载解析,将解析数据传送给后续执行规则模块进行具体混沌实验故障规则的执行,即进行对应故障的注入。
[0045]
有选的,如图3所示,本步骤具体可以包括:根据故障规则实例中的故障规则参数判断操作事件类型,即根据图3中的规则名、类名、方法名和do操作事件来判断操作事件类型,这里的操作事件类型可以包括故障标记类型和自定义类型,其中故障标记类型包括返回指定值和抛出指定异常,其取值为(return、throw),对应的自定义类型的具体取值为(返回值类型、异常类型)。
[0046]
最后得到的解析数据为如下数据元组:
[0047]
[规则名、class类名、方法名、故障标记类型、自定义类型]。
[0048]
步骤s104:根据所述解析数据来调用jvm执行与所述故障规则对应的故障注入,并返回故障注入模拟结果。
[0049]
本步骤通过jvm执行故障注入,就是以上述解析数据的数据元组为输入参数,然后通过调用jvm执行这些输入参数的指令来动态修改程序字节码从而改变其行为。执行完成后,会返回故障注入模拟的结果,方便用户观察本次实验是否成功,如果错误,也可展示具体的错误信息。
[0050]
由上述可知,本技术提供的java程序中自定义类型故障模拟方法,可达到注入自定义返回值为复杂对象类型和自定义异常类型的目的,并且该方法可同时适用于虚拟机和容器不同的底层基础设施环境。因此本技术不仅完善了混沌工程领域故障模拟的类型,并
且可扩展到容器和虚拟机环境java程序运行时动态注入各种类型和异常,既为测试人员提供了质量保障的有效手段又同时提升了测试的效率,也为开发人员的编码调试自测环节提供了便捷。
[0051]
如图4所示为本技术另一实施例提供的一种java程序中自定义类型故障模拟方法的流程示意图,该方法包括如下步骤:
[0052]
步骤s401:依据自定义类型故障模型完成java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义。
[0053]
步骤s402:通过所述自定义类型故障模型所定义的模板来输入故障规则参数以生成故障规则实例。
[0054]
步骤s403:加载解析所述故障规则实例得到解析数据。
[0055]
步骤s404:根据所述解析数据来调用jvm执行与所述故障规则对应的故障注入,并返回故障注入模拟结果。
[0056]
优选的,本步骤中的返回给用户的故障注入模拟结果为{实验id,和实验结果}。
[0057]
步骤s405:将所述实验id作为输入参数来发送恢复指令给混沌实验引擎。
[0058]
步骤s406:所述混沌实验引擎根据所述实验id查询数据库中的执行操作。
[0059]
步骤s407:所述混沌实验引擎通过反向操作来进行恢复操作,并在恢复操作结束后返回实验id和恢复实验结果,方便用户观察本次恢复操作是否成功。
[0060]
由上述可知,本技术提供的java程序中自定义类型故障模拟方法,可达到注入自定义返回值为复杂对象类型和自定义异常类型的目的,并且该方法可同时适用于虚拟机和容器不同的底层基础设施环境。因此本技术不仅完善了混沌工程领域故障模拟的类型,并且可扩展到容器和虚拟机环境java程序运行时动态注入各种类型和异常,既为测试人员提供了质量保障的有效手段又同时提升了测试的效率,也为开发人员的编码调试自测环节提供了便捷。最后本技术在执行完故障注入后,还可以按照注入的操作反向完成数据的恢复,保证对java程序无损。
[0061]
如图5所示为本技术实施例提供的一种java程序中自定义类型故障模拟装置的结构示意图,该装置包括:模板定义单元510、实例生成单元520、加载解析单元530和执行单元540,它们之间依次相连。
[0062]
模板定义单元510用于依据自定义类型故障模型完成java程序中自定义异常类型注入和返回复杂对象类型注入时的模板定义。
[0063]
实例生成单元520用于通过所述自定义类型故障模型所定义的模板来输入故障规则参数以生成故障规则实例。
[0064]
加载解析单元530用于加载解析所述故障规则实例得到解析数据。
[0065]
执行单元540用于根据所述解析数据来调用jvm执行与所述故障规则对应的故障注入,并返回故障注入模拟结果。
[0066]
优选的,如图6所示,所述模板定义单元510可以包括:模拟数据获取模块511、分析模块512和模板定义模块513,其中分析模块512分别和模拟数据获取模块511及模板定义模块513相连。
[0067]
模拟数据获取模块511用于获取人工模拟故障实践过程中所产生的自定义类型故障模拟数据,所述自定义类型故障包括自定义类型异常和返回复杂对象类型故障;
[0068]
分析模块512用于分析自定义类型故障模拟所需的元素和事件;
[0069]
模板定义模块513用于根据所述元素和事件得到自定义类型故障模型,并对其进行模板定义。
[0070]
优选的,上述故障规则参数包括规则名、注入故障的class类名、method方法名和故障行为do操作事件。
[0071]
优选的,上述加载解析单元530具体可以用于:根据故障规则实例中的故障规则参数判断操作事件类型,所述操作事件类型包括故障标记类型和自定义类型;所述解析数据为包括规则名、class类名、method方法名、故障标记类型和自定义类型的数据元组。
[0072]
优选的,上述故障标记类型包括返回指定值和抛出指定异常,所述自定义类型包括返回值类型和异常类型。
[0073]
优选的,上述返回故障注入模拟结果中可以包括实验id和实验结果,如图7所示,本实施例的装置还可以包括:恢复指令发送单元550,其用于将实验id作为输入参数来发送恢复指令给混沌实验引擎,由混沌实验引擎根据所述实验id查询数据库中的执行操作,以通过反向操作来进行恢复操作,并在恢复操作结束后返回实验id和恢复实验结果。
[0074]
上述各单元的具体描述可以参见前述方法实施例所对应的描述,在此不再继续赘述。
[0075]
由上述可知,本技术提供的java程序中自定义类型故障模拟装置,可达到注入自定义返回值为复杂对象类型和自定义异常类型的目的,并且该方法可同时适用于虚拟机和容器不同的底层基础设施环境。因此本技术不仅完善了混沌工程领域故障模拟的类型,并且可扩展到容器和虚拟机环境java程序运行时动态注入各种类型和异常,既为测试人员提供了质量保障的有效手段又同时提升了测试的效率,也为开发人员的编码调试自测环节提供了便捷。最后本技术在执行完故障注入后,还可以按照注入的操作反向完成数据的恢复,保证对java程序无损。
[0076]
本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现上述方法。
[0077]
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
[0078]
本发明实施例还提供一种计算机程序产品,包括计算机程序/指令,计算机程序/指令被处理器执行时实现上述方法的步骤。
[0079]
如图8所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理器130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图8中所示的所有部件;此外,电子设备600还可以包括图8中没有示出的部件,可以参考现有技术。
[0080]
如图8所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
[0081]
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
[0082]
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为lcd显示器,但并不限于此。
[0083]
该存储器140可以是固态存储器,例如,只读存储器(rom)、随机存取存储器(ram)、sim卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为erpom等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
[0084]
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
[0085]
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
[0086]
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
[0087]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0088]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0089]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0090]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0091]
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献