课题背景
版本验证是部署软件之前的最后一个测试操作,在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。该验证要求开发人员首先将程序部署在生产环境上,由测试人员通过筛选关键案例进行验证,确保程序主体正常运行。作为投产前的最后一步,版本验证对于整个产品质量的保证至关重要。随着数字化转型的深入,各类项目越来越复杂,测试人员需要执行的测试案例也越来越多,而版本验证通常需要在短时间内完成,既要确保关键案例都被执行,又要节省时间,避免重复验证,在保证测试质量地情况下提升测试效率。以往通过人工的方法进行版本验证案例筛选占用大量的工作时间,效率低,容易出错。基于此,本课题研究了如何通过相似度算法剔除相似度高的测试案例,筛选版本验证关键案例。
算法介绍
Jaccard相似系数用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。当集合A,B都为空时,J(A,B)定义为1。杰卡德相似系数是衡量两个集合相似度的一种指标,值越大说明相似度越高。
图1:Jaccard相似度计算公式
余弦相似度是通过衡量两个向量间的夹角大小,通过夹角的余弦值表示结果,余弦相似度的取值为[-1,1],值越大表示越相似。计算余弦值的公式如下:
图2:单维度余弦相似度计算公式
如果假设空间是多维的,那么余弦相似度公式可扩展如下图:
图3:多维度余弦相似度计算公式
Jaccard算法和余弦算法作为自然语言处理中常见的距离相似度算法,拥有简洁高效的特点,每检测万条案例文本的平均耗时大概在 300ms 左右,能够极大的满足测试要求。在准确性上,两种算法也均有不错的表现。
课题实现
图4:案例筛选工具工作流程图
本课题基于JAVA和VBA语言编写,VBA用于案例文件处理,JAVA用于工具系统及算法实现。测试案例文档往往包含大量冗余信息,直接进行相似度比对会导致结果不够精准,需要提取关键信息(案例描述和预期结果)。VBA语言可以直接对excel文档进行批量处理,将有用信息以.txt形式输出,便于后续导入案例筛选工具进行数据比对。
JAVA语言编写程序,包含可视化工具界面和算法,可以满足零编程基础人员一键导入案例,一键导出案例比对结果到excel。工具比对结果中包含了所有案例的两两相似度对比结果及系统推荐的版本验证案例。具体的功能包含:智能分词(采用常用的IK分词器进行分词并去掉句子中的噪点),线程模式(开启后可切换多线程处理模式,极大提高比对速度,适合大量案例场景,但会提高CPU占用率,一般适用案例数在10万以上的场景),阈值设置(可自由设置版本验证案例相似度门槛,由0到1,系统会根据门槛推荐版本验证案例)。测试人员只需将VBA处理后的数据导入该工具,打开智能分词,选择线程模式,即可开始比对,该工具会将所有案例两两比对,采用Jaccard及余弦算法,并将两种算法的结果取平均值作为最终结果。比对过程会展示在工具界面的比对框,最终结果汇总至比对结果文档输出至当前路径。输出结果中每条案例均会被贴上是否满足版本验证条件的标签,并给出Jaccard、余弦算法及加权相似度结果值。
图5:版本验证工具(比对前)
图6:版本验证工具(比对后)
图7:输出结果
拓展研究
在采用传统相似度算法的同时,本课题也研究了机器学习和深度学习在本场景下的使用,包括无监督学习,采用bert预训练模型,对任务领域内的无标签测试数据进行预训练,获取每个词的语义表示,用于相似度计算;以及监督学习孪生网络等。在训练测试案例数据的过程中,发现由于待测系统众多,测试领域繁多,案例种类复杂,以及每个测试人员编写案例组织语言的习惯不同,产生了训练难度大,成本高的问题。与此同时,可用训练样本数也不够充沛,导致训练结果不够理想,所有训练模型均未取得较好效果,准确率甚至低于百分之50。即便在一个系统案例中可行,放到另个领域进行预测,之前积累的词袋模型也无法使用,需要重新进行训练,耗费大量时间。
课题总结
通过该版本验证案例筛选工具,可以在较短的时间内帮助测试人员计算出两两测试案例的相似度,通过不同的相似度,定义案例执行的优先级,辅助版本验证案例的选择,从而减轻测试人员在筛选版本验证案例中花费的精力,使其能以更大的精力投入到测试活动中。同时该工具操作简单,支持一键导入和一键输出,方便非技术人员进行使用,门槛低,便于推广。但该工具也存在一些缺陷,以相似度作为筛选版本验证案例的标准可能会导致漏掉一些关键案例,在一些复杂场景下,相似度高也不一定意味着重要性低。因此此工具应作为辅助版本验证案例筛选的工具,筛选结果是否符合版本验证案例标准还应由测试人员根据实际情况进行判断。
作者:何泊宁