代码改变世界

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

2020-05-14 06:30  zouhui  阅读(742)  评论(0编辑  收藏  举报

阿里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----


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

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