本申请涉及检测技术,特别涉及基于路径差异的代码测试系统。
背景技术:
随着科技的发展,运行在服务器或者终端上,提供各类服务的软件系统越来越多,这些系统投入使用之前都会针对软件系统的源代码进行功能测试,通常会设计测试用例来模拟系统运行时会出现的各种情况以测试系统的每个功能是否能够正常而稳定的工作,而系统的每次更新通常会修改源代码以带来新的功能或是删减掉某些功能,这都需要在系统上线前重新进行功能测试,也就需要设计新的测试用例以覆盖到新的功能或是避免涉及已经删除的功能。
另一方面,以java类语言开发的软件系统,其源代码的结构通常是一个项目(project)下包含了多个实现具体功能的功能包(package),功能包下又包含多个类(class),类下又包含多个方法(method);具体运行时,在代码层面所形成的package-class-method层层调用的关系,就称之为路径。
传统的功能测试过程极其不稳定,特别依赖于测试人员的业务能力和临场发挥能力,即使很优秀的测试人员也会因为状态问题而导致测试用例设计水准出现波动,更不要提有经验人员和经验欠缺人员在测试用例设计上的巨大差别。这就导致了随着系统的更新,测试用例不断增加,却仍旧无法得知系统功能点测试是否有遗漏,测试质量是否得到了保障。
技术实现要素:
本发明提供了基于路径差异的代码测试系统,以避免系统功能点测试的遗漏,提供稳定的测试质量。
为达到上述目的,本发明的技术方案是这样实现的:
基于路径差异的代码测试系统,包括:
路径分析模块,用于针对任一待检测代码,获取所述待检测代码与其对应的旧版本代码之间的路径差异信息;
测试用例获取模块,用于获取根据所述路径差异信息所指定的测试用例;
测试平台,用于使用所述测试用例对所述待检测代码进行测试,并获取该次测试中的待检测代码各组成部分的代码覆盖率信息;
筛选模块,用于根据所述代码覆盖率信息,筛选出在该次中代码覆盖率为0%的功能包;
测试用例再次获取模块,用于获取根据所述功能包的内容所制定的再测试用例,并发送该再测试用例至测试平台再次测试所述待检测代码。
本方案通过对新旧代码的路径对比,得到待测试代码相对于旧代码新增/删减的功能,从而知道新的测试用例的设计,从而在第一版代码设计并通过测试后,通过迭代的方法,确保每次新增/删减的功能得以测试,并通过代码覆盖率作为验证手段,筛选出没有被测试到的功能包,并针对性的执行再测试用例,保证测试中没有功能点被遗漏,保证了测试质量的稳定。
进一步,还包括测试用例库,用于存储所述再测试用例。
通过案例集成,为以后的测试用例编写提供参考,利用经验的可视化集成确保不同水平的测试人员均能做到基本一致的测试质量。
进一步,所述路径分析模块通过jdepend工具获取所述待检测代码与其对应的旧版本代码各自的路径信息,进而对比出所述路径差异信息。
该工具可以对代码包进行结构分析,从而获得所需的路径信息。
进一步,所述测试平台通过jacoco工具获取所述代码覆盖率信息。
jacoco工具包含了多种尺度的覆盖率计数器,包含指令级覆盖(instructions,c0coverage),分支(branches,c1coverage)、圈复杂度(cyclomaticcomplexity)、行覆盖(lines)、方法覆盖(non-abstractmethods)、类覆盖(classes),非常适用于本发明中针对路径的代码测试。
进一步,所述测试平台通过emma工具获取所述代码覆盖率信息。
emma支持对类,方法,代码行和基本的分支语句的覆盖率测试,并提供了多种格式的报告,包括纯文本,html和xml,所有的报告都可以进行详细设置以获得定制报告。而且,使用emma时,不需要获得源代码就可进行覆盖率测试,更为方便。
附图说明
图1为本发明实施例中的源代码测试的工作流程示意图。
图2为本发明实施例中的基于路径差异的代码测试系统的示意性框图。
具体实施方式
为使本发明的技术方案更加清楚、明白、以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
本实施例基于路径差异的代码测试系统,基本如图2所示,包括:
路径分析模块,用于针对任一待检测代码,获取所述待检测代码与其对应的旧版本代码之间的路径差异信息;
测试用例获取模块,用于获取根据所述路径差异信息所指定的测试用例;
测试平台,用于使用所述测试用例对所述待检测代码进行测试,并获取该次测试中的待检测代码各组成部分的代码覆盖率信息;
筛选模块,用于根据所述代码覆盖率信息,筛选出在该次中代码覆盖率为0%的功能包;
测试用例再次获取模块,用于获取根据所述功能包的内容所制定的再测试用例,并发送该再测试用例至测试平台再次测试所述待检测代码。
测试用例库,用于存储所述再测试用例。
本实施例中的系统的具体工作过程如下。
首先是针对任一待检测代码,获取所述待检测代码与其对应的旧版本代码之间的路径差异信息;
路径的形式是package-class-method,得到差异信息的方法可以是,通过加载jdepend工具获取所述待检测代码与其对应的旧版本代码各自的路径信息,进而对比出所述路径差异信息。
该工具可以对代码包进行结构分析,从而获得所需的路径信息。
于是测试人员明确了在主案例里应该包括哪些内容,从而根据这些路径差异信息,制定出测试用例;
该测试用例经过审核后,交测试平台进行平台扫描,也就是使用所述测试用例对所述待检测代码进行测试。测试结束后,便同步可以得到测试中的待检测代码各组成部分的代码覆盖率信息;
得到代码覆盖率信息的方法可以是,在测试平台中加载jacoco工具获取所述代码覆盖率信息。
jacoco工具包含了多种尺度的覆盖率计数器,包含指令级覆盖(instructions,c0coverage),分支(branches,c1coverage)、圈复杂度(cyclomaticcomplexity)、行覆盖(lines)、方法覆盖(non-abstractmethods)、类覆盖(classes),非常适用于本发明中针对路径的代码测试。
还可以是在测试平台中加载emma工具获取所述代码覆盖率信息。
emma支持对类,方法,代码行和基本的分支语句的覆盖率测试,并提供了多种格式的报告,包括纯文本,html和xml,所有的报告都可以进行详细设置以获得定制报告。而且,使用emma时,不需要获得源代码就可进行覆盖率测试,更为方便。
根据得到的代码覆盖率信息,筛选出在该次中代码覆盖率为0%的功能包;
根据所述功能包的内容,在原有测试用例的基础上补充相应的自动化脚本,从而获取相应的再测试用例,可以由测试人员自己走读代码,也可以咨询相应对模块的开发人员以确定具体需要新增怎样的自动化脚本。并使用该再测试用例再次测试所述待检测代码。
最后核查本次测试是否覆盖所有的主业务流程,以及所有新增/删减功能。
最后将所述再测试用例存入测试用例库,入库前可由相关人员对本次使用的案例进行评述,或是以代码覆盖率的高低做为评价标准,对案例加以筛选,通过案例集成,为以后的测试用例编写提供参考,利用经验的可视化集成确保不同水平的测试人员均能做到基本一致的测试质量。
本实施例通过对新旧代码的路径对比,得到待测试代码相对于旧代码新增/删减的功能,从而知道新的测试用例的设计,从而在第一版代码设计并通过测试后,通过迭代的方法,确保每次新增/删减的功能得以测试,并通过代码覆盖率作为验证手段,筛选出没有被测试到的功能包,并针对性的执行再测试用例,保证测试中没有功能点被遗漏,保证了测试质量的稳定。
本实施例中还包括走读代码辅助模块。
在人工走读代码时,由于代码的行数较多;走读到后期,走读者会越来越疲惫,出现精神涣散、注意力不集中等现象,往往出现错读、漏读等现象。为了缓解这一想象,本实施例在人工走读代码时,利用走读代码辅助模块获取已经走读过的代码的行数,随着行数的增加,逐渐增加代码字体的大小,相应的也就减少了同一显示范围内代码的行数;走读行数可以通过代码的浏览工具中当前显示到那一行来得知,或者可以根据走读人员滚动鼠标滚轴的圈数来得知,后者需要通过鼠标计数模块根据鼠标的信号输入来计算该滚动圈数并通知走读代码辅助模块。通过走读过的代码行数来放大代码,让走读者在进入疲惫时,看到更为清楚、更为醒目的代码,也减少了同时出现在显示范围内的代码的行数,有助于走读者集中精神在代码上,从而减少错读的概率,且根据走读过的代码行数逐渐增大,顺应了人的疲劳曲线,越到后面走读者越是疲劳,而代码的字体也越大。
在另一些实施例中,走读代码辅助模块还统计单位时间内走读过的代码行数作为辅助判断标准;发现走读的行数超过某阈值,且走读时间内走读过的代码行数高于某一阈值时,再开始放大代码;或者,当单位时间内走读过的代码行数大于另一阈值时,不等发现走读的行数超过某阈值,就直接开始放大字体;以此,第一避免走读者本来就放慢了走读速度时,字体变大会过多的降低效率;第二,防止走读者不负责任的快速浏览代码造成错读和漏读,在其浏览过快时,通过放大字体,减少显示范围内的代码行数来从客观上强制放慢其走读代码的速度。
以上所述的仅是本发明的实施例,方案中公知的具体结构及特性等常识在此未作过多描述,所属领域普通技术人员知晓申请日或者优先权日之前发明所属技术领域所有的普通技术知识,能够获知该领域中所有的现有技术,并且具有应用该日期之前常规实验手段的能力,所属领域普通技术人员可以在本申请给出的启示下,结合自身能力完善并实施本方案,一些典型的公知结构或者公知方法不应当成为所属领域普通技术人员实施本申请的障碍。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本申请要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。