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

文档序号:9687265阅读:296来源:国知局
用于标识源代码版本之间的语义区别的方法和装置的制造方法
【技术领域】
[0001]本发明的各实施方式涉及软件开发,更具体地,涉及在软件开发期间用于标识源 代码版本之间的语义区别(semanticdifference)的方法和装置。
【背景技术】
[0002] 随着用户需求的增加,计算机软件的功能也日益复杂。在软件开发周期中,需要频 繁地对各个开发阶段中的不同的源代码版本进行测试。回归测试(regressiontesting)指 修改了旧代码后,重新进行测试W确认修改没有引入新的错误或导致其他代码出现错误。 作为软件开发的一个重要组成部分,回归测试在整个软件开发过程中占有很大的工作量比 重。通常而言,开发人员逐步完成软件设计中的各项功能,并且基于回归测试来确保源代码 的正确。
[0003]例如,开发人员编写了第一源代码版本,经过测试后发现该第一源代码版本可W实现预期的设计。继而,开发人员可W在该第一源代码版本的基础上继续开发其他功能并 完成第二源代码版本。在后续的开发第二版本源代码过程期间将会添加新的代码,并且还 可能会修改第一源代码版本中的已经通过测试的已有代码。
[0004]在针对第二源代码版本进行测试时,可能会发现第二源代码版本中引入了在第一 源代码版本中不存在的新问题。例如,第一源代码版本可W通过某些测试用例(testcase) 的测试,然而,第二源代码版本不能通过送些测试用例的测试。此时则需要比较第一源代码 版本和第二源代码版本之间的区别,W便发现并排除在开发第二源代码版本期间引入的错 误。
[0005]然而,开发过程可能会涉及到复杂的过程,例如,开发人员可能会加入新的代码 行、删除现有代码行、修改现有代码行等,送些修改可能会在两个源代码版本之间引入语义 区别(即,可能会导致运行结果的不同)。另外,开发人员还有可能会调整代码行/函数在 源代码中的顺序(例如,交换两个代码行/函数的位置)、替换变量(variable)名/函数名 等。尽管从文本角度看来,上述送些修改将会在两个源代码版本之间引入文本区别,然而对 于编程语言的编译和执行而言,送些文本区别并不会对运行结果产生影响,因而在查找新 引入的错误时,可W仅关注于语义区别而忽略文本区别。
[0006] 目前已经提出了在回归测试中用于辅助查找各个源代码版本之间的区别的技术 方案,然而送些技术方案主要基于分析各个版本之间的文本区别来实现。送些技术方案会 将原本不会对程序的运行结果产生任何影响的文本修改标识为区别,造成开发人员不得不 在所标识的大量区别中人工地寻找真正对运行结果产生影响的语义区别。
[0007] 因而,如何快速并且准确地标识出各个源代码版本之间的语义区别,成为目前的 一个研究热点。

【发明内容】

[0008] 因而,期望开发一种能够标识不同源代码版本之间的语义区别的技术方案。期望 该技术方案可w忽略不同源代码版本之间的文本区别,而仅标识各个版本之间的语义区 另|J,W便于开发人员可W快速定位开发期间被修改的导致程序产生不同运行结果的内容, 进而找到可能引起错误的代码行。
[0009] 在本发明的一个实施方式中,提供了一种用于标识源代码版本之间的语义区别的 方法,包括:分别获取第一源代码版本的第一调试信息和第二源代码版本的第二调试信息; 通过比较第一调试信息与第二调试信息,确定在第二源代码版本中是否存在与第一源代码 版本中的第一函数相匹配的第二函数;W及基于确定的结果标识语义区别。
[0010] 在本发明的一个实施方式中,提供了一种用于标识源代码版本之间的语义区别的 装置,包括:获取模块,配置用于分别获取第一源代码版本的第一调试信息和第二源代码版 本的第二调试信息;确定模块,配置用于通过比较第一调试信息与第二调试信息,确定在第 二源代码版本中是否存在与第一源代码版本中的第一函数相匹配的第二函数;W及标识模 块,配置用于基于确定的结果标识语义区别。
[0011] 采用本发明所述的方法和装置,可W在尽量不改变现有软件开发流程的情况下, 快速并且准确地标识各个源代码版本之间的语义区别。
【附图说明】
[0012] 通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述W及其 他目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号 通常代表相同部件。
[0013] 图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框 图;
[0014] 图2示意性示出了根据一个技术方案的用于标识源代码版本之间的区别的框图;
[0015] 图3示意性示出了根据本发明一个实施方式的用于标识源代码版本之间的语义 区别的技术方案的框图;
[0016] 图4示意性示出了根据本发明一个实施方式的用于标识源代码版本之间的语义 区别的方法的流程图;
[0017] 图5示意性示出了根据本发明一个实施方式的通过比较调试信息而标识源代码 版本之间的语义区别的方法的流程图;
[0018] 图6示意性示出了根据本发明一个实施方式的标识语义区别的框图;W及
[0019] 图7示意性示出了根据本发明一个实施方式的用于标识源代码版本之间的语义 区别的装置的框图。
【具体实施方式】
[0020] 下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开 的优选实施方式,然而应该理解,可WW各种形式实现本公开而不应被送里阐述的实施方 式所限制。相反,提供送些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的 范围完整地传达给本领域的技术人员。
[0021] 图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框 图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施方式的功能和 使用范围带来任何限制。
[0022] 如图1所示,计算机系统/服务器12W通用计算设备的形式表现。计算机系统 /服务器12的组件可W包括但不限于;一个或者多个处理器或者处理单元16,系统存储器 28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0023] 总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器, 外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举 例来说,送些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC) 总线,增强型ISA总线、视频电子标准协会(VESA)局域总线W及外围组件互连(PCI)总线。
[0024] 计算机系统/服务器12典型地包括多种计算机系统可读介质。送些介质可W是 任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动 的和不可移动的介质。
[0025] 系统存储器28可W包括易失性存储器形式的计算机系统可读介质,例如随机存 取存储器(RAM) 30和/或高速缓存存储器32。计算机系统/服务器12可W进一步包括其 他可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34 可W用于读写不可移动的、非易失性磁介质(图1未显示,通常称为"硬盘驱动器")。尽管 图1中未示出,可W提供用于对可移动非易失性磁盘(例如"软盘")读写的磁盘驱动器, W及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其他光介质)读写的光盘驱动器。 在送些情况下,每个驱动器可W通过一个或者多个数据介质接口与总线18相连。存储器28 可W包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,送些程序模 块被配置W执行本发明各实施方式的功能。
[0026]具有一组(至少一个)程序模块42的程序/实用工具40,可W存储在例如存储器 28中,送样的程序模块42包括一但不限于一操作系统、一个或者多个应用程序、其他 程序模块W及程序数据,送些示例中的每一个或某种组合中可能包括网络环境的实现。程 序模块42通常执行本发明所描述的实施方式中的功能和/或方法。
[0027] 计算机系统/服务器12也可W与一个或多个外部设备14 (例如键盘、指向设备、 显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的 设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其他计算设备进行通信 的任何设备(例如网卡,调制解调器等等)通信。送种通信可W通过输入/输出(I/O)接 口 22进行。并且,计算机系统/服务器12还可W通过网络适配器20与一个或者多个网络 (例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适 配器20通过总线18与计算机系统/服务器12的其他模块通信。应当明白,尽管图中未示 出,可W结合计算机系统/服务器12使用其他硬件和/或软件模块,包括但不限于;微代 码、设备驱动器、兀余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器W及数据备份存 储系统等。
[0028] 图2示意性示出了根据一个技术方案的用于标识源代码版本之间的区别的框图 200。如图2所示,第一版本210包括主函数main和两个函数subl和sub2,第二版本220 包括主函数main和两个函数化ncl和化nc2。应当注意,根据如图2所示的基于文本变化 来标识各个源代码版本之间的区别的技术方案,第一版本210和第二版本220之间存在大 量区别。
[0029] 假设第二版本220是在第一版本210基础上开发的最新源代码版本,针对第一版 本210的修改包括;1)将函数subl重命名为funcl,并将函数subl中的变量pi、si、s2分 别重命名为i吨utIntegeiNtmpIntegerl和tmplnteger2 ;2)将函数sub2 重命名为func2, 并且将函数sub2中的变量p2重命名为i吨utinteger;W及3)在函数main中添加新代码 行printf( "a+b= %d\n",a+b)。根据现有的技术方案,上述第1-3点涉及的修改均为第 一版本210和第二版本220之间的区别。
[0030] 本领域技术人员应当理解,尽管对多个函数和变量进行了重命名,然而
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1