likes
comments
collection
share

如何提高App质量和稳定性

作者站长头像
站长
· 阅读数 6

如何提高App质量和稳定性

用户都希望用到高品质的App, 所以App的质量至关重要

App的核心质量

  1. 功能性: 满足用户的需求
  2. 用户体验: 视觉设计和用户互动体验好
  3. 性能: 启动速度, 响应速度,网络请求速度等
  4. 稳定性: 保持长久运行,不崩溃,不报错

稳定的产品是用户留存的第一道闸门, 是最基本的要求,如何去衡量一个产品或者版本的稳定性呢

稳定性核心因素就是错误/崩溃

具体可分为崩溃率、崩溃Top、崩溃次数、网络错误率、ANR率、卡顿率等指标

如何提高App质量和稳定性

1.崩溃率

分为两种

    1. UV崩溃率 (Unique Visitor)
    • = (一段时间)崩溃用户数/活跃用户数
    1. PV崩溃率(Page View)
    • = (一段时间)所有用户的崩溃总数/所有用户使用总次数

UV(Unique Visitor),即独立访客数,用于了解App的用户规模和访问情况

PV(Page View),表示用户打开App页面数量,用于衡量App流量和用户活跃度。

2.崩溃Top

分为两种

  1. Top崩溃问题

在一个版本中, 崩溃统计中占比较高的问题, 需要重点关注, 最高优先级

  1. Top机型: 与特定机型和特定OS版本强相关

3.崩溃次数

  • 人均崩溃次数
    • 一个用户一定时间的崩溃次数
  • 页面崩溃次数
    • 统计App单个页面出现的崩溃次数

4.网络错误率

与网络通信相关的错误都可以归类到网络错误, 包括网络异常、HTTP错误等,

= (一段时间)网络错误次数/网络请求次数

5.ANR率

(Application Not Responding)应用程序无响应,ANR 率即发生 ANR 的次数占总次数的百分比。

6.卡顿率

卡顿是指 App 在使用过程中出现画面不流畅、停顿等现象

卡顿率指的就是卡顿的次数与总使用次数之间的比值。

如何保证质量和稳定性,下面介绍几种最常用质量监控的手段

一套完美的质量监控包含基本验证、功能测试、兼容性测试、安全性测试、代码质量监测、CI以及线上质量监控

1.基本验证

对App产品最基本的功能验证,包含如下

  • APK/IPA验证: 验证App的包名,签名以及版本号等基本信息
  • 混淆验证:对APK/IPA进行解压缩,然后反编译,看代码是否混淆
  • 安装验证:包括安装、卸载、覆盖、升级、启动和退出等
  • 账号验证: 包括注册、登录、退出、多账号登录、多机同时登录

2. 功能测试

  • 单元测试
  • 用例测试
  • 集成测试
  • UI测试
  • 自动化测试
  • 脚本回放测试

不同平台有不同的工具

  • Flutter

Flutter UI测试 widget_test

Flutter 单元测试工具:unit_test

Flutter 集成测试工具:integration_test

  • Android

Android 单元测试工具:Mockito

Android 单元测试工具:Espresso

Android 单元测试工具:Robolectric

Android 集成测试工具:Android Gradle Jacoco

  • iOS

XCTest和XCUITest框架来进行单元测试和UI测试

3.兼容性测试

  • OS版本兼容适配

比如Android 12以上无法使用MediaProvider操作私有文件。需要把文件存储到外部存储的公共目录,以避免这一限制。

iOS也类似

  • 厂商兼容适配

针对手机硬件提供商,主要针对Android系统,包括不同芯片平台(如高通,MTK,海思)的适配支持,不同手机平台(华为,小米,oppo等)适配支持, ROM(Android原生ROM,第三方ROM)兼容性适配

  • 屏幕分辨率适配

Android和iOS都存在, 针对不同分辨率的屏幕, 如720P, 1080P, 4k等屏

4.安全性测试

包含安全漏洞扫描、权限列表扫描、恶意代码检测以及仿冒应用检查等

5.线上质量监测

是获取App质量问题反馈最直接,最有效的手段,包括用户反馈,数据统计以及Crash监控

  • 搭建质量监控平台, 但是成本和代价比较昂贵
  • 选择成熟的平台
    • Bugly(腾讯):Bugly是腾讯推出的一款移动应用性能管理平台,提供实时崩溃监控、卡顿监控、ANR监控、自定义异常监控等功能。它支持Flutter,Android和iOS平台,可以帮助开发者快速发现和定位应用中的问题。
    • Crashlytics(Firebase):Crashlytics是Twilio旗下的移动应用崩溃报告工具,提供实时崩溃报告、用户会话追踪、性能监控等功能。它支持Flutter,Android和iOS平台,并且可以与多种开发工具和持续集成/持续部署(CI/CD)平台集成。
    • App Analytics(Microsoft):App Analytics是微软提供的一个移动应用性能管理平台,提供崩溃报告、性能分析、用户行为追踪等功能。它支持Android、iOS和Flutter,React Native等平台。

问题处理原则

  • 线下问题

指产品未发布,还处于开发,测试或灰度等阶段, 问题比较好处理,可能造成版本发布时间延迟

  • 线上问题:

通过质量监控获取到的针对已发布的App包的影响较大问题(通过稳定性衡量指标判断,例如崩溃率>标准指标)

时刻影响着用户体验,及时止损很重要,需要"最大程度最快速的方式降低影响,尽快修复"原则确定紧急处理方案

线上问题修复后,传统方式一般依靠发布新版本,通过用户升级或强制升级来fix,过程漫长

可以采用热修复、热补丁或云端控制方式来实现线上更新或止损

云端控制主要在代码中预设开关,针对出现问题的模块进行控制以实际止损

6.App持续集成

(Continus Integration) 英文缩写CI,

一种软件开发实践, 团队开发成员经常集成他们的工作,每天至少一次,每次集成通过自动化的构建(编译,发布,自动化测试)来验证,从而快速地发现集成错误,大大减少集成的问题,能够更快地开发内聚的软件

产品快速迭代,同时保持高质量

对于移动应用平台,当有人向代码库的主分支提交代码的时候,后台的持续集成服务器会尝试去构建整个产品,包括编译打包,自动化测试,质量分析,输出结果成功或失败

完整的流程如下图所示

如何提高App质量和稳定性

Jenkins是一个用Java编写的开源持续集成工具,提供了软件开发的CI服务,可监控并出发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等优点

更多可以参考官网

Jenkins

7.代码质量监控

App质量和稳定性的很多问题的本质是代码质量问题, 初期,项目规模比较小, 通过简单的测试流程和Code Review就能保证代码质量, 随着功能的快速迭代,项目规模和复杂度日渐扩大,显然我们期许有工具可以帮助我们实现代码质量上的监测

分为两部分

1.Code Review

包括代码规范的制定以及Code Review的执行,

2.静态代码分析

Static Program Analysis,简称SPA

不运行App的条件下,进行程序分析的方法

通过词法分析,语法分析,控制流分析,数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷

例如参数不匹配,空指针引用,有歧义的嵌套语句,错误的递归,非法计算等

好处

  1. 帮助软件开发者自动执行静态代码分析,快速定位代码隐含错误和缺陷
  2. 帮助代码设计者更专注于分析和解决代码设计缺陷
  3. 减少Code Review上消耗的时间,提高软件可靠性,节省软件开发和测试成本

通用的静态代码分析系统的流程图,

如何提高App质量和稳定性

开发者提交代码到Code Server, Code Server将提交信息以事件通知SPA Server, 触发SPA Server拉取Code Server代码完成扫描分析,再将分析结果邮件通知相关人员

整个流程可以集成到上面的CI(持续集成)流程中,自动扫描分析并输出结果

针对不同语言(Flutter/Android/iOS)有不同的静态代码分析工具

Flutter

  • Dart analyzer:Dart的静态代码分析工具,可以在代码执行前发现问题,提高复杂软件代码质量。
  • Flutter Lints:一个用于静态代码分析和代码规范检查的工具集合。它基于 Dart 语言提供了一系列的 lint 规则,帮助开发者发现潜在的代码问题,并提供建议和指导以提高代码质量和可维护性。
  • Dart Code Metrics:一个静态分析工具,它可以帮助分析和改进代码质量,为 dart analyzer 提供额外的规则,检查反模式,检查未使用的dart文件。

Android

  • Android Lint:是Google提供给 Android 开发者的静态代码分析工具,能帮助开发者优化代码和找到潜在的 bug。
  • Findbugs:可以检查类文件或 JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。
  • PMD:通过检查对代码编码格式、命名约定、Javadoc、类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。
  • CodeScanner:是一款基于静态代码分析技术的Android代码扫描工具。它可以帮助开发人员快速发现代码中的潜在问题,如内存泄漏、空指针引用、资源未释放等,并提供相应的修复建议。支持多种编程语言,包括 Java 和Kotlin,可以与 Android Studio 集成使用。

iOS

  • Clang静态分析:苹果自带的词法分析器,如果需要自定义检测规则,需要重新下载编译llvm,还需要修改Xcode的编译器,配置各种路径,比较繁琐。
  • infer:Facebook推出的静态代码检测工具,检测效率高,支持增量分析,支持OC、java等多种语言。但是定制性不强,可自定义规则程度不高,而且暂无法和sonarQube平台配合分析。
  • OCLint:建立在Clang上的工具,能够发现代码中潜在的问题,可以用来提高质量和减少缺陷,目前支持C、C++、Objective-C语言。