《一种选择回归测试用例的方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种选择回归测试用例的方法和装置.pdf(12页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103678097 A (43)申请公布日 2014.03.26 CN 103678097 A (21)申请号 201210326627.7 (22)申请日 2012.09.05 G06F 11/36(2006.01) (71)申请人 百度在线网络技术(北京)有限公司 地址 100085 北京市海淀区上地十街 10 号 百度大厦 (72)发明人 王开华 王飞 王海龙 (74)专利代理机构 北京鸿德海业知识产权代理 事务所 ( 普通合伙 ) 11412 代理人 倪志华 (54) 发明名称 一种选择回归测试用例的方法和装置 (57) 摘要 本发明提供了一种选择回归测试用例。
2、的方法 和装置, 其中方法包括 : S1、 分析被测对象代码的 逆向调用关系, 建立影响面模型树, 所述影响面模 型树中的节点为函数, 节点之间的连接为函数之 间的逆向调用关系 ; 以及, 将被测对象代码与历 史版本代码进行比较, 确定被测对象代码的修改 ; S2、 基于影响面模型树和被测对象代码的修改, 采 用辐射算法确定污染节点 ; S3、 基于所述污染节 点选择对应的测试用例集。通过本发明实现了回 归测试用例的自动选择, 提高了精确性和效率, 降 低了人工成本。 (51)Int.Cl. 权利要求书 2 页 说明书 5 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专。
3、利申请 权利要求书2页 说明书5页 附图4页 (10)申请公布号 CN 103678097 A CN 103678097 A 1/2 页 2 1. 一种选择回归测试用例的方法, 其特征在于, 该方法包括 : S1、 分析被测对象代码的逆向调用关系, 建立影响面模型树, 所述影响面模型树中的节 点为函数, 节点之间的连接为函数之间的逆向调用关系 ; 以及, 将被测对象代码与历史版本 代码进行比较, 确定被测对象代码的修改 ; S2、 基于影响面模型树和被测对象代码的修改, 采用辐射算法确定污染节点 ; S3、 基于所述污染节点选择对应的测试用例集。 2. 根据权利要求 1 所述的方法, 其特征在。
4、于, 步骤 S1 中所述分析被测对象代码的逆向 调用关系, 建立影响面模型树具体包括 : S11、 扫描所述被测对象代码, 获得被测对象代码的所有类的函数 ; S12、 遍历获得的函数, 对每个函数进行代码扫描和 Token 识别, 获得每个函数直接调 用的函数, 遍历完成后得到被测对象代码的函数调用关系 ; S13、 遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成后得到被测对象代码 的逆向调用关系, 利用所述逆向调用关系建立影响面模型树。 3. 根据权利要求 1 所述的方法, 其特征在于, 步骤 S1 中所述将被测对象代码与历史版 本代码进行比较, 确定被测对象代码的修改具体包括 。
5、: 对被测对象代码和历史版本代码进行 diff 计算, 如果一个函数在所述历史版本代码 中存在而在所述被测对象代码中不存在, 则确定该函数为被删除函数 ; 如果一个函数在所 述历史版本代码中不存在而在所述被测对象代码中存在, 则确定该函数为新增函数 ; 如果 一个函数在所述被测对象代码和所述历史版本代码中都存在, 则进行函数内代码的 diff 计算, 如果出现函数内代码不相同, 则确定该函数为被修改函数。 4. 根据权利要求 3 所述的方法, 其特征在于, 所述步骤 S2 具体包括 : 将所述被删除函数、 新增函数和被修改函数标注为污染节点, 在所述影响面模型树上 查询污染节点所依赖的节点, 。
6、再进一步查询查询到的节点所依赖的节点, 直至查询结束, 将 查询到的节点也标注为污染节点。 5. 根据权利要求 1 所述的方法, 其特征在于, 所述步骤 S3 具体包括 : 依据函数与回归测试用例的对应关系, 从用例库中选择与所述污染节点所对应的回归 测试用例构成所述测试用例集。 6. 一种选择回归测试用例的装置, 其特征在于, 该装置包括 : 信息抓取单元, 用于获取被测对象代码和历史版本代码 ; 逆向分析单元, 用于分析所述被测对象代码的逆向调用关系, 建立影响面模型树, 所述 影响面模型树中的节点为函数, 节点之间的连接为函数之间的逆向调用关系 ; 代码比较单元, 用于将被测对象代码与历。
7、史版本代码进行比较, 确定被测对象代码的 修改 ; 污染计算单元, 用于基于影响面模型树和被测对象代码的修改, 采用辐射算法确定污 染节点 ; 用例选择单元, 用于基于所述污染节点选择对应的测试用例集。 7. 根据权利要求 6 所述的装置, 其特征在于, 所述逆向分析单元具体包括 : 第一扫描模块, 用于扫描所述被测对象代码, 获得被测对象代码的所有类的函数 ; 第二扫描模块, 用于遍历所述第一扫描模块获得的函数, 对每个函数进行代码扫描和 权 利 要 求 书 CN 103678097 A 2 2/2 页 3 Token 识别, 获得每个函数直接调用的函数, 遍历完成后得到被测对象代码的函数调。
8、用关 系 ; 模型树建立模块, 用于遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成后得 到被测对象代码的逆向调用关系, 利用所述逆向调用关系建立影响面模型树。 8. 根据权利要求 6 所述的装置, 其特征在于, 所述代码比较单元被具体配置为 : 对所述 被测对象代码和历史版本代码进行 diff 计算, 如果一个函数在所述历史版本代码中存在 而在所述被测对象代码中不存在, 则确定该函数为被删除函数 ; 如果一个函数在所述历史 版本代码中不存在而在所述被测对象代码中存在, 则确定该函数为新增函数 ; 如果一个函 数在所述被测对象代码和所述历史版本代码中都存在, 则进行函数内代码的 dif。
9、f 计算, 如 果出现函数内代码不相同, 则确定该函数为被修改函数。 9. 根据权利要求 8 所述的装置, 其特征在于, 所述污染计算单元被具体配置为 : 将所述 被删除函数、 新增函数和被修改函数标注为污染节点, 在所述影响面模型树上查询污染节 点所依赖的节点, 再进一步查询查询到的节点所依赖的节点, 直至查询结束, 将查询到的节 点也标注为污染节点。 10. 根据权利要求 6 所述的装置, 其特征在于, 所述用例选择单元具体被配置为 : 依据 函数与回归测试用例的对应关系, 从用例库中选择与所述污染节点所对应的回归测试用例 构成所述测试用例集。 权 利 要 求 书 CN 103678097。
10、 A 3 1/5 页 4 一种选择回归测试用例的方法和装置 【技术领域】 0001 本发明涉及计算机应用技术领域, 特别涉及一种选择回归测试用例的方法和装 置。 【背景技术】 0002 回归测试是指修改了旧代码后, 重新进行测试以确认修改没有引入新的错误或导 致其他代码产生错误。回归测试作为软件生命周期的一个组成部分, 在整个软件测试过程 中占有很大的工作量比重, 在软件开发的各个阶段都会进行多次回归测试, 因此选择合适 的回归测试用例是非常有意义的。 0003 现有技术对回归测试用例的选择主要依靠测试人员向研发人员沟通了解的修改 功能信息, 将新修改的功能点和可能影响的功能点作为回归测试用例。
11、的选择依据, 或者, 依 据经验判断可能出错的地方, 依据可能出错的地方选取功能点作为回归测试用例的选择依 据, 或者, 依据文档和沟通选取出核心和重要功能点, 全部作为回归测试用例的选择依据。 然而无论上述哪种方法均依靠人工的方式评估和选取, 从而导致选取的回归测试用例不精 确、 选取效率低下且人工成本较高。 【发明内容】 0004 有鉴于此, 本发明提供了一种选择回归测试用例的方法和装置, 以便于实现回归 测试用例的自动选择, 从而提高精确性和效率, 降低人工成本。 0005 具体技术方案如下 : 0006 一种选择回归测试用例的方法, 该方法包括 : 0007 S1、 分析被测对象代码的。
12、逆向调用关系, 建立影响面模型树, 所述影响面模型树中 的节点为函数, 节点之间的连接为函数之间的逆向调用关系 ; 以及, 将被测对象代码与历史 版本代码进行比较, 确定被测对象代码的修改 ; 0008 S2、 基于影响面模型树和被测对象代码的修改, 采用辐射算法确定污染节点 ; 0009 S3、 基于所述污染节点选择对应的测试用例集。 0010 根据本发明一优选实施例, 步骤 S1 中所述分析被测对象代码的逆向调用关系, 建 立影响面模型树具体包括 : 0011 S11、 扫描所述被测对象代码, 获得被测对象代码的所有类的函数 ; 0012 S12、 遍历获得的函数, 对每个函数进行代码扫描。
13、和 Token 识别, 获得每个函数直 接调用的函数, 遍历完成后得到被测对象代码的函数调用关系 ; 0013 S13、 遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成后得到被测对象 代码的逆向调用关系, 利用所述逆向调用关系建立影响面模型树。 0014 根据本发明一优选实施例, 步骤 S1 中所述将被测对象代码与历史版本代码进行 比较, 确定被测对象代码的修改具体包括 : 0015 对被测对象代码和历史版本代码进行 diff 计算, 如果一个函数在所述历史版本 说 明 书 CN 103678097 A 4 2/5 页 5 代码中存在而在所述被测对象代码中不存在, 则确定该函数为被删。
14、除函数 ; 如果一个函数 在所述历史版本代码中不存在而在所述被测对象代码中存在, 则确定该函数为新增函数 ; 如果一个函数在所述被测对象代码和所述历史版本代码中都存在, 则进行函数内代码的 diff 计算, 如果出现函数内代码不相同, 则确定该函数为被修改函数。 0016 根据本发明一优选实施例, 所述步骤 S2 具体包括 : 0017 将所述被删除函数、 新增函数和被修改函数标注为污染节点, 在所述影响面模型 树上查询污染节点所依赖的节点, 再进一步查询查询到的节点所依赖的节点, 直至查询结 束, 将查询到的节点也标注为污染节点。 0018 根据本发明一优选实施例, 所述步骤 S3 具体包括。
15、 : 0019 依据函数与回归测试用例的对应关系, 从用例库中选择与所述污染节点所对应的 回归测试用例构成所述测试用例集。 0020 一种选择回归测试用例的装置, 该装置包括 : 0021 信息抓取单元, 用于获取被测对象代码和历史版本代码 ; 0022 逆向分析单元, 用于分析所述被测对象代码的逆向调用关系, 建立影响面模型树, 所述影响面模型树中的节点为函数, 节点之间的连接为函数之间的逆向调用关系 ; 0023 代码比较单元, 用于将被测对象代码与历史版本代码进行比较, 确定被测对象代 码的修改 ; 0024 污染计算单元, 用于基于影响面模型树和被测对象代码的修改, 采用辐射算法确 定。
16、污染节点 ; 0025 用例选择单元, 用于基于所述污染节点选择对应的测试用例集。 0026 根据本发明一优选实施例, 所述逆向分析单元具体包括 : 0027 第一扫描模块, 用于扫描所述被测对象代码, 获得被测对象代码的所有类的函 数 ; 0028 第二扫描模块, 用于遍历所述第一扫描模块获得的函数, 对每个函数进行代码扫 描和 Token 识别, 获得每个函数直接调用的函数, 遍历完成后得到被测对象代码的函数调 用关系 ; 0029 模型树建立模块, 用于遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成 后得到被测对象代码的逆向调用关系, 利用所述逆向调用关系建立影响面模型树。 0。
17、030 根据本发明一优选实施例, 所述代码比较单元被具体配置为 : 对所述被测对象代 码和历史版本代码进行 diff 计算, 如果一个函数在所述历史版本代码中存在而在所述被 测对象代码中不存在, 则确定该函数为被删除函数 ; 如果一个函数在所述历史版本代码中 不存在而在所述被测对象代码中存在, 则确定该函数为新增函数 ; 如果一个函数在所述被 测对象代码和所述历史版本代码中都存在, 则进行函数内代码的 diff 计算, 如果出现函数 内代码不相同, 则确定该函数为被修改函数。 0031 根据本发明一优选实施例, 所述污染计算单元被具体配置为 : 将所述被删除函数、 新增函数和被修改函数标注为污。
18、染节点, 在所述影响面模型树上查询污染节点所依赖的节 点, 再进一步查询查询到的节点所依赖的节点, 直至查询结束, 将查询到的节点也标注为污 染节点。 0032 根据本发明一优选实施例, 所述用例选择单元具体被配置为 : 依据函数与回归测 说 明 书 CN 103678097 A 5 3/5 页 6 试用例的对应关系, 从用例库中选择与所述污染节点所对应的回归测试用例构成所述测试 用例集。 0033 由以上技术方案可以看出, 本发明实现了回归测试用例的自动选择, 大大节约了 人力成本, 提高了回归测试用例选择的效率, 通过自动化建模影响面模型树来实现污染节 点的确定, 进一步选择测试用例, 相。
19、比较通过测试人员的经验或沟通的方式, 大大提高了回 归测试的精确性。 【附图说明】 0034 图 1 为本发明实施例一提供的选择回归测试用例的方法流程图 ; 0035 图 2 为本发明实施例一提供的影响面模型树的建立流程图 ; 0036 图 3 为本发明实施例一提供的函数调用关系的实例图 ; 0037 图 4 为本发明实施例一提供的影响面模型树的实例图 ; 0038 图 5 为本发明实施例二提供的选择回归测试用例的装置结构图。 【具体实施方式】 0039 为了使本发明的目的、 技术方案和优点更加清楚, 下面结合附图和具体实施例对 本发明进行详细描述。 0040 实施例一、 0041 图 1 为。
20、本发明实施例一提供的选择回归测试用例的方法流程图, 在该实施例中以 被测对象代码库和测试用例库为基础自动实现回归测试用例的选择, 如图 1 所示, 该方法 具体包括以下步骤 : 0042 步骤 101 : 分析被测对象代码的逆向调用关系, 建立影响面模型树。 0043 本步骤主要采用代码静态分析技术, 通过扫描代码识别关键字从而获得代码结 构, 然后通过逆向分析算法建立代码修改的影响面模型树, 影响面模型树中的节点为函数, 节点之间的连接为函数之间的逆向调用关系 (即依赖关系) 。 0044 其中在获得代码结构时, 需要考虑测试用例和代码结构的映射关系, 此处可以采 用函数作为代码结构的节点 。
21、(node) , 用函数调用关系图来描述代码结构。 具体地, 本步骤可 以如图 2 所示, 包括以下几个子步骤 : 0045 步骤 201 : 扫描被测对象代码, 获得被测对象代码的所有类的函数。 0046 本步骤可以利用超级预处理语言 (PHP) 的反射 (reflection) 机制, reflection 机 制是java程序开发语言的特征之一, 它允许运行中的java程序对自身进行检查, 并能直接 操作程序的内部属性, 获得 java 类中各成员的名称并显示出来是其中一个功能。 0047 步骤 202 : 遍历所有函数, 对每个函数进行代码扫描和标记 (Token) 识别, 获得每 个。
22、函数直接调用的函数, 遍历完成后得到被测对象代码的函数调用关系。 0048 在本步骤中可以通过 PHP Tokenizer 来对函数的代码进行 Token 识别, PHP Tokenizer 是一种 PHP 内置工具, 用于分析 PHP 代码以及获取代码对应的标识符名称。 0049 当完成每个函数直接调用的函数信息的获取后, 就可以确定出被测对象代码的函 数调用关系图。 0050 步骤 203 : 遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成后得到被测 说 明 书 CN 103678097 A 6 4/5 页 7 对象代码的逆向调用关系, 利用该逆向调用关系建立影响面模型树。 00。
23、51 假设某被测对象代码经过步骤 202 之后得到的函数调用关系反映到图上即为图 3 所示 (图中的节点表示函数, 箭头表示调用关系) , 即函数1调用函数2和函数3, 函数2调用 函数 4 和函数 5, 函数 3 调用函数 5。对该函数调用关系进行遍历, 记录每个函数所依赖的 函数信息, 即函数 2 依赖函数 1, 函数 3 依赖函数 1, 函数 4 依赖函数 2, 函数 5 依赖函数 2 和 函数 3, 利用该逆向调用关系建立的影响面模型树如图 4 所示 (图中的节点表示函数, 箭头 表示依赖关系) 。 0052 继续参见图 1, 步骤 102 : 将被测对象代码与历史版本代码进行比较, 。
24、确定被测对 象代码的修改。 0053 本步骤的目的是为了确定被测对象代码的修改, 因此比较的对象就采用被测对象 代码 (即修改后的源代码) 和历史版本代码 (即修改前的基线版本代码) 。在比较时可以通过 diff 算法计算出两个版本代码的差异, 包括函数的增加、 删除、 修改, 从而标注出直接受污 染的节点。 0054 具体地, 对被测对象代码和历史版本代码进行 diff 计算, 如果一个函数在历史版 本代码中存在而在被测对象代码中不存在, 则说明该函数被删除 ; 如果一个函数在历史版 本代码中不存在而在被测对象代码中存在, 则说明该函数是新增函数 ; 如果一个函数在被 测对象代码和历史版本代。
25、码中都存在, 则进行函数内代码的 diff 计算, 即通过扫描函数内 代码行, 过滤掉空白字符, 进行字符匹配对比, 如果出现函数内代码不相同, 则说明代码有 改动, 该函数被修改。直接将上述情况的函数标注为污染节点。 0055 上述步骤的执行顺序为本发明实施例提供的一种实现方式, 上述步骤 101 和步骤 102 可以以任意的顺序先后执行, 也可以同时执行。 0056 步骤 103 : 基于影响面模型树和被测对象代码的修改, 采用辐射算法确定污染节 点。 0057 从直接标注为污染节点 (即步骤 102 确定出的删除、 新增和修改的函数) 开始在影 响面模型树上查询标注为直接污染的节点所依赖。
26、的节点, 再进一步查询查询到的节点所依 赖的节点, 直至查询结束, 将查询到的节点也标注为污染节点。 0058 仍接续上例, 假设函数 5 是修改的节点, 在步骤 102 中被标注为直接受污染的节 点, 在图4所示的影响面模型树上进行查询, 查询到函数5依赖函数2和函数3, 进一步查询 到函数 2 和函数 3 依赖函数 1, 则标注出受污染的节点为函数 5、 2、 3 和 1。 0059 步骤 104 : 基于污染节点选择对应的测试用例集。 0060 本步骤是从用例库中选择与污染节点所对应回归测试用例, 通常函数与回归测试 用例存在一一对应的关系, 依据该对应关系则可以实现回归测试用例的选取。。
27、 0061 在实现上述测试用例集的选取之后, 可以利用选取的测试用例集对被测对象代码 进行回归测试, 回归测试的过程为已有技术, 在此不再赘述。 0062 另外, 在上述回归测试用例的选择过程中, 可以图形可视化地向测试人员展现影 响面模型树和 / 或污染节点的情况, 从而辅助测试人员对被测对象进行熟悉和控制。 0063 以上是对本发明所提供的方法进行的描述, 下面结合实施例二对本发明所提供的 装置进行详细描述。 0064 实施例二、 说 明 书 CN 103678097 A 7 5/5 页 8 0065 图5为本发明实施例二提供的选择回归测试用例的装置结构图, 如图5所示, 该装 置包括 :。
28、 信息抓取单元 500、 逆向分析单元 510、 代码比较单元 520、 污染计算单元 530 和用 例选择单元 540。 0066 信息抓取单元 500, 用于获取被测对象代码和历史版本代码。 0067 此处的历史版本代码指的是被测对象代码在修改前的基线版本代码, 信息抓取单 元 500 可以接收用户输入的版本信息后触发执行获取操作, 也可以通过监控版本管理工具 SVN 的变化来触发执行获取操作。 0068 逆向分析单元 510, 用于分析被测对象代码的逆向调用关系, 建立影响面模型树, 影响面模型树中的节点为函数, 节点之间的连接为函数之间的逆向调用关系。 0069 该逆向分析单元510具。
29、体可以由第一扫描模块511、 第二扫描模块512和模型树建 立模块 513。 0070 第一扫描模块 511 扫描被测对象代码, 获得被测对象代码的所有类的函数。具体 可以利用 PHP 的 reflection 机制。 0071 第二扫描模块 512 遍历第一扫描模块 511 获得的函数, 对每个函数进行代码扫描 和 Token 识别, 获得每个函数直接调用的函数, 遍历完成后得到被测对象代码的函数调用 关系。具体可以通过 PHP Tokenizer 来对函数的代码进行 Token 识别。 0072 模型树建立模块 513 遍历函数调用关系, 记录每个函数所依赖的函数, 遍历完成 后得到被测对。
30、象代码的逆向调用关系, 利用逆向调用关系建立影响面模型树。 0073 代码比较单元 520, 用于将被测对象代码与历史版本代码进行比较, 确定被测对象 代码的修改。具体地, 可以对被测对象代码和历史版本代码进行 diff 计算, 如果一个函数 在历史版本代码中存在而在被测对象代码中不存在, 则确定该函数为被删除函数 ; 如果一 个函数在历史版本代码中不存在而在被测对象代码中存在, 则确定该函数为新增函数 ; 如 果一个函数在被测对象代码和历史版本代码中都存在, 则进行函数内代码的 diff 计算, 如 果出现函数内代码不相同, 则确定该函数为被修改函数。 0074 污染计算单元 530, 用于。
31、基于影响面模型树和被测对象代码的修改, 采用辐射算法 确定污染节点。具体地, 可以将被删除函数、 新增函数和被修改函数标注为污染节点, 在影 响面模型树上查询污染节点所依赖的节点, 再进一步查询查询到的节点所依赖的节点, 直 至查询结束, 将查询到的节点也标注为污染节点。 0075 用例选择单元 540, 用于基于污染节点选择对应的测试用例集。具体地, 可以依据 函数与回归测试用例的对应关系, 从用例库中选择与污染节点所对应的回归测试用例构成 测试用例集。 0076 另外, 该装置还可以包括一个前端可视化单元 550, 图形可视化地向测试人员展现 影响面模型树和 / 或污染节点的情况, 从而辅助测试人员对被测对象进行熟悉和控制。 0077 以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内, 所做的任何修改、 等同替换、 改进等, 均应包含在本发明保护的范围之内。 说 明 书 CN 103678097 A 8 1/4 页 9 图 1 说 明 书 附 图 CN 103678097 A 9 2/4 页 10 图 2 图 3 说 明 书 附 图 CN 103678097 A 10 3/4 页 11 图 4 说 明 书 附 图 CN 103678097 A 11 4/4 页 12 图 5 说 明 书 附 图 CN 103678097 A 12 。