专利名称:软件版本的构建方法和系统的制作方法
技术领域:
本发明涉及软件技术领域,更具体的说,是一种软件版本的构建方法和系统。
背景技术:
在软件开发中,对软件进行完整的版本构建很重要,而且这一过程也成为软件 开发过程中每天都必不可少的一个环节。面对每天不断新增的软件代码,要保证每天新 合入的代码不会出错,且运行效率高效,就必须对软件版本进行每日构建,来保证软件 代码在快速更新后的可靠性,提高研发效率。目前较为普遍的软件开发过程是,开发人员在提交代码前必须要进行详细的动 态测试和静态测试后才能提交代码到版本机上,然后再进行每日构建版本。这里的动 态测试是指开发人员编写测试用例,对代码的基本单元的功能、性能及业务逻辑进行测 试;静态测试是指开发人员根据一定的编码规则,对代码的语法、结构、过程、接口进 行测试。在这种方式中,每日构建工作做的只是获取源代码、编译源代码,并生成可用 的软件版本,同时,必须通过人工来完成动态测试和静态测试,从而降低了开发的效率 且增加了测试出错,或者,遗漏或部分遗漏测试的概率。现有的专利文献包括专利申请号为200710166024.4的中国专利申请“一种日 构建方法、装配及系统”和专利号为200910171458.2的中国专利“每日构建方法和装
埋”直 。第200710166024.4号中国专利申请存在以下不足该专利提供了一种传统日构 建的方法和流程,未涉及对单元测试及代码规则检测的处理。第200910171458.2号美国专利存在以下不足在该专利中,每日构建方法和装 置没有涉及单元测试及代码规则检测的方法和装置。
发明内容
本发明的主要目的在于提供一种软件版本的构建方法和系统,以至少解决上述 问题。根据本发明的一个方面,提供了一种软件版本的构建方法,其包括软件版本 构建系统自动对获取的代码进行动态测试,生成动态测试报告;所述软件版本构建系统 对所述代码进行编译,生成程序包;所述软件版本构建系统自动对所述程序包进行静态 测试,生成静态测试报告;所述软件版本构建系统根据程序包构建软件版本,并将所述 动态测试报告和所述静态测试报告发送给用户。进一步地,所述软件版本构建系统自动对获取的代码进行动态测试的步骤包 括所述软件版本构建系统在获取所述代码之后根据预置的测试代码路径和单元测试用 例路径对所述代码进行所述动态测试。进一步地,所述软件版本构建系统自动对所述 程序包进行静态测试的步骤包 括所述软件版本构建系统在生成所述程序包之后根据预置的测试程序包路径以及代码规则对所述程序包进行所述静态测试。进一步地,在软件版本构建 系统自动对获取的代码进行动态测试之前,还包 括所述软件版本构建系统设置版本构建时的初始参数,利用批处理文件清除旧的版本 安装文件和日志文件。进一步地,在所根据程序包构建软件版本时,还包括将所述程序包中的与使 用语言环境相关的资源文件合并成一个文件。进一步地,所述软件版本构建系统对所述代码进行编译时,还包括根据编译 标志位来判断所述编译是否成功;若成功,则执行所述软件版本构建系统自动对所述程 序包进行静态测试的步骤。根据本发明的另一方面,提供了一种软件版本构建系统,其包括版本获取单 元,用于获取待执行版本构建的代码;动态测试单元,用于自动对获取的代码进行动态 测试,生成动态测试报告;编译单元,用于对所述代码进行编译,生成程序包;静态测 试单元,用于所述代码测试单元还用于自动对所述程序包进行静态测试,生成静态测试 报告;版本构建单元,用于根据程序包构建软件版本;传输单元,用于将所述动态测试 报告和所述静态测试报告发送给用户。进一步地,所述动态测试单元包括动态测试模块,用于在获取所述代码之后 根据预置的测试代码路径和单元测试用例路径对所述代码进行所述动态测试。进一步地,所述静态测试单元包括静态测试模块,用于在生成所述程序包之 后根据预置的测试程序包路径以及代码规则对所述程序包进行所述静态测试。进一步地,软件版本构建系统还包括初始化单元,用于在自动对获取的代码 进行动态测试之前设置版本构建时的初始参数,利用批处理文件清除旧的版本安装文件 和日志文件。在本发明中,通过计算机系统自动进行代码的动态测试和静态测试从而大大节 省开发人员的开发时间,缩短软件开发周期,提高研发效率,并且保证了测试的正确性 和完整性。
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本 发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图 中图1是根据本发明实施例的软件版本的构建方法的一种优选的流程图;图2是根据本发明实施例的软件版本的构建方法的另一种优选的流程图;图3是根据本发明实施例的软件版本的构建系统的一种优选的结构示意图;图4是根据本发明实施例的软件版本的构建系统的另一种优选的结构示意图;图5是根据本发明实施例的代码获取的一种优选的流程图;图6是根据本发明实施例的代码编译的一种优选的流程图。
具体实施例方式实施例1
图1是根据本发明实施例的软件版本的构建方法的一种优选的流程图,其包括 如下步骤S102,软件版本构建系统自动对获取的代码进行动态测试,生成动态测试报
生 P=I ;S104,所述软件版本构建系统对所述代码进行编译,生成程序包;S106,所述软件版本构建系统自动对所述程序包进行静态测试,生成静态测试 报告;S108,所述软件版本构建系统根据程序包构建软件版本,并将所述动态测试报 告和所述静态测试报告发送给用户。与现有技术相比较,本优选的实施例在版本构建过程中引入了代码测试,对代 码进行动态和静态测试,一方面保证了代码的可测试性,使整个测试过程可视可控,减 少了缺陷泄漏的几率,大大提高了程序的可靠性,保证了研发质量;另一方面对所有代 码进行集中地自动测试,代替了手工操作,大大缩短了产品的开发周期,提升了研发效率。优选的,所述软件版本构建系统自动对获取的代码进行动态测试的步骤包括 所述软件版本构建系统在获取所述代码之后根据预置的测试代码路径和单元测试用例路 径对所述代码进行所述动态测试。在本优选的实施例中,通过系统自动执行动态测试, 缩短了产品的开发周期,提升了研发效率。优选的,所述软件版本构建系统自动对所述程序包进行静态测试的步骤包括 所述软件版本构建系统在生成所述程序包之后根据预置的测试程序包路径以及代码规则 对所述程序包进行所述静态测试。在本优选的实施例中,通过系统自动执行静态测试, 缩短了产品的开发周期,提升了研发效率。优选的,在软件版本构建系统自动对获取的代码进行动态测试之前,还包括 所述软件版本构建系统设置版本构建时的初始参数,利用批处理文件清除旧的版本安装 文件和日志文件。在本优选的实施例中,通过清除旧的版本安装文件和日志文件,可以 有效地避免系统资源的占用,并保证新建软件版本的正常运行。优选的,在所根据程序包构建软件版本时,还包括将所述程序包中的与使用 语言环境相关的资源文件合并成一个文件。在本优选的实施例中,通过一个文件的形式 来构建软件版本,提高了构建效率。优选的,所述软件版本构建系统对所述代码进行编译时,还包括根据编译标 志位来判断所述编译是否成功;若成功,则执行所述软件版本构建系统自动对所述程序 包进行静态测试的步骤。在本优选的实施例中,通过标志位的设置,有效地控制了静态 测试的过程。实施例2图2是根据本发明实施例的软件版本的构建方法的另一种优选的流程图,其包 括如下步骤步骤S201、环境清理及参数设置。优选的,设置版本 构建时的一些初始参数, 进行计算机环境的清理,利用批处理文件将以前产生的版本安装文件和各种日志文件清 除掉。
每日构建工作每天都会进行,在开始正式工作之前,需要将装配计算机上的环 境清理干净,将操作系统上安装的不需要的软件进程关闭,删除之前的设置参数以及标 志位,删除临时文件等避免构建过程中止,使环境能够连续运行。环境清理完毕,根据 参数文件中配置的新参数,创建版本构建时需要使用到的目录。需要设置的参数包括 构建版本依赖的资源、目标版本存放目录、文件存放的临时目录、日志目录、编译目录寸。步骤S202、获取 源代码及支撑的程序包;优选的,从版本机或服务器上获取最 新版本的源代码和相关程序包。目前的软件开发代码不仅仅是项目内的软件开发人员编写,还会使用到一些公 用软件平台提供的版本或程序包或第三方的程序包,所以获取源不仅来源于项目内的版 本机,还需要提供所需要的其它程序包。如图5所示,该步骤会用到两个标志位获取平台版本标志位和代码拷贝标志 位,初始值均设为SUCCESS。当构建服务器从软件系统平台服务器获取程序包(S501) 时,系统会对拷贝是否成功进行判断(S502),若程序包拷贝不成功,则修改获取平台 版本标志位为ERROR(S505),进入步骤S203 ;否则,从版本机代码库中获取最新代码 (S503),下载到本地;判断下载是否成功(S504),若下载成功,则可同时进入步骤S204 和步骤S206,否则修改代码拷贝标志位为ERROR(S506),进入步骤S203。步骤S203、生成代码获取报告。本步骤中,通过判断获取平台版本标志位和代码拷贝标志位,生成代码获取报 告。若获取平台版本标志位和代码拷贝标志位两者均为SUCCESS时,代码获取成功,输 出代码获取成功报告;若获取平台版本标志位和代码拷贝标志位两者之一为ERROR时, 代码获取失败,输出代码获取失败报告。步骤S204、对代码进行动态测试。优选的,根据预置的测试代码路径和单元测 试用例路径,对代码进行单元测试。本发明实例中,调用ant程序执行脚本文件中的动态测试内容首先调用Junit编译器将源代码编译成Class文件,才能开始测试。下面的内容 展示脚本文件中调用JUnit进行编译的示例。〈target name = 〃 jUnitCompile" ><javac debug = " on" deprecation = " true" verbose = " false" srcdir =" 源代码目录〃 destdir = " Class 文件目录〃 nowarn = 〃 yes" ><classpath>〈pathrefid = 〃测试需要的程序包路径〃 /></classpath>〈include name =‘‘需要进行动态测试的java文件‘‘/></javac></target>然后再利用JUnit进行测试,测试完成按照指定的路径生成动态测试日志,日志 格式为xml文件格式。下面的内容展示脚本文件中动态测试的编写示例。〈target name = 〃 mnJUnit" depends = " jUnitCompile" >
<junit printsummary = " no " haltonfailure = " no “ haltonerror ="no" showoutput =" no" ><classpath>〈pathrefid = 〃测试 需要的程序包路径〃 /></classpath>〈batchtest todir =“动态测试日志生成路径“>〈formatter type = ‘‘ xml ‘‘ /><fileset dir =“需要动态测试的类目录〃 >〈include name =“需要测试的 Class 文件〃 />〈exclude name =“不需要测试的 Class 文件〃 /></fileset></batchtest></junit></target>动态测试完毕,进入步骤S205。步骤S205、生成动态测试报告;本步骤中,根据动态测试的日志,生成指定格式的测试报告,报告格式可以是 html、txt或其他格式。测试报告内容包括测试包名、测试类名、测试运行个数、缺陷 数、成功率、测试状态、测试花费时间、具体的缺陷明细等内容。步骤S206、编译版本;优选的,对最新版本代码进行编译打包,生成程序包。本步骤中,根据设置好的编译环境及相关参数,编译工具开始编译代码,生成 可运行的程序包,其过程如图6所示。调用编译配置文件,加载需要构建版本的功能点 信息进行编译(S601)。本步骤中会用一个编译标志位表示编译过程是否成功,初始值设 为SUCCESS。然后,判断是否编译成功(S602),若编译成功,则可同时进入步骤S208 和S210,否则修改编译标志位为ERROR (S603),进入步骤S207。步骤S207、生成编译报告。本步骤中,通过判断编译标志位,生成编译报告。若编译标志位为SUCCESS 时,编译成功,输出编译成功报告;若编译标志位为ERROR时,编译失败,输出编译失 败报告。步骤S208、对生成的程序包进行静态测试。优选的,根据预置的测试程序包路 径,按照预先设置好的代码规则,对程序包进行静态测试。本发明实例中,通过调用代码检测工具进行代码静态测试。本实例以findbugs 代码静态分析工具为例进行说明。Findbugs是一个静态分析工具,它检查类或者JAR文 件,将字节码与一组缺陷模式进行对比以发现可能的问题。本步骤中,findbugs工具根据配置文件config.txt中定制的测试路径或测试文件,
开始代码测试,将java的字节码(*.daSS文件)与事先定制好的规则库中的规则进行对 比,查找代码缺陷,对比结果生成静态测试报告,进入步骤S209。步骤S209、生成静态测试报告。本步骤中,根据配置文件中制定的输出格式,生成静态测试报告。报告格式可以是html、txt或其他格式。测试报告内容包括测试包路径及名称、测试代码行数、测试 包个数、测试类总数、缺陷密度、本次测试的缺陷内容、具体的缺陷明细(缺陷明细可 定位到代码行)等内容。步骤S210、预处理版本。本发明实例中,由于编译输出的多个国际化资源文件存放在不同的路径下,为 了减少在软件系统启动时遍历所有资源文件的时间和系统资源,提高软件系统的加载速 度,将系统中所有的国际化资源文件按照一定的格式合并成一个资源文件,以提高软件 系统的服务性能。本步骤中,会用一个预处理标志位表示预处理过程是否成功,初始值设为 SUCCESS。通过调用预处理工具检查是否存在KEY值重复的资源文件,如果存在,则 将预处理标志位置为ERROR,进入下一步骤S211;否则将所有国际化资源文件合并为 一个properties格式的文件,进入下一步骤S212。步骤S211、生成预处理报告。本步骤中,通过判断预处理标志位,生成预处理报告。若预处理标志位为 SUCCESS时,预处理成功,输出预处理成功报告;若预处理标志位为ERROR时,预处 理失败,输出预处理失败报告。步骤S212、装配版本。本步骤中,通过预装置的规则拷贝合成装配版本,形成一个可安装的版本软 件。需要装配的内容包括安装批处理及jar包、应用程序编译输出程序包及文件、平台相 关的jar包及文件等。本步骤中会用一个装配标志位表示装配过程是否成功,初始值设为 SUCCESS。如果装配失败,则将装配标志位置为ERROR。进入下一步骤S213。步骤S213、生成装配报告。本步骤中,通过判断装配标志位,生成装配报告。若装配标志位为SUCCESS 时,装配成功,输出装配成功报告;若装配标志位为ERROR时,装配失败,输出装配失 败报告。步骤S214、发送邮件通知。本步骤中,通过查询步骤S203、S205、S207、S209、S211、S213中的各标志 位,根据不同标志位的标识,获取相应的报告,发送给相关人员。实施例3图3是根据本发明实施例的软件版本的构建系统的一种优选的结构示意图,其 包括版本获取单元302,用于获取待执行版本构建的代码;动态测试单元304,用于自 动对获取的代码进行动态测试,生成动态测试报告;编译单元306,用于对所述代码进 行编译,生成程序包;静态测试单元308,用于所述代码测试单元还用于自动对所述程 序包进行静态测试,生成静态测试报告;版本构建单元310,用于根据程序包构建软件 版本;传输单元312,用于将所述动态测试报告和所述静态测试报告发送给用户。与现有技术相比较,本优选的实施例在版本构建过程中引入了代码测试,对代 码进行动态和静态测试,一方面保证了代码的可测试性,使整个测试过程可视可控,减 少了缺陷泄漏的几率,大大提高了程序的可 靠性,保证了研发质量;另一方面对所有代 码进行集中地自动测试,代替了手工操作,大大缩短了产品的开发周期,提升了研发效率。优选的,所述动态测试单元304包括动态测试模块,用于在获取所述代码之 后根据预置的测试代码路径和单元测试用例路径对所述代码进行所述动态测试。在本 优选的实施 例中,通过系统自动执行动态测试,缩短了产品的开发周期,提升了研发效率。优选的,所述静态测试单元308包括静态测试模块,用于在生成所述程序包 之后根据预置的测试程序包路径以及代码规则对所述程序包进行所述静态测试。在本 优选的实施例中,通过系统自动执行静态测试,缩短了产品的开发周期,提升了研发效率。优选的,根据本发明实施例的软件版本的构建系统还包括初始化单元314, 用于在自动对获取的代码进行动态测试之前设置版本构建时的初始参数,利用批处理文 件清除旧的版本安装文件和日志文件。在本优选的实施例中,通过清除旧的版本安装文 件和日志文件,可以有效地避免系统资源的占用,并保证新建软件版本的正常运行。优选的,在所根据程序包构建软件版本时,版本构建单元310将所述程序包中 的与使用语言环境相关的资源文件合并成一个文件。在本优选的实施例中,通过一个文 件的形式来构建软件版本,提高了构建效率。优选的,所述软件版本构建系统对所述代码进行编译时,编译单元306根据编 译标志位来判断所述编译是否成功;若成功,则通知静态测试单元308执行所述软件版 本构建系统自动对所述程序包进行静态测试的步骤。在本优选的实施例中,通过标志位 的设置,有效地控制了静态测试的过程。实施例4图4是根据本发明实施例的软件版本的构建系统的另一种优选的结构示意图, 其包括1)初始化模块401 用于对计算机环境进行清理、编译环境的参数设置以及编 译过程中使用目录的建立;2)版本获取模块402:用于负责从版本机上下载源代码,及相关支撑软件的程 序包;3)代码测试模块403:用于负责对代码的测试,包括动态测试、静态测试;动 态测试中将开发人员提供的测试用例集成到构建版本中,可以随时开展对代码的单元测 试;静态测试中利用代码检查工具,并设置好特定的代码检查规则,就可以随时开展对 代码的检查。4)编译模块404:用于负责对源代码进行编译打包,生成计算机操作系统上可 运行的程序包;5)预处理模块405:用于负责对多个国际化资源文件进行整合和转换,生成一 个资源文件,保证版本运行后有高效的性能;6)装配模块406:用于负责整个版本的组装,按照指定的规则,将程序包组装 成可用的程序版本;7)日志模块407:用于负责对整个版本构建过程中各步骤的运行情况进行跟踪 记录,并生成相应的日志文件。针对各步骤的运行情况,生成不同的报告;
8)邮件发送模块408:用于提取日志模块中产生的构建报告,并发送至相关人 员邮箱。与现有技术相比较,本优选的实施例在版本构建过程中引入了代码测试,对代 码进行动态和静态测试,一方面保证了代码的可测试性,使整个测试过程可视可控,减 少了缺陷泄漏的几率,大大提高了程序的可靠性,保证了研发质量;另一方面对所有代 码进行集中地自动测试,代替了手工操作,大大缩短了产品的开发周期,提升了研发效率。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通 用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所 组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将 它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺 序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中 的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的 硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的 技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的 任何修改、等同替换、改进等,均 应包含在本发明的保护范围之内。
权利要求
1.一种软件版本的构建方法,其特征在于,包括软件版本构建系统自动对获取的代码进行动态测试,生成动态测试报告; 所述软件版本构建系统对所述代码进行编译,生成程序包; 所述软件版本构建系统自动对所述程序包进行静态测试,生成静态测试报告; 所述软件版本构建系统根据程序包构建软件版本,并将所述动态测试报告和所述静 态测试报告发送给用户。
2.根据权利要求1所述的方法,其特征在于,所述软件版本构建系统自动对获取的代 码进行动态测试的步骤包括所述软件版本构建系统在获取所述代码之后根据预置的测试代码路径和单元测试用 例路径对所述代码进行所述动态测试。
3.根据权利要求1所述的方法,其特征在于,所述软件版本构建系统自动对所述程序 包进行静态测试的步骤包括所述软件版本构建系统在生成所述程序包之后根据预置的测试程序包路径以及代码 规则对所述程序包进行所述静态测试。
4.根据权利要求1所述的方法,其特征在于,在软件版本构建系统自动对获取的代码 进行动态测试之前,还包括所述软件版本构建系统设置版本构建时的初始参数,利用批处理文件清除旧的版本 安装文件和日志文件。
5.根据权利要求1所述的方法,其特征在于,在所根据程序包构建软件版本时,还包 括将所述程序包中的与使用语言环境相关的资源文件合并成一个文件。
6.根据权利要求1所述的方法,其特征在于,所述软件版本构建系统对所述代码进行 编译时,还包括根据编译标志位来判断所述编译是否成功;若成功,则执行所述软件版本构建系统自动对所述程序包进行静态测试的步骤。
7.—种软件版本构建系统,其特征在于,包括 版本获取单元,用于获取待执行版本构建的代码;动态测试单元,用于自动对获取的代码进行动态测试,生成动态测试报告; 编译单元,用于对所述代码进行编译,生成程序包;静态测试单元,用于所述代码测试单元还用于自动对所述程序包进行静态测试,生 成静态测试报告;版本构建单元,用于根据程序包构建软件版本;传输单元,用于将所述动态测试报告和所述静态测试报告发送给用户。
8.根据权利要求7所述的系统,其特征在于,所述动态测试单元包括动态测试模块,用于在获取所述代码之后根据预置的测试代码路径和单元测试用例 路径对所述代码进行所述动态测试。
9.根据权利要求7所述的系统,其特征在于,所述静态测试单元包括静态测试模块,用于在生成所述程序包之后根据预置的测试程序包路径以及代码规 则对所述程序包进行所述静态测试。
10.根据权利要求7所述的系统,其特征在于,还包括初始化单元,用于在自动对获取的 代码进行动态测试之前设置版本构建时的初始参 数,利用批处理文件清除旧的版本安装文件和日志文件。
全文摘要
本发明公开了一种软件版本的构建方法和系统,其中,该方法包括软件版本构建系统自动对获取的代码进行动态测试,生成动态测试报告;所述软件版本构建系统对所述代码进行编译,生成程序包;所述软件版本构建系统自动对所述程序包进行静态测试,生成静态测试报告;所述软件版本构建系统根据程序包构建软件版本,并将所述动态测试报告和所述静态测试报告发送给用户。本发明大大节省开发人员的开发时间,缩短软件开发周期,提高研发效率,并且保证了测试的正确性和完整性。
文档编号G06F11/36GK102012814SQ20101055927
公开日2011年4月13日 申请日期2010年11月24日 优先权日2010年11月24日
发明者韦贤玮, 黄华 申请人:中兴通讯股份有限公司