本節書摘來自華章計算機《騰訊ios測試實踐》一書中的第3章,第3.3節,作者:丁如敏 王琳 等著
更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
機型的問題跟硬體有關,比如随着一代代的iphone釋出,螢幕越來越大,分辨率越來越高,處理器指令集從armv6、armv7、armv7s到armv64,從指紋識别到3d touch的手機新特性應用。
3.3.1 新增功能
系統更新會帶來新功能,機型的更新也會帶來新功能,例如從iphone 5s開始有了指紋識别,從iphone 6s開始有了3d touch等。如果機型上的新功能不涉及被測産品(例如手機照相機的更新),就可以忽略;如果涉及,就要進行适配。
兩點測試保證:一是保證有該特性的機型能夠正常使用;二是保證低端機型不會誤觸發這個邏輯。
過往的缺陷中,機型上新增功能有關系的案例也不少。舉例來說,iphone 6s(plus)開始引入3d touch特性,在iphone 6s(plus)上驗證該功能,就曾發生過重按不顯示菜單欄的問題。對這種與機型強相關的測試,最好能單獨列出一個list來記錄,避免在研發過程中幾個版本疊代後對機型差異敏感度下降後誤觸發一些問題。
3.3.2 螢幕變化
iphone自釋出以來,螢幕尺寸和分辨率越來越大。表3-3是不同機型的螢幕尺寸和裝置分辨率,測試時需要關注不同裝置的資源配置是否有遺漏或者錯配。

對于螢幕尺寸大小的不同,出現的相容性問題也多。經常出現的問題是網頁顯示或彈框顯示。例如,做一個手機qq新聞打開的紅包新彈框,在iphone 4上就出現右上角的關閉按鈕被完全遮擋,下面也被遮擋了很大一部分。
圖3-6就屬于螢幕差異引起的相容問題。
3.3.3 處理器差異
到目前為止,所有ios裝置都使用arm結構處理器,它與桌上型電腦上的x86和powerpc有些不同。arm64是arm處理器的一個指令集,目前iphone裝置的指令集種類如表3-4所示。
從xcode 4.5開始不再支援armv6指令集。實際上,使用者使用的基本上都是iphone 4以後的機型了,是以我們編譯生成的二進制包所支援的指令集隻要支援armv7以上就可以。蘋果公司規定,從2015年2月開始上架app store的應用必須支援arm64的編譯,是以産品都應完成對arm64的适配。
裝置對指令集的支援可向前相容,隻是會影響運作效率。是以現在編譯的版本一個包有兩個架構,分别支援armv7指令集和armv64指令集的架構。選擇armv7是為了支援iphone 4~iphone 5c之間的裝置,而編譯armv64的二進制包一方面是因為蘋果公司的規定,另外一方面是為了讓進階機型能夠更好地運作,提高運作效率。
适配工作的重點在于對參數類型的調整,适配最新版的如目前的armv64的指令集。bug大多集中于參數類型在armv64裝置上出現的異常。
模拟器并不運作arm代碼,軟體會被編譯成 x86 可以運作的指令,是以适配不能在模拟器上進行驗證。
回顧曆史版本,在硬體的相容上,iphone一般都做得很好。印象最深的還是32位機升為64位機後做的适配測試,當時要求ios的32位工程轉為64位工程。我們來看一下深層次的原理。
“32位的ios系統和64位的ios系統的差别主要有兩個:一個是資料類型的差别,一個是過程調用方法的差别。 在資料類型上,主要的變化是指針類型(pointer)和長整數類型(long)的長度變化和記憶體對齊方式的變化,同時也導緻了更進階别資料類型的變化,如nsinteger的長度也有變化。在過程調用方法上,因為armv8和armv7具有不同數量的寄存器與不同的過程調用約定,是以32位系統和64位系統在彙編層級是不同的。”
實際測試中遇到過新版64位安裝包在各功能子產品上發生閃退、顯示混亂、資料錯誤、性能差等問題。額外強調的一點是,要關注的問題為資料的傳輸,因為使用者會通過網絡交換資料,使用者儲存的資料也可能通過備份等方式在32位系統和64位系統之間切換,是以應用在儲存和發送流資料的時候一定要考慮充分,例如32位機儲存的書簽在64位機上是否能夠正确顯示和使用