一种基于虚拟机快照的二分法在线仿真和查错方法与流程

文档序号:14036755阅读:204来源:国知局
一种基于虚拟机快照的二分法在线仿真和查错方法与流程

本发明涉及软件测试及故障定位的技术领域,特别涉及一种基于虚拟机快照的二分法在线仿真和查错方法。



背景技术:

由于虚拟化技术的不断发展,大部分的应用场景都可以使用虚拟化技术得到实现,程序的调试及测试环境也是如此。

软件测试在软件开发过程中占据了大量的人力物力,而故障定位又是测试中付出代价最高的行为之一。基于单机的传统方法中,开发人员在程序中引入了一个缺陷,缺陷造成了程序中的错误状态,错误状态进而引发了程序故障,它以可感知的外部错误的形式出现。随后,开发人员会执行某个失败的测试用例,使用调试器反复设置断点,观察程序状态直到错误状态的出现。然后推断可能的感染源,定位缺陷位置并验证,修正软件缺陷。

这种传统做法为了让程序进入可能的问题代码部分,往往需要程序调试人员一遍又一遍的模拟输入、输出,并且如果问题和运行时间相关,还需要占用大量的时间反复测试。最致命的问题在于,传统做法在反复多次从头调试的过程中,存在无法再次复现问题或复现的现象每次均有差异,带来了仿真和测试的困难。究其原因,主要为在操作系统的多进程、多线程环境中,由于外部i/o延时等的不确定性,操作系统的调度也具有不确定性,从而导致缺陷代码的执行序列不一致,最终导致一些问题无法可靠的复现,导致缺陷问题很难定位及处理。

虚拟机技术,可以捕捉和存储正在运行的“机器”的快照,该快照是虚拟机在特定时刻的状态,包括机器的硬件状态、软件状态、操作系统状态、文件系统状态、内存状态等等。这个捕捉到的“处于运动中”的机器的状态具有运行状态的一个完整的环境。然后,通过将相应快照应用于虚拟机可将虚拟机恢复为任何以前的状态。

市场需要一种能够充分利用虚拟机的特性,提高复现故障的速度,利于人工分析同一故障的不同运行序列并可以回溯至缺陷引入点,从而指出软件缺陷在源代码中可能存在的位置的在线仿真和查错方法,本发明解决这样的问题。



技术实现要素:

为解决现有技术的不足,本发明的目的在于提供一种基于虚拟机快照的二分法在线仿真和查错方法,本发明通过充分利用虚拟机的特性,实现提高复现故障的速度,利于人工分析同一故障的不同运行序列,可以回溯至缺陷引入点,从而指出软件缺陷在源代码中可能存在的位置。

为了实现上述目标,本发明采用如下的技术方案:

一种基于虚拟机快照的二分法在线仿真和查错方法,包括如下步骤:

步骤一,利用待在线仿真和查错的软件组件及其软件环境生成0号镜像;

a)在虚拟机管理平台中,部署待在线仿真和查错和设置好的目标操作系统、第三方软环境,网络初始配置,目标程序系统;

b)部署桩代码脚本程序;

c)将此虚拟机制作为初始虚拟机镜像,称之为0号镜像。

步骤二:生成相互独立的多份虚拟机运行环境快照形成虚拟机镜像矩阵;

a)设问题出现的概率为p,p∈(0,1],为了保证几率复现,部署个工程实例数;

其中k为可靠性参数,k>0;

b)利用虚拟机管理api部署多份0号镜像实例,并部署相关的虚拟网络环境;将0号镜像实例化为运行态虚拟机;

c)对每个0号镜像实例,利用管理机进行远程ssh控制,启动运行于虚拟机实例中的桩代码程序;

d)启动桩代码后,将目标软件开始运行的时刻称分别0时刻,为它建立虚拟机快照,即0时刻虚拟机快照;设有n份0号镜像实例,则生成s=[s01,s02,s03....s0n]的虚拟机快照集群;

e)虚拟机在运行过程中,管理机按时间间隔t0定时对n个虚拟机进行快照,并形成相应的1号镜像实例、2号镜像实例、3号镜像实例……n号镜像实例;

f)设某一虚拟机运行一段时间后发生程序中断或其他待调试的异常行为后,由桩代码记录虚拟机运行的时刻运行工况,并通过通信方式向管理机汇报此刻的运行工况,管理机关闭此虚拟机的运行;设此前已记录下虚拟机镜像号为i,则在将运行出错时刻的虚拟机镜像设为i+1号镜像;

g)等待时间tmax后,一部分虚拟机复现出在tmax之前或tmax时的故障,另一部分未能成功复现故障的虚拟机,则形成了如下所示的虚拟机镜像矩阵;其中k=tmax/t0,

其中由于部分虚拟机实例运行未到tmax就复现了故障,此时将此时间点之后的sij镜像设置为空;

h)管理机根据桩代码识别出程序异常的位置,并根据事先设置的指标确认此异常为目标异常;

步骤三:整理虚拟机快照镜像;

a)管理机将复现出异常的虚拟机对应的镜像s异常=[si1,si2,si3....sin]保留,将到达tmax时间仍然未复先异常虚拟机对应的镜像s正常删除;

b)设复现出故障的虚拟机集合为mfail,对于每一个发现异常的虚拟机镜像i∈mfail,设si1,si2,si3..sik不为空,si(k+1)为空,则管理机将si1-si,middle镜像删除,其中middle=upperround(k/2);upperround为大于等于取k/2的最小整数的值;再重新在原有虚拟机实例中还原si,middle镜像;

步骤四:利用二分法递进减少虚拟机快照镜像数目;

a)保证每一种复现异常的虚拟机镜像均进入下次迭代中,,取出每一个发现异常的虚拟机i的si,middle镜像并部署至少1份运行实例;并且在部署所有异常的虚拟机镜像后,异常的虚拟机镜像仍然未达到个工程实例数时,部署未达到虚拟机运行实例数目的虚拟机剩余个数的运行环境,运行环境所采用的镜像为所有发现异常的虚拟机的镜像;

b)需要保证部署所有发现异常的镜像的虚拟机至少大于等于个工程实例数;

c)对每个利用桩代码实现对si,middle之后的输入输出操作;对每个利用桩代码实现对si,middle之后的输入输出操作;并如步骤二中的e)‐g)所示进行实际仿真运行,其中由于部分虚拟机实例运行未到tmax就复现了故障,此时将此时间点之后的sij镜像设置为空;按照步骤三的方法可以再次生成虚拟机镜像矩阵s,si,0-si,middle实例为空;

步骤五:提交人工判断故障原因;

a)当发现某一台虚拟机不为空的镜像集合小于数目小于100个样本,且虚拟机进入故障态;将所有满足这个条件的镜像还原至目标虚拟机;

b)将这些虚拟机历次桩代码收集的信息日志提交人工分析,并提供虚拟机镜像矩阵供人工进行还原测试,调试。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,桩代码的功能包括:启动目标程序;监视相关的软件运行工况;按照设定好的脚本,模拟相关的网络通信,命令输入、人机界面输入;生成目标程序崩溃点的内存及调用堆栈情信息。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,软件运行工况包括:内存占用、cpu负荷、磁盘i/o、程序崩溃截取。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,步骤二中,设问题出现的概率为p,p∈(0,1],为了保证几率复现,可以部署个工程实例数;其中k为可靠性参数,k>0;k大于等于5。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,步骤二中,虚拟机管理api是利用libvirt和qemu提供的功能进行快照管理。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,

步骤四:利用二分法递进减少虚拟机快照镜像数目;

a)为了保证一定的复现率,取出每一个发现异常的虚拟机i的si,middle镜像并部署至少1份运行实例;并且在部署所有异常的虚拟机镜像后,异常的虚拟机镜像仍然未达到个工程实例数时,再部署未达到的虚拟机运行实例数目的虚拟机剩余个数的运行环境,运行环境所采用的镜像为所有的发现异常的虚拟机的镜像;

b)需要保证部署发现异常镜像的虚拟机至少大于等于个工程实例数;

c)对每个利用桩代码实现对si,middle之后的输入输出操作;并如步骤二中的

e)‐g)所示进行实际仿真运行,其中由于部分虚拟机实例运行未到tmax就复现了故障,此时将此时间点之后的sij镜像设置为空;按照步骤三的方法可以再次生成虚拟机镜像矩阵s,si,0-si,middle实例为空;

d)重复步骤三和步骤四中a)-c)的内容,保证能够进一步缩减可能的虚拟机镜像实例。

前述的一种基于虚拟机快照的二分法在线仿真和查错方法,步骤五中,当发现某一台虚拟机不为空的镜像集合小于数目小于100个样本,且虚拟机进入故障态;将所有满足这个条件的镜像还原至目标虚拟机;虚拟机进入故障态的判断条件是:虚拟机的再运行时间小于1分钟即判断进入故障态。

本发明的有益之处在于:本发明提供一种基于虚拟机快照的二分法在线仿真和查错方法,本发明通过充分利用虚拟机的特性,运用虚拟机的快照功能及测试用例的状态信息;实现提高复现故障的速度,利于人工分析同一故障的不同运行序列(位于故障点的不同虚拟机实例中),可以回溯至缺陷引入点,从而指出软件缺陷在源代码中可能存在的位置。这样的设计,将极大的提高软件生产率和软件质量,同时充分利用了现代池化的虚拟机计算资源的特性,即部署的实例数目可以足够多,在资源池足够大时,只要全部实例的运行时长总和与运行同一实例同样机时的虚拟机的开销是近似相等;本方法可以减少使用整体机,从而降低成本。

附图说明

图1是本发明的一种实施例的流程图;

图2是本发明的一种实施例的部署过程图。

具体实施方式

以下结合附图和具体实施例对本发明作具体的介绍。

如图1所示,一种基于虚拟机快照的二分法在线仿真和查错方法,包括如下步骤:

步骤一,利用待在线仿真和查错的软件组件及其软件环境生成0号镜像;

a)在虚拟机管理平台中,部署待在线仿真和查错和设置好的目标操作系统、第三方软环境,网络初始配置,目标程序系统;

b)部署桩代码脚本程序;需要说明的是:桩代码的功能包括:启动目标程序;监视相关的软件运行工况;按照设定好的脚本,模拟相关的网络通信,命令输入、人机界面输入;生成目标程序崩溃点的内存及调用堆栈情信息。软件运行工况包括:内存占用、cpu负荷、磁盘i/o、程序崩溃截取。

c)将此虚拟机制作为初始虚拟机镜像,称之为0号镜像。

步骤二:生成相互独立的多份虚拟机运行环境快照形成虚拟机镜像矩阵;

a)设问题出现的概率为p,p∈(0,1],为了保证几率复现,部署个工程实例数;其中k为可靠性参数,k>0;作为工程实践的一个实施例,k大于等于5;但在本专利原理上,并不对k的值做任何限定,k的取值应该和实际的硬件资源、问题的复现难度、人力资源耗费程度等因素有关;

b)利用虚拟机管理api部署多份0号镜像实例,并部署相关的虚拟网络环境;将0号镜像实例化为运行态虚拟机;作为一种实施例,虚拟机管理api是利用libvirt和qemu提供的功能进行快照管理;需要说明的是,示例所展现展现的方法仅仅是虚拟机管理api的一个示例,实际本专利描述的方式,可以根据采用实际运行的虚拟化软、硬件环境提供的api控制。

c)对每个0号镜像实例,利用管理机进行远程ssh控制,启动运行于虚拟机实例中的桩代码程序;

d)启动桩代码后,将目标软件开始运行的时刻称分别0时刻,为它建立虚拟机快照,即0时刻虚拟机快照;设有n份0号镜像实例,则生成s=[s01,s02,s03....s0n]的虚拟机快照集群;

e)虚拟机在运行过程中,管理机按时间间隔t0定时对n个虚拟机进行快照,并形成相应的1号镜像实例、2号镜像实例、3号镜像实例……n号镜像实例;

f)设某一虚拟机运行一段时间后发生程序中断或其他待调试的异常行为后,由桩代码记录虚拟机运行的时刻运行工况,并通过通信方式向管理机汇报此刻的运行工况,管理机关闭此虚拟机的运行;设此前已记录下虚拟机镜像号为i,则在将运行出错时刻的虚拟机镜像设为i+1号镜像;

g)等待时间tmax后,一部分虚拟机复现出在tmax之前或tmax时的故障,另一部分未能成功复现故障的虚拟机,则形成了如下所示的虚拟机镜像矩阵;其中k=tmax/t0,

其中由于部分虚拟机实例运行未到tmax就复现了故障,此时将此时间点之后的sij镜像设置为空;

h)管理机根据桩代码识别出程序异常的位置,并根据事先设置的指标确认此异常为目标异常;

步骤三:整理虚拟机快照镜像;

a)管理机将复现出异常的虚拟机对应的镜像s异常=[si1,si2,si3....sin]保留,将到达tmax时间仍然未复先异常虚拟机对应的镜像s正常删除;

b)设复现出故障的虚拟机集合为mfail,对于每一个发现异常的虚拟机镜像i∈mfail,设si1,si2,si3..sik不为空,si(k+1)为空,则管理机将si1-si,middle镜像删除,其中middle=upperround(k/2);upperround为大于等于取k/2的最小整数的值;再重新在原有虚拟机实例中还原si,middle镜像;

步骤四:利用二分法递进减少虚拟机快照镜像数目;

a)为了保证保证每一种复现异常的虚拟机镜像均进入下次迭代中,取出每一个发现异常的虚拟机i的si,middle镜像并部署至少1份运行实例;并且在部署所有异常的虚拟机镜像后,异常的虚拟机镜像仍然未达到个工程实例数时,部署未达到虚拟机运行实例数目的虚拟机剩余个数的运行环境,运行环境所采用的镜像为所有发现异常的虚拟机的镜像;

b)需要保证部署所有发现异常的镜像的虚拟机至少大于等于个工程实例数;

c)对每个利用桩代码实现对si,middle之后的输入输出操作;对每个利用桩代码实现对si,middle之后的输入输出操作;并如步骤二中的e)‐g)所示进行实际仿真运行,其中由于部分虚拟机实例运行未到tmax就复现了故障,此时将此时间点之后的sij镜像设置为空;按照步骤三的方法可以再次生成虚拟机镜像矩阵s,si,0-si,middle实例为空;

d)重复步骤三和步骤四中a)-c)的内容,这一操作保证能够进一步缩减可能的虚拟机镜像实例,即实例不为空的虚拟机镜像。

步骤五:提交人工判断故障原因;

a)当发现某一台虚拟机不为空的镜像数目小于100个样本,且虚拟机进入故障态;将所有满足这样条件的镜像还原至目标虚拟机;虚拟机进入故障态的判断条件是:虚拟机的再运行时间小于1分钟即判断进入故障态。

b)将这些虚拟机历次桩代码收集的信息日志提交人工分析,并提供虚拟机镜像矩阵(绝大部分已设置为空),供人工进行还原测试,调试。

如图2,本方法的部署过程具体是:

a)在虚拟机管理平台中,部署待在线仿真和查错和设置好的目标操作系统、第三方软环境,网络初始配置,目标程序系统。

b)部署桩代码脚本或程序。桩代码的功能是启动目标程序、并监视相关的软件运行工况(内存占用、cpu负荷、磁盘i/o、程序崩溃截取等)。为在线仿真的需要,在必要时,桩代码将按照设定好的脚本,模拟相关的网络通信,命令输入、人机界面输入等操作。特别重要的是,桩代码将生成目标程序崩溃点的内存及调用堆栈情信息。

c)将此虚拟机制作为初始虚拟机镜像,称之为0号镜像。

d)为了保证问题的复现,本方案要求部署多份同样的运行环境实例;设问题出现的概率为p,p∈(0,1]。为了保证一定几率复现问题,可以部署个工程实例数。其中k为可靠性参数,k>0。作为工程实践的一个建议,k大于等于5。

e)利用虚拟机管理api部署上述的多份0号镜像实例,并部署相关的虚拟网络环境;将0号镜像实例化为运行态虚拟机。

f)对每个0号镜像实例,利用管理机进行远程ssh控制等方式,启动运行于虚拟机实例中的桩代码程序。

g)启动桩代码后,将目标软件开始运行的时刻称分别0时刻,为它建立虚拟机快照,即0时刻虚拟机快照;设有n份0号镜像实例,则生成s=[s01,s02,s03....s0n]的虚拟机快照集群。

本发明提供一种基于虚拟机快照的二分法在线仿真和查错方法,本发明通过充分利用虚拟机的特性,运用虚拟机的快照功能及测试用例的状态信息;实现提高复现故障的速度,利于人工分析同一故障的不同运行序列(位于故障点的不同虚拟机实例中),可以回溯至缺陷引入点,从而指出软件缺陷在源代码中可能存在的位置。这样的设计,将极大的提高软件生产率和软件质量,同时充分利用了现代池化的虚拟机计算资源的特性,即部署的实例数目可以足够多,在资源池足够大时,只要全部实例的运行时长总和与运行同一实例同样机时的虚拟机的开销是近似相等;本方法可以减少使用整体机,从而降低成本。

以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,上述实施例不以任何形式限制本发明,凡采用等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1