您的位置  > 互联网

优酷质量保障团队开始了服务端精准测试体系的探索

1.由“我们应该测试以及我们应该如何测试?”引发的想法

随着优酷业务规模的增长,服务器的架构和功能变得越来越复杂,代码变更的启动速度也越来越快。 面对需要快速上线的功能,测试资源无法参与每次变更的交付过程。 是否应该测试这些更改? ,如何测试? 成为服务器交付质量和效率最关键的问题:

是否需要测试更改?

如何测试变化?

面对这些问题,仅依靠开发的测试文档和常规的代码分析很难给出准确的答案。 为此,优酷质保团队开始探索服务器端精准测试。 经过半年的技术积累和体系建设,形成了变更内容识别、变更影响分析、测试能力推荐、测试覆盖率评估的精准测试体系。

2、基于代码链路分析的精准测试系统

精准测试本质上是一个基于变化分析的测试决策和评估的过程。 为了做好这个过程,您需要能够准确回答以下问题:

“更改了哪些内容,产生了哪些影响,需要进行哪些测试,更改覆盖范围是否足够?”

从问题中可以看出,变更内容和影响对象的定义是准确测试体系的基石,直接决定了需要识别的变更对象和需要评估的影响对象,并推荐相关测试基于案例的识别和评价结论,以及最终的评价测试活动。 覆盖范围。 通过参考行业现有解决方案,结合优酷的业务特点,我们最终确定了优酷精准测试系统的探索方向:基于代码调用链路分析的精准测试系统。 用一句话描述一下:

以应用的Java方法为观察对象,通过静态分析识别发生变化的Java方法,通过动态采集获取在线Java方法调用链接,然后根据代码中的方法匹配准确分析受变化影响的Java方法调用链接知识库,以及根据影响链接推荐测试流量并评估测试覆盖率的测试系统

在这里,我们要具体解释一下应用程序Java方法调用链路的定义:它是指应用程序内部处理业务流量时产生的完整的Java方法调用栈。 我们认为,相比外部子调用链路,Java方法调用链路更能代表业务场景和代码逻辑,作为变更影响和测试覆盖率评估的对象具有更高的业务价值。

2.1 实施方案

为了通过变更内容识别变更方式,通过变更方式分析受影响的代码链路,并通过受影响的代码链路推送业务流量作为回归测试用例,既需要静态代码分析能力,又需要准确预测变更的能力。识别并分析变更内容。 还需要能够动态采集业务流量的请求参数、返回结果、代码调用链接。 然后以方法为核心对象,准确建立变更内容、代码方法、调用链路、业务入口和业务流程之间的关系:

本着不重复发明轮子的原则,我们选择通过Ant进行静态代码分析,通过群进行动态流量采集。 在此基础上,我们搭建了数据中心和决策引擎,实现精准测试系统的支撑能力,并通过平台提供。 提供对业务团队的访问。 程序总体结构如下:

2.2 数据中心

主要为静态代码分析数据和动态流量采集数据提供结构化存储,包括主代码知识库、变更代码知识库、流量知识库。

对应用主干代码进行静态分析,获取所有应用方法的结构化信息,包括:方法签名、方法修饰、方法注释、输入参数类型、返回类型、圈复杂度、耦合度。主干代码知识库定义了所有观察准确测试系统所需的对象(应用代码的Java方法),将作为后续变更方法匹配、变更方法风险评估、代码链接采集方法筛选的统一知识库。

对变更的分支代码进行静态分析,获取变更代码的结构化信息,包括:变更文件、变更方法、变更代码语义。 首先,通过对变更代码进行语义分析,可以准确识别变更代码行是空行、注释、日志打印、逻辑判断还是变量操作,从而计算出有效变更代码行数。匹配主代码知识库,获取变更方法在代码知识库中的唯一ID,建立方法关联关系,用于后续变更影响分析和变更风险评估。

动态采集业务入口的线上实时流量和线下测试流量,包括请求参数、返回结果、代码调用链接等。 为了获取业务入口完整的代码调用链接,我们需要配置需要采集的Java方法。 为此,我们首先定义应用核心方法模型,然后通过匹配骨干代码知识库,可以实时分析出需要采集的核心方法。 最后通过对这些方法的插桩和采集,得到流量进入应用后完整的代码调用链接,如下图:

2.3 决策引擎

决策引擎对代码知识库和流量知识库进行变更方法匹配和链路聚合分析,从而提供变更方法风险决策、变更链路测试用例推荐和测试覆盖率评估能力。

通过对应用近一周的在线流量进行聚合和分析,可以获得该应用的所有代码调用链接,然后通过匹配主干代码知识库,获得该链接上每个方法的知识库ID,最后将图结构(点、边)对调用链接进行结构化存储,从而可以实时计算每个链接的长度、深度、流行程度,以及从应用的维度计算方法热度和调用热度,入口、链接等

以变​​更方法为分析对象,基于代码知识库,可以获得变更方法是否为有效的代码变更、以及变更方法的圈复杂度、代码耦合度等静态分析数据。 基于代码链接分析结果,可以实时获取代码链接、链接流行度、方法流行度、方法变化影响的调用流行度等动态采集数据。 这样可以准确评估变更方法的风险级别和实际受影响的对象。 为此,我们建立了以下变革风险评估模型:

其中:M(r)为方法变更风险值,M(c)为方法圈复杂度,M(e)为方法代码耦合度,M(c,h)为方法影响环节的流行度, M(h) 改变方法的流行度

根据在线代码链路聚合分析结果,可以建立业务流量与代码调用链路之间的关联性。 基于受变更方法影响的代码调用链路,可以分析出受变更影响的链路对应的所有业务流量,从而实现基于代码链路影响的测试用例推荐

(如上图所示,代码变更1会推荐业务流程1和业务流程2,这些业务流程会自动推荐给智能播放、自动化测试等回归测试任务)

2.4 平台能力

借助优酷服务器研发性能平台,我们简化了精准测试系统完整的基础能力和海量数据,可以为商科同学提供更直观的变化分析、场景分析、链路分析以及智能回放和自动化测试。 提供更高效、准确的回归测试能力。 下面对一些核心功能进行简单解释和演示:

对Aone离线部署过程中的每个构建进行增量代码分析,提供代码变更内容以及代码变更影响的展示和分析。

通过根据业务门户的请求参数和返回结果建立业务特征,可以对所有采集到的业务流量进行聚合分析,提供特征组合结果和业务场景受欢迎程度的展示和分析。

通过建立代码调用链接特征标识,可以对所有收集到的代码调用链接进行聚合和分析,提供代码调用链接流行度和完整调用栈的展示和分析。

将变更方式影响的链路业务流量推荐给智能回放、自动化测试等回归测试任务,提供精准的回归测试能力,实现变更链路100%测试覆盖率

3. 核心能力解决方案

虽然借助 提供的基础能力可以快速实现静态代码分析和动态流量采集,但在实际实施过程中,仍然会遇到很多超出基础能力的技术挑战,例如:

为此,在基础能力的基础上,优酷自主研发了流量采集智能调度、应用核心方法自动分析、代码语义变化准确识别等创新解决方案,不仅保证了代码调用链路的完整性集合,还改进了更改方法。 分析的准确性也使得优酷服务器能够大规模接入精准的测试系统,无需人工干预。

3.1 代码调用链接收集完整性

想要获得应用完整的代码调用链接,需要两个前提:采集流量有效覆盖7*24小时所有时间段,采集方式有效覆盖应用所有核心方法。

为了能够采集应用线路上的所有代码调用链接,需要保证采集流量的完整性。 采集的流量可以有效覆盖商家全天的流量模式。 为此,我们首先构建了自动运维能力的采集模块。 应用连接火影后,平台会实时监控采集机的状态。 一旦采集模块异常离线(应用弹性收缩、机器异常等),会实时激活一台采集机器,保证采集模块24/7在线。 然后我们还构建了采集配置的智能调度能力。 我们将一天划分为 48 个收集调度窗口。 每个调度窗口会根据当天入口的入站流量数和当前窗口的入站流量数,自动调整下一个采集窗口的采集空白。 列表和采样率不仅可以保证采集的流量能够覆盖全天所有时间段,还可以有效解决高QPS接口采集过多、低QPS接口流量采集不足的问题。 整个流程完全由平台自动调度,不仅大大降低了业务团队采集模块和采集配置的维护成本,而且提高了采集效率和质量。

采集代码调用链接,需要配置采集方法列表。 这对业务团队的接入提出了很大的挑战。 配置方式过多会导致采集链接过于复杂,无业务意义的链接会产生大量噪音,从而大大增加链接数量。 分析变革的成本。 配置方法太少会导致采集链接过于简单,无法体现完整的代码逻辑和业务场景。 这些问题使得精密检测系统变得不那么“精密、准确”。 为此,我们通过静态代码分析构建了应用程序代码的完整方法知识库,结构化存储了类和方法的所有基本信息,进而建立了核心方法模型:接口类的实现方法+圈复杂度大于的方法5+ 代码耦合度大于0的方法实现应用核心方法的自动解析能力。 与手动配置采集方式相比,代码调用链路完整性提升50%(基于链路深度和链路长度对比),变更方法采集率由30%提升至90%,保证大部分变更方法能够分析链接影响区域。

3.2 准确识别变化的代码语义

传统的静态代码分析可以知道变化的文件、类、方法、代码行等信息,通常有很多基于这些信息分析的变化方法,但变化方法可能只是添加一些注释或者减少一些空行。 这些方法的改变不会影响代码的业务逻辑,不需要测试关注。 因此,为了准确识别变更的有效性和风险,除了了解更多的变更行之外,还需要了解代码中变更了哪些内容。 为此,我们利用变更代码的语义分析能力,获取变更代码完整的ast语义结构,可以有效识别变更代码是否为空行、日志、注释、变量操作、逻辑判断等.,从而实现变革方法的有效性评估。 与传统静态代码分析结果相比,有效变更方法数量减少了30%,也避免了无效代码变更对变更分析准确性的影响。

4 实施效果及未来展望 4.1 实施效果

通过升级优酷的应用部署流程,可以支持在“测试接入”阶段对构建产品进行实时分析,并在“提交测试”阶段提供变更分析结果和测试用例建议,从而实现应用不敏感,无需人工干预。 连接优酷精准测试系统。

并且它连接到服务器端测试进程。 可以在测试表单中直观的看到测试变化的分析结论:

4.2 未来展望

基于精准测试系统的代码知识库和变更分析能力,未来将在代码质量管理和变更免测试评估方面进行更多探索:

5.谢谢你

优酷的精准测试体系依赖于基础能力的支撑。 对代码分析和流量采集感兴趣的同学可以参考: