[发明专利]一种Java程序注入故障的方法和系统有效
申请号: | 201510975340.0 | 申请日: | 2015-12-22 |
公开(公告)号: | CN106909498B | 公开(公告)日: | 2020-12-22 |
发明(设计)人: | 王帅 | 申请(专利权)人: | 创新先进技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京国昊天诚知识产权代理有限公司 11315 | 代理人: | 黄熊;李永强 |
地址: | 英属开曼群岛大开曼*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 java 程序 注入 故障 方法 系统 | ||
本申请实施例公开了一种Java程序注入故障的方法和系统。所述方法包括:客户端接收输入的故障代码,并将所述故障代码传送至总控端;Java虚拟机启动后,加载原始Class文件;所述总控端监控所述Java虚拟机所在Java进程的运行情况,取回所述Java虚拟机加载的原始Class文件;所述总控端根据所述故障代码编辑所述取回的原始Class文件,生成编辑后的Class文件;总控端将所述编辑后的Class文件上传至所述Java虚拟机以替换所述原始Class文件;所述Java虚拟机解释执行所述编辑后的Class文件。利用本申请实施例,可以实现Java虚拟机启动后的故障注入。
技术领域
本申请涉及计算机软件技术领域,尤其涉及一种Java程序注入故障的方法及系统。
背景技术
软件开发过程中,往往需要对开发的程序进行可靠性验证。一般可以通过向待验证的程序引入故障以检测待验证程序是否产生异常情况。通过引入故障,可以加速系统失效,从而在较短时间内模拟系统错误,并获取系统的失效数据,从而达到评测待验证程序的容错性能以及稳定性。故障注入技术一般包括基于硬件的故障注入、基于软件的故障注入以及基于仿真的故障注入。
一般的基于软件的故障注入方法可以通过动态修改进程所使用寄存器中的数据实现。计算机系统中,进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念。它不只是程序的代码,还包括当前的活动,通过处理寄存器的内容来表示。当进程正在运行时,状态通常储存在寄存器中。现有技术为了评测软件系统中对于某些进程失效后整个系统的可恢复性、容错性和可用性,提供了一套基于计算机系统寄存器的故障注入工具,该模块可应用于x86与x64系列的Linux系统。
操作系统中一般需要运行多个进程,进程与进程之间需要共享CPU资源。而操作系统则负责进程间的调度与切换,当系统需要对进程进行调度时,需要确保在进程切换过程中不能有数据的损坏。因此,操作系统会先将需要换出的进程的当前状态(主要是寄存器内容)保存至内存中,并恢复需要换入进程的状态。然而,这些操作均需要在系统时钟中断请求的参与下完成。时钟中断请求是时操作系统中任务调度、进程切换的资源占用统计依据,是整个操作系统内核工作的脉搏。也就是说,当系统时钟中断出现时,操作系统可能进行进程的切换操作,随后完成现场恢复操作。因此,当系统时钟中断时,在系统进行现场恢复操作之前,通过软件的方式可以修改内存中备份的寄存器数据,随后操作系统可以将修改过的寄存器内容恢复至进程寄存器中,从而达到软件故障注入的目的。
对于Java程序,上述方式无法实现故障注入。这是因为,用Java语言编写的软件系统,需要由Java虚拟机解释执行,而操作系统无法直接执行。
在Java程序开发过程中,当程序员编写完Java源代码后,Java源代码可由Java编译器编译为可被Java虚拟机执行的字节码文件(Class文件)。进而,由Java虚拟机解释执行所述字节码文件,可以实现程序的运行。在Java虚拟机启动后,解释执行Class文件之前,Java虚拟机还需要完成对Class文件的加载、验证、准备、解析以及初始化这5个阶段。在正常情况下,Class文件被Java虚拟机加载一次。
现有技术中针对Java程序的一种故障注入工具,在Java虚拟机启动之前,使用字节码修改软件对编译完的Class文件进行修改,从而达到静态注入Java程序故障的目的。该工具需要预先收集相应的故障信息,并对class文件进行扫描匹配,然后注入相应的故障代码,启动Java虚拟机执行相应的字节码文件。
然而,该工具只适用于Java虚拟机启动之前对class字节码文件进行修改,当Java虚拟机启动后,该故障注入工具无法完成故障注入。在测试环境中,测试人员若想要复现已经出现的故障场景,需要将正在执行中的Java虚拟机关闭,然后修改字节码文件,重新启动Java虚拟机,这时,Java虚拟机已经无法恢复原有的故障上下文信息。特别是出现故障时的系统报错,在需要重现该错误时,由于重新启动Java虚拟机,之前报错时的各种参数和现象已经可能不会再重现了。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于创新先进技术有限公司,未经创新先进技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510975340.0/2.html,转载请声明来源钻瓜专利网。