CN104536880A - 基于符号执行的gui程序测试用例扩增方法 - Google Patents

基于符号执行的gui程序测试用例扩增方法 Download PDF

Info

Publication number
CN104536880A
CN104536880A CN201410712797.8A CN201410712797A CN104536880A CN 104536880 A CN104536880 A CN 104536880A CN 201410712797 A CN201410712797 A CN 201410712797A CN 104536880 A CN104536880 A CN 104536880A
Authority
CN
China
Prior art keywords
measured
program
class
parameter
jpf
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410712797.8A
Other languages
English (en)
Other versions
CN104536880B (zh
Inventor
徐宝文
周骏贵
张智轶
杨薇然
陈振宇
张驰
濮力
程秀才
谢佩章
王婧宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu Testing And Certification Co Ltd
Nanjing University
Original Assignee
JIANGSU SUCE SOFTWARE DETECTION TECHNOLOGY Co Ltd
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by JIANGSU SUCE SOFTWARE DETECTION TECHNOLOGY Co Ltd, Nanjing University filed Critical JIANGSU SUCE SOFTWARE DETECTION TECHNOLOGY Co Ltd
Priority to CN201410712797.8A priority Critical patent/CN104536880B/zh
Publication of CN104536880A publication Critical patent/CN104536880A/zh
Application granted granted Critical
Publication of CN104536880B publication Critical patent/CN104536880B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

基于符号执行的GUI程序测试用例扩增方法,对于一个待测程序,首先使用JPF工具为待测程序创建一个“.jpf”文件,并静态分析待测程序代码,获取符号执行分析后产生的有效输入值;以控件的名字属性作为关键字在已有测试用例脚本中搜索与定位需要置入新输入值的位置,然后用有效输入值进行替换原值,生成新的测试用例,实现原测试用例集扩增。本发明作为一种GUI界面测试技术引入了符号执行技术,能够运用符号执行的方法完成对GUI程序前台界面测试用例的扩增,让GUI程序前台界面的测试更加充分,提高了GUI程序前台界面的测试效率。

Description

基于符号执行的GUI程序测试用例扩增方法
技术领域
本发明属于软件测试技术领域,尤其是软件测试中测试用例扩增领域,用于GUI程序测试用例的扩增。
背景技术
软件测试是一项旨在帮助软件从业者评估被测软件的质量状况的探究性活动。软件项目工作者通过软件测试活动对项目所开发产品的质量与可用性进行评估,从而获得具有借鉴意义的评估结果。在完整的软件开发流程中,软件测试活动贯穿始终,占据了软件开发项目的大部分时间,需要大量的人力物力资源投入。由此可见,在软件项目的开发中,以保障软件产品的质量为目的的软件测试占据着极其重要的地位。优秀、成功的软件测试过程能够找出被测试软件产品中存在的错误、缺陷、失效和事故,从而帮助软件产品开发者对软件产品进行合理有效的修复与改善,并提高软件产品的质量,缩短开发出的软件产品与产品需求之间的差距,将开发出的软件产品的质量与功能偏差控制在可接受范围以内。
测试用例是软件测试的重要组成部分,从软件测试活动的本质来说,软件测试就是针对待测软件设计并开发出多个测试用例。在世界各地的研究学者对软件测试技术进行深入研究的同时,各种通过改变测试用例来提高软件测试效率的技术也相继被提出,例如,通过对测试用例进行优化选择提高测试活动效率、通过自动化生成测试用例以减少测试活动中的资源耗费等技术。
在软件测试过程中,设计并开发出高效的测试用例对于软件测试人员来讲,并不是一项轻松的工作。在测试图形用户界面(GUI)软件产品时,软件测试工作者不仅应该熟悉被测软件的各种功能如何使用,还需要熟悉软件产品的后台实现逻辑,从而设计出高覆盖、高效率的测试用例。但是从工业界中软件开发活动与测试活动由不同人员组织进行的情况来看,测试人员难以充分了解软件程序的后台处理逻辑,导致测试活动不充分。为了减少人力与财物资源消耗,一些软件开发公司会招收经验不足的软件从业者进行软件测试活动,这样会增多开发测试用例所耗费的时间,降低生成的测试用例的测试效率。
发明内容
本发明要解决的问题是:在图形用户界面软件测试中,针对后台处理程序测试的测试用例生成不仅需要耗费大量资源,且生成的测试用例并不足以保证其分支覆盖率和有效性。
本发明的技术方案为:基于符号执行的GUI程序测试用例扩增方法,对于一个GUI待测程序,使用工具Java Path Finder,简称JPF,为待测程序源代码创建“.jpf”文件,并静态分析待测程序代码,获取JPF符号执行分析后产生的有效输入值;确定已有测试用例中需要修改的参数,然后根据控件的名字属性作为关键字搜索与定位到待测程序中所述需要修改的参数对应的位置,得到修改参数有效输入值,再用所述修改参数有效输入值替换已有测试用例原脚本中对应位置的输入值,生成新的测试用例,所述新的测试用例用于扩增原测试用例集。
按照以下步骤生成“.jpf”文件并进行符号执行:
1)扫描待测程序中包含的待测类,并确定其中的程序方法及输入参数的个数;
2)对每个输入参数,随机产生参数值;
3)对于每个待测类,自动生成包含main()方法的java文件,即“.jpf”文件,main()方法中包含待测类中所有的方法;
4)根据新生成的java文件设定JPF执行时的参数,包括target、classpath、symbolic.method、listener、search.multiple_errors和vm.storage.class这6个执行参数:
target:指定新生成的包含待测类的java文件的名字;
classpath:指定新生成的定包含待测类的java文件编译后的bin文件所在目录;
symbolic.method:指定待测类中的待测方法,如果待测类中的一个方法是被另一个方法调用的,则只将进行调用的方法作为待测方法的候选,忽略被调用的方法;
listener:指定JPF中针对符号执行的监控器,设为.symbc.SymbolicListener;
search.multiple_errors:包含True和False两种值,True指在符号执行过程中即使碰到错误仍会继续执行,False指在符号执行过程中碰到错误时停止执行,默认值为True;
vm.storage.class:用于存储状态的类,设为nail,即空;
5)根据步骤4)设定的JPF的执行参数,用JPF执行新生成的包含待测类的java文件,获得该类的符号执行结果,得到有效输入值。
对于一个GUI待测程序,将其前端的输入域和后台代码的参数相对应,以便根据名字属性确定更新输入值的位置。
GUI程序的测试用例主要针对程序界面进行测试。目前已有的基于符号执行的测试用例扩增方法较少,且大部分方法针对命令行程序,并不能对GUI程序界面进行测试用例扩增。主要原因是符号执行针对的是后台逻辑代码,直接用符号执行生成的测试用例并不一定能够满足GUI程序的系统级需求或有效的查出GUI程序存在的问题。假设运用传统的符号执行得到不同路径上的两个测试用例T和T’,虽然T和T’的执行路径并不相同,但这两条路径对应的GUI界面可能是一样的。另外,对于某些GUI界面,并不能够确定其对应程序路径,传统的符号执行无法进行。因此,单纯的使用已有的基于符号执行的测试用例扩增方法并不能满足GUI软件扩增的测试需求。
本发明提出了一种改进的基于符号执行的测试用例扩增方法,该方法在传统符号执行的基础上进行改进,将GUI程序前台界面与后台逻辑代码相对应,以待测程序中控件的名字属性作为关键字在待测程序的脚本中搜索与定位需要置入新输入值的位置,再运用符号执行来生成扩增的测试用例集。
本发明作为一种GUI界面测试技术引入了符号执行技术,通过人工或自动手段,将GUI程序前台界面与后台逻辑代码相结合,得到一条可以执行到待测界面的路径,使得能够运用符号执行的方法完成对GUI程序前台界面测试用例的扩增,让GUI程序前台界面的测试更加充分,从而使得测试人员可以得到较充分的测试用例集,大大提高了GUI程序前台界面的测试效率。
附图说明
图1为本发明实施例的主要流程图。
图2为本发明方法的流程图。
图3为符号执行的示例代码。
图4为图3示例代码的控制流图。
图5为图3示例代码的符号执行树。
具体实施方式
本发明使用的三个主要技术分别是路径分析(Path Analysis)技术,符号执行(Symbolic Execution)技术和约束求解(Constrain Solving)技术。下面介绍方法的流程并具体说明本发明所使用的各项技术的实施方式。
1路径分析技术
符号执行技术是基于路径(控制流)的技术,在用符号变量取代被测程序运行中的实际变量前,需要对被测程序代码进行静态分析,获取代码中的控制流图,例如图3所示的符号执行的示例代码,其控制流图如图4,符号执行树如图5。通常地,控制流图中的每一个节点对应为程序源代码中的一条语句。
2符号执行技术
通过路径分析,可以得到待测程序的控制流图。符号执行技术是指在不执行程序的前提下,使用符号变量替换程序中的变量。然后模拟执行代码,并对每一步中的程序执行状态进行记录。需要记录的程序执行状态一般有程序变量的符号值、路径条件(PC)、程序标记。其中,路径条件即为程序语句的约束条件,程序标记即为当前执行点的后续节点信息。符号执行后,便得到了符号执行树。
符号执行又分为过程内分析和过程间分析(又称全局分析)。过程内分析是指只对单段代码进行分析,而全局分析指对整个软件代码进行分析,包括考虑当前函数的间调用信息和环境信息等。
传统的符号执行在处理大规模或较为复杂的程序存在较大问题,例如,如果某一个路径约束的可满足性无法确定或是程序中包含较为复杂的数据类型,传统的符号执行就无法精确求解路径,从而无法获得满足路径约束的测试用例。
近几年,动态符号执行也得到了广泛发展。与传统的静态符号执行不同,动态符号的基本思想是将符号输入和具体输入值相结合。当碰到复杂路径或是大规模路径时,用具体输入值代替符号输入,这样可以继续进行符号执行并可以得到求解的约束路径,提高了符号执行的效率。并且,由于部分符号输入被具体输入值代替,使得符号执行中的复杂数据结构或表达式得以简化,大大减小了符号执行的代价。
3约束求解技术
符号执行树描述了符号执行技术作用于被测软件时执行的所有路径,其具有如下两个特点:
●对于符号执行树中的每一条路径,总存在实际的输入值能够使得被测试程序代码执行到该路径上的叶子节点。
●从共同的根节点出发的两条路径有且只有一个分叉节点。
符号执行树对符号执行具有非常重要的意义,其中包含的节点顺序、路径条件是否正确直接关系着符号执行的正确与否。符号执行树中的每一个节点都记录了程序当前状态中每个变量的符号值,和路径条件(pc)。约束求解器能够在每条路径的叶子节点处进行约束求解,从而获得能够覆盖每条路径的输入值。
下面通过具体的实例来说明本发明的实施:
本发明选择了两个java程序作为实验程序。两个程序均为开源程序。表1列出了这两个程序的详细信息。
程序 程序行数 初始测试个数
Triangle 191 2
J3Calculator 2202 10
图1为实验的流程,其中初级测试用例不是本发明生成的,是已有的测试用例。本发明需要修改初始的测试用例来生成新的测试用例。
本发明先确定已有测试用例中需要修改的参数,然后根据控件的名称搜索与定位到待测程序中需要修改的参数对应的位置,然后求解该值,用得到的值来扩增测试用例。具体实施方式如图2,介绍如下:对于一个待测GUI程序,首先使用工具Java Path Finder,简称JPF,为待测程序源代码创建“.jpf”文件,并静态分析待测程序代码,获取JPF符号执行分析后产生的有效输入值;确定已有测试用例中需要修改的参数,然后根据参数对应的控件的名字属性作为关键字搜索与定位到待测程序中所述需要修改的参数对应的位置,得到修改参数有效输入值,本发明这里用名字进行搜索,需要修改的参数的名字跟控件的名字是一致的。然后用修改参数有效输入值替换已有测试用例原脚本中对应位置的输入值,生成新的测试用例,所述新的测试用例用于扩增原测试用例集。其中,由于直接使用jpf需要main函数,因此我们按照以下步骤生成“.jpf”文件并进行符号执行:
1)扫描待测程序中包含的待测类,并确定其中的程序方法及输入参数的个数;
2)对每个输入参数,随机产生参数值;
3)对于每个待测类,自动生成包含main()方法的java文件,即“.jpf”文件,main()方法中包含待测类中所有的方法;
4)根据新生成的java文件设定JPF执行时的参数,包括target、classpath、symbolic.method、listener、search.multiple_errors和vm.storage.class这6个执行参数:
target:指定新生成的包含待测类的java文件的名字;
classpath:指定新生成的定包含待测类的java文件编译后的bin文件所在目录;
symbolic.method:指定待测类中的待测方法,也就是在待测类的方法中指定一个方法,等待进行测试,如果待测类中的一个方法是被另一个方法调用的,则只将进行调用的方法作为待测方法的候选,忽略被调用的方法;
listener:指定JPF中针对符号执行的监控器,设为.symbc.SymbolicListener;
search.multiple_errors:包含True和False两种值,True指在符号执行过程中即使碰到错误仍会继续执行,False指在符号执行过程中碰到错误时停止执行,默认值为True;
vm.storage.class:用于存储状态的类,设为nail,即空;
5)根据步骤4)设定的JPF的执行参数,用JPF执行新生成的包含待测类的java文件,获得该类的符号执行结果,得到有效输入值。
对于一个GUI软件,将前端的输入域和后台代码的参数相对应,以控件的名字属性(name)作为关键字在已有测试用例脚本中搜索与定位需要置入新输入值的位置,然后用符号执行生成的有效输入值替换已有测试用例原脚本中的输入值,生成新的测试用例。前端的输入域和后台代码的参数的对应可以用如下两种进行对应:
1)人工确定。该方法是人为的将前端的输入域和后台代码的参数进行对应,为了减少代价,我们让代码的编写人员进行对应,这样可以提高对应的效率和准确度。该方法的优点是可以保证前端的输入域和后台代码的参数对应的准确度,缺点是效率较低且需要消耗大量的人力物力等。
2)自动确定。该方法是通过java类包中自带的函数方法将前端的输入域和后台代码的参数进行对应。该方法的优点是代价较小,缺点是相对于人工确定,该方法的准确性有待提高。
本发明使用JAVA PATH FINDER(JPF)工具,在ECLIPSE开发平台中,基于符号执行技术,通过改变已有测试用例的输入值,增强其测试效率。我们使用JAVA语言实现了基于符号执行的测试用例增强技术:对源程序进行符号执行静态分析,提取分析结果,并将分析结果作用于初级测试用例中,从而获得增强后的测试用例。

Claims (3)

1.基于符号执行的GUI程序测试用例扩增方法,其特征是对于一个GUI待测程序,使用工具Java Path Finder,简称JPF,为待测程序源代码创建“.jpf”文件,并静态分析待测程序代码,获取JPF符号执行分析后产生的有效输入值;确定已有测试用例中需要修改的参数,然后根据控件的名字属性作为关键字搜索与定位到待测程序中所述需要修改的参数对应的位置,得到修改参数有效输入值,再用所述修改参数有效输入值替换已有测试用例原脚本中对应位置的输入值,生成新的测试用例,所述新的测试用例用于扩增原测试用例集。
2.根据权利要求1所述的基于符号执行的GUI程序测试用例扩增方法,其特征是按照以下步骤生成“.jpf”文件并进行符号执行:
1)扫描待测程序中包含的待测类,并确定其中的程序方法及输入参数的个数;
2)对每个输入参数,随机产生参数值;
3)对于每个待测类,自动生成包含main()方法的java文件,即“.jpf”文件,main()方法中包含待测类中所有的方法;
4)根据新生成的java文件设定JPF执行时的参数,包括target、classpath、symbolic.method、listener、search.multiple_errors和vm.storage.class这6个执行参数:
target:指定新生成的包含待测类的java文件的名字;
classpath:指定新生成的定包含待测类的java文件编译后的bin文件所在目录;
symbolic.method:指定待测类中的待测方法,如果待测类中的一个方法是被另一个方法调用的,则只将进行调用的方法作为待测方法的候选,忽略被调用的方法;
listener:指定JPF中针对符号执行的监控器,设为.symbc.SymbolicListener;
search.multiple_errors:包含True和False两种值,True指在符号执行过程中即使碰到错误仍会继续执行,False指在符号执行过程中碰到错误时停止执行,默认值为True;
vm.storage.class:用于存储状态的类,设为nail,即空;
5)根据步骤4)设定的JPF的执行参数,用JPF执行新生成的包含待测类的java文件,获得该类的符号执行结果,得到有效输入值。
3.根据权利要求1或2所述的基于符号执行的GUI程序测试用例扩增方法,其特征是对于一个GUI待测程序,将其前端的输入域和后台代码的参数相对应,以便根据名字属性确定更新输入值的位置。
CN201410712797.8A 2014-11-28 2014-11-28 基于符号执行的gui程序测试用例扩增方法 Expired - Fee Related CN104536880B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410712797.8A CN104536880B (zh) 2014-11-28 2014-11-28 基于符号执行的gui程序测试用例扩增方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410712797.8A CN104536880B (zh) 2014-11-28 2014-11-28 基于符号执行的gui程序测试用例扩增方法

Publications (2)

Publication Number Publication Date
CN104536880A true CN104536880A (zh) 2015-04-22
CN104536880B CN104536880B (zh) 2017-09-15

Family

ID=52852410

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410712797.8A Expired - Fee Related CN104536880B (zh) 2014-11-28 2014-11-28 基于符号执行的gui程序测试用例扩增方法

Country Status (1)

Country Link
CN (1) CN104536880B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN106933735A (zh) * 2015-12-30 2017-07-07 优信拍(北京)信息科技有限公司 测试用例更新方法及装置
CN107885095A (zh) * 2017-09-26 2018-04-06 浙江浙大列车智能化工程技术研究中心有限公司 Cbtc系统自动化测试装置及其测试方法
CN107885663A (zh) * 2017-11-29 2018-04-06 中国电子产品可靠性与环境试验研究所 测试用例自动生成的方法、装置、计算机设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044346A (en) * 1998-03-09 2000-03-28 Lucent Technologies Inc. System and method for operating a digital voice recognition processor with flash memory storage
CN101212362A (zh) * 2006-12-26 2008-07-02 中兴通讯股份有限公司 一种融合多类型测试工具的自动化测试装置及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044346A (en) * 1998-03-09 2000-03-28 Lucent Technologies Inc. System and method for operating a digital voice recognition processor with flash memory storage
CN101212362A (zh) * 2006-12-26 2008-07-02 中兴通讯股份有限公司 一种融合多类型测试工具的自动化测试装置及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
钟诚 等: "运用类复制变异和JPF技术生成类间测试用例", 《小型微型计算机系统》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106933735A (zh) * 2015-12-30 2017-07-07 优信拍(北京)信息科技有限公司 测试用例更新方法及装置
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN106709356B (zh) * 2016-12-07 2019-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN107885095A (zh) * 2017-09-26 2018-04-06 浙江浙大列车智能化工程技术研究中心有限公司 Cbtc系统自动化测试装置及其测试方法
CN107885663A (zh) * 2017-11-29 2018-04-06 中国电子产品可靠性与环境试验研究所 测试用例自动生成的方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN104536880B (zh) 2017-09-15

Similar Documents

Publication Publication Date Title
US10025696B2 (en) System and method for equivalence class analysis-based automated requirements-based test case generation
Kamimura et al. Extracting candidates of microservices from monolithic application code
CN106354630B (zh) 一种基于动态符号执行的软件缺陷检测方法
US20130179863A1 (en) Bug variant detection using program analysis and pattern identification
CN106649100A (zh) 一种自动化测试方法及系统
US7895575B2 (en) Apparatus and method for generating test driver
CN102804147A (zh) 执行abap源代码的代码检查的代码检查执行系统
CN103092761A (zh) 基于差异信息文件识别和检查修改代码块的方法及装置
US9389852B2 (en) Technique for plagiarism detection in program source code files based on design pattern
Kirbas et al. The relationship between evolutionary coupling and defects in large industrial software
CN104899147A (zh) 一种面向安全检查的代码静态分析方法
CN103425572A (zh) 代码分析方法及代码分析系统
US9619212B2 (en) Providing code, code generator and software development environment
CN103425584A (zh) 基于Java字节码的大型应用回归测试信息处理方法
CN108804304B (zh) 测试用例生成方法及装置、存储介质、电子设备
CN108710571B (zh) 一种生成自动化测试代码的方法和装置
US20150286555A1 (en) System and method for converting the business processes to test-centric activity diagrams
CN106371997A (zh) 一种代码检查方法及装置
CN104536880A (zh) 基于符号执行的gui程序测试用例扩增方法
CN105930257A (zh) 一种确定目标测试用例的方法及装置
CN109614325B (zh) 一种确定控件属性的方法及装置、电子设备和存储介质
CN104615544A (zh) 面向问题的gui软件关联功能分析方法及装置
Zhou et al. Extracting configuration knowledge from build files with symbolic analysis
CN107622017B (zh) 一种通用自动化软件测试的解析方法
CN103914379A (zh) 故障自动注入与故障检测的方法及其系统

Legal Events

Date Code Title Description
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 210093 Hankou Road, Drum Tower District, Nanjing, Jiangsu Province, No. 22

Co-patentee after: Jiangsu Testing and Certification Co., Ltd.

Patentee after: Nanjing University

Address before: 210093 Hankou Road, Drum Tower District, Nanjing, Jiangsu Province, No. 22

Co-patentee before: JIANGSU SUCE SOFTWARE DETECTION TECHNOLOGY CO., LTD.

Patentee before: Nanjing University

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170915

Termination date: 20201128