一种支持跨业务场景的软件模块动态组装与自动化测试方法与流程
本发明涉及软件工程领域,特别涉及一种支持跨业务场景的软件模块动态组装与自动化测试方法。
背景技术:
1、随着软件系统逐渐向模块化、组件化和服务化方向发展,软件功能通常被拆分为具有相对独立功能和标准接口的软件模块。在面对订单处理、用户认证、风险控制、资源审批等不同业务场景时,可以根据业务需求选择相应的软件模块,并按照模块之间的调用关系和数据传递关系进行组装,从而缩短软件功能的开发及部署周期。
2、现有的软件模块组装方法通常根据模块的功能标识、接口定义和依赖关系完成模块选择及连接,并在模块组装完成后通过单元测试、接口测试或者回归测试验证组装结果。对于不同业务场景中重复出现的模块组合,现有方法一般仍需重新执行相应测试,或者仅根据模块标识和接口形式直接复用历史测试结果。由于相同模块组合在不同业务场景下可能对应不同的输入范围、输出要求、模块版本和初始状态,直接复用历史测试结果可能无法准确反映该模块组合在当前业务场景下的可用性,而对整个模块组装结果重新测试又会产生较多重复测试,增加测试时间和计算资源消耗。
3、另外,现有自动化测试方法在测试未通过时,通常记录测试用例、异常模块或者错误信息,但较难结合模块间的字段传递关系,进一步确定引起测试失败的具体连接边及被违反的接口约束。因此,在后续业务场景组装过程中,可能再次生成具有相同问题的模块连接关系。即使对异常模块进行替换,也往往需要重新测试较大范围的模块调用路径,历史测试结果、失败定位结果与后续模块组装之间尚未形成有效的反馈闭环。
4、为此,提出一种支持跨业务场景的软件模块动态组装与自动化测试方法。
技术实现思路
1、本发明的主要目的在于提供一种支持跨业务场景的软件模块动态组装与自动化测试方法,可以有效解决背景技术中的问题。
2、为实现上述目的,本发明采取的技术方案为,
3、一种支持跨业务场景的软件模块动态组装与自动化测试方法,包括以下步骤:
4、s1、获取目标业务场景的场景约束信息,根据所述场景约束信息从模块库中选择软件模块,构建目标模块组装图;其中,所述软件模块具有模块描述信息,所述模块描述信息至少包括功能标识、版本信息、输入约束、输出约束和状态前提,所述目标模块组装图中的节点表示软件模块,连接边表示软件模块之间的调用关系或者数据传递关系;
5、s2、获取历史业务场景对应的历史验证记录,根据所述目标模块组装图与所述历史验证记录中的历史模块组装图之间的结构对应关系确定共同组装子图;其中,所述历史验证记录至少包括历史模块组装图中各连接边的验证状态、验证边界条件和测试通过结果,由验证状态为通过的连接边及其关联节点构成已验证组装子图;
6、s3、确定所述共同组装子图在所述目标业务场景下的目标边界条件,并将所述目标边界条件与对应已验证组装子图的验证边界条件进行比较;当所述目标边界条件被所述验证边界条件覆盖时,将所述已验证组装子图的测试通过结果确定为所述共同组装子图的可复用验证证据;所述覆盖至少表征所述目标边界条件限定的入口数据范围包含于所述验证边界条件限定的已验证入口数据范围、所述验证边界条件限定的出口数据范围包含于目标下游软件模块可接收的数据范围,并且目标初始状态满足已验证状态前提;
7、s4、根据所述可复用验证证据的覆盖范围,将所述目标模块组装图中未被所述可复用验证证据覆盖的连接边确定为待验证连接边;针对所述待验证连接边,根据上游软件模块的输出约束和下游软件模块的输入约束生成测试数据,并从所述待验证连接边向上游扩展至最近的已验证组装子图边界或者所述目标模块组装图的输入节点、向下游扩展至最近的已验证组装子图边界或者所述目标模块组装图的输出节点,形成局部测试路径并执行自动化测试;
8、s5、在所述自动化测试未通过时,根据所述局部测试路径中各连接边的实际传递数据、字段传递关系、上游软件模块的输出约束和下游软件模块的输入约束确定失败连接边及被违反的约束,并根据所述目标业务场景、所述失败连接边和所述被违反的约束生成场景化连接约束;
9、s6、在所述自动化测试通过时,将所述局部测试路径对应的已测试组装子图、验证边界条件、连接边验证状态和测试通过结果关联存储,形成新的历史验证记录;在所述自动化测试未通过时,根据所述场景化连接约束从所述模块库中选择替换软件模块,利用所述替换软件模块替换所述失败连接边关联的软件模块,在保留所述目标模块组装图中其他组装结构的情况下得到调整后的模块组装图;从所述替换软件模块向上游扩展至最近的已验证组装子图边界或者输入节点、向下游扩展至最近的已验证组装子图边界或者输出节点,确定受影响的局部路径并执行复测,并在所述复测通过时,将对应的已测试组装子图、验证边界条件、连接边验证状态和测试通过结果关联存储,形成新的历史验证记录。
10、进一步的,所述历史验证记录为结构化记录,包括历史模块组装图标识、节点集合、连接边集合、各连接边的验证状态、各软件模块的版本信息、验证边界条件和测试结果标识;
11、所述确定共同组装子图,包括:
12、对于目标模块组装图中的节点和历史模块组装图中的节点,按照下式计算节点匹配度:
13、
14、其中,为功能匹配度,当两个节点对应软件模块的功能标识相同时取值为1,否则取值为0;为两个节点的输入接口字段集合的交集元素数量与并集元素数量之比;为两个节点的输出接口字段集合的交集元素数量与并集元素数量之比;
15、将满足且的节点对确定为候选匹配节点对;
16、以节点匹配度为候选匹配节点对的权值进行最大权二分匹配,得到一一对应的匹配节点;
17、将两个模块组装图中两端节点分别匹配、连接方向相同且连接边类型相同的连接边确定为匹配连接边,并将由相互连通的匹配节点和匹配连接边构成的连通子图确定为候选共同组装子图;
18、将包含匹配节点数量最多的候选共同组装子图确定为所述共同组装子图;
19、其中,软件模块的版本信息不作为功能节点匹配条件,而用于判断验证边界条件的覆盖关系。
20、进一步的,为所述验证边界条件和所述目标边界条件分别生成边界指纹,所述边界指纹采用以下边界指纹模型表示:
21、
22、其中,为入口约束特征序列,为出口约束特征序列,为模块版本特征序列,为状态前提特征序列,、、和分别为对应特征序列的摘要值;
23、所述边界指纹的生成包括:
24、将输入约束和输出约束分别转换为约束特征项,每一约束特征项至少包括字段标识、数据类型、取值约束、精度、单位、空值属性以及来源位置标识,所述来源位置标识用于指示对应的软件模块或者连接边;
25、按照字段标识对所述约束特征项进行排序和标准化编码,分别得到所述入口约束特征序列和出口约束特征序列;
26、按照软件模块的调用顺序对模块标识、主版本号和次版本号进行编码,得到所述模块版本特征序列;
27、按照状态变量标识对状态前提进行排序和编码,得到所述状态前提特征序列;以及
28、分别对各特征序列执行sha-256摘要运算,得到对应摘要值;
29、其中,所述摘要值用于历史验证记录的检索和特征序列完整性校验,验证证据的复用还需根据对应特征序列确定验证边界条件的覆盖关系。
30、进一步的,从所述历史验证记录中确定候选验证证据,包括:
31、根据目标边界指纹与历史边界指纹的对应特征序列分别计算入口匹配度、出口匹配度、版本匹配度和状态匹配度;
32、其中,将两个入口约束特征序列中相同约束特征项数量与约束特征项并集数量的比值确定为入口匹配度,将两个出口约束特征序列中相同约束特征项数量与约束特征项并集数量的比值确定为出口匹配度,将两个状态前提特征序列中相同状态特征项数量与状态特征项并集数量的比值确定为状态匹配度;
33、确定两个模块版本特征序列的最长公共子序列,将所述最长公共子序列中模块标识和版本号均相同的软件模块数量与较长模块版本特征序列的软件模块数量的比值确定为版本匹配度;
34、按照下式计算边界候选匹配度:
35、
36、其中,为边界候选匹配度,为入口匹配度,为出口匹配度,为版本匹配度,为状态匹配度;
37、将边界候选匹配度大于或等于0.90的历史验证记录确定为候选验证证据;
38、对于所述候选验证证据,将目标入口约束转换为目标入口约束谓词,将历史已验证入口约束转换为历史入口约束谓词,将历史已验证出口约束转换为历史出口约束谓词,并将目标下游软件模块的输入约束转换为目标接收约束谓词;
39、当目标入口约束谓词能够推出历史入口约束谓词、历史出口约束谓词能够推出目标接收约束谓词、目标初始状态满足历史已验证状态前提且模块版本满足预设版本兼容关系时,确定所述目标边界条件被所述验证边界条件覆盖,并将所述候选验证证据确定为可复用验证证据。
40、进一步的,当所述共同组装子图的目标边界条件未被对应验证边界条件覆盖时,对所述共同组装子图进行分段复用,包括:
41、根据所述目标边界指纹和历史边界指纹确定不一致约束特征项,并根据所述不一致约束特征项携带的来源位置标识,将所述不一致约束特征项映射至对应的软件模块或者连接边;
42、将对应连接边或者对应软件模块的入口连接边和出口连接边确定为分割边;
43、从所述共同组装子图中移除所述分割边,将移除所述分割边后形成的各连通分量分别确定为一个组装片段,以使不同组装片段之间不存在重叠;
44、将由组装片段外部指向所述组装片段内部的连接边确定为片段入口边,将由所述组装片段内部指向所述组装片段外部的连接边确定为片段出口边;
45、根据所述片段入口边、片段出口边、组装片段中的模块版本和状态前提,按照权利要求3所述的方式生成片段边界指纹,并按照权利要求4所述的方式判断所述组装片段对应的目标片段边界条件是否被历史片段边界条件覆盖;
46、将目标片段边界条件被历史片段边界条件覆盖的组装片段确定为可复用组装片段,并将所述分割边以及未被可复用组装片段覆盖的连接边确定为所述待验证连接边。
47、进一步的,根据待验证连接边的上游输出约束和下游输入约束生成测试数据,包括:
48、将上游软件模块的输出约束转换为上游输出约束谓词,将下游软件模块的输入约束转换为下游输入约束谓词;其中,所述约束谓词由数据类型谓词、数值范围谓词、枚举谓词、字符串模式谓词、空值谓词和跨字段约束谓词中的至少一种组成;
49、按照下式构建正常测试约束和冲突测试约束:
50、
51、
52、其中,为待验证连接边的正常测试约束,为待验证连接边的冲突测试约束;
53、分别对所述正常测试约束和冲突测试约束进行可满足性求解,在正常测试约束可满足时,利用满足所述正常测试约束的解生成正常测试数据;在冲突测试约束可满足时,利用满足所述冲突测试约束的解生成冲突测试数据;
54、其中,对于数值范围谓词,至少选取边界值、范围内代表值和与边界相差一个最小精度单位的值进行求解;对于枚举谓词或者字符串模式谓词,分别生成满足和不满足对应谓词的代表值。
55、进一步的,所述确定局部测试路径和失败连接边,包括:
56、以所述待验证连接边为起点,向上游遍历至最近的可复用组装片段的出口边或者目标模块组装图的输入节点,向下游遍历至最近的可复用组装片段的入口边或者目标模块组装图的输出节点,将遍历得到的连接边按照拓扑执行顺序组成所述局部测试路径;
57、在执行所述局部测试路径时,采集各连接边上的实际传递数据,并记录所述实际传递数据中各字段从上游软件模块输出至测试失败位置的字段传递关系,形成与测试失败结果对应的数据传递链;
58、对于所述数据传递链中的连接边,按照下式计算约束异常标识:
59、
60、其中,为连接边上的实际传递数据,为对应上游软件模块的输出约束谓词,为对应下游软件模块的输入约束谓词;
61、将所述数据传递链中按照拓扑执行顺序首次满足的连接边确定为所述失败连接边;
62、当所述实际传递数据不满足上游软件模块的输出约束谓词时,将取值为假的上游输出约束谓词标识确定为被违反的约束;当所述实际传递数据满足上游软件模块的输出约束谓词但不满足下游软件模块的输入约束谓词时,将取值为假的下游输入约束谓词标识确定为被违反的约束。
63、进一步的,所述场景化连接约束采用下式表示:
64、
65、其中,为目标业务场景的场景特征标识,和分别为失败连接边的上游软件模块标识和版本,和分别为失败连接边的下游软件模块标识和版本,为被违反的约束标识,为根据引起所述约束违反的实际传递数据生成的触发数据谓词;
66、当待组装业务场景的场景特征标识、待连接软件模块的标识和版本分别与所述场景化连接约束相匹配,且待建立连接边的数据约束与所述触发数据谓词的合取结果可满足时,所述场景化连接约束生效并限制建立对应连接边;
67、从模块库中选取满足目标业务场景的功能要求、未触发所述场景化连接约束,并且满足上游软件模块的输出约束能够推出候选软件模块的输入约束、候选软件模块的输出约束能够推出下游软件模块的输入约束的软件模块,形成候选模块集合;
68、针对候选软件模块,按照下式计算局部组装调整代价:
69、
70、其中,为加入候选软件模块后未被可复用验证证据覆盖的连接边数量,为加入候选软件模块后的模块组装图的连接边总数量,为相对于目标模块组装图发生变化的节点数量,为加入候选软件模块后的模块组装图的节点总数量;
71、选择局部组装调整代价最小的候选软件模块作为所述替换软件模块,对所述受影响的局部路径执行复测;在复测通过时生成新的历史验证记录,在复测未通过时根据重新确定的失败连接边和被违反的约束更新所述场景化连接约束,并从尚未被所述场景化连接约束排除的候选软件模块中重新选择替换软件模块。
72、一种支持跨业务场景的软件模块动态组装与自动化测试系统,包括:
73、组装图构建模块,用于获取目标业务场景的场景约束信息,根据所述场景约束信息和软件模块的模块描述信息构建目标模块组装图;
74、验证证据复用模块,用于获取历史验证记录,确定目标模块组装图与历史模块组装图之间的共同组装子图,并根据目标边界条件与验证边界条件的覆盖关系确定可复用验证证据;
75、局部测试模块,用于根据可复用验证证据的覆盖范围确定待验证连接边,生成测试数据和局部测试路径,并执行自动化测试;
76、连接约束生成模块,用于在自动化测试未通过时,根据实际传递数据、字段传递关系以及软件模块的输入约束和输出约束确定失败连接边和被违反的约束,并生成场景化连接约束;以及
77、局部重组装模块,用于根据所述场景化连接约束选择替换软件模块,形成调整后的模块组装图,对受影响的局部路径执行复测,并根据测试通过结果生成新的历史验证记录。
78、一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现上述的方法步骤。
79、与现有技术相比,本发明具有如下有益效果,
80、1、本发明根据目标模块组装图与历史模块组装图之间的结构对应关系确定共同组装子图,并通过目标边界条件与历史验证边界条件之间的覆盖关系判断历史测试结果是否能够复用,能够避免仅根据模块名称或者接口形式直接复用测试结果,提高跨业务场景验证证据复用的可靠性。
81、2、本发明根据可复用验证证据的覆盖范围确定待验证连接边,并在已验证组装子图边界之间形成局部测试路径,使测试范围集中于新增、变化或者尚未验证的模块连接关系,减少对已验证组装结构的重复测试。
82、3、本发明结合实际传递数据、字段传递关系以及上下游软件模块的输入约束和输出约束,确定失败连接边及被违反的具体约束,相较于仅定位异常测试用例或者异常模块,能够提高测试失败位置及约束冲突原因的定位准确性。
83、4、本发明根据目标业务场景、失败连接边和被违反的约束生成场景化连接约束,并利用该连接约束选择替换软件模块和确定受影响的局部复测路径,能够降低相同不兼容连接关系被重复组装的概率;复测通过后形成新的历史验证记录,使模块组装、自动化测试和验证证据更新形成闭环。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com