确定软件的测试范围的方法和系统的制作方法

文档序号:6444730阅读:194来源:国知局
专利名称:确定软件的测试范围的方法和系统的制作方法
技术领域
本申请涉及一种确定软件的测试范围的方法和系统。
背景技术
随着计算机技术的发展,计算机软件的功能越来越强大,软件本身也越来越复杂。现有的软件开发流程可分为以下几个阶段:需求-设计-编码-测试-维护。其中,在测试阶段需要明确的一件事情就是测试范围,测试范围一般在需求阶段进行确认,现有的确认方式主要是由经验丰富的人员例如对于软件较为熟悉的一两位架构师、资深技术人员等,对整个系统进行分析以确认测试的范围。有很多情况能够使得确定软件的测试范围成为一件较为复杂的事情。例如,随着软件系统功能的不断增加,软件系统本身也逐渐庞大;又如,有些系统是供其他系统调用的,当调用的系统过多时,被调用系统的改动也会影响测试范围的界定;再如,在基于已有软件的进一步开发时,修改了不该修改的代码,超出了之前界定的测试范围之外。因此,即使经验丰富的人员也无法保证能掌控整个系统的细节,从而无法较为准确地确定软件的测试范围。人工确定软件的测试范围的不足之处主要表现为:1、测试范围过小。这将会使测试人员遗漏本该测试的功能点,最终很有可能造成生产环境的缺陷(bug),测试不够全面。2、测试范围过大。这将会影响测试人员的工作效率,并且分散测试人员的注意力。极端的例子就是每次项目都测试系统所有的功能点。在现有技术中,确定软件的测试范围的方法容易导致软件的测试不够全面以及测试效率较低的问题,对于该问题,目前尚未提出有效的解决方案。

发明内容
本申请的主要目的是提供一种确定软件的测试范围的方法和系统,以解决现有技术中确定软件的测试范围的方法容易导致软件的测试不够全面以及测试效率较低的问题。为了实现上述目的,根据本申请的一个方面,提供了一种确定软件的测试范围的方法。本申请的确定软件的测试范围的方法包括:当所述软件中的功能点被访问时,记录该功能点调用的类的方法;在更新所述软件的情况下,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点;将确定的功能点汇总得出所述软件的测试范围。根据本申请的另一方面,提供了一种确定软件的测试范围的系统。本申请的确定软件的测试范围的系统包括:数据采集模块,用于当所述软件中的功能点被访问时,记录该功能点调用的类的方法;数据分析模块,用于在更新所述软件的情况下,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点;展现模块,用于将所述数据分析模块确定的功能点汇总得出所述软件的测试范围。
根据本申请的技术方案,通过记录被访问的功能点所调用的类的方法,从而在类的方法被修改时可以确定调用该类的方法的功能点,将这些功能点汇总即得到软件的测试范围。这方式不依赖于人工对软件的分析,能够全面而高效地确定软件的测试范围,从而使得软件的测试较为全面并且有助于提高测试效率。


说明书附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是与本申请实施例有关的一种计算机网络的结构的示意图;图2是与本申请实施例有关的功能点与类的方法之间调用关系的示意图;图3是根据本申请实施例的确定软件的测试范围的方法主要步骤的示意图;图4是根据本申请实施例的被测软件在启动时,初始化与日志相关的代码的示意图;图5是根据本申请实施例的执行功能点入口和出口代码的流程的示意图;图6是根据本申请实施例的执行普通代码的流程的示意图;图7是根据本申请实施例的一种确定软件的测试范围的具体方法的示意图;图8是根据本申请实施例的确定软件的测试范围的系统的基本功能模块的示意图。
具体实施例方式需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。在软件开发中,除了全新的系统必然需要测试整个系统全部的功能点之外,在现有系统上进行再次开发的项目的测试范围都是基于现有系统进行再次开发而确定的测试范围,即,与再次开发有关的功能点应当进行测试,这些功能点属于测试范围,而与再次开发无关的功能点可以不作为测试范围。也就是说测试范围是由对软件进行再次开发而形成的,具体哪些功能点属于该测试范围则是本申请实施例要解决的技术问题。因此在本申请实施例中,主要将调用于修改过的类的方法的功能点作为测试范围。图1是与本申请实施例有关的一种计算机网络的结构的示意图。该计算机网络主要包括一台或多台应用系统计算机11,以及数据分析计算机12。在应用系统计算机11中执行监控以获得有关软件功能点调用的类的方法的记录,该记录可以采用日志的形式保存;数据分析计算机12对该记录进行分析例如进行日志分析从而得出数据库,该数据库中保存的信息中包含功能点以及该功能点调用的类的方法。数据分析计算机12还可以执行展现的功能,即通过查询的方式在数据库中确定某个指定的类的方法被哪些功能点调用。一个功能点可能调用多个类的方法,一个类的方法也可能被多个功能点调用,它们之间的关系例如图2所示,图2是与本申请实施例有关的功能点与类的方法之间调用关系的示意图。从上述数据库中查询调用了修改过的类的方法的功能点,就可以确定该功能点属于测试范围。具体方式如图3所示。图3是根据本申请实施例的确定软件的测试范围的方法主要步骤的示意图,如图3,该方法主要包括如下的步骤S31至步骤S33。
步骤S31:当软件中的功能点被访问时,记录该功能点调用的类的方法;步骤S32:在更新软件的情况下,根据所述记录得到的结果确定调用了软件中修改过的类的方法的功能点;步骤S33:将确定的功能点汇总得出软件的测试范围。上述步骤S31是数据采集的过程,该过程中,记录功能点调用的类的方法可记录在日志内。具体而言,实现日志记录的过程中,在执行软件的功能点被访问时的起始处代码时,对日志信息进行初始化;在执行软件的功能点被访问过程中的预定的被监控代码时,在日志信息中记录所述功能点调用的类的方法;在执行软件的功能点被访问时的结束处代码时,将日志信息作为记录的结果。这些与日志相关的功能是通过向软件代码中加入一些用以实现数据采集的代码,加入的代码并不影响软件原有代码的执行。在服务器启动并且加载软件代码后,向软件的一个功能点的代码中加入上述用以实现数据采集的代码的流程如图4所示,。图4是根据本申请实施例的被测软件在启动时初始化与日志相关的代码的基本流程,以下加以说明。在步骤S41中,服务器加载软件代码。这里加载的是一个功能点的代码。对于针对多个功能点的日志记录的实现,只需重复图4的流程即可。在步骤S42中,判断是否为功能点被访问时的起始处代码,若是,则转入步骤S43,加入日志信息初始化代码,否则转入步骤S44,判断是否为功能点被访问时的结束处代码。步骤S44的判断结果若为“是”,则进入步骤S45,加入日志输出代码,然后进入步骤S46,否则直接转入步骤S46,判断是否为被监控的代码。这里的被监控的代码是指当前加载的功能点的代码。步骤S46的判断结果若为“是”,则进入步骤S47,加入日志记录代码,否则结束流程。服务器加载软件代码后,执行图4的流程所用的主要代码可包括如下部分: if (ClassNameFilter.filter(className)){
ClassReader cr = new ClassReader(classfileBuffer, 0,classfileBuffer.length);
ClassWriter cw = new ClassWriter(true);
ClassAdapter classAdapter = new AsmClassAdapter(cw, className);cr.accept(classAdapter, false);
return cw.toByteArray();
} else {
return classfileBuflfer; }在判断代码是否为起始处代码或结束处代码时,可以根据服务器以及web框架的类型确定服务器处理访问请求的入口,在入口处的代码即为起始处代码或结束处代码。在判断是否为被监控的代码时,根据代码的package名即可判断。上述判断可以采用的代码的主要部分示例如下:MethodVisitor wrappedMv = mv; if (mv !=null) {
if (Mcom/taobao/session/TaobaoSessionFilter".equals(className) && MdoFilter".equals(name)) { ClassInfoLogger.logInfo("visitMethod: " + className + "\t" + name); wrappedMv = new AsmServletFilterMethodAdapter(mv, className, name, desc);
} else if (Mcom/alibaba/webx/filter/timer/TimerFilter".equals(className) && MdoFilter".equals(name)) {
ClassInfoLogger.logInfo("visitMethod: " + className + "\t" + name); wrappedMv = new AsmServletFilterMethodAdapter(mv, className, name, desc);
} else if (Mcom/alibaba/webxAVebxControllerServlet".equals(className) && MdoGet".equals(name))
{
ClassInfoLogger.logInfo("visitMethod: " + className + "\t" + name); wrappedMv = new AsmServletFilterMethodAdapter(mv, className, name, desc);
} else if (Mcom/alibaba/citrus/webx/servletAVebxFrameworkFilter".equals(className) && MdoFilter".equals(name)) {
ClassInfoLogger.logInfo("visitMethod: " + className + "\t" + name); wrappedMv = new AsmServletFilterMethodAdapter(mv, className, name, desc);
} else {
wrappedMv = new AsmMethodAdapter(mv, className, name, desc);
}
}服务器在加入日志信息初始化代码时,所执行的代码的主要部分举例如下:

super.visitCode();
this.visitVarInsn(Opcodes.ALOAD, I);
this.visitMethodInsn(Opcodes.1NVOKEINTERFACE, "javax/servlet/http/HttpServletRequest", "getRequestURI", "()Ljava/lang/String;M); this.visitLdcInsn(fullN ame);
this.visitMethodInsn(Opcodes.1NVOKESTATIC, "com/mfrog/jdk/ClassInfoLogger","start",
"(Ljava/lang/String;Ljava/lang/String;)VM);服务器在加入日志输出代码时,所执行的代码的主要部分举例如下:

switch (inst) { case Opcodes.ARETURN: case Opcodes.DRETURN: case Opcodes.FRETURN: case Opcodes.1RETURN: case Opcodes丄RETURN: case Opcodes.RETURN: case Opcodes.ATHROW:
this.visitVarInsn(Opcodes.ALOAD, I);
this.visitMethodInsn(Opcodes.1NVOKEINTERFACE, "javax/servlet/http/Http ServletRequest", "getMethod", "()Ljava/lang/String;M);
this.visitVarInsn(O·pcodes.ASTORE, 2);
this.visitVarInsn(Opcodes.ALOAD, I);
this.visitMethodInsn(Opcodes.1NVOKEINTERFACE, "javax/servlet/http/Http ServletRequest",

权利要求
1.一种确定软件的测试范围的方法,其特征在于,包括: 当所述软件中的功能点被访问时,记录该功能点调用的类的方法; 在更新所述软件的情况下,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点; 将确定的功能点汇总得出所述软件的测试范围。
2.根据权利要求1所述的方法,其特征在于,记录该功能点调用的类的方法包括: 在执行所述功能点被访问时的起始处代码时,对日志信息进行初始化; 在执行所述功能点被访问过程中的预定的被监控代码时,在所述日志信息中记录所述功能点调用的类的方法; 在执行所述功能点被访问时的结束处代码时,将所述日志信息作为记录的结果。
3.根据权利要求1所述的方法,其特征在于,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点之前,还包括: 从所述软件的代码版本控制系统中获取所述软件的源代码; 分析所述源代码得出所述软件中修改过的类的方法。
4.根据权利要求1,2或3所述的方法,其特征在于,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点包括:根据调用了所述软件中修改过的类的方法,在记录的结果中查询并确定调用了该类的方法的功能点。
5.一种确定软件的测试范围的系统,其特征在于,包括: 数据采集模块,用于当所述软件中的功能点被访问时,记录该功能点调用的类的方法; 数据分析模块,用于在更新所述软件的情况下,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点; 展现模块,用于将所述数据分析模块确定的功能点汇总得出所述软件的测试范围。
6.根据权利要求5所述的系统,其特征在于,所述数据采集模块还用于: 在执行所述功能点被访问时的起始处代码时,对日志信息进行初始化; 在执行所述功能点被访问过程中的预定的被监控代码时,在所述日志信息中记录所述功能点调用的类的方法; 在执行所述功能点被访问时的结束处代码时,将所述日志信息作为记录的结果。
7.根据权利要求5所述的系统,其特征在于,所述系统还包括: 源代码获取模块,用于从所述软件的代码版本控制系统中获取所述软件的源代码; 源代码分析模块,用于分析所述源代码得出所述软件中修改过的类的方法。
8.根据权利要求5所述的系统,其特征在于,所述数据分析模块还用于根据调用了所述软件中修改过的类的方法,在记录的结果中查询并确定调用了该类的方法的功能点。
全文摘要
本申请提供了一种确定软件的测试范围的方法和系统,用以解决现有技术中确定软件的测试范围的方法容易导致软件的测试不够全面以及测试效率较低的问题。该方法包括当所述软件中的功能点被访问时,记录该功能点调用的类的方法;在更新所述软件的情况下,根据所述记录得到的结果确定调用了所述软件中修改过的类的方法的功能点;将确定的功能点汇总得出所述软件的测试范围。采用本申请的技术方案,有助于全面而高效地确定软件的测试范围,从而使得软件的测试较为全面并且有助于提高测试效率。
文档编号G06F11/36GK103186463SQ201110457740
公开日2013年7月3日 申请日期2011年12月30日 优先权日2011年12月30日
发明者李斌, 吴泽明 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1