Page 111 - 《软件学报》2021年第9期
P. 111
陈立哲 等:基于日志挖掘的微服务测试集缩减技术 2735
度为 k+1 路径的候选集(第 5 行),进而根据定义 1,从候选集中筛选出 F k+1 (第 6 行~第 9 行);最后,根据定义 2 和
推理 2,从长度最长的频繁路径集到 F 1 依次确定最大频繁路径集(第 14 行~第 22 行).
2.2 测试用例关联
该环节主要建立服务调用频繁路径与测试用例的对应关系,并将支持度信息赋值给相应测试用例,主要包
括测试用例匹配和支持度归一化这两项活动.其中:测试用例匹配从频繁路径集中搜索与测试用例关联的服务
调用路径;支持度归一化将支持度转化为 0 到 1 区间内的数值,为后续启发式搜索提供输入.
2.2.1 测试用例匹配
测试用例匹配主要是建立频繁路径与测试用例之间的对应关系,由于单元测试不涉及服务调用关系,不在
本文讨论范围,本文主要关注服务测试和端到端测试.
(1) 服务测试匹配
服务测试关注服务之间的调用关系,其测试用例可以直接转化为一条服务调用路径(或称为测试路径).匹
配过程中,从最长的频繁路径开始搜索,对每条频繁路径与测试路径进行匹配,可能出现以下 4 种结果.
① 精确匹配到一条频繁路径;
② 测试路径是一条或多条频繁路径的子路径;
③ 有一条或多条频繁路径是该测试路径的子路径;
④ 其他情况.
对于匹配结果①,直接将精确匹配的频繁路径关联到测试用例上;对于匹配结果②,说明测试路径是频繁
的,但不是最大频繁的,故将匹配到的所有频繁路径中支持度最大的频繁路径关联到测试用例上;对于匹配结果
③,虽然该测试路径本身不是频繁的,但其包含最大频繁路径,故将匹配到所有频繁路径中长度最长的频繁路径
关联到测试用例上;对于匹配结果④,直接判定为不频繁,不关联任何频繁路径.
(2) 端到端测试匹配
端到端测试的测试用例可能对应一组服务调用路径(或称为测试路径集合),需要对测试路径集合中的每一
条测试路径进行匹配.匹配结果的处理方式与服务测试匹配类似,但将频繁路径对应到整个测试用例上时,需选
择长度最长的频繁路径进行关联.
2.2.2 支持度归一化
考虑到启发式搜索需要关注测试用例之间的差异性,需统一支持度和差异值的取值范围,故频繁路径的支
持度不能直接赋予与之关联的测试用例,需要进行归一化处理.同时,长度更长的频繁路径对系统的覆盖程度更
高,应优先于长度短的频繁路径,为此,本文将[0,1)区间划分为 k max 段(k max 为 k 的最大值),将 F k 中频繁路径 p 的
支持度换算到半开区间[(k−1)/k max ,k/k max )上,换算公式为
k −+ /
1 c n
c = (1)
u
k max
其中,c 为 p 的频次,n 为事务集 D 的规模,c u 为归一化后的支持度.
归一化之后,即可将支持度赋予关联的测试用例.对于未匹配到频繁路径的测试用例,则支持度赋值为 0.
2.3 测试用例集缩减
该环节基于支持度对原测试用例集搜索其子集,进而输出符合覆盖准则要求的测试用例缩减集,主要包括
启发式搜索和覆盖性判定这两项活动.其中:启发式搜索方法基于图搜索方法提出,覆盖性判定则确认搜索到的
测试用例子集满足覆盖要求.
2.3.1 启发式搜索
启发式搜索的目的在于找到一组支持度较大且相互间差异也较大的测试用例集合:支持度较大说明测试
用例集符合用户关切,差异较大是为了使测试用例集尽快收敛于覆盖准则要求.注意到支持度属于测试用例自
身属性,差异性属于测试用例两两关系的属性,故可以构建一个图来建模这两项参数,图的节点表示测试用例,