什麼是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的穩定性
崩潰率 = 崩潰次數 / 總操作次數 * 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、網絡流量等資料及時發現應該記憶體洩漏問題
- 使用者行為監控:埋點采集使用者行為資料,為複現及定位崩潰問題提供資料