软件测试方法和系统的制作方法

文档序号:8502121阅读:269来源:国知局
软件测试方法和系统的制作方法
【技术领域】
[0001] 本发明涉及软件测试技术领域,特别是涉及一种软件测试方法和系统。
【背景技术】
[0002] 软件在发布之前为确保软件的稳定性,需要对软件进行测试。在软件测试中,为保 证软件质量,需要对各种软件可能面临的场景进行覆盖测试,包括正常的和异常的场景,特 别是一些异常的场景,比如:机器内存不足、磁盘空间不足、本地文件读写错误和异常数据 等。传统技术中,通常会采用基于功能的黑盒测试方法和基于代码的白盒测试方法这两种 方案来实现软件测试。
[0003] 基于功能的黑盒测试方法,如果要覆盖各种异常场景,比如,对于机器内存不足的 异常场景,需要开启大量的程序将系统的内存耗尽;对于磁盘空间不足的异常场景,则需要 通过拷贝文件等方式将本地磁盘空间占满。因此基于功能的黑盒测试方法实现起来比较困 难,且需要一定的测试时间成本。并且,对于一些程序内部的异常分支,如某个函数异常返 回,基于功能的黑盒测试方法更加难以模拟。
[0004] 基于代码的白盒测试方法,虽然能够在程序运行时设置断点,通过手动修改程序 运行时数据或者临时修改代码来模拟这类异常场景,但是这种方式的测试时间成本同样很 高,特别是对于一些涉及到较多代码模块修改的特定场景的模拟,比如,所有new函数调用 均要返回NULL的特定场景,这种测试方法的时间成本会更加高。
[0005] 因此,传统的软件测试方法存在异常场景难以模拟且测试时间成本较高的技术问 题。

【发明内容】

[0006] 基于此,有必要针对上述技术问题,提供一种能模拟出各种异常场景且能降低测 试时间成本的软件测试方法和系统。
[0007] -种软件测试方法,所述方法包括:
[0008] 获取第一配置文件,所述第一配置文件中设有插桩点和对应的用于产生测试场景 的插桩代码;
[0009] 根据所述第一配置文件,在被测软件的插桩点处插入对应的所述插桩代码,生成 插桩后的被测软件;
[0010] 运行所述插桩后的被测软件,当所述插桩后的被测软件中的所述插桩点被触发 时,执行与触发的所述插桩点对应的所述插桩代码。
[0011] 一种软件测试系统,所述系统包括:
[0012] 获取模块,用于获取第一配置文件,所述第一配置文件中设有插桩点和对应的用 于产生测试场景的插桩代码;
[0013] 代码插入模块,用于根据所述第一配置文件,在被测软件的插桩点处插入对应的 所述插桩代码,生成插桩后的被测软件;
[0014] 代码运行模块,用于运行所述插桩后的被测软件,当所述插桩后的被测软件中的 所述插桩点被触发时,执行与触发的所述插桩点对应的所述插桩代码。
[0015] 相对于传统的基于功能的黑盒测试方法和基于代码的白盒测试方法,本发明所提 供的软件测试方法和系统,由于能够在被测软件的插桩点处插入对应的插桩代码,使得插 桩后的被测软件在运行过程中,其中的插桩点被触发时能自动执行与插桩点对应的插桩代 码,从而模拟出各种测试场景,不需要人工模拟场景或者手动修改数据或临时修改代码,因 此既能模拟出各种异常场景又能降低测试时间成本。
【附图说明】
[0016] 图1为一个实施例中软件测试方法的流程示意图;
[0017] 图2A为一个实施例中软件测试方法的应用场景图;
[0018] 图2B为另一个实施例中软件测试方法的应用场景图;
[0019] 图3为一个实施例中软件测试系统的结构框图;
[0020] 图4为一个实施例中代码运行模块的结构框图。
【具体实施方式】
[0021] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。
[0022] 除非上下文另有特定清楚的描述,本发明中的元件和组件,数量既可以单个的形 式存在,也可以多个的形式存在,本发明并不对此进行限定。本发明中的步骤虽然用标号进 行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执 行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。可以理解,本文中所使用的 术语"和/或"涉及且涵盖相关联的所列项目中的一者或一者以上的任何和所有可能的组 合。
[0023] 如图1所示,在一个实施例中,提供了一种软件测试方法,该方法包括:
[0024] 步骤102,获取第一配置文件。
[0025] 第一配置文件也可称为插桩规则文件,其中设有插桩点和对应的用于产生测试场 景的插桩代码。所谓插桩点,是指要插入插桩代码的代码点,可设为在调用系统函数或自定 义函数时或者执行某类操作(如创建对象new)时插入预设的插桩代码。
[0026] 依据A0P(Aspect Oriented Programming,面向切面编程,通过预编译方式和运行 期动态代理实现程序功能的统一维护的一种技术)技术的不同,对于不同语言,可以采用不 同的形式来实现第一配置文件。比如,对于Java语言,可使用AspectJ (基于Java平台的 AOP工具)源代码文件或者编译后的jar包(Java Archive,Java归档文件),或者执行时的 xml (可扩展标记语言)规则文件来实现第一配置文件。对于c/c++语言,则可使用AspectC (基于C/C++语言的AOP工具)来描述第一配置文件。采用哪种文件实现第一配置文件,由对 被测软件插入插桩代码的时机(在被测软件编译阶段插入还是在被测软件运行阶段插入), 以及被测软件的开发语言和平台决定。
[0027] 第一配置文件实际上设置了可以对哪些函数或操作进行插桩以及对应的插桩代 码,也就是插桩点和对应的插桩代码。插桩点包括系统函数、自定义函数和指定操作的至少 一种。例如,第一配置文件中可设置有系统函数名和/或自定义函数名。以AspectJ源代 码文件为例,其中记录的函数名有:
[0028] pointcut getNetworkType () : cal I (int android, net. Networklnfo. getTypeO);
[0029] pointcut getSubtype () : call (int android, net. Networklnfo. getSubType ());
[0030] pointcut getExtralnfoO : call (String android, net. Networklnfo. getExtralnfoO)等。表示在调用这些函数时,需要产生对应的测试场景。
[0031] 步骤104,根据第一配置文件,在被测软件的插桩点处插入对应的插桩代码,生成 插桩后的被测软件。
[0032] 所谓插桩代码,是指用于产生各种测试场景的代码,可以在被测软件编译时或者 运行时插入到被测软件的插桩点处。这样,插桩后的被测软件在触发插桩点时就能够执行 该插桩代码,从而得到各种测试场景。
[0033] 步骤106,运行插桩后的被测软件,当插桩后的被测软件中的插桩点被触发时,执 行与触发的插桩点对应的插桩代码。
[0034] 插桩后的被测软件是指已在插桩点植入了对应的插桩代码的被测软件,它在运行 过程中,当其中的插桩点被触发,比如调用指定的函数时,则执行与该触发的插桩点对应的 插桩代码。
[0035] 进一步的,插桩代码可设置为执行时去解析第二配置文件中与插桩点对应的行为 程序,从而得到第二配置文件中指定的结果。
[0036] 仍以第一配置文件为AspectJ源代码文件为例进行举例说明,对应于某一函数的 插桩代码可为:
[0037]
【主权项】
1. 一种软件测试方法,所述方法包括: 获取第一配置文件,所述第一配置文件中设有插桩点和对应的用于产生测试场景的插 桩代码; 根据所述第一配置文件,在被测软件的插桩点处插入对应的所述插桩代码,生成插桩 后的被测软件; 运行所述插桩后的被测软件,当所述插桩后的被测软件中的所述插桩点被触发时,执 行与触发的所述插桩点对应的所述插桩代码。
2. 根据权利要求1所述的方法,其特征在于,所述执行与触发的所述插桩点对应的所 述插桩代码的步骤,包括: 通过所述插桩代码读取第二配置文件,所述第二配置文件中设有插桩点和对应的行为 程序; 执行与所述触发的插桩点对应的行为程序,产生测试场景。
3. 根据权利要求1所述的方法,其特征在于,所述根据第一配置文件,在被测软件的插 桩点处插入对应的所述插桩代码,生成插桩后的被测软件的步骤,包括: 在所述被测软件的编译阶段,由插桩编译器根据第一配置文件,在所述被测软件的插 桩点处插入对应的所述插桩代码,生成插桩后的被测软件。
4. 根据权利要求1所述的方法,其特征在于,所述根据第一配置文件,在被测软件的插 桩点处插入对应的所述插桩代码,生成插桩后的被测软件的步骤,包括: 在所述被测软件的运行阶段,由运行插桩器根据第一配置文件,在所述被测软件的插 桩点处插入对应的所述插桩代码,生成插桩后的被测软件。
5. 根据权利要求1至4任一项所述的方法,其特征在于,所述插桩点包括系统函数、自 定义函数和指定操作中的至少一种。
6. -种软件测试系统,其特征在于,所述系统包括: 获取模块,用于获取第一配置文件,所述第一配置文件中设有插桩点和对应的用于产 生测试场景的插桩代码; 代码插入模块,用于根据所述第一配置文件,在被测软件的插桩点处插入对应的所述 插桩代码,生成插桩后的被测软件; 代码运行模块,用于运行所述插桩后的被测软件,当所述插桩后的被测软件中的所述 插桩点被触发时,执行与触发的所述插桩点对应的所述插桩代码。
7. 根据权利要求6所述的系统,其特征在于,所述代码运行模块包括: 插桩代码执行模块,用于通过所述插桩代码读取第二配置文件,所述第二配置文件中 设有插桩点和对应的行为程序; 程序执行模块,用于执行与所述触发的插桩点对应的行为程序,产生测试场景。
8. 根据权利要求6所述的系统,其特征在于,所述代码插入模块为插桩编译器,所述插 桩编译器用于在所述被测软件的编译阶段,根据第一配置文件,在所述被测软件的插桩点 处插入对应的所述插桩代码,生成插桩后的被测软件。
9. 根据权利要求6所述的系统,其特征在于,所述代码插入模块为运行插桩器,所述运 行插桩器用于在所述被测软件的运行阶段,根据第一配置文件,在所述被测软件的插桩点 处插入对应的所述插桩代码,生成插桩后的被测软件。
10.根据权利要求6至9任一项所述的系统,其特征在于,所述插桩点包括系统函数、自 定义函数和指定操作的至少一种。
【专利摘要】本发明提供了一种软件测试方法,所述方法包括:获取第一配置文件,所述第一配置文件中设有插桩点和对应的用于产生测试场景的插桩代码;根据所述第一配置文件,在被测软件的插桩点处插入对应的所述插桩代码,生成插桩后的被测软件;运行所述插桩后的被测软件,当所述插桩后的被测软件中的所述插桩点被触发时,执行与触发的所述插桩点对应的所述插桩代码。采用该软件测试方法,能够模拟各种异常场景且能节省测试时间成本。此外,还提供了一种软件测试系统。
【IPC分类】G06F11-36
【公开号】CN104834590
【申请号】CN201410048167
【发明人】鲁四喜
【申请人】腾讯科技(深圳)有限公司
【公开日】2015年8月12日
【申请日】2014年2月11日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1