CN103425584B - 基于Java字节码的大型应用回归测试信息处理方法 - Google Patents
基于Java字节码的大型应用回归测试信息处理方法 Download PDFInfo
- Publication number
- CN103425584B CN103425584B CN201310380096.4A CN201310380096A CN103425584B CN 103425584 B CN103425584 B CN 103425584B CN 201310380096 A CN201310380096 A CN 201310380096A CN 103425584 B CN103425584 B CN 103425584B
- Authority
- CN
- China
- Prior art keywords
- code
- test
- object code
- regression
- bytecode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于Java字节码技术的大型应用回归测试信息处理方法;注入目标代码的插装步骤;目标代码运行路径的高效采集步骤;建立目标代码与测试用例之间关系的映射储存步骤;新老版本目标代码的比较步骤;自动选取需进行回归测试的用例的涉及分析步骤;基于版本流的回归测试持续改进步骤;自动生成目标应用的全部代码结构及调用关系;基于程序结构和代码语义进行数据对比;在目标应用字节码中插装探测逻辑以动态获取代码运行的完整路径和覆盖数据;控制测试用例的回归测试触发;测试用例与代码之间映射关系及波及关系的友好界面呈现。本发明对测试用例进行深度分析,将原来的程序黑盒状态变为半透明状态,使测试人员能够更好的实施测试。
Description
[技术领域]
本发明涉及软件回归测试领域的自动化、智能化方法,具体涉及一种无需源码条件下基于字节码技术的J2EE平台回归测试信息采集、分析及持续改进方法。
[背景技术]
随着信息化技术在各行各业的普及,政务、商务、制造、流通、管理等各领域的业务对计算机系统的依赖越来越大,不断涌现出许多的行业、领域软件或系统。与此同时,用户对这些软件或系统也不断提出了更高的要求,包括更好的质量、更快的开发速度、更加易于管理等等,这对于大型应用系统,尤其是金融保险、大型制造、物流、电子商务等领域的应用系统,显得尤为重要。因为这些领域的应用系统,由于市场、管理等方面的原因,业务变更频繁,需对系统不断升级、修改,而且一般还要兼顾实现4个在执行过程中相互矛盾的目标:质量好、周期短、效率高、易管理,这样往往陷入“鱼和熊掌不可兼得”的尴尬境地,而这些问题最终都会聚积在软件产出的后期——测试,特别是回归测试环节。因此,市场上也陆续出现了一系列的技术和工具软件,它们能从某个方面解决这些问题,或者说解决整体中的部分问题。比如自动化的回归测试工具,极大地提高了回归测试效率;回归测试的流程控制技术和工具,方便了对回归测试的管理,并从流程制度上引导质量的提升。这些技术和工具部分满足了用户的需求,促进了行业的发展,但却一直无法解决这一领域的核心问题——从代码变动到回归测试用例选取的分析、管理仍需人工凭经验进行,无法实现真正的智能化、自动化、精准化。而且,这些工具各自为阵,不通过编写脚本等开发技术的干预则无法实现自动协作。
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念,它同样适用于回归测试,通过对界面动作进行录制并保存为脚本,然后进行回放,模拟真实操作,并且对输出结果进行比较,进而达到自动化测试目的。而且,通过对录制的脚本进行参数化,达到对各种大批量数据的输入的测试。再通过对录制的脚本控制逻辑的编写,达到组织测试脚本集执行的逻辑的控制,以适应不同功能测试场景。实际使用时,需要人工凭借经验挑选出需要进行回归测试的用例供此类工具测试。但是其无法自动选取需要进行回归测试的测试用例,仍需人工凭经验选取后交由其进行自动测试,并且无法对已选取的测试用例的测试结果进行统一的自动管理,即无法掌握每个版本应用系统对应回归测试用例的测试与否、变动范围等情况。
[发明内容]
为了解决现有技术中的上述不足和缺陷,提供一种能够实现在回归测试中自动采集运行轨迹数据、智能分析版本差异、自动选取需回归的测试用例,提高回归测试效率、质量和持续改进的方法。
为实现上述目的发明,包括:
注入目标代码的插装步骤;
目标代码运行路径的高效采集步骤;
建立目标代码与测试用例之间关系的映射储存步骤;
比较新老版本目标代码的比较步骤;
自动选取需进行回归测试的用例的涉及分析步骤;
基于版本流的回归测试持续改进步骤。
其特征在于还包括:
自动生成目标应用的全部代码结构及调用关系;
基于程序结构和代码语义进行数据对比;
在目标应用字节码中插装探测逻辑以动态获取代码运行的完整路径和覆盖数据;
控制测试用例的回归测试触发;
测试用例与代码之间映射关系及波及关系的友好界面呈现。
上述采集方法还具有如下优化方案:
无需Java应用的源代码通过多级缓存机制以实现高性能。
1.目标应用代码运行路径和覆盖情况是涵盖包、类、方法、行等不同粒度。版本对比的对比内容细分为数据的新增、修改或删除。
本产品具有下列工业价值:
1.盲目性的用例选取转变为精准的选取用例,聚焦重点测试范围,提高测试质量。
2.提高测试效率,降低了人员成本,缩短上线时间,适应敏捷开发模式。
3.对测试用例进行深度分析,大幅度提高测试用例的价值。
4.量化的软件测试体系并跟踪整个软件生命周期;提供丰富的报表,对软件测试过程及测试服务质量进行度量。
5.精确和量化的测试。
6.将原来的程序黑盒状态变为半透明状态,使测试人员对测试有更多的主动权,能够更好的实施探索性测试。
本发明创立自动化、智能化、精准化的回归测试管理的理念,在无源码条件下测试用例与代码结构映射、代码变动对测试用例的波及分析、智能版本比对、灵活的按需定制的云测试服务等领域实现突破性创新,具有下列创新特性:
无需java源码的代码分析、处理、插装。
通过字节码自动建立测试用例与代码逻辑的关系
通过字节码进行程序变更对应的测试用例波及范围分析的算法
基于Java字节码的智能化版本比对。
[附图说明]
图1为导入目标应用项目新版本,自动进行版本比对、插装等处理;
图2为自动分析、呈现代码结构和调用关系;
图3为自动分析、呈现当前版本的波及结果;
图4为根据波及结果进行回归测试;
图5基于版本流的回归测试的持续改进,并可查看各种统计图表;
图6为检测无源码的Java应用系统版本间的代码变动的流程示意图;
图7为覆盖率详图。
[具体实施方式]
为了使本发明能够更加清楚,结合附图和实施例对本发明做进一步的说明。
实施例1
通过对大量底层基础技术的采用和整合,能够全面而精准地分析无源码的Java应用系统的代码结构,以及动态获取代码运行的完整路径和覆盖数据,形成大量的目标应用的基础数据,然后通过一系列自主研发的算法进行数据的分析和挖掘,产生各个层面的结果,如基于代码语义(而非简单文本)的智能版本比对结果、代码变动所波及的测试用例范围以及代码结构中的层次关系、调用关系的图形化展示等,这些过程都体现高度的智能化、自动化。通过智能化、自动化选取的回归测试用例范围,非常精准,不多也不少。克服传统人工经验选取时,要么少了造成未回归覆盖的缺陷隐患,要么多了造成测试资源的浪费,达到在最短的时间内实现回归测试的精准覆盖,保证了质量,也大大提高了工作效率,同时利用FairyTest产品的其它功能实现日常测试过程的便捷管理。
无源码的Java字节码分析
对Java目标应用系统的整个回归测试管理过程中均不需源代码,对客户使用没有更多的要求,以适应更多的应用场景。基于最新的Java1.7字节码规范,参照ASM等开源框架,分析Java字节码,获取应用的代码层次结构和调用关系,以及版本间的语义变化情况。
Java提供的动态类装载和反射使其成为了动态语言。但是在一些情况下,反射操作并没有多大意义,开发者需要从非Java源代码中生成bytecode,例如像Groovy(JSR-241)或者BeanShell(JSR-274)这样的脚本语言,或者从例如关系映射配置(OR-mappingconfiguration)这样的元数据(metadata)中生成bytecode。在和现存的类一起使用时,尤其是在源代码没有Java源代码的情况下,有些工具需要对相互依赖性或者方法进行静态分析、或者为了生成测试评估、检测bug和反模式。对于在Java5中新增加的特性,例如annotation(注释)和generic(类属),它们都将影响bytecode的结构,并且也是那些用来保持bytecode良好的性能的bytecode操作工具所应该特别关注的。本文将给出一个用于Java的、最小、最快的bytecode操作框架。
ASMbytecode操作框架使用Java语言编写并采用了基于访问者(visitor-based)的方式来生成bytecode、驱动现有类的变化。它使开发者能够避免直接处理类实例池和在方法bytecode中的位移,因此它为开发者隐藏掉了bytecode的复杂性并且提供了与其它工具(例如BCEL,SERP,或者Javassist)相比更佳的性能。
本发明的智能化、自动化的处理过程及波及相关技术通过以下步骤来实现:
步骤一、如图1所示,注入目标代码的插装步骤;
输入确定项目信息后,操作选取需要进行插装的范围,原则上只处理选定项目的开发代码,忽略其它第三方的代码(特别是一些成熟的开源代码),以聚焦于项目开发代码本身。
步骤二、如图2所示,目标代码运行路径的采集步骤;
插装后的目标代码按原有流程和方式进行相应测试,明确每个用例的测试起、止“触点”,中间过程由系统自动采集、汇总相应数据。
步骤三、如图3所示,建立目标代码与测试用例之间关系的映射储存步骤;
每个测试用例测试完成后,根据采集到的数据,立即生成目标代码与测试用例之间映射关系,储存并在界面友好呈现。
步骤四、比较新老版本目标代码的比较步骤;
采用基于语义的模拟人工思维的应用系统各版本间的代码变动情况比较,包含新增、修改、删除,这与传统的普通文本级比对模式相比有着质的飞跃,比如知名的源代码管理工具SVN,采用不同版本间的文件进行逐行文本比对,特点是比较“死板”,出错率高,哪怕不小心在某行中添加个无关紧要的空格,或是函数定义的位置或顺序简单变换了一下,也会被认为前后版本比对完全不同。正是基于对这些传统数据比对方式的缺点的彻底克服,而采用了全新的智能版本比对,它是基于程序结构和代码语义的数据比对,哪怕内容变了,比如同一函数处于不同版本文件不同位置,只要语义未变,也会准确认定未变动,更能忽略空行、空格等。这样准确率大大提高,为后续的变动代码与测试用例的映射关系提供准备的数据准备。其算法流程示意如图6所示。
步骤五、自动选取需进行回归测试的用例的涉及分析步骤;
基于已有的测试用例与代码之间的映射关系,通过对新版本代码的智能版本比对,分析出变动范围,并基于此,依据面向对象特征等复杂算法,自动圈定需要进行回归测试的波及结果。
步骤六、基于版本流的回归测试持续改进步骤。
每个版本的加入,即进入新的测试用例和代码关系的演变过程,并能对基于版本流的各种数据进行深入分析、挖掘,形成对每个版本测试行为的事前提示和事后追溯等持续的改进作用,以促进回归测试工作步入螺旋上升的的良性轨道。
步骤七、自动生成目标应用的全部代码结构及调用关系;
通过对目标应用代码分析、建模,完整呈现目标应用的全部代码结构,包含包、类、方法等各个粒度,以及它们之间的调用关系。
步骤八、基于程序结构和代码语义进行数据对比;
为了实现各版本间目标代码的智能版本比对,摒弃了传统的基于文本的简单呆板的比对方法,采用基于代码语文的比对方法,这是一种基于内容(语义)而非形式的比对算法,也就是说,若某行代码语义未变,哪怕表面文本有所变化(如加入空格等),也会被“智能”的过滤掉。
步骤九、在目标应用字节码中插装探测逻辑以动态获取代码运行的完整路径和覆盖数据;
对Java应用的字节码文件插入记录代码运行情况的“探点”,用于采集包、类、方法、行等不同粒度的代码覆盖情况。“探点”只是负责采集程序的运行情况,不会对原有代码的功能逻辑产生任何影响,而且通过多级缓存等机制实现对原有代码性能影响很微小。
至此,测试用例与代码之间的原始映射关系已经建立,而这个过程是高度自动化、智能化,用户操作也是“无缝”过渡的,即原先是怎么进行回归测试,现在还是那样,用自动化测试工具或是人工,用户无需学习、实施更多的操作,而在这种“照旧”的“不知不觉”的操作中,实现了数据的自动采集,为后续的波及分析算法提供数据准备
步骤十、控制测试用例的回归测试触发;
Java语言是面向对象的程序开发语言,用它编写的应用系统,改动一处可能会“联动”影响到其它代码,比如被调用函数的改动会影响所有调用它的地方,类的静态变量的变化会波及所有引用到它的代码,父类的变动会牵涉到其所有子类等等,而这些都会影响最终所映射的测试用例。基于这些复杂性考虑,我们设计了不同的波及算法,以适用不同的需要。目前常用算法如图7示。
步骤十一、测试用例与代码之间映射关系及波及关系的友好界面呈现。
可在软件界面上查看众多的数据处理结果,包含测试用例的贡献度用例排名、未回归测试用例、覆盖率趋势图、版本模块变化图、模块复杂度排名、热模块排名等等,
当然,我们还提供云测试服务平台,为用户提供更灵活、可配置的云服务,云测试抽象模型。
Claims (5)
1.基于Java字节码的大型应用回归测试信息处理方法,包括:
注入目标代码的插装步骤;
目标代码运行路径的采集步骤;
建立目标代码与测试用例之间关系的映射储存步骤;
其特征在于无需Java应用的源代码,还包括以下步骤:
比较新老版本目标代码的比较步骤;
选取需进行回归测试的用例的涉及分析步骤;
生成目标应用的全部代码结构及调用关系;
基于程序结构和代码语义进行数据对比;
在目标应用字节码中插装探测逻辑以动态获取代码运行的完整路径和覆盖数据;
控制测试用例的回归测试触发;
测试用例与代码之间映射关系及波及关系的友好界面呈现。
2.如权利要求1所述基于Java字节码的大型应用回归测试信息处理方法,其特征在于通过多级缓存机制以实现高性能。
3.如权利要求1所述基于Java字节码的大型应用回归测试信息处理方法,其特征在于代码运行的完整路径和覆盖数据涵盖包、类、方法、行。
4.如权利要求1所述基于Java字节码的大型应用回归测试信息处理方法,其特征在于所述的比较步骤如下:
比较新老版本目标代码文本是否变动;
如果代码文本变动则进一步判断分支逻辑是否变动;
如果分支逻辑无变动则进一步提取新老版本目标代码的字节码代码行的语义元素,如果分支逻辑变动则对于变动类型进行分析和界定;
判断新老版本目标代码中提取的语义元素是否变动,变动则对变动类型进行分析和界定,无变动则判断为新老版本目标代码语义无变动。
5.如权利要求4所述基于Java字节码的大型应用回归测试信息处理方法,其特征是所述的变动为数据的新增、修改或删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310380096.4A CN103425584B (zh) | 2013-08-27 | 2013-08-27 | 基于Java字节码的大型应用回归测试信息处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310380096.4A CN103425584B (zh) | 2013-08-27 | 2013-08-27 | 基于Java字节码的大型应用回归测试信息处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103425584A CN103425584A (zh) | 2013-12-04 |
CN103425584B true CN103425584B (zh) | 2016-01-13 |
Family
ID=49650367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310380096.4A Expired - Fee Related CN103425584B (zh) | 2013-08-27 | 2013-08-27 | 基于Java字节码的大型应用回归测试信息处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103425584B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699488B (zh) * | 2013-12-30 | 2017-01-04 | 优视科技有限公司 | 基于调用关系依赖图的回归测试方法及系统 |
DE102015106116A1 (de) * | 2015-04-21 | 2016-10-27 | Phoenix Contact Gmbh & Co. Kg | Verfahren und Steuereinrichtung zur flexiblen Prozesssteuerung |
CN106354624B (zh) * | 2015-07-17 | 2020-09-22 | 北京奇虎科技有限公司 | 一种自动化测试方法和装置 |
US10223097B2 (en) * | 2015-11-20 | 2019-03-05 | Google Llc | Dynamic update of an application in compilation and deployment with cold-swapping |
CN107368407B (zh) * | 2016-05-11 | 2021-05-25 | 北京京东尚科信息技术有限公司 | 信息处理方法和装置 |
US11137988B2 (en) * | 2017-06-02 | 2021-10-05 | Mitsubishi Electric Corporation | Program code generation device and computer readable medium |
CN108427637B (zh) * | 2018-01-18 | 2021-05-25 | 平安科技(深圳)有限公司 | 测试案例推荐方法、电子装置及可读存储介质 |
CN110362463A (zh) * | 2018-04-10 | 2019-10-22 | 挖财网络技术有限公司 | 一种自动挑选测试用例进行回归测试的方法和装置 |
CN108829585A (zh) * | 2018-05-24 | 2018-11-16 | 广东睿江云计算股份有限公司 | 一种用例管理系统测试数据自动生成方法及装置 |
CN111124875A (zh) * | 2018-10-31 | 2020-05-08 | 北京金山云网络技术有限公司 | 测试用例确定方法、装置及电子设备 |
CN109634864A (zh) * | 2018-12-12 | 2019-04-16 | 江苏满运软件科技有限公司 | 入口函数自动溯源方法、装置、电子设备、存储介质 |
CN109726132B (zh) | 2019-01-03 | 2021-03-23 | 京东方科技集团股份有限公司 | 一种软件测试方法及软件测试自动化管理系统 |
CN110928770B (zh) * | 2019-10-29 | 2023-11-28 | 航天信息股份有限公司 | 软件测试的方法、装置、系统、存储介质和电子设备 |
CN112181784B (zh) * | 2020-10-21 | 2024-03-26 | 中国工商银行股份有限公司 | 基于字节码注入的代码故障分析方法及系统 |
CN113568833A (zh) * | 2021-07-28 | 2021-10-29 | 深圳Tcl新技术有限公司 | 测试用例确定方法、装置、计算机设备及可读存储介质 |
CN114265772B (zh) * | 2021-12-17 | 2024-07-26 | 绿盟科技集团股份有限公司 | 一种测试用例的生成方法及一种测试方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1908892A (zh) * | 2005-08-01 | 2007-02-07 | 王彤 | 测试用例设计方法和系统 |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
CN102110048A (zh) * | 2009-12-28 | 2011-06-29 | 国际商业机器公司 | 用于基于框架的应用程序的回归测试选择方法和装置 |
CA2722066A1 (en) * | 2010-11-15 | 2012-05-15 | Maintainj Inc. | Impactj, a tool to identify functional regression test cases for java applications |
-
2013
- 2013-08-27 CN CN201310380096.4A patent/CN103425584B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1908892A (zh) * | 2005-08-01 | 2007-02-07 | 王彤 | 测试用例设计方法和系统 |
CN102110048A (zh) * | 2009-12-28 | 2011-06-29 | 国际商业机器公司 | 用于基于框架的应用程序的回归测试选择方法和装置 |
CN101739339A (zh) * | 2009-12-29 | 2010-06-16 | 北京航空航天大学 | 一种基于程序动态依赖关系的软件故障定位方法 |
CA2722066A1 (en) * | 2010-11-15 | 2012-05-15 | Maintainj Inc. | Impactj, a tool to identify functional regression test cases for java applications |
Also Published As
Publication number | Publication date |
---|---|
CN103425584A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425584B (zh) | 基于Java字节码的大型应用回归测试信息处理方法 | |
Miles et al. | Prime: A methodology for developing provenance-aware applications | |
Challita et al. | A precise model for google cloud platform | |
US20130204874A1 (en) | Hyper Adapter and Method for Accessing Documents in a Document Base | |
US9075544B2 (en) | Integration and user story generation and requirements management | |
Fritzson et al. | The OpenModelica integrated modeling, simulation and optimization environment | |
US9524366B1 (en) | Annotations to identify objects in design generated by high level synthesis (HLS) | |
US20230108808A1 (en) | Data science workflow execution platform with automatically managed code and graph-based data job management | |
CN101866315A (zh) | 软件开发工具的测试方法及系统 | |
Lopes et al. | Assessing business process models: a literature review on techniques for BPMN testing and formal verification | |
Neznanov et al. | Fcart: A new fca-based system for data analysis and knowledge discovery | |
Fraternali et al. | Automating function point analysis with model driven development | |
Stoermer et al. | Practice patterns for architecture reconstruction | |
Konur | Towards Light‐Weight Probabilistic Model Checking | |
CN114880673B (zh) | 针对小程序源代码进行隐私数据泄露检测的方法及系统 | |
Cao et al. | Workflow difference detection based on basis paths | |
Wen et al. | Formalizing the transition from requirements’ change to design change using an evolutionary traceability model | |
US10949327B2 (en) | Manipulation of complex variables in orchestration applications | |
Kumar et al. | An empirical study of bad smell in code on maintenance effort | |
Woll et al. | Semantic integration of product data models for the verification of product requirements | |
Khanam et al. | Aspectual Analysis of Legacy Systems: Code Smells and Transformations in C | |
Butler et al. | The Know-It-All Project: A case study in framework development and evolution | |
Hadar et al. | The composition refactoring triangle (crt) practical toolkit: From spaghetti to lasagna | |
Boose et al. | Replication of Data Analyses | |
Priya | A survey: design pattern detection approaches with metrics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160113 Termination date: 20160827 |
|
CF01 | Termination of patent right due to non-payment of annual fee |