一個小需求更新引起的 50% 崩潰:跟開發溝通過的一個測試小事故,顯然是測試精度不夠的結果
故事背景
產品經理找開發在版本之外加一個額外的“小”需求。
需求內容:長按圖片「儲存」至本地。
知道這個需求後,覺得比較簡單,以至於測試用例都沒。感覺可能會牽涉到儲存許可權外,並叮囑開發注意許可權問題。
測試期間主要關注下圖片是否儲存到本地就OK 了。然而大錯特錯,一點都不 OK,上線後就沒多久就被噴了,因為老大經常會連結 VPN 檢視國外的訊息,所以網速不是很好,導致儲存圖片時崩潰率 1/2 。
嚇得我手機都想扔了,升級推送的包趕快讓同事幫忙撤掉。幸虧沒有釋出到應用商店,不然損失慘重。
故事原因
後來發現,弱網環境下清晰圖片沒有加載出來之前點選儲存才會閃退,並且這種情況下是必現的。
這裡就要提到圖片載入策略:
預設圖->模糊圖->高清圖,首頁動態列表載入的過程中,會先載入模糊圖,點選圖片檢視的時候,先顯示之前載入好的模糊圖,高清圖載入好後再顯示高清圖。
由於高清圖沒有加載出來,所以沒有儲存的物件,故應用崩潰。後來開發做了優化,高清圖沒有加載出來前,長按圖片下方不彈出儲存圖片入口。
故事分析
先看看,安卓系統檔案讀寫許可權。Android 6.0 之前只要申明瞭上述兩個許可權就可以放心大膽的在sdcard上進行讀寫了。
可惜Android 6.0之後就需要動態申請讀寫許可權了,所以我們該如何適配Android 6.0來進行檔案儲存。
首先我們在使用檔案儲存的時候儘量做到以下幾點:
•不要隨意佔用使用者的內建儲存
•不要隨意在SD卡上新建目錄,應該放置自•己應用包名對應的擴充套件儲存目錄下,解除安裝App時可以被自動清除。
•對佔用的磁碟空間有上限,並按照一定的策略進行清除,比如DiskLru演算法等。
所以啊,之前考慮的太過簡單了,檔案儲存考慮的不到位。Android6.0 之後的系統,儲存檔案至手機記憶體中是不需要申請讀寫許可權,儲存至SD卡則需要動態申請。
但是圖片儲存前是否有物件,前置條件忽略掉了(測試一大禁忌),而圖片的載入跟網路環境和網速有關,比如wifi,4G,3G,WiFi->3G,3G->WIFI,需要驗證這些情況下圖片是否載入正常。
在嚴格的標準下,又發現了一個小問題,3G->WIFI情況下,高清圖加載出來了,但是長按始終無法出現儲存圖片的入口,後來瞭解到是,長按出現 [儲存圖片] 入口和圖片載入是兩個非同步事件,所以網速差的時候,這種情況就比較明顯了。