• 0
  • 0
分享
  • 基于Jaccard等算法的版本验证案例辅助筛选工具研究——软件测试圈
  • 恬恬圈 2023-03-30 16:46:12 字数 2086 阅读 1068 收藏 0

  课题背景

  版本验证是部署软件之前的最后一个测试操作,在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。该验证要求开发人员首先将程序部署在生产环境上,由测试人员通过筛选关键案例进行验证,确保程序主体正常运行。作为投产前的最后一步,版本验证对于整个产品质量的保证至关重要。随着数字化转型的深入,各类项目越来越复杂,测试人员需要执行的测试案例也越来越多,而版本验证通常需要在短时间内完成,既要确保关键案例都被执行,又要节省时间,避免重复验证,在保证测试质量地情况下提升测试效率。以往通过人工的方法进行版本验证案例筛选占用大量的工作时间,效率低,容易出错。基于此,本课题研究了如何通过相似度算法剔除相似度高的测试案例,筛选版本验证关键案例。

  算法介绍

  Jaccard相似系数用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。当集合A,B都为空时,J(A,B)定义为1。杰卡德相似系数是衡量两个集合相似度的一种指标,值越大说明相似度越高。

1-1.png

图1:Jaccard相似度计算公式

  余弦相似度是通过衡量两个向量间的夹角大小,通过夹角的余弦值表示结果,余弦相似度的取值为[-1,1],值越大表示越相似。计算余弦值的公式如下:

1-2.png

图2:单维度余弦相似度计算公式

  如果假设空间是多维的,那么余弦相似度公式可扩展如下图:

1-3.png

图3:多维度余弦相似度计算公式

  Jaccard算法和余弦算法作为自然语言处理中常见的距离相似度算法,拥有简洁高效的特点,每检测万条案例文本的平均耗时大概在 300ms 左右,能够极大的满足测试要求。在准确性上,两种算法也均有不错的表现。

  课题实现

1-4.png

图4:案例筛选工具工作流程图

  本课题基于JAVA和VBA语言编写,VBA用于案例文件处理,JAVA用于工具系统及算法实现。测试案例文档往往包含大量冗余信息,直接进行相似度比对会导致结果不够精准,需要提取关键信息(案例描述和预期结果)。VBA语言可以直接对excel文档进行批量处理,将有用信息以.txt形式输出,便于后续导入案例筛选工具进行数据比对。

  JAVA语言编写程序,包含可视化工具界面和算法,可以满足零编程基础人员一键导入案例,一键导出案例比对结果到excel。工具比对结果中包含了所有案例的两两相似度对比结果及系统推荐的版本验证案例。具体的功能包含:智能分词(采用常用的IK分词器进行分词并去掉句子中的噪点),线程模式(开启后可切换多线程处理模式,极大提高比对速度,适合大量案例场景,但会提高CPU占用率,一般适用案例数在10万以上的场景),阈值设置(可自由设置版本验证案例相似度门槛,由0到1,系统会根据门槛推荐版本验证案例)。测试人员只需将VBA处理后的数据导入该工具,打开智能分词,选择线程模式,即可开始比对,该工具会将所有案例两两比对,采用Jaccard及余弦算法,并将两种算法的结果取平均值作为最终结果。比对过程会展示在工具界面的比对框,最终结果汇总至比对结果文档输出至当前路径。输出结果中每条案例均会被贴上是否满足版本验证条件的标签,并给出Jaccard、余弦算法及加权相似度结果值。

1-5.png

图5:版本验证工具(比对前)

1-6.png

图6:版本验证工具(比对后)

1-7.png

图7:输出结果

  拓展研究

  在采用传统相似度算法的同时,本课题也研究了机器学习和深度学习在本场景下的使用,包括无监督学习,采用bert预训练模型,对任务领域内的无标签测试数据进行预训练,获取每个词的语义表示,用于相似度计算;以及监督学习孪生网络等。在训练测试案例数据的过程中,发现由于待测系统众多,测试领域繁多,案例种类复杂,以及每个测试人员编写案例组织语言的习惯不同,产生了训练难度大,成本高的问题。与此同时,可用训练样本数也不够充沛,导致训练结果不够理想,所有训练模型均未取得较好效果,准确率甚至低于百分之50。即便在一个系统案例中可行,放到另个领域进行预测,之前积累的词袋模型也无法使用,需要重新进行训练,耗费大量时间。

  课题总结

  通过该版本验证案例筛选工具,可以在较短的时间内帮助测试人员计算出两两测试案例的相似度,通过不同的相似度,定义案例执行的优先级,辅助版本验证案例的选择,从而减轻测试人员在筛选版本验证案例中花费的精力,使其能以更大的精力投入到测试活动中。同时该工具操作简单,支持一键导入和一键输出,方便非技术人员进行使用,门槛低,便于推广。但该工具也存在一些缺陷,以相似度作为筛选版本验证案例的标准可能会导致漏掉一些关键案例,在一些复杂场景下,相似度高也不一定意味着重要性低。因此此工具应作为辅助版本验证案例筛选的工具,筛选结果是否符合版本验证案例标准还应由测试人员根据实际情况进行判断。



作者:何泊宁    

来源:http://www.51testing.com/html/89/n-7794889.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   科技媒体 Android Headline 昨日(8 月 1 日)发布博文,分享了 Pixel 9 Pro Fold 折叠手机的宣传视频。  谷歌重点介绍了 Pixel 9 Pro Fold 折叠手机的 8.0 英寸内屏,并展示了使用 Gemini AI 规划出游方案,并排打开 Google Messages 和 Gemini 等等。  可 180 度展开  谷歌初代 Pixel Fold 手机被人诟病的一点是,无法实现 180 度完全展开,谷歌在视频中表示,谷歌 Pixel 9 Pro Fold 手机解决了这个问题,可以完全 180 度展开。  新的铰链  消息源认为谷歌公司和国内欧加集...
            0 0 600
            分享
          •   一、cookie的处理方式  1、准备:两个接口:一个登录、一个充值  2、登录接口  3、充值接口:会失败  4、处理的两种方法  第一种方法,直接添加HTTPCookie管理器,移动到线程组最上面  第二种方法:有的时候Cookie会变,我们就需要,先使用正则表达式提取器获取到cookie(JSESSIONID),再在需要Cookie的接口下添加HTTPCookie管理器(填写名称、值、域、路径)即可  第一种方法  添加:HTTPCookie管理器,放到最上面。  位置:  再次运行:就会充值成功。  第二种方法  1、登录的时候会有set_Cookie存在。  2、添加后置处理器&...
            0 0 4776
            分享
          • 在日常的编写SQL中,我们都会遇到一些自以为很简单实际却又不怎么熟练的内置函数,虽然我们不一定都用的上,但是要用上的时候我们得知道。为了记录最近遇到的坑,决定把它以场景模式记录下来,方便日后使用,也是一次记忆的加深场景1:当你sql查询出来的字段没有值,或者为null时,做数据分析时,这些个为null的字段会造成很大的困扰,所以我们需要给可能出现null的字段添加一个默认值,这个时候SQL的内置函数IFNULL()与COALESCE() 就能很好的满足我们的需求 IFNULL() 函数作用: IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返...
            0 3 2684
            分享
          •   一、专业技能  1、孰练测试理论,测试方法,测试流程以及常用的测试文档的编写,如︰测试计划,方案,用例,报告等,能够根据项目需求提取测试点,设计合理的测试用例,执行用例以及提交测试报告。保证软件的质量。  ⒉、熟练测试用例设计方法︰如等价类,边界值,场景法,因果判定表等进行测试用例的设计,熟练使用禅道进行Bug的提交和管理,并对缺陷进行跟踪和定位,配合开发人员解决bug,确保产品的质量。  3、熟练使用Mysql和Oracle数据库,熟练使用Sql语句进行增删改查,子查询,多表联查,分组查询等,可用于表单测试、后台数据查询,熟练数据库的管理,对数据进行批量操作等。nosql,redis,m...
            0 0 383
            分享
          • 接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。接口请求断言响应内容在发起请求后,我们使用一个变量 r 存储响应的内容,也就是 Response 对象。  >>> import requests   >>> r = requests.get('http://httpbin.org/get')   >>> print(r)   <Response [200]>Response 对象有很多功能强...
            0 0 2631
            分享
      • 51testing软件测试圈微信