什么是App稳定性测试

App稳定性指移动应用的可靠性。
即在长期各种场景的使用过程中都可以正常使用,不出现或极少出现崩溃(闪退)、无响应等问题。

崩溃、无响应等问题如果频繁出现,会极大的影响用户的正常使用。偶现的不稳定问题也会影响用户的体验。

因此在App每次发版前,对App稳定性进行测试和评估是非常重要的

影响App稳定性的因素

导致App崩溃的常见原因

  • 内存管理问题
    • App所需内存超过设备限制(如可用内存过低时),导致App崩溃闪退;
    • App内存泄漏,耗尽设备全部内存导致整个系统崩溃;
    • App内存越界,使用了非授权的内存位置导致App崩溃;
  • 程序逻辑错误
    • 数组越界,如负数索引、超过数组长度的索引
    • 堆栈溢出,如堆栈区缓冲区被填满,堆栈空时取数据等
    • 并发操作,如并发时调用了一个已释放的指针
    • 逻辑错误,如0除等问题
  • 未处理等中断及异常
    • App在使用过程中面临很多中断、如切后台、接听电话、切换网络、断网以及用户的一些非预期操作,如果处理不当也可能引起崩溃
  • 网络因素:
    • 比如网速欠佳,无法达到app所需的快速响应时间,导致App崩溃或者是不同网络的切换也可能会影响app的稳定性

导致App无响应的常见原因

  • 主线程执行了耗时操作,比如数据库操作或网络编程
  • 其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。

细分的话,导致无响应的原因有如下几点:

  • 耗时的网络访问
  • 大量的数据读写
  • 数据库操作
  • 硬件操作(比如摄像头)
  • 其他线程持有锁,导致主线程等待超时
  • 其它线程终止或崩溃导致主线程一直等待

导致iOS应用奔溃的常见问题

  • 循环引用导致的内存泄漏
  • Delegate、NSTimer、Block的使用不当都可能出现循环引用导致内存泄漏
  • NSNotification不断添加而不移除观察者以及不断重复的动画也会导致内存泄漏
  • 大量数据加载导致的内存告警: 大数据量的下载、大文件的拷贝以及应用在使用较大内存空间时也很容易因内存告警而出现崩溃现象

如何衡量和确保App的稳定性

App的稳定性可以通过1-崩溃率来衡量,崩溃率约小,稳定性越好。

线下测试稳定性衡量方法

崩溃率 = 崩溃次数 / 总操作次数 * 100% 

线上测试稳定性衡量方法

崩溃率 = 一段时间内崩溃用户数 / 一段时间内总用户数 * 100% 

如何检查和测试App的稳定性

App上线前

  • Code Review及静态代码检查:大部分App稳定性问题是代码逻辑造成的,通过Code Review及静态代码检查可以提取发现一些循环引用、以及潜在的Bug。基于Objective-C的iOS应用常用的静态代码检查工具有Clang Static Analyzer、OCLint、Infer等
  • App性能测试:在App测试过程中监控内存、CPU、FPS、电量、网络流量等指标,及时发现内存泄漏问题。
  • 异常测试:对异常中断、切后台、切App、弱网、断网、网络变化、更改系统时间、内存不足、电量低等情况进行测试,检查App是否有崩溃现象
  • Monkey测试:Monkey测试是只使用工具生成快速的一系列随机操作,通过大量的随机操作来验证App的稳定性。如使用开源工具Fastmonkey对iOS应用进行稳定性测试。
  • 反复测试:即对一些业务场景进行反复对测试,如反复进出教室、反复切班、反复发送选项卡等操作来测试App的稳定性。可以借助Appium等自动化工具进行执行

App上线后

  • App崩溃监控:统计崩溃率并手机崩溃日志。
  • App性能监控:采集上报客户端内存、CPU、网络流量等数据及时发现应该内存泄漏问题
  • 用户行为监控:埋点采集用户行为数据,为复现及定位崩溃问题提供数据

版权声明:本文为superhin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/superhin/p/15089973.html