移動(dòng)應(yīng)用的測試策略與測試架構(gòu)
今天我們來談?wù)勔苿?dòng)測試的測試策略與測試架構(gòu)。
首先我們將移動(dòng)應(yīng)用的范圍限定在智能移動(dòng)操作系統(tǒng)(比如Android、iOS、WinPhone等)上,包括手機(jī)應(yīng)用,智能設(shè)備應(yīng)用等。
智能手機(jī)和智能設(shè)備的普及需要大量的應(yīng)用來支撐。隨著應(yīng)用數(shù)量的增多,業(yè)務(wù)復(fù)雜度的提高,移動(dòng)應(yīng)用也越來越需要各種測試來保證應(yīng)用以及設(shè)備本身的正確和穩(wěn)定運(yùn)行。因此移動(dòng)應(yīng)用測試的需求也越來越大,大量關(guān)于移動(dòng)應(yīng)用測試的書籍應(yīng)運(yùn)而生,比如 《Android移動(dòng)性能實(shí)戰(zhàn)》 , 《騰訊iOS測試實(shí)踐》 、 《移動(dòng)APP性能評測與優(yōu)化》 、 《深入理解Android自動(dòng)化測試》 、 《精通移動(dòng)App測試實(shí)戰(zhàn):技術(shù)、工具和案例》 等。
這些書都介紹了大量的移動(dòng)應(yīng)用測試實(shí)踐,但是無論看多少本書,學(xué)習(xí)多少種測試方法、測試技術(shù)或者測試工具和框架,首先還是需要學(xué)習(xí)并使用測試策略與測試架構(gòu)。如果沒有在一開始制定好的測試策略和測試架構(gòu),而是盲目進(jìn)行各種測試,很有可能事倍功半。
對于移動(dòng)應(yīng)用,首先它本質(zhì)上也是軟件系統(tǒng),所以通用的軟件測試方法技術(shù)都可以使用。其次它又擁有嵌入式的特征,比如開發(fā)需要交叉編譯、需要遠(yuǎn)程調(diào)試、硬件資源相對不足等。所以移動(dòng)應(yīng)用的測試也有其特殊之處,比如也需要交叉編譯、遠(yuǎn)程測試以及各種硬件相關(guān)測試等。對應(yīng)的移動(dòng)應(yīng)用的測試策略和測試架構(gòu)也有其特殊性之處。
制訂測試策略
我將移動(dòng)測試分為三種類型,分別是基礎(chǔ)測試、進(jìn)階測試和產(chǎn)品測試,其中基礎(chǔ)測試是產(chǎn)品能正確并快速交付的基本保障,擴(kuò)展測試主要是為了增強(qiáng)軟件系統(tǒng)的健壯性,而產(chǎn)品測試主要是通過產(chǎn)品角度以及用戶角度去思考而進(jìn)行的測試。下面分別列舉了常見的三種類型測試。
基礎(chǔ)測試
- 功能測試 (Function Test)[1] 。
- 集成測試(Integration Test )
- 單元測試(Unit Test)
- 契約測試(Contract Test)[2]
進(jìn)階測試
- 兼容測試(Compatibility Test)
- UI視覺測試(UI Visual Test)
- 性能輪廓(Profiling)
- 安全測試(Security Test)
- 異常測試(Exception Test)[3]
- 猴子測試(Monkey Test)
- 安裝、升級和卸載測試(Install、Upgrade and Uninstall Test)
- 耐久測試(Endurance Test)
- 耗電測試(Power Consumption Test)
- 流量測試(Network Traffic Test)
- 其他硬件功能專項(xiàng)測試[4]
產(chǎn)品測試
- 易用性測試(Usability Test)
- A/B測試(A/B Test)
- 產(chǎn)品在線測試(Product Verification Test or Product Online Test)
- 用戶測試(Customer Test)[5]
對于一個(gè)中小型項(xiàng)目來講,很多時(shí)候資源都是十分有限的,很難做到全面類型的測試,大型項(xiàng)目更是如此,更難有足夠多的資源做所有類型的測試。而且可能還由于團(tuán)隊(duì)人員的技術(shù)能力不足,或者所擁有的測試相關(guān)的技術(shù)棧的局限,以及開發(fā)測試環(huán)境和軟件系統(tǒng)架構(gòu)的限制,有些類型的測試是無法進(jìn)行的。
所以,制定測試策略的關(guān)鍵點(diǎn)在于根據(jù)質(zhì)量需求的優(yōu)先級,并參考團(tuán)隊(duì)的各種限制來指定。
首先通過和PO、PM等進(jìn)行討論得到產(chǎn)品質(zhì)量需求的優(yōu)先級,然后根據(jù)優(yōu)先級指定相應(yīng)類型的測試。再根據(jù)團(tuán)隊(duì)的資源、項(xiàng)目周期、技術(shù)能力以及各種限制來制定相應(yīng)的測試方法和測試技術(shù),其中包括使用自動(dòng)化測試還是手動(dòng)測試、使用什么測試工具和測試框架、測試的范圍和程度等。
下表是一個(gè)典型手機(jī)應(yīng)用的測試策略表的樣例(這個(gè)只是一個(gè)模擬項(xiàng)目的樣表,真實(shí)項(xiàng)目中的各類信息應(yīng)該更多,并且可以根據(jù)具體情況添加新列。并且注意,這些測試并不一定由測試人員或者QA來做,應(yīng)該由整個(gè)團(tuán)隊(duì)一起協(xié)作完成):
表中的質(zhì)量需求優(yōu)先級的獲取是一個(gè)比較繁瑣的過程,需要和各個(gè)利益相關(guān)者一起討論并且協(xié)商獲得。
根據(jù)這個(gè)測試優(yōu)先級表,就知道應(yīng)該把資源優(yōu)先投入到高優(yōu)先級的測試中。等高優(yōu)先級的測試做到團(tuán)隊(duì)可以接受的程度后,再按照優(yōu)先級做下一個(gè)類型的測試。這個(gè)表中的優(yōu)先級在開發(fā)過程中不是絕對不變的。如果PO、PM等利益相關(guān)者對于產(chǎn)品質(zhì)量需求的優(yōu)先級發(fā)生了改變,在得到團(tuán)隊(duì)同意后,還需要改變這個(gè)表中的測試優(yōu)先級。所以需要經(jīng)常與團(tuán)隊(duì)更新測試進(jìn)度,并及時(shí)獲得團(tuán)隊(duì)各個(gè)角色對于測試和產(chǎn)品質(zhì)量需求的反饋與更新。
其次可以根據(jù) 測試金字塔 等模型來思考不同類型測試之間的關(guān)系和工作量,但是很多情況下也可以不用參考這些測試模型,因?yàn)橐苿?dòng)應(yīng)用的復(fù)雜度一般不會特別高,并且當(dāng)前大多數(shù)情況下,移動(dòng)應(yīng)用中復(fù)雜的業(yè)務(wù)邏輯都會盡量在服務(wù)器端進(jìn)行處理,所以移動(dòng)應(yīng)用很多時(shí)候只是一個(gè)用戶交互系統(tǒng),所以應(yīng)該盡可能的完成會影響用戶使用的E2E流程測試,然后再繼續(xù)做其他類型的測試。
但是對于在移動(dòng)應(yīng)用中實(shí)現(xiàn)復(fù)雜業(yè)務(wù)的項(xiàng)目,測試策略還是應(yīng)該盡量思考測試類型之間測試用例重復(fù)的問題,盡量避免重復(fù)的用例,降低測試成本。
制定測試架構(gòu)
通過測試優(yōu)先級表,我們獲得了簡易版的測試策略,然后就應(yīng)該制定測試架構(gòu)了。由于嵌入式軟件的特殊性,其測試架構(gòu)也與常規(guī)的桌面系統(tǒng)和服務(wù)器系統(tǒng)有一定的區(qū)別。下圖為針對上面樣列測試策略相對應(yīng)的功能測試架構(gòu):
圖中只針對功能測試進(jìn)行了進(jìn)一步的詳細(xì)架構(gòu)設(shè)計(jì),并沒有對其他測試比如集成測試、兼容性測試和穩(wěn)定測試等進(jìn)行詳細(xì)架構(gòu)設(shè)計(jì),感興趣的讀者可以根據(jù)自己項(xiàng)目的實(shí)際情況自己嘗試一下。
通過這個(gè)架構(gòu)圖,可以比較系統(tǒng)以及直觀的了解各種類型測試的分布、關(guān)系和測試系統(tǒng)的架構(gòu)等。
然后配合測試優(yōu)先級表就可以較好的指導(dǎo)團(tuán)隊(duì)進(jìn)行有效的測試,比如制定更好的測試計(jì)劃,制定更適合的自動(dòng)化測試系統(tǒng)等。并且還可以更有效的評估產(chǎn)品質(zhì)量,比如什么類型的測試沒有做,那么那些特定方面就存在較高的風(fēng)險(xiǎn)。
不過任何軟件系統(tǒng)都是存在缺陷和風(fēng)險(xiǎn)的,關(guān)鍵是看這些缺陷對于開發(fā)商和用戶產(chǎn)生的影響有多大,風(fēng)險(xiǎn)是不是在可控范圍內(nèi)的。永遠(yuǎn)不要嘗試去找到所有缺陷并消除,而是要從風(fēng)險(xiǎn)大小、影響程度等各方面綜合考慮,增加團(tuán)隊(duì)對于產(chǎn)品質(zhì)量的信心,并且不要對客戶產(chǎn)生嚴(yán)重的大范圍的影響。
注:
- [1]. 后臺常住應(yīng)用測試也屬于功能測試。
- [2]. 單機(jī)應(yīng)用可以不用考慮做契約測試。
- [3]. 異常測試包括弱網(wǎng)測試,比如低速網(wǎng)絡(luò)信號、網(wǎng)絡(luò)時(shí)斷時(shí)續(xù),網(wǎng)絡(luò)切換以及無網(wǎng)絡(luò)等,突然斷電等。
- [4]. 其他硬件功能專項(xiàng)測試包括硬件功能關(guān)閉,硬件功能異常等。
- [5]. 用戶測試包括收集用戶使用信息,并生成用戶真實(shí)使用的測試用例來對系統(tǒng)進(jìn)行測試。