用户都希望用到高品质的App, 所以App的质量至关重要
App的核心质量
- 功能性: 满意用户的需求
- 用户体会: 视觉规划和用户互动体会好
- 功能: 发动速度, 呼应速度,网络恳求速度等
- 稳定性: 坚持持久运行,不溃散,不报错
稳定
的产品是用户留存的第一道闸口, 是最根本的要求,怎么去衡量一个产品或者版别的稳定性呢
稳定性
核心要素就是过错/溃散
具体可分为溃散率、溃散Top、溃散次数、网络过错率、ANR率、卡顿率
等目标
1.溃散率
分为两种
-
- UV溃散率 (Unique Visitor)
-
- = (一段时间)溃散用户数/活泼用户数
-
- PV溃散率(Page View)
-
- = (一段时间)一切用户的溃散总数/一切用户运用总次数
UV(Unique Visitor),即独立访客数,用于了解App的用户规划和拜访情况
PV(Page View),表示用户打开App页面数量,用于衡量App流量和用户活泼度。
2.溃散Top
分为两种
- Top溃散问题
在一个版别中, 溃散核算中占比较高的问题, 需求要点关注, 最高优先级
- 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 集成测验东西:integration_test
- Android
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
,
一种软件开发实践, 团队开发成员经常集成他们的作业,每天至少一次,每次集成经过主动化的构建(编译,发布,主动化测验)来验证,然后快速地发现集成过错,大大削减集成的问题,能够更快地开发内聚的软件
产品快速迭代
,同时坚持高质量
,
关于移动运用渠道,当有人向代码库的主分支提交代码的时分,后台的继续集成服务器会尝试去构建整个产品,包含编译打包,主动化测验,质量剖析,输出成果成功或失利
完整的流程如下图所示
Jenkins是一个用Java编写的开源继续集成东西,供给了软件开发的CI服务,可监控并出发继续重复的作业,具有开源,支撑多渠道和插件扩展,装置简单,界面化办理等长处
更多能够参考官网
7.代码质量监控
App质量和稳定性的许多问题的实质是代码质量问题, 初期,项目规划比较小, 经过简单的测验流程和Code Review就能确保代码质量, 跟着功能的快速迭代,项目规划和复杂度日渐扩大,明显我们期许有东西能够协助我们实现代码质量上的监测
分为两部分
1.Code Review
包含代码标准
的拟定以及Code Review
的履行,
2.静态代码剖析
Static Program Analysis,简称SPA
,
不运行App
的条件下,进行程序剖析的办法
经过词法剖析,语法剖析,操控流剖析,数据流剖析
等技能对程序代码进行扫描,找出代码隐藏的过错和缺点
例如参数不匹配,空指针引证,有歧义的嵌套语句,过错的递归,不合法核算等
优点
- 协助软件开发者主动履行静态代码剖析,快速定位代码隐含过错和缺点
- 协助代码规划者更专心于剖析和解决代码规划缺点
- 削减Code Review上耗费的时间,进步软件可靠性,节约软件开发和测验本钱
通用的静态代码剖析体系的流程图,
开发者提交代码到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言语。