Android應(yīng)用測(cè)試:解決方案匯總
譯文【51CTO譯文】對(duì)Android或者iOS平臺(tái)上的應(yīng)用程序進(jìn)行檢查其實(shí)并不像大家想象的那么特別。我們工作的目標(biāo)是一樣的,期望的結(jié)果是一樣的,操作的過程也是一樣的。與桌面平臺(tái)相比,移動(dòng)應(yīng)用測(cè)試的主要區(qū)別在于我們需要更多地留心細(xì)節(jié),而這也正是今天這篇文章所要討論的重點(diǎn)。
1. 基本原則
在我們深入討論之前,首先來聊聊關(guān)于測(cè)試的一些基本原則。除非大家已經(jīng)透徹了解并且熟知整套測(cè)試體系,否則對(duì)相關(guān)背景知識(shí)進(jìn)行說明能幫助各位快速明確自己有哪些解決思路可供選擇。
Android上的挑戰(zhàn)
真正讓Android得到人們青睞的在于它那不計(jì)其數(shù)的可能性。在iOS陣營(yíng)當(dāng)中,我們能夠想到的只有iPhone、iPad以及iPod Touch。它們?cè)跇邮缴嫌兴煌?,但卻擁有iOS設(shè)備所共通的像素密度、屏幕分辨率、處理器速度以及內(nèi)存大小等等。
但在Android這邊,同樣的外觀尺寸、屏幕分辨率與大小、處理器速度乃至內(nèi)存容量等可以構(gòu)建出無數(shù)具體組合——而“錦上添花”的是,操作系統(tǒng)版本的碎片化又讓這一切變得更加復(fù)雜。
說起操作系統(tǒng)的版本,運(yùn)營(yíng)商與手機(jī)制造商在推出產(chǎn)品之后很快停止為其提供版本更新的作法在Android陣營(yíng)可以說是屢見不鮮。這到底算不算是問題呢?當(dāng)然是。感興趣的朋友可以點(diǎn)擊此處查看谷歌官方提供的Android市場(chǎng)份額統(tǒng)計(jì),了解這一問題到底有多嚴(yán)重。
在市場(chǎng)份額下降的項(xiàng)目當(dāng)中,我們看到了果凍豆(4.1至4.3版本)、姜餅(2.3版本)與冰淇淋三明治(4.0版本)的身影。
相比之下,蘋果iOS 7的接受比例則明顯理想得多。截至今年一月底,已經(jīng)有八成iOS設(shè)備運(yùn)行iOS 7。需要提醒大家的是,iOS 7是在去年九月才正式發(fā)布的——相較而言,二者的表現(xiàn)可謂判若云泥。
學(xué)習(xí)、對(duì)比與參照
不知道大家有沒有真正體驗(yàn)過糟糕的Android應(yīng)用程序?相較于那些從頭到尾一無是處的應(yīng)用,更為可惡的是那些充斥著無數(shù)漏洞、讓人根本捉摸不透其運(yùn)行結(jié)果的垃圾。
根據(jù)我的個(gè)人經(jīng)驗(yàn),要讓測(cè)試過程變得更順利、更富成效,大家的關(guān)注重點(diǎn)起著非常關(guān)鍵的作用——包括我們使用什么、喜歡什么和憎惡什么。雖然憎惡這個(gè)詞似乎有些太過強(qiáng)烈,但我確信各位在使用過程中的確體會(huì)到過這樣的感受。
請(qǐng)大家客觀回答以下幾個(gè)問題:
- 你最喜歡的應(yīng)用程序有哪些?為什么它們能獲得你的肯定?
- 你曾經(jīng)體驗(yàn)過哪些糟糕的應(yīng)用程序?
- 一款應(yīng)用程序是靠哪些因素而變得出色的?它們是否在開發(fā)過程中注意到了細(xì)節(jié)?
- 糟糕的應(yīng)用程序是不是會(huì)在運(yùn)行當(dāng)中經(jīng)??ㄋ??會(huì)不會(huì)一個(gè)勁兒崩潰?或者在設(shè)計(jì)思路上就存在問題?
了解自己要應(yīng)對(duì)的是哪些Android設(shè)備
讓我們?cè)僬f回之前談到的Android操作系統(tǒng)市場(chǎng)份額參考圖表??梢钥闯?,對(duì)每一臺(tái)設(shè)備以及每一個(gè)Android版本進(jìn)行測(cè)試根本就是癡人說夢(mèng)、也并無必要。
我的觀點(diǎn)是,我們需要考慮發(fā)行方面的具體需求。我們的應(yīng)用程序是什么、面向的又是哪類目標(biāo)市場(chǎng)?這是一款游戲還是實(shí)用工具類應(yīng)用?
如果這是一款游戲,那么關(guān)注重點(diǎn)可能僅僅放在更新、更高端的設(shè)備知上。不過對(duì)于實(shí)用工具類應(yīng)用程序來說,大家則需要吸引到更為廣泛的客戶群體并支持?jǐn)?shù)量更龐大的設(shè)備類型。
#p#
2. 實(shí)施方案
我感覺大多數(shù)朋友沒能做好測(cè)試工作的主要原因在于,我們都與自己的項(xiàng)目太過貼近也太過熟悉。我們很清楚自己的應(yīng)用程序在何處情況下會(huì)出現(xiàn)故障,也知道該如何將其重新扳回運(yùn)行正軌。有鑒于此,我會(huì)刻意讓自己站在普通用戶的立場(chǎng)之上。我一般會(huì)把用戶分為兩大類——一類是狂點(diǎn)按鈕型、另一類才是真正的普通用戶。
狂點(diǎn)按鈕型
狂點(diǎn)按鈕型指的是那些從應(yīng)用程序啟動(dòng)之后就不斷鼓搗屏幕的使用者,他們一會(huì)點(diǎn)這個(gè)按鈕、一點(diǎn)碰那個(gè)按鈕,一刻也閑不下來。“剛剛點(diǎn)的那個(gè)按鈕沒起作用,我再點(diǎn)別的試試。”
我們對(duì)不同用戶類型的學(xué)習(xí)將貫穿整個(gè)應(yīng)用程序的開發(fā)周期。如果出現(xiàn)某些情況、接收到某種請(qǐng)求或者發(fā)生某種操作,我們的應(yīng)用程序是否會(huì)大量占用處理器資源或者是用盡設(shè)備的內(nèi)存容量?這類情況又是否會(huì)導(dǎo)致應(yīng)用程序陷入崩潰?
另一個(gè)值得關(guān)注的重要問題是,“我們?cè)撊绾瓮ㄖ脩艏磳⒊霈F(xiàn)的結(jié)果。”為什么他們沒有等待,反而選擇了直接點(diǎn)觸其它按鈕?我們能否利用載入界面幫助他們弄清自己該如何操作?
普通用戶型
普通用戶擁有明確的使用意圖。用更好的方式來解釋的話,這類用戶會(huì)花一點(diǎn)時(shí)間查看用例并了解應(yīng)用程序的使用方法。如果提供一套特定任務(wù)執(zhí)行流程,他們會(huì)希望加以體驗(yàn)并遵循應(yīng)用本身給出的操作步驟。
我們需要了解自己的應(yīng)用程序在為用戶提供處理流程或者操作指引方面是否表現(xiàn)得足夠明確。借助這種思路,我們會(huì)理解用戶為何在使用過程中感到迷惑,又有哪些部分值得留意或者重新定義。
我們已經(jīng)討論過了努力目標(biāo)與不同用戶類型,但我們能夠給出哪些選項(xiàng)、又該如何對(duì)其進(jìn)行測(cè)試呢?很幸運(yùn),可選方案非常豐富,而且我建議大家盡可能多了解這類可行性選項(xiàng)。
#p#
3.可選方案
給朋友打電話
如果大家沒有奢侈到擁有自己的常見問題部門或者測(cè)試實(shí)驗(yàn)室,那么不妨先從與朋友交流開始。我們需要自己的親身體驗(yàn)與相關(guān)物理設(shè)備。
在進(jìn)行移動(dòng)應(yīng)用程序測(cè)試時(shí),數(shù)量起到的作用其實(shí)非常顯著,特別是在大家擁有大量可用設(shè)備的情況下。
工具與單元測(cè)試
自動(dòng)化測(cè)試方案是我們的好朋友。盡管***的測(cè)試辦法仍然是親手對(duì)應(yīng)用程序進(jìn)行完整體驗(yàn),但了解代碼層面的狀況以及應(yīng)用程序會(huì)在特定條件下、特別是在壓力條件下作出怎樣的編程化反應(yīng)同樣非常關(guān)鍵。
更重要的是,單元測(cè)試能幫助大家在開發(fā)的同時(shí)完成測(cè)試工作,這會(huì)在應(yīng)用程序真正發(fā)布之前為我們節(jié)約下大量的測(cè)試與常見問題解決時(shí)間。
Android SDK
Android SDK為我們提供Android測(cè)試框架,這套框架主要由基于JUnit與monkeyrunner的測(cè)試API所構(gòu)成。
Android JUnit擴(kuò)展允許開發(fā)人員針對(duì)Android組件編寫出單元測(cè)試機(jī)制,而該Android API還具備面向特定組件的預(yù)置測(cè)試類。
基于Python的monkeyruuner則是另一套API,允許大家編寫出能夠以用戶的角度出發(fā)實(shí)現(xiàn)設(shè)備控制的程序。這意味著大家可以創(chuàng)建出可以運(yùn)行在多種設(shè)備或者模擬器上的測(cè)試方案,向其發(fā)送按鍵點(diǎn)擊記錄并獲取屏幕截圖。
其它測(cè)試框架
目前市面上可用的測(cè)試框架可謂層出不窮。其中一部分的人氣相對(duì)較高,最典型的代表就是Robolectric與Robotium。
Robolectric是一套運(yùn)行在我們IDE環(huán)境下的單元測(cè)試框架,它同時(shí)也是一套能夠?qū)︻A(yù)建代碼進(jìn)行良好審計(jì)的卓越方案。Robotium的測(cè)試對(duì)象則主要是模擬器環(huán)境下的Android API。雖然它在完成測(cè)試的時(shí)耗方面表現(xiàn)得更長(zhǎng),但大家的應(yīng)用程序代碼將在其幫助下變得更為堅(jiān)實(shí),效果其實(shí)不遜于對(duì)設(shè)備以及API進(jìn)行實(shí)際測(cè)試。
另一套有趣的備選方案則是Espresso。與前面兩套選項(xiàng)相比,它主要面向某些較為特殊的測(cè)試目標(biāo)。具體而言,它是一套專門對(duì)Android UI進(jìn)行測(cè)試的API。
前面提到的各類選項(xiàng)都相當(dāng)出色,不過如果大家打算創(chuàng)建一套混合型應(yīng)用程序,那么它們也許幫不上什么忙。Appium是一套跨平臺(tái)自動(dòng)化框架,允許大家構(gòu)建起能夠面向各類語言、兩大主流移動(dòng)平臺(tái)的測(cè)試機(jī)制。
報(bào)告與分析
多查看一些統(tǒng)計(jì)數(shù)據(jù)也會(huì)很有幫助,而且更重要的是,大家應(yīng)該收集錯(cuò)誤與崩潰日志。如果大家擁有多位應(yīng)用程序測(cè)試人員,這種方式將變得更為實(shí)用,因?yàn)槲覀兛梢越璐藢⒚恳晃挥脩舻娜罩居涗浭占饋怼?/p>
除了追蹤應(yīng)用程序使用情況之外,Google Analytics還能夠帶來一些意外驚喜。Flurry屬于另一套測(cè)試選項(xiàng)。其實(shí)這項(xiàng)功能已經(jīng)存在了相當(dāng)一段時(shí)間了,其報(bào)告與崩潰記錄也包含有較為詳盡的信息。
盡管它無法在應(yīng)用程序開發(fā)階段為我們帶來幫助,但谷歌能夠收集Play Store中應(yīng)用程序的崩潰記錄。
#p#
4. 第三方備選方案
我們都希望擁有幾百臺(tái)物理設(shè)備用來測(cè)試,正如我們?cè)诰W(wǎng)站上見過的那些規(guī)模龐大的測(cè)試實(shí)驗(yàn)室一般。然而大家都知道,這明顯不切實(shí)際。為了解決這個(gè)難題,如果大家愿意在測(cè)試方面作出投資、那么可用的服務(wù)也是很多的。
這些服務(wù)可謂五花八門,從一對(duì)一人力測(cè)試到數(shù)百臺(tái)設(shè)備上的全自動(dòng)測(cè)試應(yīng)有盡有。如果大家愿意選擇付費(fèi)項(xiàng)目,這些方案都是完全可行的。
我自己其實(shí)也沒體驗(yàn)過那么多方案,但User Testing作為其中之一給我留下了很深的印象。他們會(huì)派出一位專員關(guān)注我們的測(cè)試腳本,并通過應(yīng)用程序體驗(yàn)給出來自外部的建議與意見。
下面幾項(xiàng)服務(wù)也都值得認(rèn)真考慮,感興趣的朋友請(qǐng)立刻打開搜索引擎吧:
總結(jié)
我經(jīng)歷過很多消極的狀況,開發(fā)者誤以為常見問題匯總與測(cè)試似乎應(yīng)該是后期處理工作。但事實(shí)上,它們正是開發(fā)流程當(dāng)中非常重要的組成部分。
作為一套擁有眾多版本的龐大陣營(yíng),Android操作系統(tǒng)似乎看起來難于打理、甚至有些可怕,然而在采用編程化解決方案之后、它完全可以成為開發(fā)流程的固有步驟。為此投入額外的時(shí)間與精力完全是物有所值,請(qǐng)大家注意——高質(zhì)量應(yīng)用程序不會(huì)憑空而來。