怎么进步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言语。