CN107608890A - 一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 - Google Patents
一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 Download PDFInfo
- Publication number
- CN107608890A CN107608890A CN201710856144.0A CN201710856144A CN107608890A CN 107608890 A CN107608890 A CN 107608890A CN 201710856144 A CN201710856144 A CN 201710856144A CN 107608890 A CN107608890 A CN 107608890A
- Authority
- CN
- China
- Prior art keywords
- node
- control
- event handling
- test case
- models
- 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.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于带权重的事件处理函数模型生成GUI(Graphic User Interface,图形用户界面)软件测试用例的方法,本发明首先对被测软件执行逆向工程,首先识别被测软件中的所有控件以及控件的属性,并且对被测软件源代码静态分析,获得所有事件处理函数之间的定义‑引用对,根据定义‑引用对给所有事件增加权重,给事件之间增加依赖度,生成带权重的事件处理函数模型。最后提出了基于该模型生成测试用例的算法,并指导测试用例集的生成。本方法在生成有效的测试用例基础上约减了测试用例集的大小,提高了测试用例集尽快发现AUT中缺陷的能力。
Description
1技术领域
本发明涉及一种GUI软件测试用例生成方法,特别是一种基于带权重的事件处理函数模型生成GUI软件测试用例的方法,该方法属于软件测试技术领域。
2背景技术
随着信息技术的飞速发展,计算机软件渐渐深入到社会中的各个领域。然而,在软件的设计、开发等阶段都可能引入错误从而导致软件功能部分或者整体失效,甚至引发严重的生产安全问题。这使得软件质量也不得不受到人们的关注。
图形用户界面(Graphical User Interface,GUI)作为下层应用代码的前端表示,对诸如点击鼠标、选择菜单等用户事件做出相应的响应。因为其相对于早期计算机中的命令行界面更直观且易于操作等特点,使其渐渐成为当今软件系统中人机交互过程不可或缺的方式。出于易用性的考虑,现今软件开发人员通常采用更多的代码来实现应用软件的GUI,几乎能占到整个应用软件程序代码量的60%,甚至在一些需要严格安全性要求的软件中也逐渐在采用作为人机交互界面。所以,GUI功能的正确性和鲁棒性也成为保证整个软件可用性和安全性等的重要部分,对GUI的测试也应该成为整个软件测试流程中不可或缺的部分。
GUI相对于传统软件存在诸多特点,使得传统的测试方法无法有效地运用到GUI测试上。首先,传统测试方法涉及到的软件都是基于过程模式,程序设计者和测试人员都能清楚地知道整个程序流程,从而设计相应的测试用例。然而GUI最大一个特点就是其是基于事件驱动模式,即GUI是依靠用户输入事件触发相应的事件处理程序,因为用户输入的随机性,使得整个程序执行也有相当大的随机性,对下一步的执行事件与程序流程基本上都是不可预知的。其次,因为GUI是以事件作为输入单位,并且事件之间相对比较独立,事件之间完整的排列组合使得GUI的输入空间极其巨大,使用传统的测试方法所生成的测试用例很难达到测试覆盖的要求。同时,即使是对于相同的输入事件集合,如果事件输入顺序不同,其GUI内部状态都可能不同,所以巨大的输入空间也导致了GUI内部巨大的状态空间,直接影响到其后的测试评判生成的难度,使得传统的测试方法难以适应。最后,因为GUI是以事件作为输入,且事件之间存在大量的交互关系,使得传统测试中的诸如分支覆盖、语句覆盖等经典的覆盖准则很难适用于GUI测试中,无法有效地指导测试进程。
GUI测试是一个新的测试研究领域,随着GUI应用的快速发展,GUI测试的研究却相对滞后,这对整个软件开发和测试过程都有着不可估量的影响。测试用例生成问题是软件测试的核心所在,同时,因为GUI的图形界面特点和巨大的状态空间,使得测试评判的生成也存在诸多难点,所以研究针对GUI而特有的测试用例生成和测试评判生成方法有极其重要的意义。
3发明内容
3.1发明目的
为了解决大量的测试用例无法尽快找到软件缺陷的问题,本发明提出一种基于带权重的事件处理函数模型生成GUI软件测试用例的方法对GUI软件建模。这一模型生成具有优先级的测试用例,一方面能尽快找到软件缺陷,另一方面为大型项目的测试用例精简提供了帮助,提高了软件测试的效率。
3.2技术方案
本发明为解决其技术问题采用如下技术方案,具体包含以下几个步骤:
步骤一:利用Windows操作系统提供的微软UIA(User Interface Automation,用户界面自动化)框架识别AUT(Application Under Test,待测软件)中的所有控件以及控件的属性,并通过UIA提供的接口驱动AUT执行,并生成该AUT的EFG模型;
步骤二:利用Roslyn工具对SUT源代码静态分析,获得所有事件处理函数之间的定义-引用对,根据定义-引用对给所有控件设置权重,在控件之间设置依赖度大小值,生成WEHG模型;
步骤三:利用WEHG(Event-Hander Graph based on Weight,带权重的事件处理函数模型)模型生成抽象的测试用例集;
步骤四:将抽象的测试用例集每一个测试用例结合EFG模型生成完整的测试用例。
上述步骤一中,对于UI用户界面来说,所有显示在桌面的UI,实际上是一个个的UITree Node,根节点是desktop。我们可以使用UI Spy获得窗体和控件的相关信息,包含6种被测试对象的识别属性:Name,ClassName,ControlType,AutomationID,FrameworkID,ProcessName,ProcessID。通过调用UI Spy工具来从根结点向子结点逐层遍历,生成当前待测软件控件树的视图。事件流图(EFG)模型由一个三元组M=(E,R,I)组成,EFG中节点表示事件,有向边表示事件的先后关系,结合视图生成EFG模型。
上述步骤二中,带权重的事件处理函数图(WEHG)由一个四元组EHG=(V,E,ψ,Ω)组成,V表示事件处理函数集合,E表示V中元素对的有穷集合,边(e,u,e′)∈ψ表示结点之间的依赖关系。u∈N表示e和e′之间的依赖度,ω∈Ω表示当前结点的权重值。通过对AUT源代码的分析获得所有事件处理函数之间的定义-引用对,结合定义-引用对计算得到结点之间的依赖度以及每个结点的权重值,生成WEHG模型,建立WEHG模型的算法如表1所示。
表1构造WEHG模型算法
上述步骤三中,如表2所示,结合WEHG模型,从集合V中选取权重w值最大的结点e1,加入队列t1中,从集合V中查找和结点e1依赖度最大的结点ej,加入t1中,从集合V中查找和结点ek依赖度最大的结点ek,加入t1中,直至某个结点后没有依赖度大于1的跟随结点。得到队列t1(e1,ej,ek…)。
接着再找和结点e1依赖度低于ej的结点em加入t2中,从集合V中查找和结点em依赖度最大的结点en,加入t2中,直至某个结点后没有依赖度大于1的跟随结点。得到队列t2(e1,em,en…)。同样的会生成t3,t4等等和t1相关的队列。
然后查找权重值次之的结点再次进行遍历,从而得到所有的抽象测试用例。
表2基于WEHG模型生成抽象测试用例算法
上述步骤四中,如表3所示,将步骤一生成的EFG模型图和步骤三生成的抽象测试用例集作为输入,在抽象测试用例里面的任意两个相邻的事件<e0,e1>如果e1不能在e0执行后立即执行,那么就在EFG模型中获得e0到e1的最短可达路径。通过不断地迭代,对于每个抽象测试用例都能结合EFG模型生成一个完整的测试用例。
表3生成可执行测试用例算法
3.3有益效果
本发明采用以上技术方案与现有技术相比,具有以下有益效果:
1)本发明结合GUI软件代码层和模型层对待测软件进行分析和建模,其测试对象粒度更具体。
2)本发明会降低冗余测试用例和无效测试用例的生成。
3)本发明考虑了事件和事件之间的依赖关系以及事件本身的权重,生成了具有优先级排序的测试用例集,在版本更新较快或者窗体界面较多的GUI软件中能够生成针对性更强的测试用例集,并且把能更快发现软件缺陷的测试用例优先执行,提高了软件测试的效率。
4附图说明
图1是待测软件部分窗体示意图
图2是对“替换”窗口构造的EFG模型图
图3是对“替换”窗口构造的基于WEHG模型图
5具体实施方式
以下结合附图和实施例对本发明的技术方案做进一步详细说明.
本实例所选取的被测对象为Notepad(http://download.csdn.net/detail/Canolai/2404328),Notepad是一个记事本程序的C#开源实现,如图1所示为Notepad部分窗口,是一个标准的GUI控件实现,该待测软件规模较小,包含的控件类型丰富,GUI对象间的关系比较复杂,具有一定的代表性。具体实施步骤包括:
步骤一:使用UIA Spy工具获取Notepate的窗体和控件的信息,获得控件树的视图,并构造EFG模型图,如图2所示为EFG模型图中的一部分,矩形框内为“替换”窗口控件,其中结点e1、e2、e3、e4、e5、e6、e7、e8分别对应控件【编辑】、【替换】、【查找内容输入框】、【替换为输入框】、【查找下一个】、【替换】、【全部替换】、【取消】,结点的边表示控件执行的先后次序,可以看出EFG模型中很多控件执行的先后次序是无效的,如结点对<e8,e5>,因为在结点e8对应的控件【取消】执行后当前窗口会关闭,无法再继续点击e5控件,因此我们接下来要建立一个模型来消除这些边,避免产生无效的测试用例。
步骤二:利用Roslyn工具对源代码进行静态分析,获取Notepad中所有事件处理函数之间的定义-引用对,图1中窗口的定义-引用对如表4所示,通过定义-引用对可以计算得到e5,e6,e7,e8结点的权重以及结点之间的依赖关系,这边以e5结点为例计算e5结点的权重值ω(e5),以依赖关系<e5,e6>为例计算结点e5和结点e6之间的依赖度u。将结点e5对应的事件处理函数的所有执行“写”操作的变量放入集合W={str;select;fm.richTextBoxl.Selected.Start},将结点e5对应的事件处理函数的所有执行“读”操作的变量放入集合R={textboxl.Text;fm.richTextBoxl.SelectedText;select;start},R和W的并集数就是当前事件权重ω的值,即ω|R∪W|=6。将结点e5对应的事件处理函数的所有执行“写”操作的变量放入集合W′={str;select;fm.richTextBoxl.Selected.Start},将结点e6对应的事件处理函数的所有执行“读”操作的变量放入集合R′={fm.richTextBoxl.SelectedText;str;textBox2.Text},R′和W′的交集数就是e和e′之间u的值,即u=|R′∩W′|=2。根据事件处理函数对应的结点以及计算得到的权重值和依赖度大小建立带权重的事件处理函数模型WEHG,如图3所示。
表4“替换”窗口的定义-引用对
步骤三:结合基于WEHG模型生成抽象测试用例算法对WEHG模型进行分析,设置len值为2,top值为4,首先选择事件权重值最大的结点,这里有两个结点e5和e7,权重值相同的随机选择,这里选择e5作为抽象测试用例的第一个结点,接着找到结点e5作为出度的所有边,选择依赖度值最大的边,这里会发现<e5,e6>的依赖度最大,所以选择e6作为抽象测试用例的第二个结点。由于len值为2,也就是说抽象测试用例只允许包含两个结点,于是这个抽象测试用例s1为{e5,e6},这个测试用例的优先级p为结点e5和结点e6权重值的和与依赖度的乘积,即p=(ω(e5)+ω(e6))*u=18。接着找依赖度值次之的结点,直到e5作为第一个结点被使用四次后停止e5作为第一个结点生成抽象测试用例,接着找权重值次之的结点进行遍历生成抽象测试用例,直到所有权重值大于1的结点都被作为第一个结点生成测试用例后结束循环,并输出抽象测试用例集S,如下表5所示。结点e8由于不存在定义-引用对,和其他结点依赖度很小,在此结点执行后执行其他结点与只执行此结点对结点e8效果是一样的。
表5生成的抽象测试用例集S
步骤四:首先从已生成的抽象测试用例集里面找到权重值最大的抽象测试用例s9={e7→e7},判断抽象测试用例中第一个结点e7是否能够直接执行,可以看到e7结点不能直接执行,需要结合EFG模型中获得到e7结点的最短可达路径e1→e2→e7,然后判断抽象测试用例中第二个结点e7能否在第一个结点e7执行后立即执行,从EFG模型图中可以看到e7可以在e-执行后立即执行,从而得到第一个可执行用例t1={e1→e2→e7→e7}。接着从已生成的抽象测试用例集里面找到权重值最大的抽象测试用例s1={e5→e6},通过不断的迭代,对于每个抽象测试用例都能结合EFG模型生成一个完整的测试用例T,如表6所示。
表6生成可执行测试用例集T
Claims (5)
1.一种基于带权重的事件处理函数模型生成GUI软件测试用例的方法,其特征在于包括如下步骤:
步骤一:利用Windows操作系统提供的微软UIA(User Interface Automation,用户界面自动化)框架识别AUT(Application Under Test,待测软件)中的所有控件以及控件的属性,并通过UIA提供的接口驱动AUT执行,并生成该AUT的EFG模型;
步骤二:对SUT源代码静态分析,获得所有事件处理函数之间的定义-引用对,根据定义-引用对给所有控件设置权重,在控件之间设置依赖度大小值,生成WEHG模型;
步骤三:利用WEHG(Event-Hander Graph based on Weight,带权重的事件处理函数模型)模型生成抽象的测试用例集;
步骤四:将抽象的测试用例集每一个测试用例结合EFG模型生成完整的测试用例。
2.根据权利要求1所述的方法,其特征在于,所述步骤一进一步包括:
利用UISPY工具获得主窗体句柄作为当前窗体控件树的根结点,通过UIA框架提供的TreeWalker类,使用深度遍历算法递归构造当前窗口为根结点的控件树,从而获取所有窗体中控件的信息以及窗体之间的依赖关系。
3.根据权利要求1或2所述的方法,其特征在于,所述步骤二进一步包括:
通过对程序源代码的静态分析,获取所有事件处理函数中GUI变量之间的关系并构造EHG模型,得到SUT的所有定义-引用对。
将当前结点对应的事件处理函数的所有执行“写”操作的变量放入集合W,将当前结点对应的事件处理函数的所有执行“读”操作的变最放入集合R,R和W的并集数就是当前控件权重的值ω,即ω=|R∪W|。
将结点e对应的事件处理函数的所有执行“写”操作的变量放入集合W′,将结点e′对应的事件处理函数的所有执行“读”操作的变量放入集合R′,R′和W′的交集数就是控件e和控件e′之间的依赖度u,即u=|R′∩W′|。
结合SUT的EHG模型以及所有控件的权重值以及控件之间的依赖度生成WEHG模型。
4.根据权利要求3所述的方法,其特征在于,所述步骤三进一步包括:
结合WEHG模型,从集合V中选取权重w值最大的结点(模型中每个结点对应SUT上的一个控件)e1,加入队列t1中,从集合V中查找和结点e1依赖皮最大的结点ej,加入到队列t1中,从集合V中查找和结点ej依赖度最大的结点ek,加入t1中,直至某个结点后没有依赖度大于1的跟随结点。得到队列t1(e1,ej,ek,…)。
接着再找和结点e1依赖度低于ej的结点em加入t2中,从集合V中查找和结点em依赖度最大的结点en,加入到队列t2中,直至某个结点后没有依赖度大于1的跟随结点。得到队列t2(e1,em,en…)。同样的会生成t3,t4等等和t1相关的队列。
然后查找权重值次之的结点再次进行遍历,直到生成所有的抽象测试用例。
5.根据权利要求1或4所述的方法,其特征在于,所述步骤四进一步包括:
将WEHG模型生成的每个抽象测试用例中的每个控件依次结合EFG模型判断是否可执行,如果不能立即在上一个控件执行完后执行,就结合EFG模型增加控件使得当前控件可以在上一个控件执行后执行,从而生成可以执行的测试用例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710856144.0A CN107608890A (zh) | 2017-09-15 | 2017-09-15 | 一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710856144.0A CN107608890A (zh) | 2017-09-15 | 2017-09-15 | 一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107608890A true CN107608890A (zh) | 2018-01-19 |
Family
ID=61061318
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710856144.0A Pending CN107608890A (zh) | 2017-09-15 | 2017-09-15 | 一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107608890A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110580222A (zh) * | 2019-08-29 | 2019-12-17 | 清华大学 | 一种软件测试用例生成方法及系统 |
CN112506766A (zh) * | 2020-12-02 | 2021-03-16 | 华南理工大学 | 交互式测试用例的自动生成方法 |
CN112948257A (zh) * | 2021-03-23 | 2021-06-11 | 北京鸿腾智能科技有限公司 | 内核模糊测试用例生成方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030236775A1 (en) * | 2002-06-20 | 2003-12-25 | International Business Machines Corporation | Topological best match naming convention apparatus and method for use in testing graphical user interfaces |
CN102282542A (zh) * | 2008-10-14 | 2011-12-14 | 奇托尔·V·斯里尼瓦桑 | 对于多核芯片建立正式验证的并行软件的ticc-范例 |
CN102799428A (zh) * | 2012-06-28 | 2012-11-28 | 北京大学 | 交互式软件中的操作记录与回放方法 |
-
2017
- 2017-09-15 CN CN201710856144.0A patent/CN107608890A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030236775A1 (en) * | 2002-06-20 | 2003-12-25 | International Business Machines Corporation | Topological best match naming convention apparatus and method for use in testing graphical user interfaces |
CN102282542A (zh) * | 2008-10-14 | 2011-12-14 | 奇托尔·V·斯里尼瓦桑 | 对于多核芯片建立正式验证的并行软件的ticc-范例 |
CN102799428A (zh) * | 2012-06-28 | 2012-11-28 | 北京大学 | 交互式软件中的操作记录与回放方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110580222A (zh) * | 2019-08-29 | 2019-12-17 | 清华大学 | 一种软件测试用例生成方法及系统 |
CN112506766A (zh) * | 2020-12-02 | 2021-03-16 | 华南理工大学 | 交互式测试用例的自动生成方法 |
CN112948257A (zh) * | 2021-03-23 | 2021-06-11 | 北京鸿腾智能科技有限公司 | 内核模糊测试用例生成方法、装置、设备及存储介质 |
CN112948257B (zh) * | 2021-03-23 | 2024-05-14 | 三六零数字安全科技集团有限公司 | 内核模糊测试用例生成方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193739B (zh) | 一种黑盒回归测试方法 | |
CN104679519B (zh) | 图形用户界面软件功能获取方法及装置 | |
Catal et al. | Practical development of an Eclipse-based software fault prediction tool using Naive Bayes algorithm | |
US8656352B2 (en) | System and method for synchronized workflow management | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
Hamon et al. | Formal description of multi-touch interactions | |
KR20160058947A (ko) | 데이터에 적용되는 규칙 평가 | |
CN108027721B (zh) | 用于使用控件来配置通用程序的技术 | |
CN107608890A (zh) | 一种基于带权重的事件处理函数模型生成gui软件测试用例的方法 | |
Miao et al. | An FSM based GUI test automation model | |
Sivanandan | Agile development cycle: Approach to design an effective Model Based Testing with Behaviour driven automation framework | |
Bures et al. | Testing the usability and accessibility of smart tv applications using an automated model-based approach | |
Lu et al. | Model-based incremental conformance checking to enable interactive product configuration | |
CN107168705A (zh) | 图形界面语义描述系统及其建立方法和操作路径生成方法 | |
Bures et al. | SmartDriver: Extension of selenium WebDriver to create more efficient automated tests | |
Meyers et al. | Automated testing support for reactive domain-specific modelling languages | |
Oguz et al. | Extracting information from large scale graph data: Case study on automated ui testing | |
Campos et al. | GUIsurfer: A reverse engineering framework for user interface software | |
Schmidt et al. | Automatic generation of thread communication graphs from SystemC source code | |
Posse et al. | Processing causal block diagrams with graphgrammars in atom3 | |
Paler | SurfBraid: A concept tool for preparing and resource estimating quantum circuits protected by the surface code | |
Tanida et al. | Automated system testing of dynamic web applications | |
Gerlitz et al. | Flow sensitive slicing for MATLAB/Simulink models | |
Grechanik et al. | Differencing graphical user interfaces | |
US20200133825A1 (en) | Systems and methods for debugging applications created with a graphical programming language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180119 |
|
WD01 | Invention patent application deemed withdrawn after publication |