乐趣区

关于客户端:客户端稳定性异常检测函数接口扫雷实践

作者:安晴

背景

在过来的财年中,支付宝客户端高可用团队继续保障着支付宝客户端线上的高可用稳定性,但只有线上的应急快反能力是不够的,还须要线下提前发现客户端的稳定性危险建设危险开掘能力,欠缺整体的客户端高可用保障体系。通过总结过来 1 - 2 年的线上闪退问题能够发现其中 NPE 问题,RPC 数据类型不匹配和 config 变更导致的闪退问题占比拟大,齐全能够在线下通过肯定机制提前发现。

基于此咱们对影响稳定性的因素进行分类,依照优先级构建了客户端的稳定性“扫雷”体系,次要包含函数接口扫雷,rpc&config&jsapi 扫雷,scheme& 播送 & 告诉扫雷,lottie&antmation& 鸟巢模板变更扫雷等,通过这套扫雷能力建设咱们心愿能够完全避免线上呈现以上稳定性故障,同时以 issue 的模式推动研发优化代码,一直进步客户端稳定性,从事前的角度去欠缺客户端高可用保障体系。

技术计划

依据教训剖析在客户端的函数调用中因为对函数参数查看不够导致的各类闪退问题占比在 20% 左右。现阶段计划 Android 端针对 public 和 private 的 static 动态接口,iOS 端针对所有 public 接口进行 Fuzz 测试,通过对安装包扫描获取到全量的接口函数信息,而后对函数入参 Fuzz 制作各类异样场景,测试客户端的稳定性。

与传统的代码动态扫描相比,本计划在实在客户端上执行,贴近实在场景可制作实在的异样数据。整个技术实现计划包含以下几点:

  • 代码扫描给出具体接口文件
  • 客户端无侵入实现批量接口反射执行能力
  • 参数 Fuzz 异样结构能力
  • 自动化测试用例管制真机执行用例和客户端异样复原
  • issue 上报剖析解决

代码函数扫描

基于开源框架 https://github.com/androguard… 提供的 apk 扫描能力,可对某个支付宝版本 apk 生成全量的函数接口文件,目前 Android 和 IOS 端均可扫出大量函数接口数据进行测试。

客户端函数执行模块

应用支付宝动静 bundle 能力,可在不侵入支付宝客户端的状况下进行函数接口稳定性测试,测试过程分为以下几个阶段:

1、扫描执行形式

因为全量的接口执行耗时过长,目前反对版本差别执行,通过计算大版本接口差别进行测试,可疾速失去版本间差别接口的稳定性数据,同时反对特定 bundle 代码扫描,可针对某个业务方的代码执行扫描检测,将函数接口稳定性检测能力输入到业务方。

2、参数 fuzz 异样结构

参数异样结构是一个十分业余的课题,目前曾经有大量基于机器学习的计划去结构异样数据笼罩更多代码逻辑,目前只是依照教训和业务语义结构了一组异样测试集,通过排列组合去遍历函数代码,目前 1 个接口依据参数个数可变异 5 -10 个函数调用。从代码覆盖率后果看能够穿透 60% 接口的逻辑。

3、被测函数调用

被测函数调用过程次要解决的问题是执行效率,数据记录和断点续跑,执行效率依附接口分组和多线程执行解决,函数执行过程严格拆散保障后果可靠性。在接口扫雷测试过程中会呈现大量的闪退和 ANR 卡死状况导致测试进行,为了主动实现整个测试过程,须要具体记录测试过程数据,捕捉闪退时的要害数据保留并输入到客户端存储空间,为断点续跑提供要害数据。

4、闪退数据回放

执行完的测试用例无效保留到本地,程序反对间接回放异样用例验证代码修复后成果。

3 自动化脚本执行

自动化脚本的目标是唤起客户端执行测试用例,并且可能检测到客户端的异常情况,拉取测试数据确定断点地位,从新拉起客户端执行,保障整个测试流程能够齐全自动化的执行无需人工干预。

总结与瞻望

支付宝客户端函数接口扫雷曾经执行 10 多个大版本,双端累计发现近千条无效问题,并且在工具的迭代中继续升高问题误报率,进步 Fuzz 变异能力笼罩更多危险问题。同时函数接口扫雷的问题曾经退出到客户端攻防演练中,作为实在闪退场景去攻打业务方。目前函数接口扫雷还有很多不欠缺的中央,像参数 fuzz 的智能变异结构,业务语义参数结构等还有待进步。将来还会持续补充客户端稳定性检测能力,力争将问题都在发版前解决。

关注咱们,每周 3 篇挪动技术实际 & 干货给你思考!

退出移动版