软件的测试方法及装置制造方法
【专利摘要】本发明公开一种软件的测试方法,包括:侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息;根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;根据差异文件对应的静态分析结果,产生bug单。对应地,本发明还公开了一种软件的测试装置。本实施例中通过对源代码进行静态分析获得静态分析结果,同时获取当前版本与上一版本之间的差异文件信息,以过滤获得差异文件对应的静态分析结果,然后再根据静态分析结果自动产生bug单,实现了静态分析的自动化,提高了软件测试效率。
【专利说明】软件的测试方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种软件的测试方法及装置。
【背景技术】
[0002]软件的代码量往往会非常庞大,则在软件测试时对整个工程的源代码全部做一次静态扫描将会非常耗时。同时,一次全量扫描得到的缺陷数也会非常多。因此,如果是在项目即将发布时才统一来做静态分析,并将所有的缺陷一次性提交给开发人员,这样势必降低软件的研发效率和质量。因此亟需一种能提高软件测试效率的静态分析方法。
【发明内容】
[0003]本发明实施例提供一种软件的测试方法及装置,旨在提高软件测试的效率。
[0004]本发明实施例提供了一种软件的测试方法,包括:
[0005]侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息;
[0006]根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;
[0007]根据差异文件对应的静态分析结果,产生漏洞单。
[0008]本发明实施例技术方案还提供了一种软件的测试装置,包括:
[0009]信息获取模块,用于侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息;
[0010]信息匹配模块,用于根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;
[0011]信息处理模块,用于根据差异文件对应的静态分析结果,产生漏洞单。
[0012]本实施例中通过对源代码进行静态分析获得静态分析结果,同时获取当前版本与上一版本之间的差异文件信息,以过滤获得差异文件对应的静态分析结果,然后再根据静态分析结果自动产生漏洞单,实现了静态分析的自动化,提高了软件测试效率。
【专利附图】
【附图说明】
[0013]图1是本发明软件的测试方法第一实施例的流程示意图;
[0014]图2是本发明软件的测试方法中对差异文件的静态分析结果进行处理的流程示意图;
[0015]图3是本发明软件的测试方法第二实施例的流程示意图;
[0016]图4是本发明软件的测试装置第一实施例的功能模块示意图;
[0017]图5是本发明软件的测试装置中信息处理模块的功能模块示意图;
[0018]图6是本发明软件的测试装置第二实施例的功能模块示意图。
[0019]本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
【具体实施方式】
[0020]以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0021]本发明的主要思想是在对源代码差异进行静态分析时,可以先获得当前版本的源代码的静态分析结果,并根据当前版本与上一版本的差异文件信息过滤获得差异文件对应的静态分析结果。然后判断静态分析结果是属于历史缺陷还是新增缺陷,并根据判断结果产生相应的漏洞(bug)单,供代码开发人员查看并解决。因此,本发明实现了静态分析的自动化,提高了软件测试的效率。
[0022]为便于理解,以下先介绍与本发明相关的技术名词:
[0023]静态分析:是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标,从而检查出代码所潜在的缺陷的一种软件测试方法。该静态分析可以调用现有技术常用的静态分析工具进行。
[0024]bug单:用于跟踪软件缺陷的发现时间、负责人、详细描述、是否解决的记录。
[0025]参照图1,提出本发明软件的测试方法第一实施例的流程。该实施例的软件的测试分析方法包括以下步骤:
[0026]步骤S110、侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果;
[0027]步骤S120、获取当前版本软件与上一版本软件的差异文件信息;
[0028]本发明的软件测试方法用于对持续集成(continuous integrat1n,Cl)平台提交的软件安装包自动进行软件测试,分析该软件安装包存在的缺陷,并根据缺陷,生成相应的bug单。该软件测试指令可以由用户触发。例如用户将Cl平台编译生成的软件安装包调取至该软件测试系统,并启动软件测试功能。当然,该软件测试指令也可以由软件测试系统自动触发。例如,一旦Cl平台编译生成软件安装包时,就触发产生软件测试指令。通过与Cl平台进行关联,在Cl平台生成软件安装包时即触发软件测试,从而实现了软件编译及测试的自动化。
[0029]由于Cl平台在对源代码编译成功后将生成软件安装包,每个软件安装包对应一个版本号。版本号一般格式为主版本号.子版本号[.编译版本号[.修正版本号]]。当每个软件安装包的源代码经过修改,并进行编译后,将为软件安装包生成一新的版本号。而根据版本号可以区分不同版本的软件安装包。因此,侦测到软件测试指令时,则调用相应的静态分析工具,对当前版本的软件安装包的所有代码进行静态分析,获得静态分析结果。同时调用相应的差异分析工具,获取当前版本的软件安装包与上一版本的软件安装包之间的差异文件信息。上述静态分析步骤与差异分析步骤可以同时进行,也可以先后顺序进行,且两者的顺序并不限定。
[0030]步骤S130、根据所述当前版本与上一版本的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;
[0031]本实施例中,静态分析结果为一缺陷列表,其包括文件名、行号、缺陷类型、缺陷信息等。在获得静态分析结果及差异文件之后,将差异文件信息中的差异文件名与静态分析结果中的文件名进行匹配,获得差异文件对应的静态分析结果。然后将过滤后获得的差异文件对应的静态分析结果按照文件名、缺陷行号、缺陷类型及缺陷信息进行格式化,以生成缺陷列表。
[0032]步骤S140、根据差异文件对应的静态分析结果,产生相应的bug单。
[0033]过滤出差异文件对应的静态分析结果,则可以判断静态分析结果中的缺陷是历史缺陷还是新增缺陷,然后再根据判断结果,产生相应的bug单。
[0034]本实施例中通过对源代码进行静态分析获得静态分析结果,同时获取当前版本与上一版本之间的差异文件信息,以过滤获得差异文件对应的静态分析结果,然后再根据静态分析结果自动产生bug单,实现了静态分析的自动化,提高了软件测试效率。
[0035]参照图2,上述步骤S140进一步包括:
[0036]步骤S141、判断该静态分析结果中的缺陷是新增缺陷还是历史缺陷;当该静态分析结果中的缺陷是新增缺陷时则转入步骤S142,当该静态分析结果中的缺陷是历史缺陷时则转入步骤S143 ;
[0037]新增缺陷是指新增加的源代码所产生的缺陷,历史缺陷是指上一版本的源代码存在的缺陷,仍然存在于当前版本的源代码中。当该软件安装包是最初的版本,且第一次经过静态分析,则其通过静态分析后产生的缺陷均是新增缺陷。当该软件安装包是经过修改的版本,则判断静态分析结果中的缺陷是否针对源代码的新增、修改行所产生的缺陷。当静态分析结果中的缺陷是对源代码的新增、修改行所产生的缺陷时,则该缺陷是新增缺陷;否则该缺陷是历史缺陷。
[0038]步骤S142、根据该缺陷的信息,产生相应的bug单;
[0039]当判断缺陷是新增缺陷时,则根据该新增缺陷,生成相应的bug单。该产生的bug单将涵盖缺陷的信息,例如差异文件名、行号、缺陷类型及缺陷描述。生成bug单后,可以通过邮件、短信等方式发送至相应的开发人员,以提醒其及时解决。当然,该bug单也可以上传至其bug系统中,一旦开发人员登录该bug系统时,即可自动弹出bug信息,以提醒开发人员及时解决。
[0040]步骤S143、对该缺陷对应的bug单进行更新;
[0041]当判断该缺陷是历史缺陷时,则对静态分析结果对应的bug单进行更新。具体为:根据静态分析结果中缺陷的差异文件名信息,获取对应的bug单,并根据该缺陷的其他信息,对bug单的信息进行相应的更新。例如,某差异文件的一缺陷所对应的行号是18行,而该差异文件对应的bug单描述的缺陷所对应的行号是12行,则将该bug单中的行号更新为18行。
[0042]本发明实施例不但实现了新增缺陷的自动提单,而且还对历史缺陷进行更新处理,以避免产生重复的bug单,既节省人力成本,而且提高了软件代码的开发效率,缩短了软件开发的周期。
[0043]参照图3,提出本发明源代码差异的静态分析方法第二实施例。该实施例的源代码差异的静态分析方法包括以下步骤:
[0044]步骤S110、侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果;
[0045]步骤S120、获取当前版本软件与上一版本软件的差异文件信息;
[0046]步骤S130、根据所述当前版本软件与上一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;
[0047]步骤S150、若静态分析结果中不存在差异文件对应的静态分析结果,则获取该差异文件对应的bug单,并将该bug单的状态设置为关闭;
[0048]步骤S140、根据差异文件对应的静态分析结果,产生bug单。
[0049]上述步骤S130的获得差异文件对应的静态分析结果中,若某差异文件与静态分析结果没有匹配成功,即静态分析结果中的缺陷不存在该差异文件对应的缺陷,则表示该差异文件的缺陷已经被解决。此时若该差异文件对应的bug存在,则将该缺陷对应的bug单关闭,从而可以避免已解决bug重复产生而使开发人员进行重复的工作的问题,进一步节省人力成本,而且提高了软件代码的开发效率,缩短了软件开发的周期。
[0050]上述步骤SllO中静态分析功能可以为集成在软件测试系统中的子功能,也可以设置在软件测试外部的功能模块,而供软件测试系统调用。具体为,上述步骤SllO包括:
[0051]步骤Al、获取当前版本的全部源代码;
[0052]在侦测到静态分析指令时,则根据当前版本获取对应的软件安装包的全部代码。由于每个软件安装包附带的描述文件中具有一个字段,该字段用于描述该安装包对应于代码资料库中的具体版本,因此根据描述信息即可从代码资料库中获取相应的源代码。
[0053]步骤A2、调用静态扫描工具对所述当前版本的全部代码进行扫描,获得静态分析结果。
[0054]上述步骤S120中差异文件信息的获取可以为集成在软件测试系统中的子功能,也可以设置在软件测试外部的功能模块,而供软件测试系统调用。具体为,上述步骤S120包括:
[0055]步骤B1、获取当前版本号及上一版本号;
[0056]获取该软件安装包的版本号,并根据该版本号,获取上一版本号。
[0057]步骤B2、根据当前版本号与上一版本号,获取两者之间的差异文件列表;
[0058]具体地,根据当前版本号与上一版本号,可以调用源代码管理工具提供的比对命令可计算出两者之间的变更文件列表,该源代码管理工具可以是版本管理(Subvers1n,SVN), clearcase等。以SVN为例,其相应执行代码如下:
[0059]svn diff
[0060]old=http://svn.com/test—rep/test—proj/trunk@19435[0061 ] new=http://svn.com/test—rep/test—proj/trunk@19445
[0062]username testuser
[0063]password testpwd
[0064]no-auth-cache
[0065]non-1nteractive
[0066]summarize
[0067]步骤B3、根据差异文件列表,获取相应的差异文件,并分析获得差异文件的差异信肩、O
[0068]上述差异文件列表记录了差异文件及其存储地址,因此根据该存储地址可以获取相应的差异文件,即编译文件对应的源代码文件。然后对该源代码文件进行分析,以获得差异文件的差异信息。例如,当前版本的文件A的源代码与上一版本的文件A的源代码相比,存在新增行、删除行或者修改行,则记录该文件A为差异文件,并对文件A中存在差异的具体代码行进行记录。
[0069]对应上述方法实施例,提出本发明一种软件的测试装置的一实施例的功能模块。参照图4,本发明实施例的软件的测试装置包括:
[0070]信息获取模块110,用于侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息;
[0071]信息匹配模块120,用于根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果;
[0072]信息处理模块130,用于根据差异文件对应的静态分析结果,产生bug单。
[0073]上述信息获取模块110中,侦测到软件测试指令时,则调用相应的静态分析工具,对当前版本的软件安装包的所有代码进行静态分析,获得静态分析结果。同时调用相应的差异分析工具,获取当前版本的软件安装包与上一版本的软件安装包之间的差异文件信息。关于静态分析及差异分析的处理过程可参照前面方法实施例所述,在此就不再赘述。
[0074]本实施例中,静态分析结果为一缺陷列表,其包括文件名、行号、缺陷类型、缺陷信息等。在获得静态分析结果及差异文件之后,信息匹配模块120则将差异文件信息中的差异文件名与静态分析结果中的文件名进行匹配,获得差异文件对应的静态分析结果,然后对该差异文件对应的静态分析结果按照文件名、缺陷行号、缺陷类型及缺陷信息进行格式化,生成缺陷列表。然后信息处理模块130可以判断静态分析结果中的缺陷是历史缺陷还是新增缺陷,然后再根据判断结果,产生相应的bug单。
[0075]本实施例中通过对源代码进行静态分析获得静态分析结果,同时获取当前版本与上一版本之间的差异文件信息,以过滤获得差异文件对应的静态分析结果,然后再根据静态分析结果自动产生bug单,实现了静态分析的自动化,提高了软件测试效率。
[0076]进一步的,参照图5,上述信息处理模块130包括:
[0077]缺陷类型判断单元131,用于判断差异文件对应的静态分析结果中的缺陷是历史缺陷还是新增缺陷;
[0078]历史缺陷处理单元132,用于当差异文件对应的静态分析结果中的缺陷是历史缺陷,则对该缺陷的信息进行更新,然后根据更新后的缺陷信息,产生相应的bug单;
[0079]新增缺陷处理单元133,用于当差异文件对应的静态分析结果中的缺陷是新增缺陷,则根据该缺陷的信息,产生相应的bug单。
[0080]新增缺陷是指新增加的源代码所产生的缺陷,历史缺陷是指上一版本的源代码存在的缺陷,仍然存在于当前版本的源代码中。当该软件安装包是最初的版本,且第一次经过静态分析,则其通过静态分析后产生的缺陷均是新增缺陷。当该软件安装包是经过修改的版本,则判断静态分析结果中的缺陷是否针对源代码的新增、修改行所产生的缺陷。当静态分析结果中的缺陷是对源代码的新增、修改行所产生的缺陷时,则该缺陷是新增缺陷;否则该缺陷是历史缺陷。
[0081]当判断缺陷是新增缺陷时,新增缺陷处理单元133则根据该新增缺陷,生成相应的bug单。该产生的bug单将涵盖缺陷的信息,例如差异文件名、行号、缺陷类型及缺陷描述。生成bug单后,可以通过邮件、短信等方式发送至相应的开发人员,以提醒其及时解决。当然,该bug单也可以上传至其bug系统中,一旦开发人员登录该bug系统时,即可自动弹出bug信息,以提醒开发人员及时解决。
[0082]当判断该缺陷是历史缺陷时,历史缺陷处理单元132则对静态分析结果对应的bug单进行更新。具体为:根据静态分析结果中缺陷的差异文件名信息,获取对应的bug单,并根据该缺陷的其他信息,对bug单的信息进行相应的更新。例如,某差异文件的一缺陷所对应的行号是18行,而该差异文件对应的bug单描述的缺陷所对应的行号是12行,则将该bug单中的行号更新为18行。
[0083]本发明实施例不但实现了新增缺陷的自动提单,而且还对历史缺陷进行更新处理,以避免产生重复的bug单,既节省人力成本,而且提高了软件代码的开发效率,缩短了软件开发的周期。
[0084]进一步的,上述信息处理模块130还包括:
[0085]状态设置单元134,用于若差异文件对应的静态分析结果不存在,则获取差异文件对应的bug单,并将其状态设置为关闭。
[0086]上述信息匹配模块120获得差异文件对应的静态分析结果中,若某差异文件与静态分析结果没有匹配成功,即静态分析结果中的缺陷不存在该差异文件对应的缺陷,则表示该差异文件的缺陷已经被解决。此时若该差异文件对应的bug存在,状态设置单元134将该缺陷对应的bug单关闭,从而可以避免已解决bug重复产生而使开发人员进行重复的工作的问题,进一步节省人力成本,而且提高了软件代码的开发效率,缩短了软件开发的周期。
[0087]进一步的,参照图6,上述软件的测试装置还包括:
[0088]指令触发模块140,用于当Cl平台自动编译源代码后产生软件安装包时,则触发产生软件测试指令。
[0089]上述软件测试指令可以由用户触发或者由软件测试系统自动触发。例如,例如,该软件测试装置中的指令触发模块与Cl平台关联,一旦Cl平台编译生成软件安装包时,则指令触发模块140就触发产生软件测试指令。通过与Cl平台进行关联,在Cl平台生成软件安装包时即触发软件测试,从而实现了软件编译及测试的自动化。
[0090]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0091 ] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0092]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如R0M/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,月艮务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0093]以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的【技术领域】,均同理包括在本发明的专利保护范围内。
【权利要求】
1.一种软件的测试方法,其特征在于,包括: 侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息; 根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果; 根据差异文件对应的静态分析结果,产生漏洞单。
2.根据权利要求1所述的软件的测试方法,其特征在于,所述根据差异文件对应的静态分析结果,产生漏洞单包括: 判断差异文件对应的静态分析结果中的缺陷是历史缺陷还是新增缺陷; 当差异文件对应的静态分析结果中的缺陷是历史缺陷,则对该缺陷对应漏洞单进行更新; 当差异文件对应的静态分析结果中的缺陷是新增缺陷,则根据该缺陷的信息,产生相应的漏洞单。
3.根据权利要求1或2所述的软件的测试方法,其特征在于,还包括: 若差异文件对应的静态分析结果不存在,则获取差异文件对应的漏洞单,并将其状态设置为关闭。
4.根据权利要求1所述的软件的测试方法,其特征在于,还包括: 当持续集成平台自动编译源代码后产生软件安装包时,触发产生软件测试指令。
5.根据权利要求1所述的软件的测试方法,其特征在于,所述根据当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果包括: 将差异文件信息中的差异文件名与静态分析结果中的文件名进行匹配,获得差异文件对应的静态分析结果。
6.根据权利要求1所述的软件的测试方法,其特征在于,所述将差异文件信息中的差异文件名与静态分析结果中的文件名进行匹配,获得差异文件对应的静态分析结果之后还包括: 对所述差异文件对应的静态分析结果按照文件名、缺陷行号、缺陷类型及缺陷信息进行格式化,生成缺陷列表。
7.一种软件的测试装置,其特征在于,包括: 信息获取模块,用于侦测到软件测试指令时,对当前版本软件的源代码进行静态分析,获得静态分析结果,同时获取当前版本软件与上一版本软件的差异文件信息; 信息匹配模块,用于根据所述当前版本软件与前一版本软件的差异文件信息,对所述静态分析结果进行过滤,获得差异文件对应的静态分析结果; 信息处理模块,用于根据差异文件对应的静态分析结果,产生漏洞单。
8.根据权利要求7所述的软件的测试装置,其特征在于,所述信息处理模块包括: 缺陷类型判断单元,用于判断差异文件对应的静态分析结果中的缺陷是历史缺陷还是新增缺陷; 历史缺陷处理单元,用于当差异文件对应的静态分析结果中的缺陷是历史缺陷,则对该缺陷的信息进行更新,然后根据更新后的缺陷信息,产生相应的漏洞单; 新增缺陷处理单元,用于当差异文件对应的静态分析结果中的缺陷是新增缺陷,则根据该缺陷的信息,产生相应的漏洞单。
9.根据权利要求7或8所述的软件的测试装置,其特征在于,所述信息处理模块包括: 状态设置单元,用于若差异文件对应的静态分析结果不存在,则获取差异文件对应的漏洞单,并将其状态设置为关闭。
10.根据权利要求7所述的软件的测试装置,其特征在于,还包括: 指令触发模块,用于当持续集成平台自动编译源代码后产生软件安装包时,则触发产生软件测试指令。
11.根据权利要求7所述的软件的测试装置,其特征在于,所述信息匹配模块用于: 将差异文件信息中的差异文件名与静态分析结果中的文件名进行匹配,获得差异文件对应的静态分析结果。
12.根据权利要求11所述的软件的测试装置,其特征在于,所述信息匹配模块还用于: 对所述差异文件对应的静态分析结果按照文件名、缺陷行号、缺陷类型及缺陷信息进行格式化,生成缺陷列表。
【文档编号】G06F11/36GK104424088SQ201310367642
【公开日】2015年3月18日 申请日期:2013年8月21日 优先权日:2013年8月21日
【发明者】陈祎, 罗俊, 李超 申请人:腾讯科技(深圳)有限公司