一种选择回归测试用例的方法和装置制造方法

文档序号:6488622阅读:199来源:国知局
一种选择回归测试用例的方法和装置制造方法
【专利摘要】本发明提供了一种选择回归测试用例的方法和装置,其中方法包括:S1、分析被测对象代码的逆向调用关系,建立影响面模型树,所述影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系;以及,将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改;S2、基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点;S3、基于所述污染节点选择对应的测试用例集。通过本发明实现了回归测试用例的自动选择,提高了精确性和效率,降低了人工成本。
【专利说明】一种选择回归测试用例的方法和装置
【【技术领域】】
[0001]本发明涉及计算机应用【技术领域】,特别涉及一种选择回归测试用例的方法和装置。
【【背景技术】】
[0002]回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,在软件开发的各个阶段都会进行多次回归测试,因此选择合适的回归测试用例是非常有意义的。
[0003]现有技术对回归测试用例的选择主要依靠测试人员向研发人员沟通了解的修改功能信息,将新修改的功能点和可能影响的功能点作为回归测试用例的选择依据,或者,依据经验判断可能出错的地方,依据可能出错的地方选取功能点作为回归测试用例的选择依据,或者,依据文档和沟通选取出核心和重要功能点,全部作为回归测试用例的选择依据。然而无论上述哪种方法均依靠人工的方式评估和选取,从而导致选取的回归测试用例不精确、选取效率低下且人工成本较高。

【发明内容】

[0004]有鉴于此,本发明提供了一种选择回归测试用例的方法和装置,以便于实现回归测试用例的自动选择,从而提高精确性和效率,降低人工成本。
[0005]具体技术方案如下:
[0006]一种选择回归测试用例的方法,该方法包括:
[0007]S1、分析被测对象代码的逆向调用关系,建立影响面模型树,所述影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系;以及,将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改;
[0008]S2、基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点;
[0009]S3、基于所述污染节点选择对应的测试用例集。[0010]根据本发明一优选实施例,步骤SI中所述分析被测对象代码的逆向调用关系,建立影响面模型树具体包括:
[0011]S11、扫描所述被测对象代码,获得被测对象代码的所有类的函数;
[0012]S12、遍历获得的函数,对每个函数进行代码扫描和Token识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系;
[0013]S13、遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用所述逆向调用关系建立影响面模型树。
[0014]根据本发明一优选实施例,步骤SI中所述将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改具体包括:
[0015]对被测对象代码和历史版本代码进行diff计算,如果一个函数在所述历史版本代码中存在而在所述被测对象代码中不存在,则确定该函数为被删除函数;如果一个函数在所述历史版本代码中不存在而在所述被测对象代码中存在,则确定该函数为新增函数;如果一个函数在所述被测对象代码和所述历史版本代码中都存在,则进行函数内代码的diff计算,如果出现函数内代码不相同,则确定该函数为被修改函数。
[0016]根据本发明一优选实施例,所述步骤S2具体包括:
[0017]将所述被删除函数、新增函数和被修改函数标注为污染节点,在所述影响面模型树上查询污染节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
[0018]根据本发明一优选实施例,所述步骤S3具体包括:
[0019]依据函数与回归测试用例的对应关系,从用例库中选择与所述污染节点所对应的回归测试用例构成所述测试用例集。
[0020]一种选择回归测试用例的装置,该装置包括:
[0021]信息抓取单元,用于获取被测对象代码和历史版本代码;
[0022]逆向分析单元,用于分析所述被测对象代码的逆向调用关系,建立影响面模型树,所述影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系;
[0023]代码比较单元,用于将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改;
[0024]污染计算单元,用于基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点;
[0025]用例选择单元,用于基于所述污染节点选择对应的测试用例集。
[0026]根据本发明一优选实施例,所述逆向分析单元具体包括:
[0027]第一扫描模块,用于扫描所述被测对象代码,获得被测对象代码的所有类的函数;
[0028]第二扫描模块,用于遍历所述第一扫描模块获得的函数,对每个函数进行代码扫描和Token识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系;
[0029]模型树建立模块,用于遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用所述逆向调用关系建立影响面模型树。
[0030]根据本发明一优选实施例,所述代码比较单元被具体配置为:对所述被测对象代码和历史版本代码进行diff计算,如果一个函数在所述历史版本代码中存在而在所述被测对象代码中不存在,则确定该函数为被删除函数;如果一个函数在所述历史版本代码中不存在而在所述被测对象代码中存在,则确定该函数为新增函数;如果一个函数在所述被测对象代码和所述历史版本代码中都存在,则进行函数内代码的diff计算,如果出现函数内代码不相同,则确定该函数为被修改函数。
[0031]根据本发明一优选实施例,所述污染计算单元被具体配置为:将所述被删除函数、新增函数和被修改函数标注为污染节点,在所述影响面模型树上查询污染节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
[0032]根据本发明一优选实施例,所述用例选择单元具体被配置为:依据函数与回归测试用例的对应关系,从用例库中选择与所述污染节点所对应的回归测试用例构成所述测试用例集。
[0033]由以上技术方案可以看出,本发明实现了回归测试用例的自动选择,大大节约了人力成本,提高了回归测试用例选择的效率,通过自动化建模影响面模型树来实现污染节点的确定,进一步选择测试用例,相比较通过测试人员的经验或沟通的方式,大大提高了回归测试的精确性。
【【专利附图】

【附图说明】】
[0034]图1为本发明实施例一提供的选择回归测试用例的方法流程图;
[0035]图2为本发明实施例一提供的影响面模型树的建立流程图;
[0036]图3为本发明实施例一提供的函数调用关系的实例图;
[0037]图4为本发明实施例一提供的影响面模型树的实例图;
[0038]图5为本发明实施例二提供的选择回归测试用例的装置结构图。
【【具体实施方式】】
[0039]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描 述。
[0040]实施例一、
[0041]图1为本发明实施例一提供的选择回归测试用例的方法流程图,在该实施例中以被测对象代码库和测试用例库为基础自动实现回归测试用例的选择,如图1所示,该方法具体包括以下步骤:
[0042]步骤101:分析被测对象代码的逆向调用关系,建立影响面模型树。
[0043]本步骤主要采用代码静态分析技术,通过扫描代码识别关键字从而获得代码结构,然后通过逆向分析算法建立代码修改的影响面模型树,影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系(即依赖关系)。
[0044]其中在获得代码结构时,需要考虑测试用例和代码结构的映射关系,此处可以采用函数作为代码结构的节点(node),用函数调用关系图来描述代码结构。具体地,本步骤可以如图2所示,包括以下几个子步骤:
[0045]步骤201:扫描被测对象代码,获得被测对象代码的所有类的函数。
[0046]本步骤可以利用超级预处理语言(PHP)的反射(reflection)机制,reflection机制是java程序开发语言的特征之一,它允许运行中的java程序对自身进行检查,并能直接操作程序的内部属性,获得java类中各成员的名称并显示出来是其中一个功能。
[0047]步骤202:遍历所有函数,对每个函数进行代码扫描和标记(Token)识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系。
[0048]在本步骤中可以通过PHP Tokenizer来对函数的代码进行Token识别,PHPTokenizer是一种PHP内置工具,用于分析PHP代码以及获取代码对应的标识符名称。
[0049]当完成每个函数直接调用的函数信息的获取后,就可以确定出被测对象代码的函数调用关系图。
[0050]步骤203:遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用该逆向调用关系建立影响面模型树。
[0051]假设某被测对象代码经过步骤202之后得到的函数调用关系反映到图上即为图3所示(图中的节点表示函数,箭头表示调用关系),即函数I调用函数2和函数3,函数2调用函数4和函数5,函数3调用函数5。对该函数调用关系进行遍历,记录每个函数所依赖的函数信息,即函数2依赖函数I,函数3依赖函数I,函数4依赖函数2,函数5依赖函数2和函数3,利用该逆向调用关系建立的影响面模型树如图4所示(图中的节点表示函数,箭头表不依赖关系)。
[0052]继续参见图1,步骤102:将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改。
[0053]本步骤的目的是为了确定被测对象代码的修改,因此比较的对象就采用被测对象代码(即修改后的源代码)和历史版本代码(即修改前的基线版本代码)。在比较时可以通过diff算法计算出两个版本代码的差异,包括函数的增加、删除、修改,从而标注出直接受污染的节点。
[0054]具体地,对被测对象代码和历史版本代码进行diff计算,如果一个函数在历史版本代码中存在而在被测对象代码中不存在,则说明该函数被删除;如果一个函数在历史版本代码中不存在而在被测对象代码中存在,则说明该函数是新增函数;如果一个函数在被测对象代码和历史版本代码中都存在,则进行函数内代码的diff计算,即通过扫描函数内代码行,过滤掉空白字符,进行字符匹配对比,如果出现函数内代码不相同,则说明代码有改动,该函数被修改。直接将上述情况的函数标注为污染节点。
[0055]上述步骤的执行顺序为本发明实施例提供的一种实现方式,上述步骤101和步骤102可以以任意的顺序先后执行,也可以同时执行。
[0056]步骤103:基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点。
[0057]从直接标注为污染节点(即步骤102确定出的删除、新增和修改的函数)开始在影响面模型树上查询标注为直接污染的节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
[0058]仍接续上例,假设函数5是修改的节点,在步骤102中被标注为直接受污染的节点,在图4所示的影响面模型树上进行查询,查询到函数5依赖函数2和函数3,进一步查询到函数2和函数3依赖函数1,则标注出受污染的节点为函数5、2、3和I。
[0059]步骤104:基于污染节点选择对应的测试用例集。
[0060]本步骤是从用例库中选择与污染节点所对应回归测试用例,通常函数与回归测试用例存在一一对应的关系,依据该对应关系则可以实现回归测试用例的选取。
[0061]在实现上述测试用例集的选取之后,可以利用选取的测试用例集对被测对象代码进行回归测试,回归测试的过程为已有技术,在此不再赘述。
[0062]另外,在上述回归测试用例的选择过程中,可以图形可视化地向测试人员展现影响面模型树和/或污染节点的情况,从而辅助测试人员对被测对象进行熟悉和控制。
[0063]以上是对本发明所提供的方法进行的描述,下面结合实施例二对本发明所提供的装置进行详细描述。
[0064]实施例二、[0065]图5为本发明实施例二提供的选择回归测试用例的装置结构图,如图5所示,该装置包括:信息抓取单元500、逆向分析单元510、代码比较单元520、污染计算单元530和用例选择单元540。
[0066]信息抓取单元500,用于获取被测对象代码和历史版本代码。
[0067]此处的历史版本代码指的是被测对象代码在修改前的基线版本代码,信息抓取单元500可以接收用户输入的版本信息后触发执行获取操作,也可以通过监控版本管理工具SVN的变化来触发执行获取操作。
[0068]逆向分析单元510,用于分析被测对象代码的逆向调用关系,建立影响面模型树,影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系。
[0069]该逆向分析单兀510具体可以由第一扫描模块511、第二扫描模块512和模型树建立模块513。
[0070]第一扫描模块511扫描被测对象代码,获得被测对象代码的所有类的函数。具体可以利用PHP的reflection机制。
[0071]第二扫描模块512遍历第一扫描模块511获得的函数,对每个函数进行代码扫描和Token识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系。具体可以通过PHP Tokenizer来对函数的代码进行Token识别。
[0072]模型树建立模块513遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用逆向调用关系建立影响面模型树。
[0073]代码比较单元520,用于将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改。具体地,可以对被测对象代码和历史版本代码进行diff计算,如果一个函数在历史版本代码中存在而在被测对象代码中不存在,则确定该函数为被删除函数;如果一个函数在历史版本代码中不存在而在被测对象代码中存在,则确定该函数为新增函数;如果一个函数在被测对象代码和历史版本代码中都存在,则进行函数内代码的diff计算,如果出现函数内代码不相同,则确定该函数为被修改函数。
[0074]污染计算单元530,用于基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点。具体地,可以将被删除函数、新增函数和被修改函数标注为污染节点,在影响面模型树上查询污染节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
[0075]用例选择单元540,用于基于污染节点选择对应的测试用例集。具体地,可以依据函数与回归测试用例的对应关系,从用例库中选择与污染节点所对应的回归测试用例构成测试用例集。
[0076]另外,该装置还可以包括一个前端可视化单元550,图形可视化地向测试人员展现影响面模型树和/或污染节点的情况,从而辅助测试人员对被测对象进行熟悉和控制。
[0077]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种选择回归测试用例的方法,其特征在于,该方法包括: 51、分析被测对象代码的逆向调用关系,建立影响面模型树,所述影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系;以及,将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改; 52、基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点; 53、基于所述污染节点选择对应的测试用例集。
2.根据权利要求1所述的方法,其特征在于,步骤SI中所述分析被测对象代码的逆向调用关系,建立影响面模型树具体包括: 511、扫描所述被测对象代码,获得被测对象代码的所有类的函数; 512、遍历获得的函数,对每个函数进行代码扫描和Token识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系; 513、遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用所述逆向调用关系建立影响面模型树。
3.根据权利要求1所述的方法,其特征在于,步骤SI中所述将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改具体包括: 对被测对象代码和历史版本代码进行diff计算,如果一个函数在所述历史版本代码中存在而在所述被测对象代码中不存在,则确定该函数为被删除函数;如果一个函数在所述历史版本代码中不存在而在所述被测对象代码中存在,则确定该函数为新增函数;如果一个函数在所述被测对象代码和所述历史版本代码中都存在,则进行函数内代码的diff计算,如果出现函数内代码不相同,则确定该函数为被修改函数。
4.根据权利要求3所述的方法,其特征在于,所述步骤S2具体包括: 将所述被删除函数、新增函数和被修改函数标注为污染节点,在所述影响面模型树上查询污染节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
5.根据权利要求1所述的方法,其特征在于,所述步骤S3具体包括: 依据函数与回归测试用例的对应关系,从用例库中选择与所述污染节点所对应的回归测试用例构成所述测试用例集。
6.一种选择回归测试用例的装置,其特征在于,该装置包括: 信息抓取单元,用于获取被测对象代码和历史版本代码; 逆向分析单元,用于分析所述被测对象代码的逆向调用关系,建立影响面模型树,所述影响面模型树中的节点为函数,节点之间的连接为函数之间的逆向调用关系; 代码比较单元,用于将被测对象代码与历史版本代码进行比较,确定被测对象代码的修改; 污染计算单元,用于基于影响面模型树和被测对象代码的修改,采用辐射算法确定污染节点; 用例选择单元,用于基于所述污染节点选择对应的测试用例集。
7.根据权利要求6所述的装置,其特征在于,所述逆向分析单元具体包括: 第一扫描模块,用于扫描所述被测对象代码,获得被测对象代码的所有类的函数; 第二扫描模块,用于遍历所述第一扫描模块获得的函数,对每个函数进行代码扫描和Token识别,获得每个函数直接调用的函数,遍历完成后得到被测对象代码的函数调用关系; 模型树建立模块,用于遍历函数调用关系,记录每个函数所依赖的函数,遍历完成后得到被测对象代码的逆向调用关系,利用所述逆向调用关系建立影响面模型树。
8.根据权利要求6所述的装置,其特征在于,所述代码比较单元被具体配置为:对所述被测对象代码和历史版本代码进行diff计算,如果一个函数在所述历史版本代码中存在而在所述被测对象代码中不存在,则确定该函数为被删除函数;如果一个函数在所述历史版本代码中不存在而在所述被测对象代码中存在,则确定该函数为新增函数;如果一个函数在所述被测对象代码和所述历史版本代码中都存在,则进行函数内代码的diff计算,如果出现函数内代码不相同,则确定该函数为被修改函数。
9.根据权利要求8所述的装置,其特征在于,所述污染计算单元被具体配置为:将所述被删除函数、新增函数和被修改函数标注为污染节点,在所述影响面模型树上查询污染节点所依赖的节点,再进一步查询查询到的节点所依赖的节点,直至查询结束,将查询到的节点也标注为污染节点。
10.根据权利要求6所述的装置,其特征在于,所述用例选择单元具体被配置为:依据函数与回归测试用例的对应关系,从用例库中选择与所述污染节点所对应的回归测试用例构成所述测试用例集。`
【文档编号】G06F11/36GK103678097SQ201210326627
【公开日】2014年3月26日 申请日期:2012年9月5日 优先权日:2012年9月5日
【发明者】王开华, 王飞, 王海龙 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1