鄭根讓 林正春
(1.中山職業(yè)技術學院 廣東省中山市 528404 2.廣東技術師范大學 廣東省廣州市 510665)
隨著軟件技術的不斷發(fā)展,軟件開發(fā)的復雜性、集成度和可靠性要求越來越高,對軟件質(zhì)量保證的軟件測試提出了更高的要求。同時,隨著軟件在各行業(yè)的廣泛應用,軟件系統(tǒng)功能不斷強大,系統(tǒng)復雜度也在持續(xù)提高,軟件系統(tǒng)需要支持多平臺和多場景,這就需要使用組合測試方法對軟件系統(tǒng)進行測試。
組合測試是一種重要的軟件測試方法。它以覆蓋表作為測試用例集,能夠以少量的測試用例有效地檢測由軟件各參數(shù)之間的交互作用所觸發(fā)的失效。覆蓋表生成是組合測試要解決的關鍵問題,也是軟件測試重點研究的領域。組合測試覆蓋表生成主要基于三種框架:測試用例演化(Evolve Test Case)、參數(shù)演化(Evolve Parameter)和整表演化(Evolve Test Set)。組合測試可以通過三種框架和不同算法有效結(jié)合形成不同的覆蓋表生成算法。
配對測試(Pairwise)可以根據(jù)已設定的條件,自動生成在測試效率和測試覆蓋率之間做出平衡的組合,由于兩因素組合測試在測試用例個數(shù)和錯誤檢測能力上達到了較好的平衡,因此它是目前主流的組合測試方法。
組合測試的研究與發(fā)展一直是由應用驅(qū)動的。電商平臺是目前應用廣泛,功能龐雜的應用系統(tǒng),因其功能模塊多,用戶需求多,應用終端結(jié)構(gòu)多樣,使得測試工作復雜而困難。
PICT是一個現(xiàn)有的公共可用工具,構(gòu)建在一個靈活的組合測試用例生成引擎之上,通過設計許多組合策略來幫助測試人員選擇能最大限度地發(fā)現(xiàn)缺陷的輸入組合子集。
本研究利用Pairwise算法思想對電商平臺系統(tǒng)測試,使用PICT工具對電商平臺進行組合測試實驗,根據(jù)電商平臺運行需求利用貪心算法對約束關系進行了優(yōu)化,進一步提高組合測試效能。
組合測試是一種充分考慮了各種因素及其組合相互作用的軟件測試方法,實踐證明組合測試在多種因素及其相互作用下的復雜軟件系統(tǒng)測試中應用極為廣泛也最為有效。
組合測試CT(combinatorial testing)采用系統(tǒng)的抽樣機制對參數(shù)間的交互作用進行有針對性的覆蓋,從而減少測試用例的規(guī)模[1,2]。已有研究結(jié)果表明:軟件系統(tǒng)中大約70%的故障是由兩個參數(shù)間的交互作用引起的;同時,與故障相關的參數(shù)個數(shù)一般不超過6個[3]。因此,組合測試是一種科學有效的軟件測試方法。
組合測試具有廣泛的應用場景和發(fā)展空間,已發(fā)展成為一種獨具特色和有影響力的科學實用的軟件測試方法。從上世紀末,美國和日本的研究者將實驗設計思想引入計算機軟硬件測試,并逐漸發(fā)展成組合測試方法。組合測試已在輸入?yún)?shù)測試、配置測試、軟件產(chǎn)品線測試、事件驅(qū)動軟件測試、并發(fā)程序測試、移動應用測試和安全測試等方面得到廣泛應用[4]。
組合測試是一種測試用例生成方法,其對傳統(tǒng)測試用例方法進行了綜合。組合測試理論可由一個數(shù)學模型和一個假設表示:
如果影響待測軟件系統(tǒng)的因素有n個[5],記為F={f1,f2,…,fn},其中,參數(shù)fi有l(wèi)i個可能取值,每個參數(shù)取值為wi={0,1,…,li-1},1≤i≤n。
設m元組(w1,w2,…,wn)(wi∈Wi)為SUT(software under testing)的一條測試用例。組合測試的測試用例集組成覆蓋表。
SUT的t維覆蓋表CA(N;t,n,(w1,w2,…,wn))是一個N×n的數(shù)組,wi是第i列對應的第 i 個參數(shù),任意t個參數(shù)形成的N×t的子數(shù)組中包含了該t個參數(shù)的所有t元組,t表示組合覆蓋測試的強度[6]。
以電商平臺為例,它有多種應用操作系統(tǒng)(f1),可以使用不同的瀏覽器(f2),有不同的網(wǎng)絡連接方式(f3)以及不同的內(nèi)存配置(f4),電商平臺配置見表1,共有4個參數(shù),每個參數(shù)都有3個取值,可以形成二維覆蓋表CA(9;2,34)。
Pairwise可以根據(jù)設定的條件,自動生成在測試效率和測試覆蓋率之間做出平衡的組合,由于兩因素組合測試在測試用例個數(shù)和錯誤檢測能力上達到了較好的平衡,它是目前主流的組合測試方法。當然,Pairwise也有不足,主要問題是Pairwise對于維度的分解來說,需要對業(yè)務很熟悉,需要正交測試法的理論支持。需要中等專業(yè)的測試人員才能完成。其次,Pairwise還是有一定的遺漏。相比于全正交設計法來說,Pairwise算法對于多于2個因素相互作用所產(chǎn)生的bug,沒有覆蓋到。
現(xiàn)很多程序都圍繞Pairwise算法產(chǎn)生,最著名的就是ReduceArray,SmartDesgin和微軟的PICT工具。
ReduceArray按照Pairwise覆蓋要求[6],輸出剔除無效用例后的一個用例子集可以支持約束條件,支2持維或3維覆蓋可以給出每個用例覆蓋的Pairwise對的數(shù)量,可以給出輸入用例集和輸出用例集有哪些Pairwise對沒有覆蓋到,給出的用例集合可以達到最優(yōu)。速度很快,效率高,但隨著用例規(guī)模的增加,效率下降明顯。在表格中,編寫的腳本來執(zhí)行,操作較簡單。
SmartDesgin符合N維Pairwise全覆蓋的一組用例,支持約束條件[7],支持2維的Pairwise覆蓋,給出的用例集合不是最優(yōu)。速度很快,但效率較低。在表格中進行操作,稍有一慎可能導致結(jié)果錯誤。運行過程中有時會導致異常關閉。
PICT(The Pairwise Independent Combinatorial Testing tool)是一款由微軟公司出品的命令行用例生成工具,生成的測試集可以覆蓋任意N個變量的取值組合?;诮M合測試的理論,該測試用例集可以發(fā)現(xiàn)N個因素共同作用引發(fā)的缺陷。PICT接受純文本模式的文件作為輸入,輸入文件中包括參數(shù)類別、取值集與約束關系,輸出是一個用來組成組合覆蓋測試用例的矩陣,每一行表示一個測試用例,每一列代表系統(tǒng)的一個參數(shù),每一項代表測試用例對應的參數(shù)取值。PICT可幫助測試人員產(chǎn)生比手動生成更高效的測試用例。
Pairwise是L.L.Thurstone(29 May1887 - 30 September 1955)[8]在1927年首先提出來的。他是美國的一位心理統(tǒng)計學家。Pairwise也正是基于數(shù)學統(tǒng)計和對傳統(tǒng)的正交分析法進行優(yōu)化后得到的產(chǎn)物。
Pairwise基于如下2個假設:
(1)每一個維度都是正交的,即每一個維度互相都沒有交集。
(2)根據(jù)數(shù)學統(tǒng)計分析,73%的缺陷(單因子是35%,雙因子是38%)是由單因子或2個因子相互作用產(chǎn)生的。19%的缺陷是由3個因子相互作用產(chǎn)生的。因此,Pairwise基于覆蓋所有2因子的交互作用產(chǎn)生的用例集合性價比最高而產(chǎn)生的。
電子商務平臺簡稱電商平臺,是一個為企業(yè)或個人提供網(wǎng)上交易洽談的平臺。企業(yè)電子商務平臺是建立在Internet網(wǎng)上進行商務活動的虛擬網(wǎng)絡空間和保障商務順利運營的管理環(huán)境;是協(xié)調(diào)、整合信息流、貨物流、資金流有序、關聯(lián)、高效流動的重要場所。企業(yè)、商家可充分利用電子商務平臺提供的網(wǎng)絡基礎設施、支付平臺、安全平臺、管理平臺等共享資源有效地、低成本地開展自己的商業(yè)活動。
電商平臺具有終端多樣化、交易復雜化、信息多元化等特點,以終端設備為例,終端可以是PC,也可以是SP(Smartphone)、PAD還可以是PDA,再比如購物的付款方式有貨到付款、銀行卡付款、微信付款、支付寶付款及白條等,電商平臺支付方式頁面如圖1所示。因此,電商平臺測試適用組合測試來解決多因素組合的測試問題。
電商交易平臺是一個復雜的網(wǎng)絡交易系統(tǒng),系統(tǒng)功能模塊多,輸入?yún)?shù)多且一般有約束關系。以某在線的電子商務平臺的商品結(jié)算模塊為例,商品支付模塊包括支付方式、配送方式和使用優(yōu)惠等3個功能選項。支付方式有貨到付款、在線支付、朋友代付,配送方式有自營配送、自選快遞和上門自提,優(yōu)惠券有商品優(yōu)惠券、運費券和優(yōu)惠碼兌換,禮品卡有使用、無和添加3種狀態(tài)。
構(gòu)建模型
通過分析電商平臺可以構(gòu)建支付方式、配送方式、優(yōu)惠券、禮品卡等有4個輸入?yún)?shù)的模型,每個參數(shù)有3個可選值,如表2所示。
表2:電商平臺輸入?yún)?shù)及取值
生成測試用例:
將構(gòu)建模型的參數(shù)及取值,輸入PICT生成測試用例,如表3所示。
表3:PICT生成的電商平臺測試用例
在組合測試的基礎理論中,各個因素的取值是相互獨立的,即因素A的取值不會影響因素B的取值。但是,大多數(shù)被測試應用的因素之間存在約束關系。
PICT默認使用兩變量組合方法,生成的測試集可以覆蓋任意兩個變量的取值組合。并且由于組合測試的數(shù)學模型沒有描述變量之間的約束關系,生成的用例集存在一定的冗余,利用PICT可通過添加輸入的約束條件來進行改進。
在電商平臺中,當支付方式選擇“朋友代付”時,不能選擇所有優(yōu)惠券和禮品卡。當支付方式選擇“貨到付款”時,配送方式不能選擇“上門自提”;當配送方式選擇“上門自提”時,優(yōu)惠券不能領取“運費券”。根據(jù)電調(diào)平臺中關于支付方式、配送方式、優(yōu)惠券及禮品卡之間的關聯(lián)關系編寫約束條件代碼:
IF [支付方式]="朋友代付" THEN ([優(yōu)惠券]<> "商品優(yōu)惠券" OR [優(yōu)惠券]<> "運費券" OR [優(yōu)惠券]<> "優(yōu)惠兌換碼");
IF [支付方式]="貨到付款" THEN [配送方式]in {"自營配送","自選快遞"};
IF [配送方式]="上門自提" THEN [優(yōu)惠券]in {"商品優(yōu)惠券","優(yōu)惠兌換碼"};
將約束條件代碼輸入PICT,完成具有約束條件的用例生成,如表4所示。
表4:具有約束條件的PICT生成用例
為了進一步分析PICT在組合測試中的效率,以某電商平臺為測試對象,設計了4個覆蓋數(shù)組CA(34)、CA(312)、CA(2100)和CA(1020)(4個3值,12個3值,200個2值,20個10值)和2個混合覆蓋數(shù)組MCA(415317220)(表示待測實例有52個參數(shù),其中,15個4值,17個3值,20個2值)和MCA(41320235)(表示待測實例有56個參數(shù),其中,1個4值,20個3值,35個2值),分別使用AETG、IPO、CTS、DDA等方法與PICT進行用例覆蓋表的生成規(guī)模生成對比實驗,結(jié)果如表5所示。
表5:用例生成規(guī)模對比實驗
從用例覆蓋表的生成規(guī)模情況可以看出,用PICT生成的用例覆蓋表的生成規(guī)模總體上是處于中等的,但PICT核心算法的效率與其他工具相比還是占有優(yōu)勢的,在工具的易用性和核心引擎的可擴展性等方面PICT具有較好的表現(xiàn)。
總之,PICT是一款開放實用的組合測試工具,它是構(gòu)建在一個靈活的組合測試用例生成引擎之上,具有簡單易用、低成本、高效率的特點,特別是在測試生成的速度上明顯優(yōu)于其他方法。組合測試很難一次性就把工作做到很完美,在組合測試中應該把握測試的靈活性使組合測試有更好的自適應性和可拓展性。