阿里QA导读:继开源了线上测试平台MagicOTP和性能测试平台ACP之后,阿里妈妈技术质量再度开源智能化功能测试平台Markov平台,开发者们可以在Github上自主下载。

一 概述

Markov平台(M-Intelligent-Test-platform)是阿里妈妈技术质量自研的智能功能测试平台,我们通过可视化、智能化等技术(智能用例生成、智能回归、失败智能归因、精准测试覆盖),把测试方法论融入其中,解决了功能测试 case 编写成本高、debug 难、回归效率低的问题,实现了功能测试的“想测即测,随时可测”。目前已经成为阿里妈妈的技术基础设施之一。

Github地址:https://github.com/alibaba/intelligent-test-platform

二 Markov-Framework

Markov-Framework是Markov平台的基础框架组件,是将用例管理、测试环境管理、测试执行引擎、智能化技术、持续集成技术进行产品化整合,最终形成一套智能化测试框架。其承载了很多功能,其中包含的基础测试流程,测试数据源定义,所需的智能化Feature,前端动态渲染等功能均可由Markov-framework pipeline来定义。pipeline由多个stage构成,比如deploy-stage(部署阶段)中以容器化部署测试环境为例,用户可自定义hostList来加入多个宿主机,并且在topo参数中自定义一套多模块拓扑环境,而容器启动命令,环境部署脚本等命令也均可在deploy-stage中定义。执行阶段则是决定了case执行流程,包括数据准备,发送请求,结果获取,结果校验,数据恢复,启停等阶段。在阶段中可定义before_exec, exec,after_exec三个动作,每个动作通过反射机制调用用户自定义编写的plugin插件。

因此,用户可根据业务的需要自行在pipeline中添加任意stage(阶段)进行功能拓展,包括各种测试手段如ut,功能AB-Test,智能测试等手段。

三 智能化Feature

Markov本期开源了部分智能化技术(智能用例生成、智能回归、失败智能归因、用例推荐,用例膨胀),在功能测试全流程中,把测试方法论和智能化技术结合更进一步的提升测试效率。

1.用例智能推荐

基于朴素bayes算法和特征抽取算法,Markov提供了用例智能推荐功能;用户仅需输入少量的用例描述信息(分词算法如FMM,结巴分词等进行特征抽取),或者直接选取特征池中已有的用例特征,系统就能自动抽取业务特征集并从千级别的用例库中匹配出相似度TopN的用例,然后结合模板生成用例推荐给用户,创新性的实现了极致的用例编写效率和体验。

2.用例膨胀

Markov提供了用例智能膨胀、管理、Filter功能;通过智能抽取种子用例特征,用户能对各个特征进行组合设置(用户可自定义特征值组合,或选取系统根据历史数据训练好的特征值组合),系统将所有特征进行叉乘组合后产生批量用例集,系统过滤不合法用例后将批量用例集推荐给用户自行选取。用例膨胀技术通过结合特征抽取,特征组合,特征值叉乘,用例模板合并等方式,成功攻克了如何快速准确的生成批量用例这一业界难题,大幅提升了测试用例生产的效率。

3.基于遗传算法的智能用例生成

基于遗传算法Markov提供了高效率的全自动化(自动生成、自动运行、自动筛选)的智能用例生成功能,利用它我们可以全自动化的生成覆盖变动代码的最全面高效的测试用例集。

解决全自动化用例生成问题有两大核心关注点:1、如何判定生成的用例的有效性;2、如何在可接受的效率前提下,发现有效的输入参数组合。Markov的智能生成方案中,以有效增量代码覆盖作为评定用例是否有效的标准,并使用遗传算法,突破性解决了枚举参数组合带来的筛选效率不可解问题。

Markov这一重要feature是基于搜索的软件工程(Search-Based Software Engineering)在软件测试领域的一大应用,创新性利用启发式搜索算法在所有可能用例组成的解空间中快速高效检索真实有效的用例。

3.1.技术简介

用例生成之前系统自动构建用例基因库,用户挑选用例做为表现型种子(phenotype seed),通过基因型编码(genotype encode)生成一系列基因的合集--染色体(chromosome)。通过定义遗传算法的几大核心算子:适应度计算、概率性选择算子、交叉算子、变异算子,进入核心用例培育流程。其中适应度计算是根据用例在增量代码上的覆盖表现来定义的,代表这个用例对测试代码的覆盖优异程度。遗传算法有一个核心假设:“适应度好的个体繁衍出来的后代适应度好的可能性更大”,这就保证了对测试代码有好的覆盖效果的参数组合进入后续的参数组织的可能性更大,而覆盖表现不好的组合将会快被种群遗弃,最终达到培育终止条件后,将基因型染色体解码成为有效用例集(注:遗传算法本身的理解请查阅算法类专业资料)。

3.2.技术效果

遗传算法智能生成与传统枚举的生成效率对比

传统枚举法需要对不同参数取值进行叉乘,逐一判断其有效性(有效性指:覆盖到被测代码的不重复测试用例称为有效用例,即每个生成用例均保证有全新覆盖域、全新覆盖行(未被历史用例覆盖)),导致运行和筛选大量用例效率极差。

遗传算法通过“择优选择,适者生存”的思想,只有代码覆盖效果好的用例才进入种群,对最优解极限逼近从而大幅提高效率。

实验数据中,逐一枚举法需要枚举40320种可能用例,而遗传算法平均只需要处理378个用例,最终都得到94%的极限增量覆盖率。

效率对比结论:实验数据同等效果的前提下,智能生成的效率好于传统枚举法超过100倍。

3.3.具体实验过程和数据

算法生成过程中覆盖率的变化曲线:

实验测试中,种子用例对增量代码的覆盖率大约在10-25%之间,通过逐代培育新生用例,从而逐渐逼近极限覆盖率。

从图中可以看出平均在第6、7代,即已达到最高94%的覆盖率。

流程处理用例数统计

1、每轮测试在达到最高覆盖率时实际生成的用例个数;

2、达到算法终止条件时实际生成的用例个数(算法终止条件为后续数代没有任何覆盖率增长)。

平均在生成182个用例时,增量覆盖率达到极限,平均生成378个用例,算法终止运行。

四 基于动态编排算法的智能回归技术

Markov运用动态用例编排算法技术实现极致的回归效率。将回归用例集进行初始排序,按照用户预定义的可全量数据类型及数据冲突检测方法将用例集预处理。整体大致会编排为全量数据准备桶/并行执行桶/高效串行桶/失败重试桶这四大阶段。

回归提速的两个原则:

原则1:测试数据聚合冗余度r越小,整体回归效率越高。

数据聚合冗余度r指的是在用例集中的测试数据聚合后的重复率,举个例子:

100个用例都依赖了相同的测试数据data1,在caseBycase执行过程中要消耗100个t(data1)的时间单位,此时冗余度r为1。而如果通过某种调度方式对data1进行聚合处理,比如新调度过程在运行之前只需要抽取所有出data1统一准备,即新调度方式消耗1个t(data1)的时间单位即可,此时冗余度r为0.01,从而省下了99个t(data1)时间单位,因此整体回归效率变高。

原则2:当用例集不依赖于任何测试数据时,则用例集可并行执行。

举个例子, 典型不依赖测试数据的场景是线上冒烟场景,在线上域系统是基于生产数据的,即不再依赖任何测试数据,自然也不存在数据冲突等问题,因此线上冒烟场景能轻而易举做高并发执行冒烟检查返回。因此,在功能测试中,当用例集不依赖于测试数据时,则可直接做高并发执行。

在Markov实践中,动态编排算法相较于caseBycase的执行方式能有效提升回归效率约2-10倍,但在观察结果时,我们仍能发现用例编排后仍无可避免还有数据聚合冗余度,即终极优化的天花板就是数据聚合冗余度为0,后续仍有持续优化的空间。

五 基于用例画像建模的排查

Markov提供了一整套基于用例画像的高效的用例排查方案,实现了秒级case失败定位

1.用例画像

用例画像描述了一个用例的前世今生,画像库整合并萃取了该用例的所有历史数据(每一次执行的中间链路数据,人工经验数据,系统自查结果等)。

2.系统自查

系统自查模块通过各类规则进行自动化归因判定。在功能测试场景中,Markov将除了代码逻辑影响之外的一切因素先自行排查,比如测试环境是否稳定,执行过程是否正常,整个链路数据是否有Error出现,和基准环境结果相比差异在何处等,达到了当自查通过后能放心告诉用户,这大概率是代码逻辑变动导致,测试系统一切正常,请专注排查代码逻辑。

3.经验库

历史经验智能推荐

系统将收集本次失败用例的相关数据,如基础失败归因/用户评分/出现频率/归因权重等进行综合计算,与历史失败经验集进行计算,得到相似度最高的历史排查经验推荐给用户。

反馈评分体系

在推荐TopN的历史经验列表给用户后,用户可进行反馈打分,其反馈结果将影响下一次的推荐权重。而如果当前排查经验均不符合用户需要,用户可随时增改经验库。

当随着历史经验库不断完善,推荐的经验也会愈发的精准。

六 代码级缺陷智能定位技术

Markov采用了一种概率分析方案,对每个失败用例建立特征向量,包括用例特征、覆盖代码特征等,并用一些加权策略计算相似度,找出测试目的上相似度最高的用例。相似用例中覆盖最频繁的改动代码行,其缺陷嫌疑度也越高。这样计算出测试未通过代码的缺陷嫌疑度,并将嫌疑度高的代码推送给用户作为缺陷定位的参考。

目前Markov Framework一期开源了测试框架和部分智能化Feature,如用例智能推荐、用例膨胀、智能用例生成、智能回归、代码级缺陷定位。后续将逐步开放更多智能化Feature,当然,如果你有感兴趣的内容,也请随时联系我们。

github地址:https://github.com/alibaba/intelligent-test-platform

欢迎通过邮件组markov-opensource@list.alibaba-inc.com和 github issue 联系和反馈

研发成员:朱藻、橦录、暔风、荿之、骆凡

写在最后:在稳定性、研发效能、测试等领域有兴趣,期望通过技术改变测试,引领测试变革的同学。

欢迎联系朱藻!邮箱:zhuzao@taobao.com


----end----


推荐阅读:
浅谈如何自动化生成测试脚本...
有没有好到简历模版可以参考一下

可以加微信,一起入群学习哦

阿里妈妈技术质量再度重磅开源:国内首个智能化功能测试开源平台Markov相关推荐

  1. 重磅开源:阿里妈妈技术质量开源了线上测试MagicOTP和性能测试平台ACP

    阿里QA导读:阿里妈妈技术质量团队正式开源了线上测试平台MagicOTP和性能测试平台ACP,开发者们可以在Github上自主下载. 2020年4月7日,阿里妈妈技术质量团队开源了线上测试平台Magi ...

  2. 阿里妈妈技术团队 6 篇论文入选 CIKM 2021

    关于 CIKM CIKM(The Conference on Information and Knowledge Management ) 是由ACM主办的信息检索和数据挖掘等领域的国际顶级会议,在相 ...

  3. 阿里妈妈技术团队5篇论文入选 SIGIR 2022!

    近日,第 45 届国际信息检索大会(The 45th International ACM SIGIR Conference on Research and Development in Informa ...

  4. 阿里妈妈技术团队 5 篇论文入选 TheWebConf 2022

    近日,第31届国际万维网大会(The Web Conference / WWW)审稿结果出炉, 阿里妈妈技术团队有5篇论文入选. TheWebConf 成立于1989年,原名为"The In ...

  5. 请查收 | 2021 阿里妈妈技术文章回顾

    2021年5月13日,「阿里妈妈技术」正式与大家见面了~ 在过去的237天里,我们分享了50篇原创内容,覆盖了广告算法实践.算法工程&引擎&系统建设.智能创意.风控.数据科学等多个技术 ...

  6. 请查收 | 2022 阿里妈妈技术文章回顾

    新年伊始,万象更新! 转眼,阿里妈妈技术已陪伴大家走过601天~ 在此,感谢每位读者朋友的支持与关注 回顾2022,我们分享了60篇原创技术文章.发布了1本营销科学系列白皮书.开源了1项向量召回技术方 ...

  7. 开放下载 | 阿里妈妈技术年货来啦!

    年味愈浓,春节将近.阿里妈妈技术年货来啦~ 去年开始,我们通过「阿里妈妈技术」微信公众号分享我们的技术实践与经验.截至目前,我们发布了超过 50 篇技术内容,覆盖了广告算法实践.AI 平台及工程引擎. ...

  8. 阿里妈妈技术团队4篇论文入选WSDM 2022

    关于WSDM WSDM(The International Conference on Web Search and Data Mining)是信息检索与数据挖掘领域的国际顶级会议,由 SIGIR.S ...

  9. 久等了,「阿里妈妈技术」来啦!

    Hi,各位小伙伴,「阿里妈妈技术」正式和大家见面啦~ 我们是谁 我们是阿里巴巴集团核心商业化部门--阿里妈妈的技术团队. 秉承着"让天下没有难做的营销"的使命,阿里妈妈技术引领了A ...

最新文章

  1. 【跟着子迟品 underscore】Array Functions 相关源码拾遗 小结
  2. 编码-指标变量分别独立处理
  3. edxp显示未安装_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器
  4. platform总线的probe函数调用
  5. layui option 动态添加_layui select动态添加option的实例
  6. 苹果再因“降频门”遭遇集体诉讼,11.5万用户出拳
  7. Ip绑定域名tomcat配置
  8. Win10 开启移动热点 WiFi 的简单方法
  9. 【Django 2021年最新版教程9】数据库查询操作
  10. 利用vue-gird-layout 制作可定制桌面 (一)
  11. JavaSE 字符串
  12. PASS云计算书简介——接近完美的模式
  13. 体脂率在线计算机,体脂率(BFR)计算器
  14. python爬虫(三)爬取js动态页面之b站粉丝数观看数点赞数爬取
  15. buuctf--CrackRTF
  16. 计算H时M分S秒以后是_最全的风机计算公式,学习了!
  17. DBA常用Sql语句--留着给自己看
  18. C++软件开发岗位要求
  19. linux支持cpu类型,cpu类型
  20. 微信开发模式群发消息接收的是乱码

热门文章

  1. c# hdf5 写string_C#读取风云卫星(HDF5格式)遥感数据的部分代码
  2. 装配图中齿轮的画法_减速器结构解析和装配图画法详解
  3. 鼠标驱动异常,显示:usb optical mouse光电鼠黄色叹号(鼠标无效)
  4. 关于硬件加速哪些优秀的资源总结
  5. 哪款软件可以将数码相机照片恢复?
  6. 程序员面试金典——解题总结: 9.17中等难题 17.7给定一个整数,打印该整数的英文描述(例如 One Thousand,Two Hundred-Thirty Four)
  7. CCF-GAIR 2019 | 中国人工智能的未来到底通向何方?
  8. 道元实业董事长王全林荣获深圳市龙华区五一劳动奖章
  9. matlab imfill,Python相当于Matlab的灰度函数imfill?
  10. 我的世界java版合成表_我的世界:Java版和基岩版的5个合成表差异,知道半数,老MC无疑。...