CN103617122B - 一种源代码的比对方法 - Google Patents
一种源代码的比对方法 Download PDFInfo
- Publication number
- CN103617122B CN103617122B CN201310682487.1A CN201310682487A CN103617122B CN 103617122 B CN103617122 B CN 103617122B CN 201310682487 A CN201310682487 A CN 201310682487A CN 103617122 B CN103617122 B CN 103617122B
- Authority
- CN
- China
- Prior art keywords
- newstring
- source code
- file
- oldclass
- code file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明适用软件领域,提供了一种代码的比对方法,所述方法包括:获取待比对的新旧源代码文件,提取新旧源代码文件的修改日期和文件大小;如日期和文件大小中有一个不相同,将旧源代码文件读入OldString,将新源代码文件读入NewString;如OldString与NewString不相同,解析出旧源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组OldClass()中,解析出新源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组NewClass()中;取OldClass()中的每个元素与NewString比对;根据比对结果判断是否记录到变更清单。本发明提供的技术方案具有准确定义源代码修改的优点。
Description
技术领域
本发明属于软件领域,尤其涉及一种源代码的比对方法。
背景技术
黑盒测试是基于软件产品需求和设计规格说明的测试方法。着重于确认和验证软件产品是否满足规格说明。
黑盒测试方法的过程是围绕需求文档设计测试用例,使用方法包括等价类,因果图,错误推测等。评价测试用例设计的方法完全来自对需求文档,业务知识和软件设计说明书的理解程度和使用上述黑盒测试方法设计测试用例的能力。
因为大部分黑盒测试人员很少懂编码,因此开发人员在实现开发活动过程中,很少与黑盒测试人员沟通业务逻辑和代码逻辑,只是按照需求和设计说明书编写代码,由于理解错误产生的问题只能在源代码做成安装盘后由黑盒测试人员在测试时发现。
传统的黑盒测试活动都是按照测试计划执行的,一般开发人员修改代码后,很少会通知黑盒测试人员重点测试修改的地方,甚至修改者本人也不十分清楚自己修改的代码会影响哪些业务逻辑?变更影响范围有多大?此时,黑盒测试人员的测试活动具有很大盲目性。花费大量精力进行回归测试也不一定能够排除风险,如果黑盒测试人员在测试产品前能够获得准确信息,了解到本次开发人员修改代码涉及哪些业务逻辑和测试要点,就可以据此更新测试用例,安排测试资源,有的放矢地解决问题。让黑盒测试人员从代码变更中获取上述情报就是本文的立足点和待解决问题。
目前对于文件内容的比较的研究相对较少,按照其目标不同可以将文件监控分为两种:一种是定量的比较,既能判断文件是否被改变,又能定位到不同之处,往往针对的是文本文件。另一种是定性比较,只能判断文档是否被改变,但不能直观地知道文件的具体差异,这种比较对所有文件都适用,主要利用文件的特征值、签名文件或者加密算法判断。而对于二进制文件一般采用指令相似性、结构化比较、特征提取等来实现。
文件比较主要讨论的是定量比较,目前已有的算法有两种:一种是简易的文本内容比较算法,另一种是基于图的文本比算法。对于字数比较少的文本文件可以采用前者,将源文件(被监测文件)和目标文件(监测时用来与源文件内容进行比较的文件)的内容从头到尾一对一地进行比较,如果发现内容不相同,即为出现了异常,利用循环来判断异常的位置。
当文件中变化的内容比较多时,该方法速度会比较慢。而后者使用逆序循环,需要缓存计算信息,因此增加了系统开销,并且由于基于图论,所以过程比较复杂。
在实现现有技术的技术方案中,发现现有技术存在如下问题:
现有的源代码的比对无法在黑盒测试时将源代码的变更提交给黑盒测试员。
发明内容
本发明实施例的目的在于提供一种源代码的比对方法,其解决现有技术中源代码的比对无法在黑盒测试时将源代码的变更提交给黑盒测试员的问题。
本发明实施例是这样实现的,一方面,提供一种代码的比对方法,所述方法包括:
获取待比对的新旧源代码文件,提取新旧源代码文件的修改日期和文件大小;
如日期和文件大小中有一个不相同,将旧源代码文件读入OldString,将新源代码文件读入NewString;所述OldString为旧源代码文件的字符串变量,所述NewString为新源代码文件的字符串变量;如OldString与NewString相同,则对比结束,认为新旧源代码文件一样;
如OldString与NewString不相同,解析出旧源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组OldClass()中,解析出新源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组NewClass()中;
取OldClass()中的每个元素与NewString比对;
如OldClass()中的元素包含于NewString中,取NewClass()中的每个元素与OldString比对,如NewClass()中的元素包含于NewString中且OldClass()与NewClass()中的元素的类名称不同,则记变更,该OldClass()的元素被修改,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;如NewClass()中的元素不包含于NewString,则该元素为新增,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;
如OldClass()中的元素不包含于NewString中且类名称不存在于NewString,则记录变更,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;
将该变更清单发送给黑盒测试人员及相关功能开发人员;
所述新源代码文件和所述旧源代码文件中的源代码的每个分支和循环语句中均插入有分支ID以及注释信息。
可选的,所述方法在将该变更清单发送给黑盒测试人员及相关功能开发人员之前还包括:
如OldClass()中的元素不包含于NewString中且类名称存在于NewString时,则取OldClass()中该类代码与NewClass()中同名的类元素对比,具体的比对方式为:
将OldClass()中该类代码的所有类成员解析为OldMember(),将NewClass()中同名的类元素的所有类成员解析为NewMember();取OldMember()中的每个元素与NewString对比,若OldMember()元素包含于NewString字符串中,则该元素存在且无变更;从NewString中删除该元素;若发现OldMember()中某元素不在NewString中且该元素的名称包含在NewString中,那么认为该元素被修改,取OldMember()中该元素代码与NewMember()中同名的元素对比;若发现OldMember()中某元素不在NewString中且该元素的名称不包含在NewString中则认为该元素被删除,分析元素的分支和循环语句提取分支ID和注释信息记录到变更清单。
可选的,所述将该变更清单发送给黑盒测试人员及相关功能开发人员具体包括:
通过邮件发送该变更清单给黑盒测试人员及相关功能开发人员。
在本发明实施例中,本发明提供的技术方案自动搜集源代码变更信息后提示给黑盒测试人员及相关功能开发人员,大大降低了黑盒回归测试的盲目性,提高了黑盒测试效率,增加了开发人员与测试人员之间的信息沟通,对于控制研发过程中由于开发人员和测试人员信息不对称导致的开发风险具有明显的抑制作用,将开发信息和测试信息以注释形式与源代码绑定在一起,保证了开发人员之间和开发人员与测试人员之间的知识转移。
附图说明
图1是本发明提供的一种代码的比对方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明最核心区别是,通过提取源代码中的分支ID和注释实现通过对比代码逻辑变更,过滤源代码中用自然语言描述的注释信息,据此识别出软件业务逻辑的变更,而不仅仅象其他对比工具一样,只对比类,成员和代码行。本发明在实现之前,需要配置标记分支工具,标记分支工具可以参见其他文件的描述。
本发明具体实施方式提供一种代码的比对方法,该方法如图1所示,包括:
101、获取待比对的新旧源代码文件,提取新旧源代码文件的修改日期和文件大小,如日期和文件大小都相同,则比对结束,认为新旧源代码文件一样;如日期和文件大小中有一个不相同,则执行102以及102的后续步骤;
102、将旧源代码文件读入OldString,将新源代码文件读入NewString;该OldString为旧源代码文件的字符串变量,该NewString为新源代码文件的字符串变量;如OldString与NewString相同,则对比结束,认为新旧源代码文件一样;如不相同,执行103及其后续步骤;
103、解析出旧源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组OldClass()中,解析出新源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组NewClass()中;
104、取OldClass()中的每个元素与NewString比对,如OldClass()中的元素包含于NewString中,执行105;如OldClass()中的元素不包含于NewString中且类名称不存在于NewString,则记录变更,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;
105、取NewClass()中的每个元素与OldString比对,如NewClass()中的元素包含于NewString中且OldClass()与NewClass()中的元素的类名称不同,则记变更,该OldClass()的元素被修改,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;如NewClass()中的元素不包含于NewString,则该元素为新增,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单。
106、将该变更清单发送给黑盒测试人员及相关功能开发人员。
需要说明的是,上述新源代码文件和旧源代码文件中的源代码的每个分支和循环语句中均插入有分支ID以及注释信息。
上述发送方式可以为多种形式,例如邮件等形式发送。
可选的,上述方法还包括:
如OldClass()中的元素不包含于NewString中且类名称存在于NewString,则取OldClass()中该类代码与NewClass()中同名的类元素对比,具体的比对方式可以为:
201、将OldClass()中该类代码的所有类成员解析为OldMember(),将NewClass()中同名的类元素的所有类成员解析为NewMember();
202、取OldMember()中的每个元素与NewString对比,若OldMember()元素包含于NewString字符串中,则该元素存在且无变更;从NewString中删除该元素;若发现OldMember()中某元素不在NewString中且该元素的名称包含在NewString中,那么认为该元素被修改,取OldMember()中该元素代码与NewMember()中同名的元素对比;若发现OldMember()中某元素不在NewString中且该元素的名称不包含在NewString中则认为该元素被删除,分析元素的分支和循环语句提取分支ID和注释信息记录到变更清单。本发明提供的技术方案具有准确定义源代码修改的优点。
本发明的技术方案在自动搜集源代码变更信息后提示给黑盒测试人员及相关功能开发人员。首先,大大降低了黑盒回归测试的盲目性,提高了黑盒测试效率。其次,增加了开发人员与测试人员之间的信息沟通,对于控制研发过程中由于开发人员和测试人员信息不对称导致的开发风险具有明显的抑制作用。第三,将开发信息和测试信息以注释形式与源代码绑定在一起,保证了开发人员之间和开发人员与测试人员之间的知识转移。
值得注意的是,上述实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种代码的比对方法,其特征在于,所述方法包括:
获取待比对的新旧源代码文件,提取新旧源代码文件的修改日期和文件大小;
如日期和文件大小中有一个不相同,将旧源代码文件读入OldString,将新源代码文件读入NewString;所述OldString为旧源代码文件的字符串变量,所述NewString为新源代码文件的字符串变量;如OldString与NewString相同,则对比结束,认为新旧源代码文件一样;
如OldString与NewString不相同,解析出旧源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组OldClass()中,解析出新源代码文件中的文件头、类声明、属性声明和方法声明,存入字符串组NewClass()中;
取OldClass()中的每个元素与NewString比对;
如OldClass()中的元素包含于NewString中,取NewClass()中的每个元素与OldString比对,如NewClass()中的元素包含于NewString中且OldClass()与NewClass()中的元素的类名称不同,则记变更,该OldClass()的元素被修改,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;如NewClass()中的元素不包含于NewString,则该元素为新增,将该元素中的分支和循环语句提取分支ID和注释信息记录到变更清单;
如OldClass()中的元素不包含于NewString中且类名称不存在于NewString,则取OldClass()中这类代码与NewClass()中同名的类元素对比,具体的比对方式为:
将OldClass()中这类代码的所有类成员解析为OldMember(),将NewClass()中同名的类元素的所有类成员解析为NewMember();取OldMember()中的每个元素与NewString对比,若OldMember()元素包含于NewString字符串中,则该元素存在且无变更;从NewString中删除该元素;若发现OldMember()中某元素不在NewString中且该元素的名称包含在NewString中,那么认为该元素被修改,取OldMember()中该元素代码与NewMember()中同名的元素对比;若发现OldMember()中某元素不在NewString中且该元素的名称不包含在NewString中则认为该元素被删除,分析元素的分支和循环语句提取分支ID和注释信息记录到变更清单;
将该变更清单发送给黑盒测试人员及相关功能开发人员;
所述新源代码文件和所述旧源代码文件中的源代码的每个分支和循环语句中均插入有分支ID以及注释信息。
2.根据权利要求1所述的方法,其特征在于,所述将该变更清单发送给黑盒测试人员及相关功能开发人员具体包括:
通过邮件发送该变更清单给黑盒测试人员及相关功能开发人员。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310682487.1A CN103617122B (zh) | 2013-12-12 | 2013-12-12 | 一种源代码的比对方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310682487.1A CN103617122B (zh) | 2013-12-12 | 2013-12-12 | 一种源代码的比对方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103617122A CN103617122A (zh) | 2014-03-05 |
CN103617122B true CN103617122B (zh) | 2016-03-30 |
Family
ID=50167825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310682487.1A Active CN103617122B (zh) | 2013-12-12 | 2013-12-12 | 一种源代码的比对方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103617122B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122294A (zh) * | 2017-03-17 | 2017-09-01 | 惠州Tcl移动通信有限公司 | 一种测试参数文件兼容性的方法、终端及装置 |
CN108255699A (zh) * | 2017-03-27 | 2018-07-06 | 平安科技(深圳)有限公司 | 回归测试方法和装置 |
CN107015909B (zh) * | 2017-03-31 | 2020-03-27 | 青岛海信电器股份有限公司 | 基于代码变更分析的测试方法及装置 |
CN109710298A (zh) * | 2018-08-20 | 2019-05-03 | 平安普惠企业管理有限公司 | 接口管理方法、接口管理装置、接口管理设备及存储介质 |
CN114154944B (zh) * | 2021-11-03 | 2023-04-07 | 广州市玄武无线科技股份有限公司 | 业务审核方法、设备及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425078A (zh) * | 2008-11-17 | 2009-05-06 | 阿里巴巴集团控股有限公司 | 一种软件源代码的更新方法及装置 |
CN101533346A (zh) * | 2008-03-13 | 2009-09-16 | 中兴通讯股份有限公司 | 源文件的比较装置及方法 |
CN103019666A (zh) * | 2011-09-20 | 2013-04-03 | 日本电气株式会社 | 源代码比较设备、源代码比较方法和源代码比较程序 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7085996B2 (en) * | 2001-10-18 | 2006-08-01 | International Business Corporation | Apparatus and method for source compression and comparison |
US7823144B2 (en) * | 2005-12-29 | 2010-10-26 | International Business Machines Corporation | Computer program code comparison using lexemes |
US8627290B2 (en) * | 2009-02-03 | 2014-01-07 | International Business Machines Corporation | Test case pattern matching |
-
2013
- 2013-12-12 CN CN201310682487.1A patent/CN103617122B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101533346A (zh) * | 2008-03-13 | 2009-09-16 | 中兴通讯股份有限公司 | 源文件的比较装置及方法 |
CN101425078A (zh) * | 2008-11-17 | 2009-05-06 | 阿里巴巴集团控股有限公司 | 一种软件源代码的更新方法及装置 |
CN103019666A (zh) * | 2011-09-20 | 2013-04-03 | 日本电气株式会社 | 源代码比较设备、源代码比较方法和源代码比较程序 |
Also Published As
Publication number | Publication date |
---|---|
CN103617122A (zh) | 2014-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10936479B2 (en) | Pluggable fault detection tests for data pipelines | |
CN103617122B (zh) | 一种源代码的比对方法 | |
US10095602B2 (en) | Automated code analyzer | |
Feremans et al. | Pattern-based anomaly detection in mixed-type time series | |
US20170132119A1 (en) | Method and device for retrieving test case based on code coverage | |
CN103092761B (zh) | 基于差异信息文件识别和检查修改代码块的方法及装置 | |
Shen et al. | On automatic summarization of what and why information in source code changes | |
US11586433B2 (en) | Pipeline release validation | |
CN107003931B (zh) | 将测试验证从测试执行分离 | |
CN104657402A (zh) | 用于语言标签管理的方法和系统 | |
CN104360837B (zh) | 取证软件中基于自定义脚本实现电子数据取证分析的方法 | |
US20170371687A1 (en) | Automated globalization enablement on development operations | |
US20140282396A1 (en) | Computerized system and method for extracting business rules from source code | |
CN103761095A (zh) | 一种生成通用的升级文件头部数据信息的方法 | |
Müller et al. | A graph-based feature location approach using set theory | |
CN116383193A (zh) | 一种数据管理方法、装置、电子设备和存储介质 | |
Hu et al. | Program generation and code completion techniques based on deep learning: Literature review | |
CN104021075A (zh) | 用于程序代码的评估方法和装置 | |
US20140067443A1 (en) | Business process transformation recommendation generation | |
Winter et al. | Deriving and combining mixed graphs from regulatory documents based on constraint relations | |
JP2013077124A (ja) | ソフトウェアテストケース生成装置 | |
US8819645B2 (en) | Application analysis device | |
CN113672233B (zh) | 一种基于Redfish的服务器带外管理方法、装置及设备 | |
Reger | Suggesting edits to explain failing traces | |
Lüders et al. | On understanding and predicting issue links |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant after: Yonyou Network Technology Co., Ltd. Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant before: UFIDA Software Co., Ltd. |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |