干货 | 携程代码分析平台,快速实现精准测试与应用瘦身

作者简介

Kevin,携程后端开发专家,追求通过深入业务来简化系统,对底层算法、数据分析有浓厚兴趣。

一、引言

1.1 背景

微服务架构下,产研分工精细,需求迭代频繁,随着需求的不断迭代,应用数、代码量及测试用例越积越多;需求迭代(尤其是有新人加入)的过程中,产品经理需要通过开发了解现状和历史逻辑,开发人员翻阅历史代码花费的时间和精力越来越大,测试人员上线前需要回归的用例也越来越多,严重影响了需求迭代的效率。

1.2 现状分析

目前携程旅游BG的后端开发人均应用数超过4个,人均维护的代码行近20万行;每月平均需求迭代的发布超过2千次,其中核心应用数占比及其发布次数占比都超过8成。

为了提高需求迭代的效率,旅游技术团队设计开发代码分析平台,对应用的现状(主要是源代码和测试用例)进行综合分析发现:生产应用中高达三分之一的代码属于dead代码(没有被引用,也没有任何生产流量),严重影响开发效率;日常迭代中68%的自动化回归用例与当前迭代无关,但是为了保障上线质量,测试人员需要对每条失败用例进行分析排查,不仅影响当前的交付进度,而且随着需求的快速迭代,自动化测试的可持续性堪忧。

二、代码分析规划

本文主要基于后端Java应用介绍如何实现代码分析平台化,并借助平台工具实现精准测试和应用瘦身。平台可以帮助开发人员识别无效代码,在短时间内以最小的风险完成应用瘦身,极大的提高研发的效率;同时通过平台的用例知识库进行精准测试,在需求迭代过程中只执行本次改动相关的用例,极大的提高自动化回归的效率和可持续性。如下图:

b1cf4375390c467cf772932ff7f277fe.png

图1 代码分析与精准测试、应用瘦身

2.1 分析应用现状

通过对应用系统综合分析,形成知识库。分析的对象包括源代码(不含第三方引用)、对外提供的服务(包括api、任务以及消息)、自动化用例、日常迭代变更以及方法维度的生产流量等。知识库包含应用基本信息、统计信息(例如代码规模、方法规模、用例规模)、方法链路信息、用例链路等。

2.2 工具化及流程闭环

利用分析得到的知识库,针对特定场景进行工具化和流程闭环,辅助应用治理。

例如精准测试场景,平台可以与发布流程结合起来,开发提测后自动识别变更内容,并智能推荐自动化用例并执行,将执行结果实时同步给开发和测试人员,实现变更→发布→用例推荐、执行、反馈→修复变更的闭环。

应用瘦身场景,从开发角度来看,平台需提供多视角的辅助分析工具,帮助开发人员确定方法/类是否可以安全的删除;从管理角度来看,平台需划定应用治理前的基线,并将无效代码比例作为应用长期治理对象,从而实时评估下属治理的进度和效果,形成治理过程的闭环。

三、代码分析原理

代码分析的基本单元是方法,主体是应用的整个生命周期,从应用的代码仓库建立以及研发完成代码开发,到测试发布,再到生产运行,我们对不同阶段方法的关联信息进行分析,最终得到一个完整的知识库,分析流程及定义如下图:

fc22a1e870edd2643f82d29020f36c49.png图2 代码分析原理

3.1 静态分析

通过源代码解析工具解析出所有的方法声明及调用关系。

针对Java语言常见的解析工具及原理如下:

18446625054857dc563fd879ab4a35f4.png

推荐使用java-callgraph2,理由是java-cal

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值