一种代码覆盖测试方法、装置和系统的制作方法
【专利摘要】本发明实施例公开了一种代码覆盖测试方法、装置和系统;本发明实施例可以获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;该方案不仅可以大大简化了操作流程,而且还可以大大节省人力物力,提高测试效率。
【专利说明】一种代码覆盖测试方法、装置和系统
【技术领域】
[0001]本发明涉及通信【技术领域】,具体涉及一种代码覆盖测试方法、装置和系统。
【背景技术】
[0002]代码覆盖测试,指的是用测试的方法来运行代码,并统计在测试中,监控运行到了(即被覆盖)的代码的测试方法。其目的是为了确保测试能覆盖尽量多的代码,以提高测试的可靠性。一般的,本地测试执行代码的时候,会生成一个代码覆盖记录文件,称为测试日志;此后,分析工具可以导入一个或者多个测试日志,然后展示出该项目的代码中,哪些代码被测试覆盖到了,哪些没有被覆盖到,并计算出统计数据,得到统计报表,在本发明实施例中,将该统计报表称为测试结果。
[0003]在现有技术中,当有众多的测试机测试同一个项目的时候,需要手工收集多个测试日志以进行代码覆盖测试,并且,在得到测试结果之后,还需要将该测试结果手工提供给开发人员进行解读,并对代码进行修改,然后测试人员再对修改后的代码再次进行全面的代码覆盖测试,重复上述操作流程,直至项目完成。
[0004]在对现有技术的研究和实践过程中,本发明的发明人发现,由于现有技术中的代码覆盖方法都需要手工进行操作,所以操作流程较为复杂,而且,由于每一次代码修改都需重新对全部代码进行代码覆盖测试,而大部分项目都具有长期迭代开发、长期升级的过程,因此,需要花费较多的人力物力,测试效率也较低。
【发明内容】
[0005]本发明实施例提供一种代码覆盖测试方法、装置和系统,不仅操作流程简单,而且可以节省人力物力,提高代码覆盖测试的效率。
[0006]一种代码覆盖测试方法,包括:
[0007]获取测试信息和测试日志;
[0008]根据所述测试信息获取上一次测试代码和本次测试代码;
[0009]根据所述上一次测试代码和本次测试代码,计算代码差分;
[0010]根据所述测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息;
[0011]根据所述代码差分和覆盖结果信息得到本次代码覆盖测试结果。
[0012]一种代码覆盖测试装置,包括:
[0013]信息获取单元,用于获取测试信息和测试日志;
[0014]代码获取单元,用于根据所述测试信息获取上一次测试代码和本次测试代码;
[0015]差分运算单元,用于根据所述上一次测试代码和本次测试代码,计算代码差分;
[0016]覆盖运算单元,用于根据所述测试日志计算测试已经覆盖部分的代码,得到覆盖结果息;
[0017]测试单元,用于根据所述代码差分和覆盖结果信息得到本次代码覆盖测试结果。
[0018]一种代码覆盖测试系统,包括本发明实施提供的任一种代码覆盖测试装置。
[0019]本发明实施例采用获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试日志和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
【专利附图】
【附图说明】
[0020]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021]图1是本发明实施例提供代码覆盖测试方法的流程图;
[0022]图2a是本发明实施例提供代码覆盖测试系统的结构示意图;
[0023]图2b是本发明实施例提供代码覆盖测试方法的流程图;
[0024]图3是本发明实施例提供代码覆盖测试装置的结构示意图;
[0025]图4是本发明实施例提供的服务器的结构示意图。
【具体实施方式】
[0026]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027]本发明实施例提供一种代码覆盖测试方法、装置和系统。以下分别进行详细说明。
[0028]实施例一、
[0029]本发明实施例将从代码覆盖测试装置的角度进行描述,该代码覆盖测试装置具体可以集成在服务器中。
[0030]一种代码覆盖测试方法,包括:获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果。
[0031]如图1所示,具体流程可以如下:
[0032]101、获取测试信息和测试日志。
[0033]其中,测试日志指的是本地测试执行代码的时候,所生成的一个代码覆盖记录文件。而测试信息则指的是测试的一些相关信息,比如,该测试信息中至少可以包括代码版本号,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码的存储路径等信息。
[0034]该测试信息和测试日志可以保存在可供保存和下载的服务器中,比如,该服务器具体可以为代码测试网络(WEB)服务器,即步骤101具体可以如下:
[0035]从代码测试网络服务器上下载测试信息和测试日志。
[0036]102、根据该测试信息获取上一次测试代码和本次测试代码。
[0037]例如,具体可以根据该上一次测试的代码版本号获取上一次测试代码;以及根据该本次测试的代码版本号获取本次测试代码。
[0038]其中,本次测试代码具体可以保存在源代码服务器中,该源代码服务器具体可以为任何具有代码版本管理功能的服务器,比如SVN服务器或CVS服务器等,S卩,步骤“根据该上一次测试的代码版本号获取上一次测试代码”具体可以为:
[0039]根据所述上一次测试的代码版本号从源代码服务器,如SVN服务器或CVS服务器获取上一次测试代码。
[0040]同理,步骤“根据该本次测试的代码版本号获取本次测试代码”具体可以为:
[0041]根据该本次测试的代码版本号从源代码服务器,如SVN服务器或CVS服务器获取本次测试代码。
[0042]103、根据该上一次测试代码和本次测试代码,计算代码差分;
[0043]其中,代码差分指的是当前测试代码和上一次的测试代码相比,不同的地方(SP修改了的代码),即,步骤“根据该上一次测试代码和本次测试代码,计算代码差分(即步骤103)”具体可以如下:
[0044]将上一次测试代码和本次测试代码进行比较,得到代码差分。
[0045]需说明的是,如果上一次的测试代码为空(比如本次测试的代码为第一版,并不存在上一次的测试代码等情况),则该代码差分为当前测试代码,在此不再赘述。
[0046]104、根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息。
[0047]其中,具体的计算方法可以有多种,比如可采用可以自动生成代码覆盖结果的编译器,或者,也可以使用第三方工具对代码进行处理,等等,具体可参见现有技术,在此不再赘述。
[0048]105、根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;例如,具体可以如下:
[0049]根据该代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码分别进行标注,得到本次代码覆盖测试的测试结果。
[0050]其中,标注的方式可以有多种,比如,可以将采用不同的颜色进行标注,以便开发人员清楚地看到代码的覆盖情况,例如,可以用绿色标注来表示修改过且覆盖到的代码。用蓝色来标注覆盖到但是没有被修改过的部分,而红色,则表示被修改但没有被覆盖的部分,从而使得开发人员可以轻易地分辨出代码的修改和测试情况。
[0051]由上可知,本实施例采用获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试结果和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
[0052]实施例二、
[0053]根据实施例一所描述的方法,以下将举例作进一步详细说明。
[0054]如图2a所示,该代码覆盖测试系统可以包括测试客户端、代码测试WEB服务器和代码测试后台程序设备,此外,该代码覆盖测试系统还可以包括源代码服务器和开发工作机,具体可以如下:
[0055](I)测试客户端;
[0056]该测试客户端主要用于运行客户端软件,以对客户端软件进行测试,得到测试信息和测试日志,将测试信息和测试日志提交到代码测试WEB服务器上,其中,该测试信息可以包括代码版本号等信息。
[0057](2 )代码测试WEB服务器;
[0058]该代码测试WEB服务器主要用于接受开发人员提交的测试请求,以及接受测试机提交的测试信息和测试日志,并接收代码测试后台程序设备所提供的测试结果,以可供开发人员阅读,其中,该测试结果的格式可以有多种,比如,可以是HTML格式,也可以是报表格式,等等。
[0059]需说明的是,在本实施例中,主要以代码测试WEB服务器来完成上述功能为例进行说明,应当理解的是,也可以由其他的设备来完成上述功能,比如,可以实现数据的保存和下载的服务器,等等。
[0060](3)代码测试后台程序设备;
[0061]该代码测试后台程序设备可以作为独立的实体存在,也可以集成在其他设备中,比如集成在代码测试WEB服务器上。出于安全性的考虑,在本实施例中,主要以该代码测试后台程序设备位于开发网中为例进行说明,因为只有开发网内才有访问SVN服务器的权限。
[0062]该代码测试后台程序设备主要用于从代码测试WEB服务器获取上一次测试的测试信息和测试日志,并访问SVN服务器以取得本次测试代码(即当前被测代码)和上一次测试代码,求得本次测试代码和上一次测试代码之间的代码差分,以及根据测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,然后根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果,比如得到可供开发人员阅读的报表结果或统计数据等等,将该代码覆盖测试结果可以以WEB的形式传递到代码测试WEB服务器上。
[0063]需说明的是,如果是第一次测试,则上一次测试代码不存在,因此,此时的代码差分就是本次测试代码本身。
[0064](4)源代码服务器;
[0065]该源代码服务器主要用于保存和管理各个不同版本的代码,该源代码服务器具体可以为任何具有代码版本管理功能的服务器,比如SVN服务器或CVS服务器等。
[0066](5)开发工作机;
[0067]开发工作机是指开发人员在工作时使用的机器,主要用于在开发人员完成开发工作之后,提交测试请求给代码测试WEB服务器,以便测试人员根据该测试请求对代码进行测试。其中,提交测试请求的方式可以有多种,比如开发人员可以通过预置的人机操作接口进行提交,等等,在此不再赘述。
[0068]需说明的是,在测试进行的过程之中,开发人员还可以随时使用开发工作机访问代码测试WEB服务器,以查看目前测试所覆盖的代码的情况,在此不再赘述。。
[0069]基于上述代码覆盖测试系统,以下将对该代码覆盖测试系统的执行流程进行详细说明。
[0070]如图2所示,一种代码覆盖测试方法,具体流程可以如下:
[0071]201、开发工作机发送测试请求给代码测试WEB服务器。
[0072]其中,该测试请求可以包括如下信息:
[0073](I)本次测试代码在源代码服务器中的保存路径和代码版本号。
[0074](2)上一次测试代码在源代码服务器中的保存路径和代码版本号。
[0075]( 3)测试方法的说明。
[0076](4)可供使用的测试用例。
[0077]当然,根据实际应用的需求,该测试请求中还可以包括其他信息,在此不再列举。
[0078]202、代码测试WEB服务器接收到该测试请求后,可以根据该测试请求生成提测号码,以作为该测试请求的测试信息的索引。
[0079]当然,也可以采用其他方法来索引该测试请求,或者,也可以直接获取该测试请求,在此不再赘述。
[0080]203、测试客户端获取提测号码,根据提测号码从源代码服务器中获取需要测试的代码,并根据提测号码对该需要测试的代码进行测试,得到测试信息和测试日志,将该测试信息和测试日志提交给代码测试WEB服务器。例如,具体可以如下:
[0081]测试客户端接收到测试人员输入的提测号码后,根据提测号码确定本次测试代码在源代码服务器中的保存路径和代码版本号、以及确定测试方法和可供使用的测试用例,根据本次测试代码在源代码服务器中的保存路径和代码版本号从源代码服务器中获取需要测试的代码,并利用确定的测试方法和可供使用的测试用例对该获取到的代码进行测试,得到测试信息和测试日志,将该测试信息和测试日志提交给代码测试WEB服务器。
[0082]其中,该测试信息可以包括代码版本号等信息,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码的存储路径等信肩、O
[0083]204、代码测试后台程序设备从代码测试WEB服务器获取测试信息和测试日志。
[0084]其中,该测试信息可以包括代码版本号等信息,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码(包括上一次测试代码和本次测试代码)在源代码服务器(比如代码版本管理服务器:SVN服务器或CVS服务器等)上的存储路径等信息。
[0085]205、代码测试后台程序设备根据该上一次测试的代码版本号从源代码服务器,t匕如SVN服务器或CVS服务器获取上一次测试代码;以及根据本次测试的代码版本号从源代码服务器,比如SVN服务器或CVS服务器获取本次测试代码。
[0086]206、代码测试后台程序设备将上一次测试代码和本次测试代码进行比较,得到代码差分。
[0087]其中,代码差分指的是当前测试代码和上一次的测试代码相比,不同的地方,即修改了的代码。需说明的是,如果上一次的测试代码为空,则该代码差分为当前测试代码,在此不再赘述。
[0088]207、代码测试后台程序设备根据获取到的测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息。
[0089]208、代码测试后台程序设备根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果,比如得到可供开发人员阅读的报表结果或统计数据等等,并将该测试结果以WEB的形式传递到代码测试WEB服务器上,以供开发人员随时访问阅读。
[0090]例如,具体可以根据该代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对该被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码分别进行标注,得到代码覆盖测试的测试结果。
[0091]其中,标注的方式可以有多种,比如,可以将采用不同的颜色进行标注,以便开发人员清楚地看到代码的覆盖情况,例如,可以用绿色标注来表示修改过且覆盖到的代码。用蓝色来标注覆盖到但是没有被修改过的部分,而红色,则表示被修改但没有被覆盖的部分,从而使得开发人员可以轻易地分辨出代码的修改和测试情况。
[0092]此后,开发人员还可以对该测试结果进行分析,比如找出测试未能覆盖的原因等等,从而可以为测试人员提供建议,或者对测试方法和/或测试用例进行修改或更新,或添加新的测试方法和/或测试用例,等等,然后,测试人员根据开发人员的建议继续测试,这是一个循环的过程。直到测试通过为止。
[0093]由上可知,本实施例采用获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试结果和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
[0094]实施例三、
[0095]为了更好地实施以上方法,本发明实施例还提供一种代码覆盖测试装置,如图3所示,该代码覆盖测试装置包括信息获取单元301、代码获取单元302、差分运算单元303、覆盖运算单元304和测试单元305。
[0096]信息获取单元301,用于获取测试信息和测试日志;
[0097]其中,测试日志指的是本地测试执行代码的时候,所生成的一个代码覆盖记录文件。而测试信息则指的是测试的一些相关信息,比如,该测试信息中至少可以包括代码版本号,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码的存储路径等信息。
[0098]该测试信息和测试日志可以保存在可供保存和下载的服务器中,比如,该服务器具体可以为代码测试网络(WEB)服务器,即:
[0099]信息获取单元301,具体可以用于从代码测试网络服务器上下载测试信息和测试日志。
[0100]代码获取单元302,用于根据该测试信息获取上一次测试代码和本次测试代码;
[0101]差分运算单元303,用于根据该上一次测试代码和本次测试代码,计算代码差分;例如,具体可以具体将上一次测试代码和本次测试代码进行比较,得到代码差分。
[0102]其中,代码差分指的是当前测试代码和上一次的测试代码相比,不同的地方(即修改了的代码)。需说明的是,如果上一次的测试代码为空,则该代码差分为当前测试代码,在此不再赘述。
[0103]覆盖运算单元304,用于根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果息;
[0104]测试单元305,用于根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果。例如,具体可以如下:
[0105]测试单元305,具体可以用于根据该代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码进行统计和标注,得到本次代码覆盖测试结果。
[0106]其中,标注的方式可以有多种,比如,可以将采用不同的颜色进行标注,以便开发人员清楚地看到代码的覆盖情况,例如,可以用绿色标注来表示修改过且覆盖到的代码。用蓝色来标注覆盖到但是没有被修改过的部分,而红色,则表示被修改但没有被覆盖的部分,从而使得开发人员可以轻易地分辨出代码的修改和测试情况。
[0107]其中,若测试信息中包括了上一次测试的代码版本号和本次测试的代码版本号,则:
[0108]代码获取单元302,具体可以用于根据该上一次测试的代码版本号获取上一次测试代码,以及根据该本次测试的代码版本号获取本次测试代码。
[0109]其中,当前测试代码具体可以保存在源代码服务器中,该源代码服务器具体可以为任何具有代码版本管理功能的服务器,比如SVN服务器或CVS服务器等,即:
[0110]代码获取单元302,具体用于根据所述上一次测试的代码版本号从源代码服务器,如SVN服务器或CVS服务器获取上一次测试代码,以及根据该本次测试的代码版本号从源代码服务器,如SVN服务器或CVS服务器获取本次测试代码。
[0111]此后,开发人员还可以对该测试结果进行分析,比如找出测试未能覆盖的原因等等,从而可以为测试人员提供建议,或者对测试方法和/或测试用例进行修改或更新,或添加新的测试方法和/或测试用例,等等,然后,测试人员根据开发人员的建议继续测试,这是一个循环的过程。直到测试通过为止。
[0112]具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,例如,该代码覆盖测试装置所包括的这些单元具体可以由实施例二中的代码测试后台程序设备和代码测试WEB服务器来实现,等等,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
[0113]由上可知,本实施例的代码覆盖测试装置的信息获取单元301可以获取测试信息和测试日志,然后由代码获取单元302根据该测试信息获取上一次测试代码和本次测试代码,并由差分运算单元303根据该上一次测试代码和本次测试代码,计算代码差分,再由覆盖运算单元304根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,最后由测试单元305根据该代码差分和覆盖结果信息进行代码覆盖测试,得到测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试结果和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
[0114]实施例四、
[0115]相应的,本发明实施例还提供一种代码覆盖测试系统,包括本发明实施例提供的任一种代码覆盖测试装置,该代码覆盖测试装置具体可参见实施例三,例如,具体可以如下:
[0116]代码覆盖测试装置,用于获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果。
[0117]其中,测试日志指的是本地测试执行代码的时候,所生成的一个代码覆盖记录文件。而测试信息则指的是测试的一些相关信息,比如,该测试信息中至少可以包括代码版本号,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码的存储路径等信息。
[0118]该测试信息和测试日志可以保存在可供保存和下载的服务器中,比如,该服务器具体可以为代码测试网络(WEB)服务器,即:
[0119]代码覆盖测试装置,具体可以用于从代码测试网络服务器上下载测试信息和测试日志。
[0120]其中,本次测试代码和上一次测试代码具体可以保存在源代码服务器中,比如保存在SVN服务器或CVS服务器中,即:
[0121]代码覆盖测试装置,具体可以用于根据所述上一次测试的代码版本号从SVN服务器或CVS服务器获取上一次测试代码,以及,根据本次测试的代码版本号从SVN服务器或CVS服务器获取本次测试代码。
[0122]其中,代码覆盖测试装置,具体可以用于根据该代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码分别进行标注,得到代码覆盖测试的测试结果。
[0123]其中,标注的方式可以有多种,比如,可以将采用不同的颜色进行标注,以便开发人员清楚地看到代码的覆盖情况,例如,可以用绿色标注来表示修改过且覆盖到的代码。用蓝色来标注覆盖到但是没有被修改过的部分,而红色,则表示被修改但没有被覆盖的部分,从而使得开发人员可以轻易地分辨出代码的修改和测试情况。
[0124]此后,开发人员还可以对该测试结果进行分析,比如找出测试未能覆盖的原因等等,从而可以为测试人员提供建议,或者对测试方法和/或测试用例进行修改或更新,或添加新的测试方法和/或测试用例,等等,然后,测试人员根据开发人员的建议继续测试,这是一个循环的过程。直到测试通过为止。
[0125]该代码覆盖测试装置的具体实施可参见前面的实施例,在此不再赘述。
[0126]由上可知,本实施例的代码覆盖测试系统采用获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试结果和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
[0127]实施例五、
[0128]相应的,本发明实施例还提供一种服务器,如图4所示,该服务器可以包括射频电路401、包括有一个或一个以上计算机可读存储介质的存储器402、输入单元403、显示单元404、包括有一个或者一个以上处理核心的处理器405、以及电源406等部件。本领域技术人员可以理解,图4中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
[0129]RF电路401可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器405处理;另外,将涉及上行的数据发送给基站。通常,RF电路401包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、SM卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路401还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM、GPRS, CDMA, WCDMA, LTE、电子邮件、SMS,等。
[0130]存储器402可用于存储软件程序以及模块,处理器405通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器405和输入单元403对存储器402的访问。
[0131]输入单元403可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元403可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器405,并能接收处理器405发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元403还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
[0132]显示单元404可用于显示由用户输入的信息或提供给用户的信息以及服务器的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元404可包括显示面板,可选的,可以采用IXD、0LED等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器405以确定触摸事件的类型,随后处理器405根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图4中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
[0133]处理器405是服务器的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行服务器的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器405可包括一个或多个处理核心;优选的,处理器405可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器405中。
[0134]服务器还包括给各个部件供电的电源406 (比如电池),优选的,电源可以通过电源管理系统与处理器405逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源406还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0135]可选的,该服务器还可以包括至少一种传感器,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板的亮度。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别设备姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
[0136]可选的,该服务器还可以包括音频电路、扬声器和传声器,该音频电路、扬声器和传声器可提供用户与终端之间的音频接口。其中,音频电路可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路接收后转换为音频数据,再将音频数据输出处理器405处理后,经RF电路401以发送给其他设备,或者将音频数据输出至存储器402以便进一步处理。音频电路还可能包括耳塞插孔,以提供外设耳机与服务器的通信。
[0137]可选的,该服务器还可以包括WiFi模块,其中,WiFi属于短距离无线传输技术,通过WiFi模块可以进行无线的宽带互联网访问。
[0138]尽管未示出,服务器还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,服务器中的处理器405会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器405来运行存储在存储器402中的应用程序,从而实现各种功能。
[0139]此外,服务器还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行述一个或者一个以上程序包含用于进行以下操作的指令:
[0140]获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息进行代码覆盖测试,得到测试结果。
[0141]其中,测试日志指的是本地测试执行代码的时候,所生成的一个代码覆盖记录文件。而测试信息则指的是测试的一些相关信息,比如,该测试信息中至少可以包括代码版本号,比如,可以包括上一次测试的代码版本号和本次测试的代码版本号等等;此外,该测试信息还可以包括代码的存储路径等信息。即步骤“根据该测试信息获取上一次测试代码和本次测试代码”具体可以为:
[0142]根据该上一次测试的代码版本号获取上一次测试代码;以及根据该本次测试的代码版本号获取本次测试代码。
[0143]其中,该测试信息和测试日志可以保存在可供保存和下载的服务器中,比如,该服务器具体可以为代码测试网络(WEB)服务器,即步骤“获取测试信息和测试日志”具体可以为:
[0144]从代码测试网络服务器上下载测试信息和测试日志。
[0145]其中,本次测试代码和上一次测试代码具体可以保存在源代码服务器中,该源代码服务器具体可以为任何具有代码版本管理功能的服务器,比如SVN服务器或CVS服务器等,即步骤“根据该上一次测试的代码版本号获取上一次测试代码;以及根据该本次测试的代码版本号获取本次测试代码”具体可以为:
[0146]根据该上一次测试的代码版本号从源代码服务器,比如SVN服务器或CVS服务器获取上一次测试代码,以及,根据本次测试的代码版本号从源代码服务器,比如SVN服务器或CVS服务器获取本次测试代码。
[0147]其中,代码差分指的是当前测试代码和上一次的测试代码相比,不同的地方(即修改了的代码),即步骤“根据该上一次测试代码和本次测试代码,计算代码差分”具体可以为:
[0148]将上一次测试代码和本次测试代码进行比较,得到代码差分。
[0149]需说明的是,如果上一次的测试代码为空,则该代码差分为当前测试代码,在此不再赘述。
[0150]此外,步骤“根据该代码差分和覆盖结果信息进行代码覆盖测试,得到测试结果”具体可以如下:
[0151]根据该代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码分别进行标注,得到代码覆盖测试的测试结果。
[0152]其中,标注的方式可以有多种,比如,可以将采用不同的颜色进行标注,以便开发人员清楚地看到代码的覆盖情况,例如,可以用绿色标注来表示修改过且覆盖到的代码。用蓝色来标注覆盖到但是没有被修改过的部分,而红色,则表示被修改但没有被覆盖的部分,从而使得开发人员可以轻易地分辨出代码的修改和测试情况。
[0153]该代码覆盖测试装置的具体实施可参见前面的实施例,在此不再赘述。
[0154]由上可知,本实施例的服务器采用获取测试信息和测试日志,根据该测试信息获取上一次测试代码和本次测试代码,根据该上一次测试代码和本次测试代码,计算代码差分,根据该测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息,根据该代码差分和覆盖结果信息得到本次代码覆盖测试结果;由于该方案可以根据代码差分和覆盖结果信息进行代码覆盖测试,因此,相对于现有技术在代码发生变化时需要对全部代码进行重新测试的方案而言,可以大大节省人力物力,提高测试效率;而且,由于该方案可以自动地获取测试信息、测试结果和测试代码,并自动进行代码差分计算和覆盖程度计算等等,因此,相对于现有的需要人工进行获取和分析而言,大大简化了操作流程,而且也提供了测试效率。
[0155]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM, Read Only Memory)、随机存取记忆体(RAM, RandomAccess Memory)、磁盘或光盘等。
[0156]以上对本发明实施例所提供的一种代码覆盖测试方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种代码覆盖测试方法,其特征在于,包括: 获取测试信息和测试日志; 根据所述测试信息获取上一次测试代码和本次测试代码; 根据所述上一次测试代码和本次测试代码,计算代码差分; 根据所述测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息; 根据所述代码差分和覆盖结果信息得到本次代码覆盖测试结果。
2.根据权利要求1所述的方法,其特征在于,所述测试信息包括上一次测试的代码版本号和本次测试的代码版本号,则所述根据所述测试信息获取上一次测试代码和本次测试代码,包括: 根据所述上一次测试的代码版本号获取上一次测试代码; 根据所述本次测试的代码版本号获取本次测试代码。
3.根据权利要求2所述的方法,其特征在于, 所述根据所述上一次测试的代码版本号获取上一次测试代码,包括:根据所述上一次测试的代码版本号从源代码服务器获取上一次测试代码; 所述根据所述本次测试的代码版本号获取本次测试代码,包括:根据所述本次测试的代码版本号从源代码服务器获取本次测试代码。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述根据所述上一次测试代码和本次测试代码,计算代码差分,包括: 将上一次测试代码和本次测试代码进行比较,得到代码差分。
5.根据权利要求1至3任一项所述的方法,其特征在于,所述获取测试信息和测试日志,包括: 从代码测试网络服务器上下载测试信息和测试日志。
6.根据权利要求1至3任一项所述的方法,其特征在于,所述根据所述代码差分和覆盖结果信息得到本次代码覆盖测试结果,包括: 根据所述代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码; 对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码进行统计和标注,得到本次代码覆盖测试结果。
7.一种代码覆盖测试装置,其特征在于,包括: 信息获取单元,用于获取测试信息和测试日志; 代码获取单元,用于根据所述测试信息获取上一次测试代码和本次测试代码; 差分运算单元,用于根据所述上一次测试代码和本次测试代码,计算代码差分; 覆盖运算单元,用于根据所述测试日志计算测试已经覆盖部分的代码,得到覆盖结果信息; 测试单元,用于根据所述代码差分和覆盖结果信息得到本次代码覆盖测试结果。
8.根据权利要求7所述的代码覆盖测试装置,其特征在于,所述测试信息包括上一次测试的代码版本号和本次测试的代码版本号,则: 所述代码获取单元,具体用于根据所述上一次测试的代码版本号获取上一次测试代码,以及根据所述本次测试的代码版本号获取本次测试代码。
9.根据权利要求8所述的代码覆盖测试装置,其特征在于, 所述代码获取单元,具体用于根据所述上一次测试的代码版本号从源代码服务器获取上一次测试代码,以及根据所述本次测试的代码版本号从源代码服务器获取本次测试代码。
10.根据权利要求7至9任一项所述的代码覆盖测试装置,其特征在于, 所述差分运算单元,具体用于将上一次测试代码和本次测试代码进行比较,得到代码差分。
11.根据权利要求7至9任一项所述的代码覆盖测试装置,其特征在于, 所述信息获取单元,具体用于从代码测试网络服务器上下载测试信息和测试日志。
12.根据权利要求7至9任一项所述的代码覆盖测试装置,其特征在于, 所述测试单元,具体用于根据所述代码差分和覆盖结果确定被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码,对所述被修改过但未被测试覆盖的代码、未被修改也未被测试覆盖的代码、以及被修改过且被测试覆盖的代码进行统计和标注,得到本次代码覆盖测试结果。
13.—种代码覆盖测试系统,其特征在于,包括权利要求7至12任一项所述的代码覆盖测试装置。
【文档编号】G06F11/36GK104298587SQ201310295549
【公开日】2015年1月21日 申请日期:2013年7月15日 优先权日:2013年7月15日
【发明者】谭文 申请人:腾讯科技(深圳)有限公司