CN109426609A - 测试应用的方法和装置 - Google Patents
测试应用的方法和装置 Download PDFInfo
- Publication number
- CN109426609A CN109426609A CN201710757161.9A CN201710757161A CN109426609A CN 109426609 A CN109426609 A CN 109426609A CN 201710757161 A CN201710757161 A CN 201710757161A CN 109426609 A CN109426609 A CN 109426609A
- Authority
- CN
- China
- Prior art keywords
- weight
- function
- logic module
- background logic
- execution
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开涉及用于测试应用的方法和装置。根据本公开的用于测试应用的方法包括:将应用分解为前台执行模块和后台逻辑模块,前台执行模块调用后台逻辑模块;确定后台逻辑模块中的函数的权重;将前台执行模块分解成代码块,代码块形成执行路径;基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重;基于所确定的执行路径的权重生成测试用例;以及使用所生成的测试用例对应用进行测试。根据本公开的技术,可以获得最重要的测试用例,从而提高应用的测试效率,降低测试成本。
Description
技术领域
本公开涉及测试应用的方法和装置。特别地,本公开涉及适用于对牵涉在区块链上运行的智能合约的应用进行测试的方法和装置。
背景技术
区块链技术起源于比特币。区块链可被视为一种以去中心化方式进行操作的分布式数据库。区块链技术通过使用数据加密、时间戳、分布式共识和经济激励等手段,在分布式系统中的交易节点无需互相信任的情况下,实现基于去中心化的点对点交易、协调与协作,从而解决中心化机构普遍存在的高成本、低效率和数据存储不安全等问题。
随着近年来比特币的发展和普及,区块链作为一种新形式的具有普适性的分布式底层架构,可以应用于金融、经济、科技甚至政治等各个领域。
智能合约是存储在区块链上的脚本代码,它们可以被区块链上的交易所触发,触发后,这段代码可以从区块链读取数据或者向区块链写入数据。目前,智能合约得到越来越多的关注,已被众多研究人员引入到涉及区块链的应用中。这类应用通常被成为去中心化应用(Decentralize Application,DApp)。
然而,DApp的测试是极为困难的。首先,DApp通常包含智能合约和调用智能合约的前端源码。如上文所述,智能合约存储在区块链上,而前端源码通常存储在客户端上,导致对DApp的测试涉及存储在不同位置代码,因而测试是困难的。
再者,智能合约通常涉及众多的商业行为,当智能合约被存储到区块链上并且为区块链上的所有节点所接受时,难以对智能合约进行修改。在这一点上,智能合约中的极小的错误也可能造成难以估量的损失。
此外,由于区块链是基于点对点(peer to peer)的分布式网络而构建的,因而每次交易必须经过分布式网络中的全体节点验证并达成共识之后才能被记录在区块链中。因此,对于涉及智能合约的应用,由于区块链需要全部节点达成共识之后才能确认交易的特点,该应用的测试是极为耗时的。尤其是在区块链出现支链而必须进行剪枝的情况下,涉及智能合约的应用的测试更是需要付出极大的时间成本。
因此,需要一种能够高效地对涉及智能合约的应用进行测试的技术。
发明内容
在下文中将给出关于本公开的简要概述,以便提供关于本公开的某些方面的基本理解。应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图确定本公开的关键或重要部分,也不是意图限定本公开的范围。其目的仅仅是以简化的形式给出某些概念,以此作为稍后论述的更详细描述的前序。
针对现有技术中存在的问题,本公开提出了能够高效地对涉及智能合约的应用进行测试的技术。根据本公开的技术,对应用进行分析以找到最为重要的执行路径并据此生成测试用例并且使用所生成的测试用例对应用进行测试,从而极大地缩短了测试时间并且降低了测试成本。
根据本公开的一个方面,提供了一种用于测试应用的方法,其包括:
将应用分解为前台执行模块和后台逻辑模块,前台执行模块调用后台逻辑模块;
确定后台逻辑模块中的函数的权重;
将前台执行模块分解成代码块,代码块形成执行路径;
基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重;
基于所确定的执行路径的权重生成测试用例;以及
使用所生成的测试用例对应用进行测试。
根据本公开的另一方面,提供了一种用于测试应用的装置,其包括:
第一分解单元,被配置成将应用分解为前台执行模块和后台逻辑模块,前台执行模块调用后台逻辑模块;
第一确定单元,被配置成确定后台逻辑模块中的函数的权重;
第二分解单元,被配置成将前台执行模块分解成代码块,代码块形成执行路径;
第二确定单元,被配置成基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重;
生成单元,被配置成基于所确定的执行路径的权重生成测试用例;以及
测试单元,被配置成使用所生成的测试用例对应用进行测试。
根据本公开的又一方面,还提供了能够实现上述方法的计算机程序。此外,还提供了具有至少计算机可读介质形式的计算机程序产品,其上记录有用于实现上述方法的计算机程序代码。
附图说明
参照下面结合附图对本公开实施方式的说明,会更加容易地理解本公开的以上和其它目的、特点和优点,在附图中:
图1是示出本公开的实施方式的用于测试应用的方法的流程图;
图2是示出本公开的实施方式的用于测试应用的方法的示意图;
图3A示出了用于换电站的智能合约的源代码;
图3B是示出根据用于换电站的智能合约的源代码构造的函数和变量的关系图;
图4是示出根据本公开的实施方式的确定后台逻辑模块中的函数的权重的方法的流程图;
图5是示出根据本公开的实施方式的将前台执行模块分解为代码块并且形成执行路径的示意图;
图6是示出根据本公开的实施方式的用于测试应用的装置的框图;以及
图7是示出可用来实现根据本公开的实施方式的用于测试应用的方法以及装置的通用机器的结构简图。
具体实施方式
在下文中将结合附图对本公开的示例性实施方式进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施方式的过程中可以做出很多特定于实施方式的决定,以便实现开发人员的具体目标,并且这些决定可能会随着实施方式的不同而有所改变。
在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本公开,在附图中仅仅示出了与根据本公开的方案密切相关的部件,而省略了与本公开关系不大的其他细节。
如上文在“背景技术”章节中所提及的,区块链是基于点对点的分布式网络而构建的,因而智能合约涉及的每次交易必须经过分布式网络中的全体节点验证并达成共识之后才能被记录在区块链中。因此,涉及智能合约的DApp的测试需要等待较长的时间以被分布式网络中的全体节点验证并确认。如果对DApp的所有可能的测试用例逐一进行测试,则所带来的时间成本是无法想象也是不能接受的。因此,本发明人提出了一种新型且改进的测试应用的方法,该方法对应用的架构进行分析,根据分析结果找出最为常用(也可被认为最为重要)的执行路径,并且基于该执行路径生成测试用例以对应用进行测试。
例如,应用通过存储在本地的代码(称为前台执行模块)调用诸如存储在区块链上的智能合约的、存储在远程位置的逻辑模块(称为后台逻辑模块)。根据本公开的技术,首先对后台逻辑模块的源代码进行分析以获得后台逻辑模块所包含的函数和变量之间的关系,从而确定后台逻辑模块中的函数的权重,该权重可被认为反映了函数的重要性。
随后,对前台执行模块的伪代码进行分析以获得前台执行模块的每条执行路径,根据执行路径中调用的后台逻辑模块所包含的函数的权重确定每条执行路径的权重,该权重可被认为反映了执行路径的重要性。这样,开发人员或测试人员可以根据各个执行路径的权重选取适当的执行路径来生成测试用例,并且使用所生成的测试用例对应用进行测试。
下面将结合附图来更详细地描述根据本公开的实施方式。
图1是示出本公开的实施方式的用于测试应用的方法100的流程图。图2是示出本公开的实施方式的用于测试应用的方法100的示意图。
根据本公开的实施方式,用于测试应用的方法100开始于步骤S101。在步骤102中,将应用分解为前台执行模块和后台逻辑模块,前台执行模块调用后台逻辑模块。随后,在步骤S103中,确定后台逻辑模块中的函数的权重。在步骤104中,将前台执行模块分解成代码块,代码块形成执行路径。在步骤S105中,基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重。在步骤S106中,基于所确定的执行路径的权重生成测试用例。接着,在步骤S107中,使用所生成的测试用例对应用进行测试。方法100结束于步骤S108。
下面对用于测试应用的方法100的步骤S102至S107进行更详细的描述。
在步骤S102中,将应用分解为前台执行模块和后台逻辑模块可以基于多种标准来执行。例如,可以基于代码存储的位置进行分解,即将存储在本地的代码确定为前台执行模块,将存储在远程位置的代码例如存储在区块链上的智能合约确定为后台逻辑模块。此外,也可以基于应用的层级结构来执行应用的分解。例如,可以将实现特定功能的较为复杂的代码段也确定为后台逻辑模块。
根据本公开的实施方式,在应用运行期间,前台执行模块通过调用后台逻辑模块来实现应用的功能。
在步骤S102中将应用分解为前台执行模块和后台逻辑模块之后,方法100前往步骤S103,其中确定后台逻辑模块中的函数的权重。
根据本公开的实施方式,可以基于后台逻辑模块中的函数和变量之间的关系来计算函数的权重。为了确定后台逻辑模块中包括的各个函数的权重,可以对后台逻辑模块的源代码进行分析以获得其中包含的函数之间的关系以及函数与变量之间的关系,并且基于所获得的关系来确定函数的权重。函数之间的关系是调用关系,而函数与变量之间的关系是读写操作关系。
根据本公开的实施方式,可以基于函数之间的调用关系以及函数与变量之间的读写操作关系来构造关系图,并且根据关系图来计算函数的权重。如图2所示,对后台逻辑模块的代码进行分析以确定其中包括的函数和变量以及它们彼此之间的关系。
在图2所示的情况中,后台逻辑模块包括函数Fun_1、Fun_2、Fun_3、Fun_4和Fun_5以及变量Var_1和Var_2。随后,根据函数Fun_1-Fun_5之间的调用关系以及函数Fun_1-Fun_5与变量Var_1-Var_2之间的读写操作关系来构造关系图。关系图中的节点表示函数或变量,函数节点之间的箭头表示调用关系,例如函数Fun_1到函数Fun_2的箭头表示函数Fun_1调用函数Fun_2。此外,关系图中的函数节点与变量节点之间的箭头表示读写操作关系,例如函数Fun_1到变量Var_2的箭头表示函数Fun_1对变量Var_2进行读写。
函数与变量之间的读写操作可以包括例如赋值操作、修改操作、删除操作或者读取操作。具体地,赋值操作指的是函数向变量赋初值的操作,也可被称为初始化操作。修改操作指的是函数修改变量值的操作。删除操作指的是在函数中删除变量,或者在函数执行结束后由系统删除变量的操作。读取操作指的是函数读取变量值的操作。
作为具体应用示例,这里进一步结合涉及换电站的智能合约的应用描述如何构造后台逻辑模块中包括的函数和变量的关系图。
下面对换电站的智能合约进行简要的介绍。
电动汽车(electric vehicle:EV)是指以车载电池为动力源,通过电机进行驱动的汽车。为此,建设了用于为电动汽车更换电池的换电站,电动汽车可以在换电站将电力已耗尽的电池更换成充满电的电池并支付或收取相应的费用。电动汽车和换电站作为节点组成区块链的点对点分布式网络,可以基于区块链技术通过智能合约实现与电池更换有关的自动交易。
图3A示出了用于换电站的智能合约的源代码,以及图3B是示出根据用于换电站的智能合约的源代码构造的函数和变量的关系图。
通过对图3A的智能合约的源代码进行分析,可以构造图3B所示的关系图。图3B中示出了在图3A的智能合约中包括的函数和变量以及它们之间的关系,其中矩形框表示智能合约中包括的函数,以及椭圆框表示智能合约中包括的变量。此外,在图3B中,在从函数到变量的箭头处标出了函数对变量所执行的具体的读写操作。例如,从函数“addBatteryBasicInfo()”到变量“arrayBattries”的箭头处标有“修改”,表示函数“addBatteryBasicInfo()”对变量“arrayBattries”的变量值进行修改。
在构造后台逻辑模块中包括的函数和变量的关系图之后,可以根据关系图来分别计算函数和变量的权重。
下面参照图4更详细地说明根据本公开的实施方式的确定后台逻辑模块中的函数的权重的方法。
图4是示出根据本公开的实施方式的确定后台逻辑模块中的函数的权重的方法400的流程图。
图4的方法400开始于步骤S401。随后,在步骤S402中,确定后台逻辑模块中的函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次。在步骤S403中,基于调用关系和调用频次以及读写操作关系和读写频次来确定函数和变量的初始权重。接着,在步骤S404中,通过对函数和变量的初始权重进行迭代和归一化来确定函数的权重。方法400结束于步骤S405。
下面对确定后台逻辑模块中的函数的权重的方法400的步骤S402至S404进行更详细的描述。
在步骤S402中,可以基于如上文所述获得的后台逻辑模块中的函数和变量的关系图来确定函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次。通过该关系图可以清楚地获得函数之间的调用关系以及函数对变量的读写操作关系。通过分析后台逻辑模块的源代码的运行过程,可以得到函数之间的调用频次以及函数对变量的读写频次。
接下来,在步骤S403中,可以基于在步骤S402中获得的函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次来确定函数和变量的初始权重。
根据本公开的实施方式,在最处时将关系图中的函数和变量的权重均设定为1。注意,本领域技术人员根据本公开的教导,可以将权重设定为任何非零值,而非仅限于1。
随后,首先通过下式(1)来计算关系图中的表示函数之间的调用关系的箭头的初始权重。
WeightEdgen=Frequency(ToInFrom)*WeightNodeFrom (1)
其中,WeightEdgen表示箭头n的初始权重,其中n(1≤n≤N)是整数,N表示关系图中的箭头的总数;Frequency(ToInFrom)表示从作为调用方的函数调用作为被调用方的函数的次数;以及WeightNodeFrom表示作用调用方的函数的权重。举例来说,如果函数A调用函数B两次,则函数A是调用方,而函数B是被调用方。假设函数A和函数B的初始权重均为1,则从函数A到函数B的箭头的初始权重=2*1=2。
应当注意,在关系图中,在函数与函数之间可能存在两个箭头,表示彼此相互调用的关系。此时,应根据调用次数分别这两个箭头的权重。
随后,可以通过下式(2)来计算关系图中的表示函数与变量之间的读写操作关系的箭头的初始权重。如上文所述,读写操作可以包括修改操作、赋值操作、删除操作和读取操作。
WeightEdgen=(α*Frequency(ToInFromModify)+β*Frequency(ToInFromInitial)+γ*Frequency(ToInFromDelete)+δ*Frequency(ToInFromView))*WeightNodeFrom (2)
其中,Frequency(ToInFromModify)、Frequency(ToInFromInitial)、Frequency(ToInFromDelete)和Frequency(ToInFromView)分别表示函数对变量进行修改操作、赋值操作、删除操作和读取操作的次数;α、β、γ和δ分别是修改操作、赋值操作、删除操作和读取操作的权重;以及WeightNodeFrom表示调用变量的函数的权重。
注意,α、β、γ和δ可以被视为表述相应的读写操作的重要性的参数,其可以由开发人员或测试人员根据先验知识预先确定。通常,关于修改操作和赋值操作的参数α、β大于关于删除操作和读取操作的参数γ和δ。然而,本公开不限于此。例如,也可以将α、β、γ和δ设定为相同的值。
根据本公开的实施方式,在确定关系图中的各个箭头的初始权重WeightEdgen之后,可以计算关系图中的函数和变量的初始权重。
具体地,可以通过下式(3)计算关系图中的函数和变量的初始权重。
WeightNode=ΣWeightIndegreeEdge (3)
其中,WeightNode表示节点的初始权重,即函数或变量的初始权重;以及WeightIndegreeEdge表示方向指向该节点的箭头的权重。根据式(3),表示函数或变量的关系图中的节点的初始权重可以被设定为指向该节点的所有箭头的初始权重的总和。
根据式(1)-(3),可以看出,在节点表示函数的情况下,节点的权重越大,表明调用该节点表示的函数的次数就越多,该函数的重要性就越大。此外,在节点表示变量的情况下,节点的权重越大,表明对该节点表示的变量的读写操作次数就越多,该变量的重要性就越大。因而,节点的权重可以被认为反映了该节点表示的函数或变量的重要性。
本领域技术人员应认识到,尽管上述实施方式仅根据方向指向节点的箭头的权重来计算节点的权重,但是本公开不限于上述实施方式。根据本公开的教导,本领域技术人员可以设想根据方向离开节点(仅限于表示函数的节点)的箭头的权重来计算节点的权重或者根据向指向节点的箭头的权重和方向离开节点的箭头的权重二者来计算节点的权重的实施方式。这些实施方式同样在本公开的范围内。
在步骤S403中确定函数和变量的初始权重之后,在步骤S404中通过对函数和变量的初始权重进行迭代和归一化来确定函数的权重。
根据本公开的实施方式,在步骤S404中,在确定关系图中的节点的初始权重之后,可以对各个节点的初始权重进行归一化处理。例如,将具有最大初始权重的节点的权重设定为1,并且按照比例计算其他节点的权重。随后,可以重新计算关系图中的各个箭头的权重,并且重新计算各个节点的权重。接着,重复上述归一化处理和迭代计算,直到两次迭代计算之间的节点权重之间的差异收敛到可接受的范围内为止。替选地,可以执行指定次数的归一化处理和迭代计算。
最终,可以通过关系图确定后台逻辑模块中包括的各个函数的权重。
方法400结束于步骤S405。
返回图1,在步骤S103中确定后台逻辑模块中包括的各个函数的权重之后,在步骤S104中,如图2中所示,将前台执行模块分解成代码块,代码块形成执行路径。
下面参照图5详细描述步骤S104中的处理。
图5是示出根据本公开的实施方式的将前台执行模块分解为代码块并且形成执行路径的示意图。
根据本公开的实施方式,可以通过对前台执行模块的伪代码进行分析来将前台执行模块分解代成代码块并且形成执行路径。
图5中示出了作为示例的一段伪代码,根据伪代码中的循环语句和条件语句等的语法结构,可以构造如图5的右侧所示的工作流图。该工作流图是具有一个起始节点和一个或更多个结束节点的拓扑图。工作流图中的每个节点可被视为代码段,在该代码段中可能调用一个或更多个后台逻辑模块。从开始节点到结束节点的所有代码块的序列形成了执行路径。换言之,执行路径可以被视为由代码块构成的执行序列。
例如,如图5中所示,代码块E1、E4、S7形成了一条执行路径,E1、E3、S2、E2、S3也形成了一条执行路径,等等。
返回图1,在步骤S104中将前台执行模块分解成代码块之后,在步骤S105中,基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重。
根据本公开的实施方式,可以基于代码块调用的后台逻辑模块中的函数的权重来确定代码块的权重,并且基于执行路径包含的代码块的权重确定执行路径的权重。
具体地,针对在步骤S104中得到的每条执行路径的权重,通过下式(4)确定该执行路径的权重。
WeightOptSeq=ΣWeightSec (4)
其中,WeightOptSeq表示执行路径的权重,以及WeightSec表示组成该执行路径的代码段的权重。
根据本公开的实施方式,代码段的权重WeightSec可以通过下式(5)来确定。
WeightSec=ΣWeightNode (5)
其中,WeightNode表示代码段中调用的后台逻辑模块中的函数的权重,该权重是在步骤S103中确定的后台逻辑模块中的函数的权重。
如从以上式(4)和(5)可见,执行路径的权重可以被确定为构成执行路径的代码块的权重的总和,而代码块的权重可以被确定为该代码块调用的后台逻辑模块中的函数的权重的总和。
根据上文所述可知,执行路径的权重越大,表明在应用的运行期间该执行路径被执行的可能性越大,即重要性越大。
随后,方法100前往步骤S106,其中基于所确定的执行路径的权重生成测试用例。
根据本公开的实施方式,可以基于权重最大的一个或更多个执行路径生成测试用例。通过步骤S105中的处理,针对前台执行模块的每个执行路径计算了权重,可以选择权重最大的若干个执行路径。随后,基于所选择的执行路径生成测试用例。
例如,参照图2,在通过前台执行模块进行分析得到工作流图并且确定工作流图中的所有执行路径的权重之后,选择具有最高权重的三条执行路径,即1-2-3、1-2-3-1和1-5-6,并且基于这三条执行路径生成测试用例以对应用进行测试。
根据本公开的实施方式,对于被选择用于生成测试路径的一个执行路径,可以通过调整该执行路径中调用的后台逻辑模块的函数的执行顺序,生成多个测试用例。
随后,方法100前往步骤S107,其中使用所生成的测试用例对应用进行测试。
最后,方法100结束于步骤S108。
根据本公开的用于测试应用的方法可以通过对应用自身的代码进行分析来生成重要性较高的测试用例并且使用所生成的测试用例对应用进行测试。使用根据本公开的用于测试应用的方法,可以极大地减少测试时间,提高测试效率,降低测试成本。根据本公开的用于测试应用的方法由其适用于牵涉在区块链上运行的智能合约的应用的测试。
图6是示出根据本公开的实施方式的用于测试应用的装置600的框图。
如图6中所示,用于测试应用的装置600包括:第一分解单元601,被配置成将应用分解为前台执行模块和后台逻辑模块,前台执行模块调用后台逻辑模块;第一确定单元602,被配置成确定后台逻辑模块中的函数的权重;第二分解单元603,被配置成将前台执行模块分解成代码块,代码块形成执行路径;第二确定单元604,被配置成基于所确定的后台逻辑模块中的函数的权重来确定执行路径的权重;生成单元605,被配置成基于所确定的执行路径的权重生成测试用例;以及测试单元606,被配置成使用所生成的测试用例对应用进行测试。
第一分解单元601被配置成执行上文参照图1描述的方法100的步骤S102的处理并且能够取得与该处理相关的益处,在此省略其描述。第一确定单元602被配置成执行上文参照图1描述的方法100的步骤S103的处理并且能够取得与该处理相关的益处,在此省略其描述。第二分解单元603被配置成执行上文参照图1描述的方法100的步骤S104的处理并且能够取得与该处理相关的益处,在此省略其描述。第二确定单元604被配置成执行上文参照图1描述的方法100的步骤S105的处理并且能够取得与该处理相关的益处,在此省略其描述。生成单元605被配置成执行上文参照图1描述的方法100的步骤S106的处理并且能够取得与该处理相关的益处,在此省略其描述。测试单元606被配置成执行上文参照图1描述的方法100的步骤S107的处理并且能够取得与该处理相关的益处,在此省略其描述。
尽管上文针对涉及智能合约的应用的测试描述了根据本公开的用于测试应用的方法和装置的具体实施方式,但是对于本领域技术人员明显的是,本公开的技术同样可以应用于其他的计算机应用或移动应用的测试。
图7是示出可用来实现根据本公开的实施方式的用于测试应用的方法100以及装置600的通用机器700的结构简图。通用机器700可以是例如计算机系统。应注意,通用机器700只是一个示例,并非暗示对本公开的方法和装置的使用范围或者功能的局限。也不应将通用机器700解释为对上述用于测试应用的方法或装置中示出的任一组件或其组合具有依赖或需求。
在图7中,中央处理单元(CPU)701根据只读存储器(ROM)702中存储的程序或从存储部分708加载到随机存取存储器(RAM)703的程序执行各种处理。在RAM 703中,还根据需要存储当CPU 701执行各种处理等等时所需的数据。CPU 701、ROM 702和RAM 703经由总线704彼此连接。输入/输出接口705也连接到总线704。
下述部件也连接到输入/输出接口705:输入部分706(包括键盘、鼠标等等)、输出部分707(包括显示器,例如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等)、存储部分708(包括硬盘等)、通信部分709(包括网络接口卡例如LAN卡、调制解调器等)。通信部分709经由网络例如因特网执行通信处理。根据需要,驱动器710也可连接到输入/输出接口705。可拆卸介质711例如磁盘、光盘、磁光盘、半导体存储器等等可以根据需要被安装在驱动器710上,使得从中读出的计算机程序可根据需要被安装到存储部分708中。
在通过软件实现上述系列处理的情况下,可以从网络例如因特网或从存储介质例如可拆卸介质711安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图7所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质711。可拆卸介质711的例子包含磁盘(包含软盘)、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 702、存储部分708中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
此外,本公开还提出了一种存储有机器可读取的指令代码的程序产品。所述指令代码由机器读取并执行时,可执行上述根据本公开的用于测试应用的方法。相应地,用于承载这种程序产品的上面列举的各种存储介质也包括在本公开的范围内。
上面已通过框图、流程图和/或实施方式进行了详细描述,阐明了根据本公开的实施方式的装置和/或方法的具体实施方式。当这些框图、流程图和/或实施方式包含一个或多个功能和/或操作时,本领域的技术人员明白,这些框图、流程图和/或实施方式中的各功能和/或操作可以通过各种硬件、软件、固件或实质上它们的任意组合而单独地和/或共同地实施。在一种实施方式中,本说明书中描述的主题的几个部分可通过特定用途集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其他集成形式实现。然而,本领域的技术人员会认识到,本说明书中描述的实施方式的一些方面能够全部或部分地在集成电路中以在一个或多个计算机上运行的一个或多个计算机程序的形式(例如,以在一个或多个计算机系统上运行的一个或多个计算机程序的形式)、以在一个或多个处理器上运行的一个或多个程序的形式(例如,以在一个或多个微处理器上运行的一个或多个程序的形式)、以固件的形式、或以实质上它们的任意组合的形式等效地实施,并且,根据本说明书中公开的内容,设计用于本公开的电路和/或编写用于本公开的软件和/或固件的代码完全是在本领域技术人员的能力范围之内。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。涉及序数的术语“第一”,“第二”等并不表示这些术语所限定的特征、要素、步骤或组件的实施顺序或者重要性程度,而仅仅是为了描述清楚起见而用于在这些特征、要素、步骤或组件之间进行标识。
综上,在根据本公开的实施方式中,本公开提供了如下方案,但不限于此:
方案1.一种用于测试应用的方法,所述方法包括:
将所述应用分解为前台执行模块和后台逻辑模块,所述前台执行模块调用所述后台逻辑模块;
确定所述后台逻辑模块中的函数的权重;
将所述前台执行模块分解成代码块,所述代码块形成执行路径;
基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重;
基于所确定的执行路径的权重生成测试用例;以及
使用所生成的测试用例对所述应用进行测试。
方案2.根据方案1所述的方法,其中确定所述后台逻辑模块中的函数的权重包括:
基于所述后台逻辑模块中的函数和变量之间的关系来计算函数的权重。
方案3.根据方案2所述的方法,其中确定所述后台逻辑模块中的函数的权重包括:
确定所述后台逻辑模块中的函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次;
基于所述调用关系和调用频次以及读写操作关系和读写频次来确定函数和变量的初始权重;
通过对函数和变量的初始权重进行迭代和归一化来确定函数的权重。
方案4.根据方案3所述的方法,其中函数对变量的读写操作包括赋值操作、修改操作、删除操作和读取操作中的至少之一,其中赋值操作、修改操作、删除操作和读取操作分别具有不同的权重。
方案5.根据方案1所述的方法,其中将所述前台执行模块分解成代码块包括:
通过对所述前台执行模块的伪代码进行分析将其分解代成代码块。
方案6.根据方案1所述的方法,其中基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重包括:
基于所述代码块调用的后台逻辑模块中的函数的权重来确定所述代码块的权重;以及
基于所述执行路径包含的代码块的权重确定所述执行路径的权重。
方案7.根据方案6所述的方法,其中确定所述代码块的权重包括:
通过对所述代码块调用的后台逻辑模块中的函数的权重求和来确定所述代码块的权重。
方案8.根据方案1所述的方法,其中所述后台逻辑模块包括在区块链上运行的智能合约。
方案9.根据方案1所述的方法,其中基于所确定的执行路径的权重生成测试用例包括:
基于权重最大的一个或更多个执行路径生成测试用例。
方案10.一种用于测试应用的装置,所述装置包括:
第一分解单元,被配置成将所述应用分解为前台执行模块和后台逻辑模块,所述前台执行模块调用所述后台逻辑模块;
第一确定单元,被配置成确定所述后台逻辑模块中的函数的权重;
第二分解单元,被配置成将所述前台执行模块分解成代码块,所述代码块形成执行路径;
第二确定单元,被配置成基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重;
生成单元,被配置成基于所确定的执行路径的权重生成测试用例;以及
测试单元,被配置成使用所生成的测试用例对所述应用进行测试。
方案11.根据方案10所述的装置,其中所述第一确定单元被配置成:
基于所述后台逻辑模块中的函数和变量之间的关系来计算函数的权重。
方案12.根据方案11所述的装置,其中所述第一确定单元被配置成:
确定所述后台逻辑模块中的函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次;
基于所述调用关系和调用频次以及读写操作关系和读写频次来确定函数和变量的初始权重;
通过对函数和变量的初始权重进行迭代和归一化来确定函数的权重。
方案13.根据方案12所述的装置,其中函数对变量的读写操作包括赋值操作、修改操作、删除操作和读取操作中的至少之一,其中赋值操作、修改操作、删除操作和读取操作分别具有不同的权重。
方案14.根据方案10所述的装置,其中所述第二分解单元被配置成:
通过对所述前台执行模块的伪代码进行分析将其分解代成代码块。
方案15.根据方案10所述的装置,其中所述第二确定单元被配置成:
基于所述代码块调用的后台逻辑模块中的函数的权重来确定所述代码块的权重;以及
基于所述执行路径包含的代码块的权重确定所述执行路径的权重。
方案16.根据方案15所述的装置,其中所述第二确定单元被配置成:
通过对所述代码块调用的后台逻辑模块中的函数的权重求和来确定所述代码块的权重。
方案17.根据方案10所述的装置,其中所述后台逻辑模块包括在区块链上运行的智能合约。
方案18.根据方案10所述的装置,其中所述生成单元被配置成:
基于权重最大的一个或更多个执行路径生成测试用例。
方案19.一种计算机程序,所述计算机程序在被计算机执行时能够实现根据方案1至9中任一项所述的方法。
方案20.一种计算机可读存储介质,其上存储有能够由计算机执行的计算机程序,所述计算机程序在被所述计算机执行时能够实现根据方案1至9中任一项所述的方法。
尽管上面已经通过对本公开的具体实施方式的描述对本公开进行了披露,但是,应该理解,本领域的技术人员可在所附权利要求的精神和范围内设计对本公开的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本公开的保护范围内。
Claims (10)
1.一种用于测试应用的方法,所述方法包括:
将所述应用分解为前台执行模块和后台逻辑模块,所述前台执行模块调用所述后台逻辑模块;
确定所述后台逻辑模块中的函数的权重;
将所述前台执行模块分解成代码块,所述代码块形成执行路径;
基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重;
基于所确定的执行路径的权重生成测试用例;以及
使用所生成的测试用例对所述应用进行测试。
2.根据权利要求1所述的方法,其中确定所述后台逻辑模块中的函数的权重包括:
基于所述后台逻辑模块中的函数和变量之间的关系来计算函数的权重。
3.根据权利要求2所述的方法,其中确定所述后台逻辑模块中的函数的权重包括:
确定所述后台逻辑模块中的函数之间的调用关系和调用频次以及函数对变量的读写操作关系和读写频次;
基于所述调用关系和调用频次以及读写操作关系和读写频次来确定函数和变量的初始权重;
通过对函数和变量的初始权重进行迭代和归一化来确定函数的权重。
4.根据权利要求3所述的方法,其中函数对变量的读写操作包括赋值操作、修改操作、删除操作和读取操作中的至少之一,其中赋值操作、修改操作、删除操作和读取操作分别具有不同的权重。
5.根据权利要求1所述的方法,其中将所述前台执行模块分解成代码块包括:
通过对所述前台执行模块的伪代码进行分析来将其分解代成代码块。
6.根据权利要求1所述的方法,其中基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重包括:
基于所述代码块调用的后台逻辑模块中的函数的权重来确定所述代码块的权重;以及
基于所述执行路径包含的代码块的权重确定所述执行路径的权重。
7.根据权利要求6所述的方法,其中确定所述代码块的权重包括:
通过对所述代码块调用的后台逻辑模块中的函数的权重求和来确定所述代码块的权重。
8.根据权利要求1所述的方法,其中所述后台逻辑模块包括在区块链上运行的智能合约。
9.根据权利要求1所述的方法,其中基于所确定的执行路径的权重生成测试用例包括:
基于权重最大的一个或更多个执行路径生成测试用例。
10.一种用于测试应用的装置,所述装置包括:
第一分解单元,被配置成将所述应用分解为前台执行模块和后台逻辑模块,所述前台执行模块调用所述后台逻辑模块;
第一确定单元,被配置成确定所述后台逻辑模块中的函数的权重;
第二分解单元,被配置成将所述前台执行模块分解成代码块,所述代码块形成执行路径;
第二确定单元,被配置成基于所确定的所述后台逻辑模块中的函数的权重来确定所述执行路径的权重;
生成单元,被配置成基于所确定的执行路径的权重生成测试用例;以及
测试单元,被配置成使用所生成的测试用例对所述应用进行测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710757161.9A CN109426609B (zh) | 2017-08-29 | 2017-08-29 | 测试应用的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710757161.9A CN109426609B (zh) | 2017-08-29 | 2017-08-29 | 测试应用的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109426609A true CN109426609A (zh) | 2019-03-05 |
CN109426609B CN109426609B (zh) | 2021-11-30 |
Family
ID=65502002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710757161.9A Active CN109426609B (zh) | 2017-08-29 | 2017-08-29 | 测试应用的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109426609B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102158388A (zh) * | 2010-02-12 | 2011-08-17 | 国际商业机器公司 | 极值路由确定引擎和方法 |
CN102360336A (zh) * | 2011-10-20 | 2012-02-22 | 上海达梦数据库有限公司 | 一种基于语法规则的自动化测试系统及方法 |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
US20140359368A1 (en) * | 2013-06-03 | 2014-12-04 | Hon Hai Precision Industry Co., Ltd. | Testing scheduling system and method |
CN105893253A (zh) * | 2016-03-29 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 应用软件测试方法、测试装置及测试设备 |
CN106371999A (zh) * | 2016-10-20 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 程序代码测试方法及装置 |
CN106547678A (zh) * | 2015-09-16 | 2017-03-29 | 伊姆西公司 | 用于白盒测试的方法和装置 |
-
2017
- 2017-08-29 CN CN201710757161.9A patent/CN109426609B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102158388A (zh) * | 2010-02-12 | 2011-08-17 | 国际商业机器公司 | 极值路由确定引擎和方法 |
CN102360336A (zh) * | 2011-10-20 | 2012-02-22 | 上海达梦数据库有限公司 | 一种基于语法规则的自动化测试系统及方法 |
US20140359368A1 (en) * | 2013-06-03 | 2014-12-04 | Hon Hai Precision Industry Co., Ltd. | Testing scheduling system and method |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
CN106547678A (zh) * | 2015-09-16 | 2017-03-29 | 伊姆西公司 | 用于白盒测试的方法和装置 |
CN105893253A (zh) * | 2016-03-29 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 应用软件测试方法、测试装置及测试设备 |
CN106371999A (zh) * | 2016-10-20 | 2017-02-01 | 腾讯科技(深圳)有限公司 | 程序代码测试方法及装置 |
Non-Patent Citations (3)
Title |
---|
XIE ZHENG等: "A novel intelligent verification platform based on a structured analysis model", 《SCIENCE CHINA(INFORMATION SCIENCES)》 * |
相玉娟等: "基于级别权重XML的自动化测试框架", 《合肥工业大学学报(自然科学版)》 * |
陈翔等: "回归测试中的测试用例优先排序技术述评", 《软件学报》 * |
Also Published As
Publication number | Publication date |
---|---|
CN109426609B (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9300134B2 (en) | Methods and systems for power restoration planning | |
CN101877017B (zh) | 使用快速估计技术的有效的采用穷尽法的基于路径的sta | |
Franco et al. | Hydrodynamical behavior of symmetric exclusion with slow bonds | |
CN107423214A (zh) | 软件回归测试用例获取方法、装置及存储介质和电子设备 | |
JP2003141203A (ja) | ディジタル回路論理ネットワークベースのコンピュータ支援設計方法及び装置 | |
CN104091092B (zh) | 大规模电力系统小干扰稳定性的特征值分析系统 | |
CN106803799B (zh) | 一种性能测试方法和装置 | |
CN111325619A (zh) | 一种基于联合学习的信用卡欺诈检测模型更新方法及装置 | |
US20210374582A1 (en) | Enhanced Techniques For Bias Analysis | |
CN110046986A (zh) | 基于大数据的借款逾期客户分群方法及装置 | |
CN109598407A (zh) | 一种业务流程的执行方法及装置 | |
CN107066389A (zh) | 基于集成学习的软件缺陷重新打开的预测方法 | |
CN109828750A (zh) | 自动配置数据埋点的方法、装置、电子设备及存储介质 | |
US7827305B2 (en) | Determination of a state of flow through or a cut of a parameterized network | |
CN108629418A (zh) | 用于训练因果模型的方法和设备 | |
CN114157507A (zh) | 采用大数据分析的云服务漏洞分析方法及人工智能系统 | |
CN112783513A (zh) | 一种代码风险检查方法、装置及设备 | |
CN112882956A (zh) | 一种通过数据组合计算自动生成全场景自动化测试案例的方法、装置、存储介质及电子设备 | |
Nalla et al. | The art of semi-formal bug hunting | |
CN109426609A (zh) | 测试应用的方法和装置 | |
CN111582313A (zh) | 样本数据生成方法、装置及电子设备 | |
Bernardi et al. | An effective technique for minimizing the cost of processor software-based diagnosis in SoCs | |
CN110020958A (zh) | 一种投保和投保链路测试方法、装置及设备 | |
CN112949061B (zh) | 基于可复用算子的村镇发展模型构建方法和系统 | |
CN103942403A (zh) | 一种对海量变量进行筛选的方法及设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |