软件程序的基线版本管理方法及系统的制作方法

文档序号:6429999阅读:309来源:国知局
专利名称:软件程序的基线版本管理方法及系统的制作方法
软件程序的基线版本管理方法及系统
技术领域
本发明涉及软件技术,尤其涉及一种软件程序的基线版本管理方法及系统。
背景技术
在软件开发中,很多情况下都需要多人团队并行开发,在并行开发的模式下,多人会同时修改同一份代码文件,并且修改后的代码文件的上线时间也不同。当代码文件上线时若需要修改代码文件,传统的做法是获取最新成功上线的版本,然而,最新成功上线的版本很可能是错误的甚至是上线失败的,因此,传统的软件的并行开发模式下,很难获取到准确的代码版本。此外,传统的处于一个大项目的子项目拆分,不能布置一个子项目的基线版本环境,也很难各自获取到子项目的代码。

发明内容·
基于此,有必要提供一种能得到准确的代码版本的软件程序的基线版本管理方法。一种软件程序的基线版本管理方法,包括以下步骤对二进制程序进行源码解析,记录所述二进制程序对应的源码文件;监控二进制程序的上线单的状态;根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新。在优选的实施例中,所述源码文件包括cpp文件及所述cpp文件引用的hpp文件;所述对二进制程序进行源码解析,记录二进制程序对应的源码文件的步骤包括执行指令,得到编译中间结果;对所述编译中间结果进行扫描,得到cpp文件组成及其引用的hpp文件组成;将所述得到的cpp文件组成、hpp文件组成与二进制程序的对应关系记录到二进制源码解析对应表中。在优选的实施例中,所述根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新的步骤包括当所述上线单的状态为全面上线成功时,查找二进制程序对应的源码文件,从版本管理服务器获取所述源码文件的当前版本号,将所述源码文件的当前版本号记录为所述源码文件对应的当前基线版本号。在优选的实施例中,所述对所述源码文件的基线版本号进行更新的步骤包括当所述上线单的状态为全面回退时,查找二进制程序对应的源码文件,将所述源码文件的当前基线版本号修改为上一版本号。在优选的实施例中,所述方法还包括创建基线版本数据表,所述基线版本数据表用于记录源码文件与源码文件的当前基线版本号、至少一个历史基线版本号的对应关系。此外,还有必要提供一种能得到准确的代码版本的软件程序的基线版本管理系统。一种软件程序的基线版本管理系统,包括源码解析模块,用于对二进制程序进行源码解析,记录所述二进制程序对应的源码文件;监控模块,用于监控二进制程序的上线单的状态;基线版本管理模块,用于根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新。在优选的实施例中,所述源码文件包括cpp文件及所述cpp文件引用的hpp文件;所述源码解析模块包括指令执行模块,用于执行指令,得到编译中间结果; 扫描模块,用于对所述编译中间结果进行扫描,得到cpp文件组成及其引用的hpp文件组成;记录模块,用于将所述得到的cpp文件组成、hpp文件组成与二进制程序的对应关系记录到二进制源码解析对应表中。在优选的实施例中,所述基线版本管理模块用于当所述上线单的状态为全面上线成功时,查找二进制程序对应的源码文件,从版本管理服务器获取所述源码文件的当前版本号,将所述源码文件的当前版本号记录为所述源码文件对应的当前基线版本号。在优选的实施例中,所述基线版本管理模块还用于当所述上线单的状态为全面回退时,查找二进制程序对应的源码文件,将所述源码文件的当前基线版本号修改为上一版本号。在优选的实施例中,基线版本数据表创建模块,用于创建基线版本数据表,所述基线版本数据表用于记录源码文件与源码文件的当前基线版本号、至少一个历史基线版本号的对应关系。上述软件程序的基线版本管理方法及系统,通过监控二进制程序的上线单的状态,根据上线单的状态对上线的二进制程序对应的源码文件的基线版本号进行更新,由于对二进制程序的源码文件的基线版本号进行了有效的管理,因此能够得到准确的代码版本。

图I为一个实施例中软件程序的基线版本管理方法的流程示意图;图2为图I中步骤S102的流程示意图;图3为一个实施例中软件程序的基线版本管理系统的结构示意图;图4为图3中源码解析模块的结构示意图。
具体实施方式本发明通过对二进制程序进行源码解析,记录二进制程序对应的源码文件,由于在二进制程序的上线过程中,二进制程序的上线单的状态可以进行修改,通过监控二进制程序的上线单的状态,根据上线单的状态查找到二进制程序对应的源码文件,对查找到的这些源码文件的基线版本号进行更新。由于根据二进制程序的上线单的状态的不同,会对二进制程序对应的源码文件的基线版本号进行更新,从而对二进制程序的源码文件的基线版本号进行了有效管理,通过更新的基线版本号能够得到准确的代码版本。在一个实施例中,如图I所示,一种软件程序的基线版本管理方法,包括以下步骤步骤S10,对二进制程序进行源码解析,记录二进制程序对应的源码文件。在一个实施例中,上线的二进制程序为由一系列c/c++源代码编译生成的,例如.so文件、.cgi文件等。这里的c/c++源代码包括cpp文件和hpp文件,其中cpp文件为由c++语言编写的源代码文件(即源码文件),而hpp文件为cpp文件的头文件。本实施例中,对二进制程序进行源码解析包括对CPP文件的解析和对hpp文件的解析。在一个实施例中,如图2所示,步骤SlO的具体过程为步骤S102,执行指令,得到编译中间结果。·步骤S104,对编译中间结果进行扫描,得到cpp文件组成及其引用的hpp文件组成。解析cpp文件时,可通过Linux GNU的make工具加上指定参数生成二进制编译的详情(即编译中间结果),该指令为make-n-B-i-k目标文件程序名。其中,目标程序文件名是指需要进行源码解析的二进制程序的文件名,例如IibA. so、Axx. cgi等;_n表示打印模拟编译过程,但不真正执行编译;-B表示所有的目标都需要更新编译;-i表示在执行时忽略所有的错误;_k表示出错也不停止运行。运行上述指令后,得到编译中间结果,例如形如 “g++-g-I/pathl-I/path2_I· . . /pathN-o χχχχχ. ο 的文本。对上述得到的文本进行扫描,得到完整的cpp文件组成。下面以一个· so的二进制程序为例说明上述扫描过程。通过执行指令make-n-B libtest. so,得到输出文本。通过固定特征的分隔符例如“\r\n”将得到的文本分隔为若干行,每一行则是一个.ο文件(对象文件)的生成过程;依次循环上述得到的所有文本行,通过正则匹配判断是否存在.cpp/.C文件,如果存在,则正则匹配该行,并判断是否有生成.O文件,如果有生成.O文件,则记录.cpp/. C与.O的映射关系,否则循环到下一行;如果正则匹配判断到不存在.cpp/. C文件,则进一步判断是否存在.S0文件,如果存在.SO文件,则正则匹配出当前行.SO文件包含的所有.O文件,并记录.SO与.O的映射关系;通过上述两个映射关系,即可得到.SO与.cpp/. C的映射关系,从而得到.SO文件的完整的cpp文件组成。解析hpp文件时,可通过Linux g++编译器加上指定参数得到cpp/c源码引用的所有· h头文件,具体指令如下g++-MM xxxx. cpp I xxxx. c-Il-12-13。其中,-MM表示指定cpp/c源码引用到的非系统定义的h定义文件;-1指定了编译此源程序引用到的h文件路径。运行上述指令后,得到编译中间结果,例如形如“xxxx. 0:xxxx. cpphppl\hpp2\hpp3\hpp4” 的文本。对上述得到的文本进行扫描,即可得到完整cpp文件所引用到的hpp文件组成。该扫描过程为通过固定特征的分隔符例如“\r\n”将得到的文本分隔为若干行;依次扫描每一行,去掉空行和末尾\n和一些无用的中间过程信息;对每一行,执行如果本行包含有多个.h/. hpp文件,则将多个.h/. hpp文件拆分,分为多行;如果本行包含../相对路径,则恢复该文件的绝对路径;如果本行包含./的相对路径,则恢复该文件的绝对路径;如果本行包含/当前路径,则恢复该文件的绝对路径。扫描所有的文本行后,将所有的.h/. hpp文件排重,则得到cpp文件所引用到的· h/. hpp文件集合。在一个实施例中,每天按照固定频率(例如每隔3小时)去扫描二进制程序的文件组成,每次扫描后得到的CPP文件和hpp文件通过插入指令和删除指令更新到数据库中。例如前一次对二进制程序liba. SO进行扫描得到文件组成为a. cpp、b. cpp和c. cpp,当前扫描得到的文件组成为a. cpp、b. cpp和d. cpp,由于a. cpp和b. cpp在前一次扫描得到的文件组成中已存在,因此不需要对a. cpp和b. cpp进行处理。而d. cpp在前一次扫描得到的文件组成中不存在,因此对d. cpp需执行插入指令(即Insert指令),将d. cpp插入。另由于当前扫描得到的文件组成中不存在c. cpp,因此需要对c. cpp执行删除指令(即Delete指令),将c. cpp删除,并更新数据库。步骤S106,将得到的cpp文件组成、hpp文件组成与二进制程度的对应关系记录到二进制源码解析对应表中。·· 在一个实施例中,二进制源码解析对应表如表I所示表I
权利要求
1.一种软件程序的基线版本管理方法,包括以下步骤 对二进制程序进行源码解析,记录所述二进制程序对应的源码文件; 监控二进制程序的上线单的状态; 根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新。
2.根据权利要求I所述的软件程序的基线版本管理方法,其特征在于,所述源码文件包括cpp文件及所述cpp文件引用的hpp文件;所述对二进制程序进行源码解析,记录二进制程序对应的源码文件的步骤包括 执行指令,得到编译中间结果; 对所述编译中间结果进行扫描,得到cpp文件组成及其引用的hpp文件组成; 将所述得到的cpp文件组成、hpp文件组成与二进制程序的对应关系记录到二进制源码解析对应表中。
3.根据权利要求I所述的软件程序的基线版本管理方法,其特征在于,所述根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新的步骤包括 当所述上线单的状态为全面上线成功时,查找二进制程序对应的源码文件,从版本管理服务器获取所述源码文件的当前版本号,将所述源码文件的当前版本号记录为所述源码文件对应的当前基线版本号。
4.根据权利要求I所述的软件程序的基线版本管理方法,其特征在于,所述对所述源码文件的基线版本号进行更新的步骤包括 当所述上线单的状态为全面回退时,查找二进制程序对应的源码文件,将所述源码文件的当前基线版本号修改为上一版本号。
5.根据权利要求I至4中任意一项所述的软件程序的基线版本管理方法,其特征在于,所述方法还包括创建基线版本数据表,所述基线版本数据表用于记录源码文件与源码文件的当前基线版本号、至少一个历史基线版本号的对应关系。
6.一种软件程序的基线版本管理系统,其特征在于,包括 源码解析模块,用于对二进制程序进行源码解析,记录所述二进制程序对应的源码文件; 监控模块,用于监控二进制程序的上线单的状态; 基线版本管理模块,用于根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新。
7.根据权利要求6所述的软件程序的基线版本管理系统,其特征在于,所述源码文件包括CPP文件及所述cpp文件引用的hpp文件;所述源码解析模块包括 指令执行模块,用于执行指令,得到编译中间结果; 扫描模块,用于对所述编译中间结果进行扫描,得到CPP文件组成及其引用的hpp文件组成; 记录模块,用于将所述得到的CPP文件组成、hpp文件组成与二进制程序的对应关系记录到二进制源码解析对应表中。
8.根据权利要求6所述的软件程序的基线版本管理系统,其特征在于,所述基线版本管理模块用于当所述上线单的状态为全面上线成功时,查找二进制程序对应的源码文件,从版本管理服务器获取所述源码文件的当前版本号,将所述源码文件的当前版本号记录为所述源码文件对应的当前基线版本号。
9.根据权利要求6所述的软件程序的基线版本管理系统,其特征在于,所述基线版本管理模块还用于当所述上线单的状态为全面回退时,查找二进制程序对应的源码文件,将所述源码文件的当前基线版本号修改为上一版本号。
10.根据权利要求6至9中任意一项所述的软件程序的基线版本管理系统,其特征在于,基线版本数据表创建模块,用于创建基线版本数据表,所述基线版本数据表用于记录源码文件与源码文件的当前基线版本号、至少一个历史基线版本号的对应关系。
全文摘要
本发明提供了一种软件程序的基线版本管理方法,包括以下步骤对二进制程序进行源码解析,记录所述二进制程序对应的源码文件;监控二进制程序的上线单的状态;根据所述上线单的状态查找二进制程序对应的源码文件,对所述查找到的源码文件的基线版本号进行更新。采用上述方法能够在软件开发的并行开发模式下获取到准确的代码版本。此外,还提供了一种软件程序的基线版本管理系统。
文档编号G06F17/30GK102915233SQ201110221350
公开日2013年2月6日 申请日期2011年8月3日 优先权日2011年8月3日
发明者母天石 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1