测试数据的生成方法、装置、电子设备及存储介质
文献发布时间:2023-06-19 12:24:27
技术领域
本申请涉及金融科技(Fintech)的软件测试技术,涉及但不限于一种测试数据的生成方法、装置、电子设备及计算机存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
在软件测试(Software Test)案例生成工具中,比较具有代表性的为Randoop,Randoop是一种测试案例(Test Case)生成工具,为给定的代码集合构造满足类型要求的随机数据作为输入,对被测代码的执行结果做合约性校验。
在相关技术中,测试数据的生成方案,聚焦于采用何种随机算法的来生成测试数据,未将整个测试数据生成过程区分成初始状态生成和状态转移等阶段。在银行业务下,测试环境的场景数据比较单一、不够丰富,无法覆盖实际生产环境中缤纷繁杂的业务场景。因此,如何提高关于业务场景的测试数据的多样性成为亟待解决的重要问题。
发明内容
本申请实施例提供了一种测试数据的生成方法、装置、电子设备和计算机存储介质,可以提高关于业务场景的测试数据的多样性。
本申请实施例提供的一种测试数据的生成方法,包括:
确定业务场景的初始状态;获取预设的转移概率集合,所述转移概率集合包括源状态到至少一种目标状态之间的转移概率;所述源状态至少包括所述业务场景的初始状态;
根据所述转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态;
将所述当前状态更新为所述当前状态的下一状态;在所述当前状态满足预设条件时,将状态转移过程中得到的至少部分状态作为测试数据。
在一种实现方式中,所述方法还包括:接收用户输入指令,根据所述用户输入指令,确定所述预设的转移概率集合;或者,
根据所述源状态到至少一种目标状态之间的转移次数的统计值,确定所述转移概率集合。
在一种实现方式中,所述根据所述预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,包括:
根据所述转移概率集合确定目标转移概率;所述目标转移概率为所述当前状态到所述至少一种目标状态之间的转移概率;
根据所述转移概率集合中的每一个转移概率和业务行为的对应关系,确定用户在所述当前状态下执行的至少一种业务行为;
根据所述目标转移概率,从所述至少一种业务行为中确定目标业务行为;根据所述目标业务行为对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态;
所述方法还包括:在将所述当前状态更新为所述当前状态的下一状态后,在所述当前状态不满足预设条件时,继续根据所述转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在一种实现方式中,所述确定业务场景的初始状态,包括:
确定所述业务场景的至少一类场景数据的规则;
根据所述业务场景的至少一类场景数据的规则,生成所述至少一类场景数据;
根据所述至少一种场景数据,确定所述业务场景的初始状态。
在一种实现方式中,所述方法还包括:
在所述当前状态与所述当前状态的上一状态相同时,确定所述当前状态满足预设条件;
或者,在所述状态转移过程的状态转移次数达到设定次数时,确定所述当前状态满足预设条件。
在一种实现方式中,所述状态转移过程中得到的至少部分状态,包括:所述状态转移过程得到的最终状态。
在一种实现方式中,所述方法还包括:将所述测试数据转换为JAVA内存对象。
本申请实施例提供的一种测试数据的生成装置,包括:
确定模块,用于确定业务场景的初始状态;获取预设的转移概率集合,所述转移概率集合包括源状态到至少一种目标状态之间的转移概率;所述源状态至少包括所述业务场景的初始状态;
处理模块,用于根据所述转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态;
获取模块,用于将所述当前状态更新为所述当前状态的下一状态;在所述当前状态满足预设条件时,将状态转移过程中得到的至少部分状态作为测试数据。
在一种实现方式中,所述处理模块,还用于:接收用户输入指令,根据所述用户输入指令,确定所述预设的转移概率集合;或者,
根据所述源状态到至少一种目标状态之间的转移次数的统计值,确定所述转移概率集合。
在一种实现方式中,所述处理模块,用于根据所述预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,包括:
根据所述转移概率集合确定目标转移概率;所述目标转移概率为所述当前状态到所述至少一种目标状态之间的转移概率;
根据所述转移概率集合中的每一个转移概率和业务行为的对应关系,确定用户在所述当前状态下执行的至少一种业务行为;
根据所述目标转移概率,从所述至少一种业务行为中确定目标业务行为;根据所述目标业务行为对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态;
所述方法还包括:在将所述当前状态更新为所述当前状态的下一状态后,在所述当前状态不满足预设条件时,继续根据所述转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在一种实现方式中,所述确定模块,用于确定业务场景的初始状态,包括:
确定所述业务场景的至少一类场景数据的规则;
根据所述业务场景的至少一类场景数据的规则,生成所述至少一类场景数据;
根据所述至少一种场景数据,确定所述业务场景的初始状态。
在一种实现方式中,所述处理模块还用于:
在所述当前状态与所述当前状态的上一状态相同时,确定所述当前状态满足预设条件;
或者,在所述状态转移过程的状态转移次数达到设定次数时,确定所述当前状态满足预设条件。
在一种实现方式中,所述状态转移过程中得到的至少部分状态,包括:所述状态转移过程得到的最终状态。
在一种实现方式中,所述处理模块还用于:将所述测试数据转换为JAVA内存对象。
本申请实施例提供一种电子设备,所述电子设备包括存储器、处理器及存储在存储器上可在处理器上运行的计算机程序,所述处理器执行所述程序时实现前述一个或多个技术方案提供的测试数据的生成方法。
本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机程序;所述计算机程序被执行后能够实现前述一个或多个技术方案提供的测试数据的生成方法。
基于本申请提供的测试数据的生成方法,确定业务场景的初始状态;获取预设的转移概率集合,转移概率集合包括源状态到至少一种目标状态之间的转移概率;源状态至少包括业务场景的初始状态;根据转移概率集合,对业务场景的当前状态进行状态转移,得到当前状态的下一状态;将当前状态更新为当前状态的下一状态;在当前状态满足预设条件时,将状态转移过程中得到的至少部分状态作为测试数据。基于转移概率集合产生业务场景的多种不同业务状态的测试数据,多种不同业务状态的测试数据可以覆盖整个状态空间,因此,可以提高关于业务场景的测试数据的多样性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请。
附图说明
图1为在相关技术中提供的一种测试数据的生成方法的应用场景图;
图2为本申请实施例提供的一种测试数据的生成方法的流程示意图;
图3为本申请实施例提供的一种基于转移概率集合的状态转移过程示意图;
图4为本申请实施例提供的另一种测试数据的生成方法的流程示意图;
图5为本申请实施例提供的又一种测试数据的生成方法的流程示意图;
图6为本申请实施例提供的一种用于状态转移的转移概率矩阵的示意图;
图7为本申请实施例提供的一种业务场景的初始数据及数据存储的示意图;
图8为本申请实施例提供的一种业务场景为银行贷款的状态转移示意图;
图9为本申请实施例提供的一种测试数据的生成装置的功能示意图;
图10为本申请实施例提供的一种电子设备的功能示意图。
具体实施方式
以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所提供的实施例仅仅用以解释本申请,并不用于限定本申请。另外,以下所提供的实施例是用于实施本申请的部分实施例,而非提供实施本申请的全部实施例,在不冲突的情况下,本申请实施例记载的技术方案可以任意组合的方式实施。
图1示出了在相关技术中提供的一种测试数据的生成方法的应用场景图。参见图1,在测试代码的集合中,测试代码classE的作用是从输入的有序整数列表中,判断目标整数是否在有序整数列表中,返回目标整数的索引地址。
例如,输入有序整数列表形成的集合为[1,3,5,7,10],其中,有序整数列表中的元素的序号-1即为元素的索引地址。例如,元素5的序号为3,元素5的索引地址为2。
在示例中,对于有序整数列表形成的集合[1,3,5,7,10],目标整数为5,在执行完成测试代码classE后,可以返回目标整数的索引地址为2。即,目标整数5在有序整数列表中的索引地址是2。
在示例中,对于有序整数列表形成的集合[1,3,5,7,10],目标整数为4,此时,有序整数列表中不包含4,在执行完成测试代码classE后返回-1。
在相关技术中,Randoop在对测试代码集合中的测试代码classE进行测试时,对测试代码进行语法分析,随机构造一个整数列表形成的集合[1,5,2,8,4],在目标整数为4时,执行完成测试代码classE后返回-1。
这里,Randoop生成的整数列表是个无序的列表,无法识别输入的目标整数是否满足测试代码classE的输入条件。
在实际应用中,Randoop是一个基于Junit的单测场景的数据生成工具,只能在方法级或者类级的单测时使用,无法用于系统级的大型测试。
应理解,对于Randoop在生成测试数据时,是通过分析测试代码中定义的参数类型,来构造符合参数类型要求的数据。故Randoop生成的数据在语法层面上满足参数类型的要求,难以满足实际业务场景的业务要求。
例如,对于复杂的业务场景,构造用户贷款逾期2天的场景数据,Randoop难以满足实际业务场景的业务要求。
在相关技术中,采用Mockaroo数据生成工具,生成软件测试的测试数据。Mockaroo可以生成一些虚拟数据,用于软件测试、作为编写小说、剧本的素材。在具体业务场景的测试数据生成时,Mockaroo数据生成工具不支持按照用户的个性化需求,定制化地生成软件测试的测试数据。
这里,虚拟数据可以包括姓名、证件号码、居住地址、银行卡号等。
在相关技术中,Mockaroo数据生成工具,在生成通用数据时,可以提供良好的数据支持,然而,对于高度定制化的数据,Mockaroo无法生成和业务场景相关的场景数据。
这里,通用数据可以包括以下数据中的任一项:证件号、手机号、电子邮箱。业务场景相关的场景数据可以包括以下数据中的任一项:某银行内部贷款产品的借据、还款计划、还款交易。
在相关技术中,Mockaroo数据生成工具,基于网页提供在线数据生成服务,为此,用户只能在外网生成测试数据后,将测试数据下载到本地,再将测试数据导入到测试环境内,将测试数据转换成测试案例支持的数据格式方能使用。这样,导致测试数据的生成过程和测试案例的生成过程割裂。
图2示出了本申请实施例提供的测试数据的生成方法的示意性流程图。参见图2,本申请实施例提供的测试数据的生成方法,可以包括以下步骤:
步骤A201:确定业务场景的初始状态;获取预设的转移概率集合,所述转移概率集合包括源状态到至少一种目标状态之间的转移概率;源状态至少包括所述业务场景的初始状态。
这里,源状态的数量可以是一个或多个,针对每个源状态,可以确定对应的一种目标状态,或者,可以确定对应的多种目标状态。转移概率表示用户在源状态下执行某一项业务行为的概率。
应理解,对于一个源状态而言,在源状态对应多种目标状态,且源状态到多种目标状态之间的转移概率均大于0的情况下,说明源状态有可能通过状态转换得到多种目标状态中的任意一种状态。
在示例中,针对多个源状态中的每一个源状态,从业务场景的源状态出发,对业务场景的源状态进行状态转移,可以得到业务场景的目标状态。从源状态到目标状态的状态转移过程中,可以包括至少一个中间状态。
在示例中,业务场景为银行的金融业务,此时,业务行为包括不限于开立贷款账户、借款、日切、账单日结转、还款。
以下,将业务场景的初始状态记作S
在示例中,根据预先开发的数据生成工具生成业务场景的初始数据;或者,采用扩展的数据生成接口生成业务场景的初始数据。
在示例中,根据业务场景的初始数据,确定业务场景的初始状态S
在示例中,业务场景中涉及的业务可以包括以下任一项:银行的金融业务、保险公司的保险业务、电信公司的通信业务。
应理解,对于某一项业务场景,可能涉及多项业务,每一项业务存在一定的生命周期,在生命周期内,每一项业务可以包括多个业务状态,多个业务状态间可以进行相互转化。
在实际应用中,对于银行的金融业务,每一项金融业务存在一定的生命周期,在生命周期内,贷款业务的业务状态包括不限于开立贷款账户、借款、日切、账单日结转、还款。
在示例中,采用概率函数控制转移概率集合中每一个转移概率的数值大小。根据每一个转移概率的数值大小,获取预设的转移概率集合。
这里,概率函数P是一个离散函数,概率函数P的输入为(i,j),输出为p(i,j),转移概率p(i,j)表示用户在源状态S
步骤A202:根据预设的转移概率集合,对业务场景的当前状态进行状态转移,得到当前状态的下一状态。
在示例中,参见图3,对于业务场景的当前状态,按照给定的行为函数集合执行状态流转,得到当前状态的下一状态,保证状态图里的每个状态都是合理的,不会出现异常状态。
在示例中,参见图3,在基于转移概率集合生成业务场景的测试数据时,每个圆圈表示一种状态(state,S)。这里,状态可以理解为一种实际的业务场景或者一种业务状态。
在示例中,每个状态根据其随机执行的行为函数f(j)的差异,可能有若干个不同的后继状态。开发人员可以按照业务场景构造行为函数集合。在生成测试数据时,按照一定的概率随机选择某个行为函数f(j)。
这里,行为函数可以用于指示以下任一项业务行为:借款、日切、账单日结转、还款。
在示例中,执行行为函数“借款”流转,确定业务场景的下一个状态。例如,对于首次发生一笔借款的用户,行为函数f(j)为“日切”,执行行为函数“日切”为该笔借据计提了几天利息。这里,行为函数“日切”即日期往后切换。
在示例中,在生成测试数据时,根据转移概率集合对业务场景的当前状态进行状态转移,得到当前状态的下一状态。因此,可以从业务场景的初始状态出发,执行行为函数f(j)达到业务场景的至少一种目标状态。
在示例中,基于业务场景的生命周期,根据转移概率集合构造测试数据,因此,可以保证生成的测试数据属于随机“真实”产生、符合业务要求的数据,不是随意杜撰的数据。在生成业务状态对应的测试数据时,具备充分的随机性和业务场景的覆盖性。
步骤A203:将所述当前状态更新为所述当前状态的下一状态;在所述当前状态满足预设条件时,将状态转移过程中得到的至少部分状态作为测试数据。
在示例中,将当前状态更新为当前状态的下一状态;基于转移概率集合,多次重复执行行为函数,在当前状态满足预设条件时,将状态转移过程中得到的至少部分状态作为测试数据。
在示例中,在业务场景的当前状态S
在示例中,在业务场景的当前状态S
在示例中,基于转移概率集合,多次重复执行行为函数,不同行为函数对应用户作出的不同业务行为,不同业务行为反映用户不同的决策方式,因此,可以模拟用户随机作出的不同决策方式,得到用户在当前状态作出不同业务行为产生的下一状态。
在示例中,在用户在当前状态作出不同业务行为产生的下一状态中,选择部分或者全部状态作为测试数据,解决了业务状态对应的测试数据存在数据单一的问题。
基于本申请提供的测试数据的生成方法,确定业务场景的初始状态;获取预设的转移概率集合,转移概率集合包括源状态到至少一种目标状态之间的转移概率;源状态至少包括业务场景的初始状态S
在实际应用中,上述步骤A201至步骤A203可以采用处理器实现,上述处理器可以为专用集成电路(Application Specific Integrated Circuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital Signal ProcessingDevice,DSPD)、可编程逻辑装置(Programmable Logic Device,转移概率pLD)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Central ProcessingUnit,CPU)、控制器、微控制器、微处理器中的至少一种。
在一种实现方式中,在上述测试数据的生成方法中,还包括以下步骤:接收用户输入指令,根据所述用户输入指令,确定所述预设的转移概率集合。
在示例中,接收用户输入指令,根据所述用户输入指令,得到至少一个所述转移概率;根据至少一个所述转移概率,确定所述预设的转移概率集合。
在示例中,在生成测试数据前,开发人员可以调整不同行为函数的概率值,灵活调整执行函数的运行方向,以期获得符合需求的输出结果,更快地获得更多的期望数据,因此,可以适用于不同业务场景。
在一种实现方式中,在上述测试数据的生成方法中,还包括以下步骤:根据所述源状态到至少一种目标状态之间的转移次数的统计值,确定所述转移概率集合。
在示例中,根据所述当前状态和所述当前状态的下一状态间的转移次数的统计值,得到至少一个所述转移概率;根据至少一个所述转移概率,确定所述转移概率集合。
在一种实现方式中,在上述步骤A202中,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,参见图4,可以包括以下步骤:
步骤A401:根据所述转移概率集合确定目标转移概率;所述目标转移概率为所述当前状态到所述至少一种目标状态之间的转移概率。
在示例中,当前状态可以包括以下任一项:S
相应地,转移概率集合如下所示:{p(1,1),p(1,2),p(1,3),p(1,4),p(1,5),p(2,1),p(2,2),p(2,3),p(2,4),p(2,5),p(3,1),p(3,2),p(3,3),p(3,4),p(3,5),p(4,1),p(4,2),p(4,3),p(4,4),p(4,5),p(5,1),p(5,2),p(5,3),p(5,4),p(5,5)}。
应理解,对于转移概率p(1,1)、p(2,2)、p(3,3)、p(4,4)、p(5,5),基于执行行为函数f(i),业务场景的状态S
在示例中,根据转移概率集合,确定在当前状态为S
在示例中,根据业务场景的第一状态的标识,业务场景的第二状态的标识,从转移概率集合中确定当前状态到所述至少一种目标状态之间的转移概率。这里,第一状态可以是当前状态,第二状态可以是目标状态。
例如,第一状态为S
步骤A402:根据所述转移概率集合中的每一个转移概率和业务行为的对应关系,确定用户在所述当前状态下执行的至少一种业务行为。
在示例中,转移概率p(i,j)表示在源状态S
在示例中,多个行为函数f(j)可以组成行为函数集合F,F={f(1),f(2),f(3),…,f(j),…},其中,行为函数f(j)对应第j类业务行为的行为函数。因此,行为函数集合F可以反映在每个状态下用户可执行的业务行为的集合。
在示例中,转移概率p(1,2)对应业务行为“借款”,转移概率p(3,4)对应业务行为“期限内还清贷款”,转移概率p(3,5)对应业务行为“期限内未还清贷款”。
在示例中,业务状态的当前状态为S
在此情况下,根据转移概率集合中的每一个转移概率和业务行为的对应关系,确定用户在当前状态S
步骤A403:根据所述目标转移概率,从所述至少一种业务行为中确定目标业务行为;根据所述目标业务行为对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在示例中,目标转移概率包括p(3,4)、p(3,5),根据转移概率集合中每一个转移概率和业务行为的对应关系,确定在当前状态S
其中,行为函数f(4)、f(5)分别用于指示业务行为“期限内还清贷款”、“期限内未还清贷款”。业务状态的当前状态为S
在示例中,根据在当前状态S
在示例中,S
在示例中,S
在示例中,基于执行行为函数,可以建立业务场景的当前状态与业务场景的下一状态间的联系。例如,基于执行行为函数f(i),业务场景的源状态S
在示例中,在将所述当前状态更新为所述当前状态的下一状态后,在所述当前状态不满足预设条件时,继续根据转移概率集合,对业务场景的当前状态进行状态转移,得到当前状态的下一状态。
在示例中,基于状态间通过行为函数形成的有向直线,可以共同构成一个状态机图。初始状态的生成,对整个状态机图的正确运行具有重要意义。
在一种实现方式中,在上述步骤A202中,所述根据预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,参见图5,可以包括以下步骤:
步骤A501:获取所述转移概率集合对应的状态转移矩阵。
在示例中,在每一轮迭代中,算法均可以从初始状态S
在示例中,参见图6,概率函数P还可以表示成一个转移概率矩阵。转移概率矩阵可以是一个m行n列的矩阵。这里,m是所要解决的问题的状态空间的空间大小,即状态空间中状态的个数,n是行为函数集合F的大小,即,F中行为函数的个数。
在示例中,在为某种指定业务场景生成测试数据时,可以将转移概率矩阵中指定状态下目标行为函数的概率值固定为1,从而,将随机算法降级成一种确定的算法。
即,指定在某个状态下强制执行某个行为函数,实现按照开发人员的需求构造测试案例对应的测试数据。可见,本申请实施例不仅可以用于随机生成测试案例对应的测试数据,也可以根据需要生成指定业务状态对应的测试数据。
在示例中,基于转移概率的概率分布,生成的测试数据是可控随机,用户通过调整概率转移概率矩阵;基于业务场景的统计分布来确定概率值,确定转移概率矩阵中概率数值,生成的测试数据更接近真实业务场景的数据分布。从而,生成更符合预期业务场景的测试数据。
应理解,基于业务场景的统计分布来确定概率值,确定转移概率矩阵中概率数值,容易泄露真实业务数据,侵犯用户的个人隐私,生成的数据不符合测试需求。因此,在生成场景数据时,建议根据开发人员的输入指令,确定转移概率矩阵的各个概率值。
步骤A502:根据所述业务场景的初始状态和所述业务场景的目标状态,确定对所述业务场景的当前状态进行状态转移时的转移概率。
在示例中,以信用卡还款的业务场景为例,状态集合可以定义为{有账单未还,逾期,账单已还清},行为函数集合可以定义为{还清账单,不还款}。在状态集合中,业务场景的目标状态可以包括以下任一项:有账单未还,逾期,账单已还清。
在示例中,业务场景的目标状态为有账单未还,还清账单;对于处于有账单未还的状态,基于业务经验可以确定大部分信用卡用户会按时还清信用卡账单,在业务场景的源状态S
在示例中,业务场景的目标状态为有账单未还,不还款;对于处于有账单未还的状态,基于业务经验可以确定大部分信用卡用户会按时还清信用卡账单,在业务场景的源状态S
在示例中,在业务场景的源状态S
步骤A503:根据对所述业务场景的当前状态进行状态转移时的转移概率,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在示例中,在转移概率矩阵中,各个元素对应的转移概率的取值,不会影响测试案例对应的测试数据的正确性,仅会影响最终生成的测试案例中各种业务场景的数量比例。
应理解,在业务场景的源状态S
在示例中,在生成测试案例对应的测试数据中,将满足测试需求的测试数据的数量作为依据,来衡量评价测试数据的生成方法的“准确性”时,可以根据需求目标确认转移概率矩阵的概率值,对提升测试数据的生成方法的“准确性”的重要性。
在示例中,参见图7,业务场景的初始数据及对初始数据进行数据存储的示例图。根据通用数据的数据格式,生成常用的业务数据,将常用的业务数据作为业务场景的初始数据;根据业务场景的初始数据,确定业务场景的初始状态。同时,开发者可以根据业务需求,基于开放的接口,实现需要的初始数据的生成逻辑。
在一种实现方式中,在上述步骤A201中,所述确定业务场景的源状态,可以包括以下步骤:
步骤A1:确定所述业务场景的至少一类场景数据的规则。
以下,以二代身份证号码生成为例,对相关技术和本申请进行对比说明。
在相关技术中,开发者在实现生成证件号的算法时,将直接随机生成的18位数字作为身份证号码使用,在生成的证件号码中,依然存在测试数据不符合严格的数值含义和编码规则的问题。
在示例中,第二代身份证号码长度为18位,编码规则为“ddddddyyyymmddxxxy”。其中,“dddddd”表示地区码,“yyyymmdd”表示出生年月日;“xxx”是3位顺序类编码,奇数表示男性,偶数表示女性;最后一位y是校验位。
应理解,校验位“y”的数值可以通过前17位的数值计算得到。
在示例中,在生成证件号码时,采用的计算规则如下:规定18位号码加权因子为W
y=mod(∑(Ai×Wi),11) (1)
其中,i∈[1,17],Ai表示证件号的第i为数值。即,校验位=前17位数组的加权和对11取模后的结果。例如,若取模后结果为10,则校验位为X。
步骤A2:根据所述业务场景的至少一类场景数据的规则,生成所述至少一类场景数据。
在示例中,在生成证件号码时,采用的推演逻辑可以遵循以上数据生成规则,在证件号码的地区码中关联中国所有县、区的6位地区编码。在生成证件号码时,随机从多个地区编码中取出一个地区编码,保证生成的证件号码中的地区码的有效性。
在示例中,在生成8位生日编码和校验位时,采用校验规则分别校验生日编码、校验位的合法性。对于证件号、银行卡号、地址、邮箱地址等测试数据,由于测试数据遵循数据对应的校验规则,因此,可以保证数据的正确性。
在示例中,根据业务场景的至少一类场景数据的规则,生成业务场景的初始数据。例如,编程实现姓名生成、证件号生成的生成逻辑。
在示例中,支持按照内置的常用数据生成器,或者按需扩展的数据生成方式,随机产生满足业务场景的初始数据。这里,常用数据生成器可以包括银行卡生成工具、授信额度生成工具。
在实际应用中,可以采用银行卡号生成工具生成银行卡号,自定义的授信额度生成工具生成授信额度。
步骤A3:根据至少一种场景数据,确定业务场景的源状态。
在示例中,根据至少一种场景数据,确定业务场景的源状态。参见图7,图7列举了本申请生成的业务场景的初始数据中的部分数据。业务场景涉及银行的金融业务,例如,贷款业务,此时,业务场景的初始数据可以包括以下信息中的任一项:姓名、出生日期、证件号码、银行卡号、居住地址、银行卡号、授信额度、互联网协议地址、邮箱地址、信用卡消费记录、车辆型号、企业信息。
在一种实现方式中,所述方法还包括:在所述当前状态与所述当前状态的上一状态相同时,确定所述当前状态满足预设条件。
这里,在生成测试数据时,按照概率分布取得确定的执行函数f
在示例中,在生成测试数据时,在当前状态与当前状态的上一状态相同时,即,S
应理解,在行为函数包含不改变状态的函数时,状态函数可以称为终止函数,执行终止函数则表示本次模拟最终的输出结果,即是业务场景的状态对应业务场景。
在示例中,当前状态满足预设条件时,则将当前状态作为测试案例,将当前状态加入到结果集合T中,将结果集合T中的至少部分状态作为测试数据。
在示例中,当前状态满足预设条件时,重新选择业务场景的初始状态,对业务场景的初始状态执行上述测试数据的生成方法,得到在不同初始状态下经状态转移得到的不同目标状态。
在示例中,在生成测试数据时,在当前状态与当前状态的上一状态不同时,即,S
在示例中,在生成测试数据时,当算法的迭代次数达到设定次数C时,确定当前状态满足预设条件。
即,符合测试数据的生成方法的终止条件,结束测试数据的生成过程,输出测试数据,将测试数据加入结果集合T中。
在一种实现方式中,所述状态转移过程中得到的至少部分状态,包括:所述状态转移过程得到的最终状态。
在一种实现方式中,所述方法还包括:将所述测试数据转换为JAVA内存对象。
在示例中,采用软件开发工具包(Software Development Kit,SDK)直接嵌入其应用程序代码中,可以直接生成java内存对象供应用程序直接使用,无需手动导入应用程序,将数据的生成和数据的使用连接成一个闭环。
在示例中,在生成初始数据后,可以对初始数据进行序列化存储,或者,按照预定义的表结构直接生成数据库操作语句(data manipulation language,DML)。
在示例中,测试数据支持多种存储格式,在对初始数据进行序列化存储时,可以采用以下任一种数据存储格式:json格式、csv格式、excel格式。
在示例中,参见表1,测试数据生成算法执行的代码逻辑。其中,设定次数C用于控制最大迭代次数,输入的最大迭代次数C用于决策整个算法何时停止。
表1测试数据生成算法执行的代码逻辑
基于前述实施例相同的技术构思,参见图8,本申请实施例提供的测试数据的生成方法,可以应用于银行系统的金融业务。以下,以银行消费贷款产品为例,说明如何在贷款用户开户后,构造出业务生命周期中各个生命阶段的业务场景的测试数据。
在实际应用中,可以根据业务场景的初始数据,对业务场景进行初始化。在对业务场景进行初始化时,包括不限于姓名初始化、证件号码初始化、住址初始化、借记卡初始化、业务网日期初始化、授信额度初始化,从而,为一个用户开立贷款账户。此时,可以导出案例场景的初始数据,将业务场景的初始状态记作新开未结账户。
在示例中,在业务场景的初始状态,执行行为函数:借款,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态1:当天有一笔借款的账户。
在示例中,业务场景的当前状态为状态1,执行行为函数:日切N天,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态2:当天有一笔借款的账户,已计提N天利息。
在示例中,每个状态可以展示一个后继状态,每一个状态都支持直接导出测试案例对应的测试数据。参见图8,后续依次执行首期账单日结转、还款、日切、第二期账单结转等行为函数,构造出了一个按期还款不逾期的优质贷款用户。
在示例中,业务场景的当前状态为状态2,执行行为函数:账单日结转,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态3:账户首期账单已出,且未还。
在示例中,业务场景的当前状态为状态3,执行行为函数:还款,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态4:账户首期账单已出,且未还。
在示例中,业务场景的当前状态为状态4,执行行为函数:日切M天,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态5:账户借据第二期已计提M天。
在示例中,业务场景的当前状态为状态5,执行行为函数:账单日结转,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态6:账户首期账单已出,且未还。
在示例中,业务场景的当前状态为状态6,执行行为函数:账单日结转,对业务场景的当前状态进行状态转移,得到当前状态的下一状态为状态7:账户首期账单已出,且未还。
在实际应用中,每一个状态对应一个测试案例,对于每一个状态,可以按需导出测试案例对应的测试数据,由于每一个状态符合实际业务场景的业务逻辑,因此,可以保证测试案例对应的测试数据的合理性。
基于前述实施例相同的技术构思,参见图9,本申请实施例提供的测试数据的生成装置,可以包括:
确定模块901,用于确定业务场景的初始状态;获取根据预设的转移概率集合,所述转移概率集合包括所述源状态到至少一种目标状态之间的转移概率;所述源状态至少包括所述业务场景的初始状态;
处理模块902,用于根据预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态;
获取模块903,用于将所述当前状态更新为所述当前状态的下一状态;在所述当前状态满足预设条件时,将更新所述当前状态得到所述当前状态的下一状态中的至少部分状态作为测试数据。
在一种实现方式中,所述确定模块901,还用于:接收用户输入指令,根据用于输入指令得到所述预设的转移概率集合。
在一种实现方式中,所述确定模块901,还用于:根据所述实际业务场景中各种状态之间的转移次数统计值,确定所述转移概率集合。
在一种实现方式中,所述转移概率表示用户在所述源状态下执行目标业务行为以得到目标状态的概率;
所述处理模块902,用于根据所述预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,包括:
将所述业务场景的当前状态确定为源状态;
根据所述预设的转移概率集合,确定用户在所述源状态下执行的目标业务行为;
根据所述目标业务行为对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在一种实现方式中,所述处理模块902,用于根据预设的转移概率集合,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态,包括:
获取所述转移概率集合对应的状态转移矩阵;
根据所述业务场景的初始状态和所述业务场景的目标状态,确定对所述业务场景的当前状态进行状态转移时的转移概率;
根据对所述业务场景的当前状态进行状态转移时的转移概率,对所述业务场景的当前状态进行状态转移,得到所述当前状态的下一状态。
在一种实现方式中,所述确定模块901,用于确定业务场景的初始状态,包括:
确定所述业务场景的至少一类场景数据的规则;
根据所述业务场景的至少一类场景数据的规则,生成所述至少一类场景数据;
根据所述至少一种场景数据,确定所述业务场景的初始状态。
在一种实现方式中,所述处理模块902还用于:
在所述当前状态与所述当前状态的上一状态相同时,确定所述当前状态满足预设条件;
或者,在所述状态转移过程的状态转移次数达到设定次数时,确定所述当前状态满足预设条件。
在一种实现方式中,所述状态转移过程中得到的至少部分状态,包括:所述状态转移过程得到的最终状态。
在一种实现方式中,所述获取模块903还用于:将所述测试数据转换为JAVA内存对象。
在实际应用中,确定模块901、处理模块902和获取模块903均可以采用电子设备的处理器实现,上述处理器可以是ASIC、DSP、DSPD、PLD、FPGA、CPU、控制器、微控制器、微处理器中的至少一种,本申请实施例对此不作限制。
在一些实施例中,本申请实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。
基于前述实施例相同的技术构思,参见图10,本申请实施例提供的电子设备1000,可以包括:存储器1010和处理器1020;其中,
存储器1010,用于存储计算机程序和数据;
处理器1020,用于执行存储器中存储的计算机程序,以实现前述实施例中的任意一种测试数据的生成方法。
在实际应用中,上述存储器1010可以是易失性存储器(volatile memory),示例性地RAM;或者非易失性存储器(non-volatile memory),示例性地ROM,快闪存储器(flashmemory),硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD);或者上述种类的存储器的组合。上述存储器1010可以向处理器1020提供指令和数据。
上文对各个实施例的描述倾向于强调各个实施例间的不同处,其相同或相似处可以互相参考,为了简洁,本文不再赘述
本申请所提供的各方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的各产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的各方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,示例性地,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网格单元上;可以根据实际的可以选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤。
以上,仅为本申请的具体实施方式,但本申请的保护范围不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围内。因此,本申请的保护范围应以权利要求的保护范围为准。
- 测试数据的生成方法和装置、存储介质及电子设备
- 测试数据的生成方法、装置、电子设备和存储介质