【android高手课学习笔记】高质量应用交付以及APM平台

注明:本笔记部分摘抄自极客时间张绍文先生Android开发高手课专栏,仅为自用,如有需求,请自行前往极客时间进行订阅。

移动应用交付流程

一个应用至少会经过开发、编译CI、测试,灰度和发布这几个阶段.每个阶段需要关注什么问题呢?

开发阶段

在面试的时候,常常有人说自己熟练掌握各种开发工具。但是,我们真的懂吗?就拿我们比较熟悉的耗时分析工具 Traceview 来说,它背后的实现原理是什么?能不能做一个完全没有性能损耗的 Traceview?或者怎么样将它移植到线上使用?

编译CI阶段

如何防止代码不断地恶化?怎样进一步优化性能?d8 与 ReDex 有什么神奇的黑科技?如何利用好 Coverity、Infer 这些静态分析工具?这部分可能需要一些编译原理的知识,你会发现移动开发也有很多值得深入研究的东西。

测试阶段

我们常说敏捷开发,用户是最好的测试。遇到问题在线上反复试错,对自己、对用户都十分痛苦。我们希望可以做到测试“左移”,尽可能早地发现问题。但是很多时候我们不是不想测试,而是发现测不出什么问题。那么怎样提升实验室发现问题的能力呢?如何尽可能地模拟用户的操作路径?做好测试并不容易,自动化测试结合 AI 或许可以帮助我们解决一些痛点。

灰度和发布阶段

动态部署流行起来之后,很多开发变得松懈起来。有问题发补丁,一个不行就两个,两个不行就十个。怎样去保证产品质量?很多线上问题概率很低,基本很难复现,比如对于一个印度的用户,我们希望有一个远程的听诊器,而不需要把用户拉到我们的手术台上。

移动APM质量平台

请你思考一下,在应用交付的这几个阶段中,我们对高质量的目标和实现方式是否一样呢?开发阶段有开发人员,可能希望采集尽可能多的数据;测试阶段有测试人员,可能更针对实验室环境或与竞品对比进行测试;灰度和发布阶段可能也有专门的运维人员,策略会相对保守一些。很明显,不同阶段我们对高质量的目标跟手段可能不太一样。

一个公司有多套质量系统,这在大公司是非常普遍的现象。我们希望有一个统一的平台,整合应用的人员和开发流程,这就是我们常说 APM 质量平台。

APM 的全称是“Application Performance Management”,即应用性能管理。据我了解,国内像阿里、腾讯、美团点评、饿了么、爱奇艺这些公司都在大力投入。Google 今年也发力 Android Vitals 监控,新增了耗电、权限管理模块。那么 APM 质量平台究竟有着什么样的魅力呢?

  1. 统一管理。A 同学写了一个耗时监控工具,B 同学写了一个内存监控工具,它们在不同的仓库,上报格式可能不太一样,各自都搭了一个简单的页面。如果想评估一个应用的质量,总是要去几个系统汇总数据,想想都费劲。
  2. 统一三端。一个公司可能有多个应用,一个应用也可能有 H5、iOS、Android 多个端。我们希望它们只是采集数据方式有所不同,上报、后台分析、展示、报警都是共用的。随着技术的发展,我们可能会增加 React Native、Flutter 这些新模块的监控,这个平台应该是统一演进的。当然我们非常希望业界有一套开源的方案,大家可以一起优化。

那这个质量平台需要关注哪些问题呢?这需要看我们用户关心什么问题。有的问题可能是致命的,像崩溃、卡死、白屏。另一大类问题就是性能问题,安装包大小、启动、耗时、内存、耗电、流量都是这一个范畴。在这个专栏里,我并不会教你如何从头搭建一个 APM 平台,我会更期待你掌握背后所需要的知识,它们主要包括:

由于 Android 版本的碎片化和国内 Android 生态的乱象,或者换句话说,“Android 开发者很苦,国内的 Android 开发者更苦”。在 11 月举办的 Android 绿色联盟开发者大会上推出的应用体验标准,有对应用的兼容性、稳定性、性能、功能和安全做了详细的定义。我贴张图,你可以看下。

在极致性能的同时,我们希望能更进一步地打造“绿色应用”。在这个过程中,一个全面而强大的 APM 质量平台会是我们坚实的后盾。当然对于大多数中小开发者来说,我们更建议选择成熟的第三方服务。但深入了解它们背后的原理,无论是对我们如何选择合适的服务,还是日常开发工作都会有很大的帮助。在学习完上面的这些内容之后,你也会觉得其实“性能优化”并不是那么“高不可攀”,我们也可以慢慢地迈向“性能优化专家”之路。

不过我们需要明确一点,虽然移动 APM 质量平台可以帮助我们快速发现和定位问题,但是监控并不能保证实现高质量,这里最关键的永远是人,而不是系统。为什么呢?我举两个小例子。

你在工作中可能总能遇到这样的场景,我管它叫反馈问题三连击:“是我的问题吗?”“能复现吗?”“你的测试靠谱吗?”。虽然通过 APM 质量平台可以减少推卸责任,但有些人的做法通常还是发现空指针加一个判空,发现并发问题加一个锁。这里的空指针真正原因是什么?这里判空了后面的逻辑是否还会运行正常?有没有更加好的方法或架构可以避免这个问题?我们真正应该反问的是这三个问题,把“质量观”深入骨髓,真正去想要得到个人成长,深挖背后的原因。

第二个例子是,我发现许多人都在问题无法忍受,或者说是老板无法忍受的时候才去开启各种优化专项,但事后又不了了之。我们很多时候都在用战术的勤奋掩盖战略的懒惰,性能优化的关键在于 如何解决存量问题,同时快速发现增量问题。APM 质量平台只可以协助我们,并不能解决组织内部的心态问题。