用于标识源代码版本之间的语义区别的方法和装置的制造方法_4

文档序号:9687265阅读:来源:国知局
0085] 应当注意,本领域技术人员可W根据具体应用环境的要求,从上述多个方面中选 择一个或者多个方面进行比较。例如,当发现两个函数的编程计数器范围不匹配时,还可W 比较两个函数的行号信息,W便确定是否执行了增加或者删除代码行的修改。又例如,当发 现两个函数的指令序列完全匹配时,可W确定两个函数之间不存在语义区别。
[0086] 图6示意性示出了根据本发明一个实施方式的标识语义区别的框图600。采用上 文所述的方法,可W发现如下修改:第一版本610中的函数subl匹配于第二版本620中的 函数化ncl(如箭头C1所示),第一版本610中的函数sub2匹配于第二版本620中的函 数化nc2 (如箭头C3所示),第一版本610中的函数main匹配于第二版本620中的函数 main(如箭头C2所示),并且第一版本610中的某些变量名称被替换为第二版本620中的 某些变量名称(例如,si被替换为tmpintegerl,s2被替换为tmplnteger2,等等)。
[0087] 采用本发明的各个实施方式的方法,上述送些修改仅仅属于文本上的修改,而并 不改变源代码的语义。第一版本610和第二版本620之间的语义区别仅在于;在第二版本 620中第27行中插入了新的代码行"printf( "a+b= %d\n",a+b)"(如语义区别630所 示)。
[0088] 本领域技术人员可W理解,相对于现有的基于文本来标识两个源代码版本之间的 区别的方法,采用本发明的技术方案可W标识出可能对编程结果造成影响的语义区别。
[0089] 具体地,通过在第一版本610和第二版本620之间搜索相匹配的函数,可W忽略移 动函数的位置造成的文本区别;通过比较相匹配的函数的变量信息,可W忽略变量名替换 造成的文本区别;通过比较相匹配的函数的行号信息,可W确定在第二版本620的第27行 插入了新的代码行。W此方式,可W快速并且准确地找到两个源代码版本之间的语义区别, 进而大大降低了开发人员从大量无关文本区别中搜索语义区别的工作量。
[0090] 在本发明的一个实施方式中,分别获取第一源代码版本的第一调试信息和第二源 代码版本的第二调试信息包括:从编译第一源代码所得的第一目标文件和第一可执行文件 中的任一项获取第一调试信息;W及从编译第二源代码所得的第二目标文件和第二可执行 版本中的任一项获取第二调试信息。应当注意,由于调试信息是通过编译操作来获得的,因 而可W从编译所得的目标文件或者可执行文件中获取调试信息。
[0091] 前面已经参考附图描述了实现本发明的方法的各个实施方式。本领域技术人员可 W理解的是,上述方法既可WW软件方式实现,也可WW硬件方式实现,或者通过软件与硬 件相结合的方式实现。并且,本领域技术人员可W理解,通过W软件、硬件或者软硬件相结 合的方式实现上述方法中的各个步骤,可W提供一种基于相同发明构思的一种设备。即使 该设备在硬件结构上与通用处理设备相同,由于其中所包含的软件的作用,使得该设备表 现出区别于通用处理设备的特性,从而形成本发明的各个实施方式的设备。本发明中所述 设备包括若干装置或模块,所述装置或模块被配置为执行相应步骤。本领域的所述技术人 员通过阅读本说明书可W理解如何编写程序实现所述装置或模块执行的动作。由于所述设 备与方法基于相同的发明构思,因此其中相同或相应的实现细节同样适用于与上述方法对 应的装置或模块,由于其在上文中已经进行了详细和完整的描述,因此在下文中可能不再 进行赏述。
[0092] 图7示意性示出了根据本发明一个实施方式的用于标识源代码版本之间的区别 的装置的框图700。具体地,示出了一种用于标识源代码版本之间的语义区别的装置,包括: 获取模块710,配置用于分别获取第一源代码版本的第一调试信息和第二源代码版本的第 二调试信息;确定模块720,配置用于通过比较第一调试信息与第二调试信息,确定在第二 源代码版本中是否存在与第一源代码版本中的第一函数相匹配的第二函数;W及标识模块 730,配置用于基于确定的结果标识语义区别。
[0093] 在本发明的一个实施方式中,标识模块730包括;第一标识模块,配置用于响应于 确定不存在第二函数,将第一函数标识为语义区别。
[0094] 在本发明的一个实施方式中,确定模块720包括;原型提取模块,配置用于分别从 第一调试信息提取第一函数的第一原型,W及从第二调试信息提取函数的原型;W及函数 确定模块,配置用于响应于函数的原型不匹配于第一原型,确定不存在第二函数;否则确定 存在第二函数。
[0095] 在本发明的一个实施方式中,函数确定模块包括:哈希模块,配置用于响应于函数 的原型的哈希值不匹配于第一原型的第一哈希值。
[0096] 在本发明的一个实施方式中,标识模块730包括;范围提取模块,配置用于响应于 确定存在第二函数,分别从第一调试信息中提取第一函数的第一编程计数器范围,W及从 第二调试信息中提取第二函数的第二编程计数器范围;W及第二标识模块,配置用于响应 于第一编程计数器范围不匹配于第二编程计数器范围,将第一函数标识为语义区别。
[0097] 在本发明的一个实施方式中,标识模块进一步包括;行号信息提取模块,配置用于 分别从第一调试信息中提取第一函数的第一行的指令序列,W及从第二调试信息中提取第 二函数的第二行的指令序列;W及第Η标识模块,配置用于响应于第一行的指令序列不匹 配于第二行的指令序列,将造成第一行的指令序列和第二行的指令序列之间的不匹配的代 码行标识为语义区别。
[0098] 在本发明的一个实施方式中,标识模块进一步包括;变量信息提取模块,配置用于 响应于确定存在第二函数,分别从第一调试信息中提取第一函数的第一变量信息,W及从 第二调试信息中提取第二函数的第二变量信息;指令比较模块,配置用于响应于第一变量 信息不匹配于第二变量信息,确定第一调试信息中与第一变量信息相关联的第一指令是否 匹配于第二调试信息中与第二变量信息相关联的第二指令;W及第四标识模块,配置用于 响应于第一指令不匹配于第二指令,将造成第一变量信息和第二变量信息之间的不匹配的 变量标识为语义区别。
[0099] 在本发明的一个实施方式中,标识模块进一步包括;指令序列提取模块,配置用于 响应于确定存在第二函数;分别从第一调试信息提取第一函数的第一指令序列,W及从第 二调试信息提取第二函数的第二指令序列;W及第五标识模块,配置用于响应于第一指令 序列匹配于第二指令序列,确定第一函数与第二函数之间不存在语义区别。
[0100] 在本发明的一个实施方式中,获取模块710包括;第一获取模块,配置用于从编译 第一源代码所得的第一目标文件和第一可执行文件中的任一项获取第一调试信息;W及第 二获取模块,配置用于从编译第二源代码所得的第二目标文件和第二可执行文件中的任一 项获取第二调试信息。
[0101] 采用本发明所述的方法和装置,可W在尽量不改变现有软件开发流程的情况下, 快速并且准确地标识各个源代码版本之间的语义区别。
[0102] 本发明可W是系统、方法和/或计算机程序产品。计算机程序产品可W包括计算 机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
[0103] 计算机可读存储介质可W是可W保持和存储由指令执行设备使用的指令的有形 设备。计算机可读存储介质例如可W是一-但不限于一-电存储设备、磁存储设备、光存储 设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质 的更具体的例子(非穷举的列表)包括;便携式计算机盘、硬盘、随机存取存储器(RAM)、只 读存储器(ROM)、可擦式可编程只读存储器巧PROM或闪存)、静态随机存取存储器(SRAM)、 便携式压缩盘只读存储器(CD-ROM)、数字多功能盘值VD)、记忆棒、软盘、机械编码设备、例 如其上存储有指令的打孔卡或凹槽内凸起结构、W及上述的任意合适的组合。送里所使用 的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁 波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电 线传输的电信号。
[0104] 送里所描述的计算机可读程序指令可W从计算机可读存储介质下载到各个计算/ 处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或 外部存储设备。网络可W包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网 关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接 收计算机可读程序指令,并转发该计算机可读程序指令,W供存储在各个计算/处理设备 中的计算机可读存储介质中。
[0105] 用于执行本发明操作的计算机程序指令可W是汇编指令、指令集架构(ISA)指 令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者W-种或多种编程语 言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言一诸如 Smallta化、C++等,W及常规的过程式编程语目一诸如"C"语目或类似的编程语目。计算机 可读程序指令可W完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独 立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机 或服务器上执行。在涉及远程计算机的情形中,远程计算机可W通过任意种类的网络一包 括局域网(LAN)或广域网(WAN)-连接到用户计算机,或者,可W连接到外部计算机(例如 利用因特网服务提供商来通过因特网连接)。在一些实施方式中,通过利用计算机可读程序 指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程口阵列(FPGA) 或可编程逻辑阵列(PLA),该电子电路可W执行计算机可读程序指令,从而实现本发明的各 个方面。
[0106] 送里参照根据本发明实施方式的方法、装置(系统)和计算机程序产品的流程图 和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框W及流程 图和/或框图中各方框的组合,都可W由计算机可读程序指令实现。
[0107] 送些计算机可读程序指令可W提供给通用计算机、专用计算机或其他可编程数据 处理装置的处理器,从而生产出一种机器,使得送些指令
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1