《一种源代码的比对方法.pdf》由会员分享,可在线阅读,更多相关《一种源代码的比对方法.pdf(7页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103617122 A (43)申请公布日 2014.03.05 CN 103617122 A (21)申请号 201310682487.1 (22)申请日 2013.12.12 G06F 11/36(2006.01) (71)申请人 用友软件股份有限公司 地址 100094 北京市海淀区北清路 68 号用 友软件园 (72)发明人 曹峰 (74)专利代理机构 北京中恒高博知识产权代理 有限公司 11249 代理人 刘洪京 (54) 发明名称 一种源代码的比对方法 (57) 摘要 本发明适用软件领域, 提供了一种代码的比 对方法, 所述方法包括 : 获取待比对的新旧源。
2、代 码文件, 提取新旧源代码文件的修改日期和文件 大小 ; 如日期和文件大小中有一个不相同, 将旧 源代码文件读入 OldString, 将新源代码文件读 入 NewString ; 如 OldString 与 NewString 不 相 同, 解析出旧源代码文件中的文件头、 类声明、 属 性声明和方法声明, 存入字符串组 OldClass() 中, 解析出新源代码文件中的文件头、 类声明、 属 性声明和方法声明, 存入字符串组 NewClass() 中 ; 取 OldClass() 中的每个元素与 NewString 比 对 ; 根据比对结果判断是否记录到变更清单。本 发明提供的技术方案具有。
3、准确定义源代码修改的 优点。 (51)Int.Cl. 权利要求书 1 页 说明书 4 页 附图 1 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书4页 附图1页 (10)申请公布号 CN 103617122 A CN 103617122 A 1/1 页 2 1. 一种代码的比对方法, 其特征在于, 所述方法包括 : 获取待比对的新旧源代码文件, 提取新旧源代码文件的修改日期和文件大小 ; 如日期和文件大小中有一个不相同, 将旧源代码文件读入 OldString, 将新源代码文件 读入 NewString ; 所述 OldString 为旧源代码文件的字符。
4、串变量, 所述 NewString 为新源代 码文件的字符串变量 ; 如 OldString 与 NewString 相同, 则对比结束, 认为新旧源代码文件 一样 ; 如 OldString 与 NewString 不相同, 解析出旧源代码文件中的文件头、 类声明、 属性声 明和方法声明, 存入字符串组 OldClass() 中, 解析出新源代码文件中的文件头、 类声明、 属 性声明和方法声明, 存入字符串组 NewClass() 中 ; 取 OldClass() 中的每个元素与 NewString 比对 ; 如 OldClass() 中 的 元 素 包 含 于 NewString 中, 取。
5、 NewClass() 中 的 每 个 元 素 与 OldString比对, 如NewClass()中的元素包含于NewString中且OldClass()与NewClass() 中的元素的类名称不同, 则记变更, 该 OldClass() 的元素被修改, 将该元素中的分支和 循环语句提取分支 ID 和注释信息记录到变更清单 ; 如 NewClass() 中的元素不包含于 NewString, 则该元素为新增, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录 到变更清单 ; 如 OldClass() 中的元素不包含于 NewString 中且类名称不存在于 NewString, 则记。
6、录 变更, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录到变更清单 ; 将该变更清单发送给黑盒测试人员及相关功能开发人员 ; 所述新源代码文件和所述旧源代码文件中的源代码的每个分支和循环语句中均插入 有分支 ID 以及注释信息。 2. 根据权利要求 1 所述的方法, 其特征在于, 所述方法在将该变更清单发送给黑盒测 试人员及相关功能开发人员之前还包括 : 如 OldClass() 中的元素不包含于 NewString 中且类名称存在于 NewString 时, 则取 OldClass() 中该类代码与 NewClass() 中同名的类元素对比, 具体的比对方式为 : 将 OldCl。
7、ass() 中该类代码的所有类成员解析为 OldMember(), 将 NewClass() 中同名 的类元素的所有类成员解析为 NewMember() ; 取 OldMember() 中的每个元素与 NewString 对比, 若 OldMember() 元素包含于 NewString 字符串中, 则该元素存在且无变更 ; 从 NewString 中删除该元素 ; 若发现 OldMember() 中某元素不在 NewString 中且该元素 的名称包含在 NewString 中, 那么认为该元素被修改, 取 OldMember() 中该元素代码与 NewMember() 中同名的元素对比 ;。
8、 若发现 OldMember() 中某元素不在 NewString 中且该元 素的名称不包含在 NewString 中则认为该元素被删除, 分析元素的分支和循环语句提取分 支 ID 和注释信息记录到变更清单。 3.根据权利要求1或2所述的方法, 其特征在于, 所述将该变更清单发送给黑盒测试人 员及相关功能开发人员具体包括 : 通过邮件发送该变更清单给黑盒测试人员及相关功能开发人员。 权 利 要 求 书 CN 103617122 A 2 1/4 页 3 一种源代码的比对方法 技术领域 0001 本发明属于软件领域, 尤其涉及一种源代码的比对方法。 背景技术 0002 黑盒测试是基于软件产品需求和。
9、设计规格说明的测试方法。 着重于确认和验证软 件产品是否满足规格说明。 0003 黑盒测试方法的过程是围绕需求文档设计测试用例, 使用方法包括等价类, 因果 图, 错误推测等。 评价测试用例设计的方法完全来自对需求文档, 业务知识和软件设计说明 书的理解程度和使用上述黑盒测试方法设计测试用例的能力。 0004 因为大部分黑盒测试人员很少懂编码, 因此开发人员在实现开发活动过程中, 很 少与黑盒测试人员沟通业务逻辑和代码逻辑, 只是按照需求和设计说明书编写代码, 由于 理解错误产生的问题只能在源代码做成安装盘后由黑盒测试人员在测试时发现。 0005 传统的黑盒测试活动都是按照测试计划执行的, 一。
10、般开发人员修改代码后, 很少 会通知黑盒测试人员重点测试修改的地方, 甚至修改者本人也不十分清楚自己修改的代码 会影响哪些业务逻辑?变更影响范围有多大?此时, 黑盒测试人员的测试活动具有很大盲 目性。花费大量精力进行回归测试也不一定能够排除风险, 如果黑盒测试人员在测试产品 前能够获得准确信息, 了解到本次开发人员修改代码涉及哪些业务逻辑和测试要点, 就可 以据此更新测试用例, 安排测试资源, 有的放矢地解决问题。 让黑盒测试人员从代码变更中 获取上述情报就是本文的立足点和待解决问题。 0006 目前对于文件内容的比较的研究相对较少, 按照其目标不同可以将文件监控分为 两种 : 一种是定量的比。
11、较, 既能判断文件是否被改变, 又能定位到不同之处, 往往针对的是 文本文件。 另一种是定性比较, 只能判断文档是否被改变, 但不能直观地知道文件的具体差 异, 这种比较对所有文件都适用, 主要利用文件的特征值、 签名文件或者加密算法判断。而 对于二进制文件一般采用指令相似性、 结构化比较、 特征提取等来实现。 0007 文件比较主要讨论的是定量比较, 目前已有的算法有两种 : 一种是简易的文本内 容比较算法, 另一种是基于图的文本比算法。 对于字数比较少的文本文件可以采用前者, 将 源文件 (被监测文件) 和目标文件 (监测时用来与源文件内容进行比较的文件) 的内容从头 到尾一对一地进行比较。
12、, 如果发现内容不相同, 即为出现了异常, 利用循环来判断异常的位 置。 0008 当文件中变化的内容比较多时, 该方法速度会比较慢。 而后者使用逆序循环, 需要 缓存计算信息, 因此增加了系统开销, 并且由于基于图论, 所以过程比较复杂。 0009 在实现现有技术的技术方案中, 发现现有技术存在如下问题 : 现有的源代码的比对无法在黑盒测试时将源代码的变更提交给黑盒测试员。 0010 发明内容 说 明 书 CN 103617122 A 3 2/4 页 4 0011 本发明实施例的目的在于提供一种源代码的比对方法, 其解决现有技术中源代码 的比对无法在黑盒测试时将源代码的变更提交给黑盒测试员的。
13、问题。 0012 本发明实施例是这样实现的, 一方面, 提供一种代码的比对方法, 所述方法包括 : 获取待比对的新旧源代码文件, 提取新旧源代码文件的修改日期和文件大小 ; 如日期和文件大小中有一个不相同, 将旧源代码文件读入 OldString, 将新源代码文件 读入 NewString ; 所述 OldString 为旧源代码文件的字符串变量, 所述 NewString 为新源代 码文件的字符串变量 ; 如 OldString 与 NewString 相同, 则对比结束, 认为新旧源代码文件 一样 ; 如 OldString 与 NewString 不相同, 解析出旧源代码文件中的文件头、。
14、 类声明、 属性声 明和方法声明, 存入字符串组 OldClass() 中, 解析出新源代码文件中的文件头、 类声明、 属 性声明和方法声明, 存入字符串组 NewClass() 中 ; 取 OldClass() 中的每个元素与 NewString 比对 ; 如 OldClass() 中 的 元 素 包 含 于 NewString 中, 取 NewClass() 中 的 每 个 元 素 与 OldString比对, 如NewClass()中的元素包含于NewString中且OldClass()与NewClass() 中的元素的类名称不同, 则记变更, 该 OldClass() 的元素被修改, 。
15、将该元素中的分支和 循环语句提取分支 ID 和注释信息记录到变更清单 ; 如 NewClass() 中的元素不包含于 NewString, 则该元素为新增, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录 到变更清单 ; 如 OldClass() 中的元素不包含于 NewString 中且类名称不存在于 NewString, 则记录 变更, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录到变更清单 ; 将该变更清单发送给黑盒测试人员及相关功能开发人员 ; 所述新源代码文件和所述旧源代码文件中的源代码的每个分支和循环语句中均插入 有分支 ID 以及注释信息。 0013 可选的。
16、, 所述方法在将该变更清单发送给黑盒测试人员及相关功能开发人员之前 还包括 : 如 OldClass() 中的元素不包含于 NewString 中且类名称存在于 NewString 时, 则取 OldClass() 中该类代码与 NewClass() 中同名的类元素对比, 具体的比对方式为 : 将 OldClass() 中该类代码的所有类成员解析为 OldMember(), 将 NewClass() 中同名 的类元素的所有类成员解析为 NewMember() ; 取 OldMember() 中的每个元素与 NewString 对比, 若 OldMember() 元素包含于 NewString 。
17、字符串中, 则该元素存在且无变更 ; 从 NewString 中删除该元素 ; 若发现 OldMember() 中某元素不在 NewString 中且该元素 的名称包含在 NewString 中, 那么认为该元素被修改, 取 OldMember() 中该元素代码与 NewMember() 中同名的元素对比 ; 若发现 OldMember() 中某元素不在 NewString 中且该元 素的名称不包含在 NewString 中则认为该元素被删除, 分析元素的分支和循环语句提取分 支 ID 和注释信息记录到变更清单。 0014 可选的, 所述将该变更清单发送给黑盒测试人员及相关功能开发人员具体包括。
18、 : 通过邮件发送该变更清单给黑盒测试人员及相关功能开发人员。 0015 在本发明实施例中, 本发明提供的技术方案自动搜集源代码变更信息后提示给黑 盒测试人员及相关功能开发人员, 大大降低了黑盒回归测试的盲目性, 提高了黑盒测试效 说 明 书 CN 103617122 A 4 3/4 页 5 率, 增加了开发人员与测试人员之间的信息沟通, 对于控制研发过程中由于开发人员和测 试人员信息不对称导致的开发风险具有明显的抑制作用, 将开发信息和测试信息以注释形 式与源代码绑定在一起, 保证了开发人员之间和开发人员与测试人员之间的知识转移。 0016 附图说明 0017 图 1 是本发明提供的一种代码。
19、的比对方法的流程图。 0018 具体实施方式 0019 为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明进行进一步详细说明。 应当理解, 此处所描述的具体实施例仅仅用以解释本发明, 并 不用于限定本发明。 0020 本发明最核心区别是, 通过提取源代码中的分支 ID 和注释实现通过对比代码逻 辑变更, 过滤源代码中用自然语言描述的注释信息, 据此识别出软件业务逻辑的变更, 而不 仅仅象其他对比工具一样, 只对比类, 成员和代码行。本发明在实现之前, 需要配置标记分 支工具, 标记分支工具可以参见其他文件的描述。 0021 本发明具体实施方式提供一种代码的比。
20、对方法, 该方法如图 1 所示, 包括 : 101、 获取待比对的新旧源代码文件, 提取新旧源代码文件的修改日期和文件大小, 如 日期和文件大小都相同, 则比对结束, 认为新旧源代码文件一样 ; 如日期和文件大小中有一 个不相同, 则执行 102 以及 102 的后续步骤 ; 102、 将旧源代码文件读入 OldString, 将新源代码文件读入 NewString ; 该 OldString 为旧源代码文件的字符串变量, 该 NewString 为新源代码文件的字符串变量 ; 如 OldString 与NewString相同, 则对比结束, 认为新旧源代码文件一样 ; 如不相同, 执行103。
21、及其后续步 骤 ; 103、 解析出旧源代码文件中的文件头、 类声明、 属性声明和方法声明, 存入字符串组 OldClass() 中, 解析出新源代码文件中的文件头、 类声明、 属性声明和方法声明, 存入字符 串组 NewClass() 中 ; 104、 取 OldClass() 中的每个元素与 NewString 比对, 如 OldClass() 中的元素包含于 NewString 中, 执行 105 ; 如 OldClass() 中的元素不包含于 NewString 中且类名称不存在 于 NewString, 则记录变更, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录到 变更清。
22、单 ; 105、 取 NewClass() 中的每个元素与 OldString 比对, 如 NewClass() 中的元素包 含于 NewString 中且 OldClass() 与 NewClass() 中的元素的类名称不同, 则记变更, 该 OldClass() 的元素被修改, 将该元素中的分支和循环语句提取分支 ID 和注释信息记录到 变更清单 ; 如 NewClass() 中的元素不包含于 NewString, 则该元素为新增, 将该元素中的分 支和循环语句提取分支 ID 和注释信息记录到变更清单。 0022 106、 将该变更清单发送给黑盒测试人员及相关功能开发人员。 0023 需要。
23、说明的是, 上述新源代码文件和旧源代码文件中的源代码的每个分支和循环 说 明 书 CN 103617122 A 5 4/4 页 6 语句中均插入有分支 ID 以及注释信息。 0024 上述发送方式可以为多种形式, 例如邮件等形式发送。 0025 可选的, 上述方法还包括 : 如 OldClass() 中的元素不包含于 NewString 中且类名称存在于 NewString, 则取 OldClass() 中该类代码与 NewClass() 中同名的类元素对比, 具体的比对方式可以为 : 201、 将OldClass()中该类代码的所有类成员解析为OldMember(), 将NewClass()。
24、中同 名的类元素的所有类成员解析为 NewMember() ; 202、 取 OldMember() 中的每个元素与 NewString 对比, 若 OldMember() 元素包含 于 NewString 字符串中, 则该元素存在且无变更 ; 从 NewString 中删除该元素 ; 若发现 OldMember() 中某元素不在 NewString 中且该元素的名称包含在 NewString 中, 那么认为 该元素被修改, 取 OldMember() 中该元素代码与 NewMember() 中同名的元素对比 ; 若发现 OldMember()中某元素不在NewString中且该元素的名称不包。
25、含在NewString 中则认为该 元素被删除, 分析元素的分支和循环语句提取分支 ID 和注释信息记录到变更清单。本发明 提供的技术方案具有准确定义源代码修改的优点。 0026 本发明的技术方案在自动搜集源代码变更信息后提示给黑盒测试人员及相关功 能开发人员。首先, 大大降低了黑盒回归测试的盲目性, 提高了黑盒测试效率。其次, 增加 了开发人员与测试人员之间的信息沟通, 对于控制研发过程中由于开发人员和测试人员信 息不对称导致的开发风险具有明显的抑制作用。第三, 将开发信息和测试信息以注释形式 与源代码绑定在一起, 保证了开发人员之间和开发人员与测试人员之间的知识转移。 0027 值得注意的。
26、是, 上述实施例中, 所包括的各个单元只是按照功能逻辑进行划分的, 但并不局限于上述的划分, 只要能够实现相应的功能即可 ; 另外, 各功能单元的具体名称也 只是为了便于相互区分, 并不用于限制本发明的保护范围。 0028 另外, 本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤 是可以通过程序来指令相关的硬件来完成, 相应的程序可以存储于一计算机可读取存储介 质中, 所述的存储介质, 如 ROM/RAM、 磁盘或光盘等。 0029 以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内所作的任何修改、 等同替换和改进等, 均应包含在本发明的保护范围之内。 说 明 书 CN 103617122 A 6 1/1 页 7 图 1 说 明 书 附 图 CN 103617122 A 7 。