本書會從資源類性能與交互類性能兩個方面展開,利用豐富的案例,實用的工具介紹,由淺入深地幫助要入門的專項測試工程師具備專項性能測試的技能。同時,對于熟悉專項性能的測試工程師、開發工程師此書會是不可多得的一本字典,里面的真實案例能幫助讀者快速排查定位性能問題,透過結構化的知識體系,幫助讀者梳理清晰已經掌握的知識和技能。
適讀人群 : 本書適合從事移動 App 性能測評和優化的工程師閱讀,內容有一定的技術深度和廣度,建議讀者在閱讀本書的同時擴展閱讀其他經典的技術類書籍。
1. 騰訊社交網絡質量部吳凱華、《大話移動App測試》系列作者陳曄傾情作序,胡星、梁捷、楊俊峰等業內大牛聯袂力薦。
2. 本書來自騰訊SNG專項測試團隊多年來手機QQ、QQ空間、QQ音樂等項目沉淀下來的經典案例。
3. 從資源類性能的內存、CPU、磁盤、網絡、電量和交互類性能的流暢度、響應時延等多個方向進行介紹,包含核心問題、實用工具、典型案例等,并提煉了移動性能專項的完整體系和標準。
4. 本書是Android APP性能和開發工程師的必備案頭手冊。
寫在開頭,送賈島《劍客》詩一首:“十年磨一劍,霜刃未曾試。今日把似君,誰為不平事!”我們團隊工作重心轉到移動互聯網領域已經好幾年了,團隊在移動領域測試技術積累可以說是從零基礎開始的,幾年來,配套的各類技術攻堅、工具平臺建設都具備了很好的沉淀和規模,同時團隊在這期間的自我實踐提升和轉變速度也非常快,如果自我吹捧一下,那么這就是一支優秀團隊所具備的核心競爭力。這幾年來,看著大家能不斷探索攻克一個個難題并填坑,其實是一件很幸福開心的事情!這期間的學習、探索和實踐,借用一句典故就是“工欲善其事,必先利其器”,我們都在說“磨刀不誤砍柴工”,道理都是一致的,騰訊的專項技術測試團隊從 2010 年開始組建,近 7 年來已經不斷體現出其強大影響力和價值,成為了研發團隊最堅實的戰斗伙伴之一,而我們專項技術測試團隊這幾年也不斷夯實了移動測試領域的重點攻堅領域、填補了幾乎所有短板,并且也是努力從基礎提升做起后到現在帶來的結果體現!這好比在練武術時,早期教練會讓學員練習扎馬步,大家在健身房請私教時,會發現教練要求學員一定練深蹲,這些日久才能發揮威力體現基本功的基礎動作,對武術提升和健身起到舉足輕重的作用。我們團隊過去持續保持平和心態,聚焦在短板上不斷學習、鉆研和沉淀,也在今天不斷體現出了價值和給業務提供著重大支持。這是一支務實、踏實但又保持持續創新的團隊,這也是我們團隊的寶貴財富和一貫傳承的管理思路。
每次看到行業里有新書出來時,我基本都會第一時間來了解獲取,首先希望拜讀理解作者的思路,然后看書內容里的技術實踐深度,我這個人很懶又很挑剔,寧愿花很多時間來提煉內容寫個 PPT 給大家做分享,也不愿花很多時間坐在電腦旁邊碼字、寫出一摞看起來厚厚的很有“成就感”的文檔來給人讀,因此我是真心佩服那些能寫出大部頭書籍的同仁,過去幾年里承蒙同仁抬愛,我給多本書寫過序,雖然讓我有些“憤憤然”,我是“作序君”嘛,但也總是很欣慰,佩服同仁和我的朋友 / 同事們熬夜碼字的毅力,也佩服他們能抽絲剝繭,把自己的經驗實踐用一本書完整地呈現給讀者的魄力。但其實我想說,寫書本身是一件嚴肅的事情,也是把自己扒光了晾給大家看的一個過程,一本書如果東拼西湊,大部分內容要么是截圖、純圖片,要么是“騰挪”了很多他人的內容,這種書其實出版出來也是體現了作者典型的“囊中羞澀”,此類書不出也罷,因為會食之無味,讓讀者讀完基本沒啥收獲,反而浪費時間,誤人子弟。
我們 SNG 專項技術測試團隊這次要出版的書籍,我不想給予太多的贊美,不然就是在自我吹捧了,但畢竟這本書算是集我們團隊之力的實踐分享,同時也是團隊工作日常點滴積累所得,希望對大家有用。本書所有內容產生的背景是日常工作開展過程中各個維度攻堅實踐的過程,本書以看到問題—定位問題—解決問題—找共性—抽象化 / 平臺工具化—提煉原理的方式積累呈現出來,每個維度每個領域的案例都是真實的,容不得取巧,更沒有很多花哨的架子,放出來的是點滴積累出來的真實工作經驗。初期來閱讀時,很多行業同仁可能會覺著有點亂甚至暈,我建議先把書籍的目錄章節仔細研究,梳理清楚這本書希望傳遞給大家的思想和體系,然后再有針對性地閱讀和學習,這樣才能事半功倍。
兩年多前,整體回顧我們團隊專項測試開展情況時,我勾畫了一個所謂的“專項測試戰略地圖”,不過我們的團隊屬于有些“不按套路出牌的團隊”,并沒嚴格按我規劃的在推進,或即使在推進,也并沒老實地回頭看這個“地圖”,但讓我們更開心的是團隊自身的從下往上創新、創造的意識,使這期間誕生了很多創新型項目/工具,這其實是團隊自己的“道”,非常值得鼓勵,欣喜看到左沖右突的人在團隊中大有人在,幸事!其實,讓一個人的思想和行為不得自由的,有兩個牢籠:一個是對過去的貪戀和自滿,定死了自己的思維和進取;另一個是對未來的恐懼,以及對它的貪婪,定死了自己的勇敢和視野。打破這兩個牢籠,會頓悟得“道”。我們在人際交往中,對一個人的評價經常因為生活中的小事情決定,這是因為一個人的秉性很難改變,不管是淳樸務實還是愛慕虛榮的表現,回歸到工作上時,不外乎是持之以恒、不斷聚焦和專業化,或是曇花一現、只做一時耀眼的流星,而很多人并沒悟透這個最基本的道理。“邏輯思維”里說過一個小典故,僧侶得道前的日常作業是挑水、劈柴、做飯,得道后還是挑水、劈柴、做飯,做一行能做到如此才是“大道”。
今天我們走的這條路很不幸,不再有看板可以讓我們比對,時代變化太快,過去的經驗、經歷未必還管用,未來的道路如何也無法預測,但這好比待在一個黑暗的道路上摸索前行,可能有很多彎路,可能不斷跌倒,但只要有信念,堅定前行,無論荊棘坎坷,彼岸總會泛出微光指引我們不斷前行,相信那也是我們心底最燦爛的光明之火!
騰訊社交網絡質量部 吳凱華
推薦序二
現在的移動互聯網是一個用戶體驗為王的時代,你的用戶群會決定你的產品的成敗。而移動無線測試中的專項測試就變得非常重要,功能和業務測試保證了一個產品的生命,而專項測試則能夠延續一個產品的生命。
移動互聯網到底是什么?帶給老百姓的是生活的便捷,帶給程序員的是新鮮的技術和更快的工作節奏。在早期大家都在談論 Android、iOS 和 WP(Windows Phone),然后則開始談論物聯網。而如今神秘選手橫掃全球圍棋界,所有人都在討論這個“選手”,結果AlphaGo 的出現讓 2016 年成為了人工智能元年,也掀起了人工智能在人類歷史上的第三次浪潮。
? 當我們還在用諾基亞砸核桃的時候,Android 和 iPhone 來了;
? 當我們以為移動支付只有支付寶的時候,微信支付來了;
? 當我們覺得二維碼這項發明沒有意義的時候,微信和支付寶等 App 狠狠地給了我們響亮的耳光;
? 當我們開始玩朋友圈的時候,公眾號出現了;
? 當我們開始熟練使用公眾號的時候,小程序來了;
? 當我們覺得 AR 沒有什么實際的有黏度的用戶場景的時候,Pokémon Go 讓所有人都拿著手機掃全世界,甚至在美國的高架上還有專門的路標提示不要玩 PokémonGo;
? 當我們覺得手機只能用來打電話、玩游戲、支付、上網的時候,Google Cardboard讓我們知道原來我們可以進入手機的世界;
? 當我們還沉浸在抨擊VR還不成熟的時候,Vive、PSVR、Oculus等讓我們欲罷不能;
? 當我們以為 Siri 已經能夠打敗人類的時候,AlphaGo 讓我們明白其實人工智能才剛剛向人類發起挑戰;
? 當我們在各個演唱會上面看到全息投影,覺得離我們還很遙遠的時候,Gatebox 出現了(日本全息投影女管家)。
這一切的一切說明了移動互聯網并沒有具體的形態,它僅僅代表著一個高速發展的時代已經來了。我們很幸運,能夠活著看到時代的發展和變遷,我們也會很累需要不停地去接受和面對挑戰。
測試這個行業就如同移動互聯網一樣發展迅速,我們完全可以去用“當我們還在學習,使用 xxx 的時候,yyy 已經成為了新的寵兒”這樣的句式,相信所有的互聯網從業人員都會有這樣的感受。綜合這些年所有人問我的問題,我總結兩點在這里給大家分享:
? 在這樣一個社會中,不要浪費時間在思考,實踐才能夠抓住“紅利期”。
? 不要糾結于先有雞,還是先有蛋。很多人糾結于自己沒有這個,沒有那個,所以不夠級別去做一些事情。想做了就去做,我們不應該等到自己達到了一個等級才去做事情,而是要在做事情的過程中讓自己達到對應的級別。
專項測試這個概念出現時間其實并不長,但其重要性和普及率都是非常高的。我自己也是最早做專項測試的人員之一,深知其中需要填坑無數。從 2015 年開始很多公司起步做專項,但對于具體的方法和策略以及專項測試基線往往都不是很清楚,導致專項的測試投入產出比不高,大家都期望能夠有一種統一的標準和方法出現。
移動專項測試是不是只有大公司才需要做呢?答案肯定是“當然不是”,任何一個關心用戶體驗的企業都應該關心、重視專項測試。縱覽全書,這可以說是至今為止我看到過最詳細的專項測試寶典。從書中的內容我能感受到的不僅僅是騰訊 SNG 專項測試團隊做專項測試的認真專業的態度,更多的是一種孜孜不倦的探索精神。書中涉及的內存、磁盤I/O、電量、流量等方面的專項測試都會涵蓋有案例、總結標準以及原理講解。
再次感謝騰訊 SNG 專項測試團隊能夠為國內移動互聯網行業產出這樣一本專項測試寶典,我相信看到這本書的測試朋友都會像我一樣欣喜若狂。在我看來,這本寶典不僅能夠幫助更多企業的測試團隊變得越來越專業,也對測試行業進步做出了不小的貢獻。
書中最后提到,未來是什么?我們不是預言家,我們也不知道未來究竟是什么。但我們知道未來已經到來,你準備好了嗎?在這樣一個有的人每天在抱怨這個抱怨那個,有的人踏踏實實地在鉆研技術,有的人有能力讓影響力變現的時代,你是否明白自己要做什么?
你想成為什么樣的人?最后奉上我一直很喜歡的一句話,與大家共勉。
“It's not who I am underneath, but it's what I do that defines me”
——黑暗騎士
《大話移動 App 測試》系列作者 陳曄
本書的作者是來自騰訊 SNG 專項測試團隊的工程師們,他們負責手機 QQ、QQ 空間、QQ 音樂等的性能評測與優化工作,在 App 的資源類性能、交互類性能的分析與優化上挖掘很深,累積了不少案例和經驗。
第 1 部分 資源類性能
第 1 章 磁盤:最容易被忽略的性能洼地 2
1.1 原理 2
1.2 工具集 6
1.3 案例 A:手機 QQ 啟動有 10 次重復讀寫 /proc/cpuinfo 16
1.4 案例 B:對于系統 API,只知其一造成重復寫入 18
1.5 案例 C:手機 QQ 啟動場景下主線程寫文件 19
1.6 案例 D:Object Output Stream 4000 多次的寫操作 20
1.7 案例 E:手機 QQ“健康中心”使用的 Buffer 太小 22
1.8 案例 F:手機 QQ 解壓文件使用的 Buffer 太小 24
1.9 案例 G:剛創建好表,就做大量的查詢操作 37
1.10 案例 H:重復打開數據庫 39
1.11 案例 I:AUTOINCREMENT 可沒有你想的那么簡單 40
1.12 案例 J:Bitmap 解碼,Google 沒有告訴你的方面 45
1.13 專項標準:磁盤 48
第 2 章 內存:性能優化的終結者 50
2.1 原理 50
2.2 工具集 57
2.3 案例 A:內類是有危險的編碼方式 103
2.4 案例 B:使用統一界面繪制服務的內存問題 106
2.5 案例 C:結構化消息點擊通知產生的內存問題 109
2.6 案例 D:為了不卡,所以可能泄漏 110
2.7 案例 E:登錄界面有內存問題嗎 114
2.8 案例 F:使用 WifiManager 的內存問題 116
2.9 案例 G:把 WebView 類型泄漏裝進垃圾桶進程 120
2.10 案例 H:定時器的內存問題 123
2.11 案例 I:FrameLayout.POSTDELAY 觸發的內存問題 126
2.12 案例 J:關于圖片解碼配色設置的建議 129
2.13 案例 K:圖片放錯資源目錄也會有內存問題 134
2.14 案例 L:尋找多余的內存――重復的頭像 139
2.15 案例 M:大家伙要怎么才能進入小車庫 144
2.16 Android 要糾正內存世界觀了 149
2.17 專項標準:內存 152
第 3 章 網絡:性能優化中的不可控因素 154
3.1 原理 154
3.2 工具集 157
3.3 案例 A:WebView 緩存使用中的坑 189
3.4 案例 B:離線包下載失敗導致重復下載 196
3.5 案例 C:使用壓縮策略優化資源流量 197
3.6 案例 D:手機 QQ 發圖速度優化 202
3.7 案例 E:手機 QQ 在弱網下 PTT 重復發送 206
3.8 專項標準:網絡 208
第 4 章 CPU:速度與負載的博弈 210
4.1 原理 210
4.2 工具集 211
4.3 案例 A:音樂播放后臺的卡頓問題 215
4.4 案例 B:要注意 Android Java 中提供的低效 API 216
4.5 案例 C:用神器 renderscript 來減少你圖像處理的 CPU 消耗 218
4.6 專項標準:CPU 220
第 5 章 電池:它只是結果不是原因221
5.1 原理 221
5.2 工具集 226
5.3 案例 A:QQWi-Fi 耗電 243
5.4 案例 B:QQ 數據上報邏輯優化 244
5.5 案例 C:動畫沒有及時釋放 245
5.6 案例 D:間接調用 WakeLock 沒有及時釋放 246
5.7 案例 E:帶兼容性屬性的 WakeLock 釋放的巨坑 251
5.8 專項標準:電池 253
第 2 部分 交互類性能
第 6 章 原理與工具集 255
6.1 原理 255
6.2 工具集 257
6.2.1 Perfbox 自研工具:Scrolltest 257
6.2.2 Systrace(分析) 260
6.2.3 Trace View(分析) 269
6.2.4 gfxinfo(分析) 271
6.2.5 Intel 的性能測試工具:UxTune(測評 + 分析) 273
6.2.6 Hierarchy Viewer(分析) 274
6.2.7 Slickr(測評 + 分析) 277
6.2.8 圖形引擎分析神器――Adreno Profiler 工具使用說明 281
6.2.9 Chrome DevTool 286
第 7 章 流暢度:沒有最流暢,只有更流暢 295
7.1 案例 A:紅米手機 QQ 上的手機消息列表卡頓問題 295
7.2 案例 B:硬件加速中文字體渲染的坑 298
7.3 案例 C:圓角的前世今生 305
7.4 案例 D:讓企鵝更優雅地傳遞火炬 312
7.5 案例 E:H5 頁面卡頓,到底是誰闖的禍 314
7.6 專項標準:流暢度 320
第 8 章 響應時延:別讓用戶等待 322
8.1 案例 A:Android 應用發生黑屏的場景分析 322
8.2 案例 B:“首次打開聊天窗口”之痛 324
8.3 專項標準:響應時延 328
第 3 部分 其他事項
第 9 章 還應該知道的一些事兒 330
9.1 UI 自動化測試 330
9.2 專項競品測試攻略 335
9.3 未來的未來 344