当前位置: 首页 > 专利查询>叶嵩专利>正文

一种基于动态插桩-销桩技术的异步测试方法技术

技术编号:32635784 阅读:11 留言:0更新日期:2022-03-12 18:10
本发明专利技术公开了一种基于动态插桩

【技术实现步骤摘要】
一种基于动态插桩

销桩技术的异步测试方法


[0001]本专利技术属于软件测试
,尤其涉及一种基于动态插桩

销桩技术的异步测试方法。

技术介绍

[0002]现有测试技术中,为获取软件中间状态,通常会采用插桩技术。即在程序执行代码的内部嵌入测试模块,或着嵌入程序跳转代码以便转到指定测试程序。
[0003]插桩方式分两类:
[0004]a)静态插桩
[0005]利用编译过程将桩代码插入程序。实现方法有两种:在源代码中插入桩源代码然后编译成二进制代码,称为源代码插桩方式;在编译过程中编译器嵌入二进制代码,称为二进制插桩方式。
[0006]b)动态插桩
[0007]利用程序运行期间加载桩代码到程序进程空间,并在测试点处执行测试程序。实现方法有两种:通过设置断点并在断点处跳转到测试桩程序,称为断点方式;另一种通过加载时修改测试点处代码,插入桩代码,称为注入方式。
[0008]静态插桩在传统软件测试中使用较多,典型的例子就是通过插入print语句输出变量,也可采用更复杂的处理。静态插桩增大软件程序映像,加载后,运行所有可达桩代码,对软件运行性能影响较大。
[0009]动态插桩不会导致软件程序映像发生改变,并且非常灵活,对软件运行性能影响则有插桩策略决定。
[0010]断点方式多次调用INT3系统中断,也会造成程序运行速度变慢。由于系统中断不能嵌套调用,否则导致测试过程发生异常。。
[0011]注入方式的动态插桩具有灵活快速,而且可以嵌套插桩,适应复杂的插桩要求。但是注入方式的接口代码处理比较复杂,需要使用者对被测软件的二进制代码特性有很深的了解,加大了操作和推广难度。
[0012]静态插桩会导致软件程序映像发生改变,造成编译后的被测软件代码冗余大,运行速度变慢,造成严重性能问题。插桩点选择缺乏灵活性,容易反复在同一个插桩点调用相同的测试模块,对相关代码的运行输出带来混乱,如果代码是不可重入的,则插桩可导致软件运行异常。甚至由于测试代码自身可能存在缺陷,导致该测试版本的软件引入缺陷。
[0013]动态插桩不会导致软件程序映像发生改变,并且非常灵活,对软件运行性能影响较小。但是传统上采用的断点方式是调用INT3系统中断,由于系统中断不能嵌套调用,否则会导致测试过程发生异常,因此缺乏灵活性,无法完成复杂测试处理。
[0014]自动化测试通过程序代替人工与被测软件进行交互,实现对被测软件的功能和性能等指标进行验证。从实施的角度包含三个方面:
[0015]a)自动数据产生(模拟器)
[0016]通过软件根据需求和接口定义产生符合被测软件输入条件的数据,从而使得被测软件输出结果,然后通过人工或程序手段并与期望值进行比较,获得测试结果。这种方式使用时间较长,但存在测试粒度问题。
[0017]b)特定接口协议的自动化测试
[0018]测试工具利用测试脚本模拟网络通信协议和设备通信协议的交互过程,实现对被测试软件和硬件系统的测试。根据已知的协议交互规则,判断协议实现过程中的报文数据的完整性和正确性。由于协议固化较好,容错处理相对容易,但范围比较受限制。
[0019]c)UI自动化测试
[0020]通过软件和脚本对用户交互进行模拟执行,然后在测试程序中自动对被测软件输出和预期进行比较,判断测试结果。实际使用中,由于UI界面的输入为人工操作设计且基于事件响应,而事件响应的处理具有很强的灵活性和不可预知性,因此预先编写的测试程序对响应无法正确的判断和处理,测试程序运行过程经常因为UI元素变化和响应阻塞导致异常而失败。
[0021]传统测试采用作业式脚本模式实现自动化测试,测试程序采用顺序执行,返回结果后判断预期与返回结果的一致性,然后决定下一步执行。后续测试用例的执行根据上一步测试用例结果进行。缺乏对被测软件事件响应的处理能力,也不具备对中间状态的预期设定能力,只能机械地按顺序执行,遇到错误在进行回退和处理。即使如此,依然导致了测试脚本在多次执行中重现性差,复用性差,修改多,容错成本高,测试耗时增加,使得自动化测试的综合效果还不如人工效果好。典型的情况如UI的自动化测试和复杂网络交互的自动化测试,在发生无法预知的状态变化之后,测试程序可能导致异常从而必须回退。
[0022]现有的大数据测试测试方法的缺点:
[0023]a)采用重复开发开发流程的方式,目前仍然以手工测试为主。
[0024]无论手工测试还是有限的自动测试工具,都需要重复编写测试代码,而且用例场景与开发阶段部分场景重合,造成很大浪费。
[0025]b)验证方式落后
[0026]一致性比较(预期比较)缺乏有效手段,测试效率低。特别是对实时场景缺乏有效的比较手段。
[0027]c)问题复现困难。
[0028]现有的机器学习软件的测试方法的缺点:
[0029]a)采用黑盒方式,状态跟踪能力有限
[0030]机器学习软件特别是深度学习软件通常在模型训练过程中进行输出反向传播和模型参数调整,如果仅仅根据最外层的输入和输出是很难发现模型本身的缺陷。因此必须跟踪模型内部的输出变化。
[0031]b)数据提取,特征分析等仍然人工操作,缺乏评估手段。
[0032]机器学习软件的数据提取和清洗,数据集分拆都是由复杂算法结合历史数据完成,因此整个测试的判断标准最好有测试程序自动处理。但目前的情况是这些测试依然由人工根据经验指定预期并和人工进行判断。自动化处理仅限于传统的数据处理部分。而且无法通过大量的历史数据结合做中间状态的评估,而仅仅依赖最后结果的评估,无法全面评估软件。
[0033]测试过程中的重复劳动
[0034]在工程实践中,单元测试和模块测试是高耗费低产出的测试活动,很多情况下开发人员是跳过该阶段以节省成本。当然这会导致部分关键代码覆盖不全,可能会出现测试不充分的情况。造成的原因是由于在软件开发早期,软件的硬件环境、相关模块环境和数据环境都不够齐备,导致不得不花很多力气进行模拟和编写桩代码和驱动代码,从而造成巨大的人力和时间成本。
[0035]传统测试方式的测试用例是通过作业方式(批处理方式)连续传递给被测软件接口。
[0036]如果被测软件利用复杂的事件机制进行返回,如类似Promise机制,那么这种方式就无法获取返回结果。需要对事件的回调函数进行插桩处理才能获取返回结果。但是目前的简单插桩技术不能保障操作的安全性,也不能执行复杂的比较操作。因此很多测试只有通过单独插桩打印结果,用人工检验结果的正确性,效率依然很低。

技术实现思路

[0037]这对上述技术问题,本专利技术提供一种基于动态插桩

销桩技术的异步测试方法。
[0038]本专利技术的一种基于动态插桩

销桩技术的异步测试方法,包括以下步骤:
[0039]步骤1:通过测试管理器调用桩处理例程,在程序加载和运行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于动态插桩

销桩技术的异步测试方法,其特征在于,包括以下步骤:步骤1:通过测试管理器调用桩处理例程,在程序加载和运行阶段,根据配置文件中的插桩点配置信息,在编译后的二进制机器代码上指定地址上修改代码,并保存原有代码;更改该地址内容使其指向桩处理例程在内存中注入的桩代码,通过桩代码关联配置信息指定的测试程序;桩代码在被测软件所在的进程中运行;步骤2:被测软件执行到插桩点地址上后转到插桩点插入的代码中执行,该段代码处理被测软件上下文,获取软件的运行状态,全局变量和函数参数,并传递给触发的测试程序;测试程序在被测软件的进程中运行,或在被测软件的进程外运行;步骤3:当检测点被触发时,相关联的测试程序执行测试用例,将测试用例参数和相关全局变量值传递给被测软件,当观察点被触发时,测试程序收集测试输出,并将测试输出通过进程间通信协议发送到验证处理进程中进行处理;然后测试程序选择执行销桩或增加插桩操作;步骤4:验证处理进程运行系统的验证处理模块;当该进程接到新的测试输出,便启动一个测试验证任务并加入到任务队列中;验证执行线程从队列中将每一个测试验证任务取出执行,返回的测试验证结果如果为通过,则发送给测试管理器;当结果验证出现不通过或异常情况,利用异常处理机制返回测试管理器进行处理;当测试输出持续到达就持续进行新增测试验证任务并加入到任务队列,直到不再有测试输出到达;此后将队列中的测试验证任务依次取出处理,直到队列为空;步骤5:验证进程分析测试输出并与预期结果进行比较,决定测试是否通过;如果测试不通过则发送消息给测试管理器,停止测试的执行;如果测试通过则暂存测试结果,确定是否请求销除插桩点的操作或增加插桩点的操作,确定执行销桩或增加插桩操作;确定是否产生动态测试用例和动态预期,如果确定则执行动态测试用例处理;步骤6:测试管理器检查被测软件没有结束运行,则继续执行被测软件,如果被测软件结束运行,则保存和输出测试结果。2.根据权利要求1所述的一种基于动态插桩

销桩技术的异步测试方法,其特征在于,所述销桩或增加插桩操作具体为:A1:测试程序通过桩处理例程增加插桩点,根据在编译后的二进制机器代码上指定地址上修改代码,并保存原有代码,更改该地址内容使其指向桩处理例程在内存中注入的桩代码,通过桩代码关联配置信息指定的测试程序;测试程序连续调用桩处理例程进行插桩,形成相互关联的多个插桩点;当被测软件触发插桩点并调用测试程序后,当前执行的测试脚本设置新的插桩点,形成嵌套插桩;插桩遵循桩处理策略进行;A2:测试程序通过桩处理例程删除插桩点;在函数或待测代码片段结束时,将修改的代码为被测软件恢复原来的代码,继续执行被测软件未插桩前的代码,同时清除无用的桩代码;这称为销桩;在测试程序中连续调用销桩操作,并解除嵌套插桩;销桩遵循桩处理策略进行;A3:当此段测试程序执行完后,流程将回到被测软件执行,直到下一个插桩点被触发。3.根据权利要求2所述的一种基于动态插桩

销桩技术的异步测试方法,其特征在于,所述桩处理策略包括桩计数机制和生存周期;桩计数机制用于插桩和销桩的过程中,具体为:桩处理模块维持一个桩计数列表,为每
个创建的插桩点保存计数值和生存周期值,并按插桩顺序排序;当某个插桩点被创建时,在桩计数列表中新建节点,初始计数值为1,生存周期值为0;当某个插桩点再次被调用时,对应的桩计数增加1,而某个插桩点不再使用时,桩计数减1;如果某个插桩点的桩计数为0,则删除该插桩点的插桩代码,恢复插桩点原来的代码,并且把该插桩点在桩计数列表中的节点信息删除;每个插桩点都有生存周期,用64位无符号整数表示;大于0的数值代表指定的生存周期;每个插桩点的桩计数等于生存周期值时将在桩代码和关联测试程序执行完毕对该插桩点进行销桩;数值0为初始值,代表不限时的生存周期;测试程序根据需要设置生存周期条件:如果某个插桩点需要多次观察而测试程序运行结束后不销桩的话,设定其生存周期值来决定插桩点接下来使用多久;如果生存周期值为某个正整数,当桩计数到达该整数后,对该插桩点测试程序运行结束后进行销桩;如果设置生存周期值为0,则该插桩点在测试过程中不会被删除;如果插桩点代码出现异常,按后面的插桩点造...

【专利技术属性】
技术研发人员:叶嵩邹思颖
申请(专利权)人:叶嵩
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1