陳 輝,周 豐
(華北計(jì)算技術(shù)研究所,北京100083)
要想對(duì)軟件進(jìn)行盡可能完備的測(cè)試,需要設(shè)計(jì)和執(zhí)行充足的測(cè)試用例。但是,測(cè)試用例也不是無(wú)止盡的越多越好,因?yàn)樾枰O(shè)計(jì)和執(zhí)行的測(cè)試用例越多,測(cè)試成本也就越高。在現(xiàn)實(shí)中,很多軟件項(xiàng)目存在開(kāi)發(fā)進(jìn)度延遲的問(wèn)題,導(dǎo)致測(cè)試工時(shí)有限乃至不足,而軟件又面臨按時(shí)發(fā)布的壓力。因此,有必要研究在測(cè)試工時(shí)受限條件下,如何使用較少的測(cè)試用例進(jìn)行盡可能充分的測(cè)試。
當(dāng)前,對(duì)如何使用較少的測(cè)試用例進(jìn)行盡可能充分的測(cè)試,主要集中在回歸測(cè)試領(lǐng)域,如測(cè)試用例優(yōu)先排序[1-3]、測(cè)試用例集縮減和測(cè)試用例集擴(kuò)充[4,5],這些技術(shù)無(wú)法在測(cè)試用例設(shè)計(jì)好之前使用。也有一些技術(shù)可以在測(cè)試用例設(shè)計(jì)前使用,如統(tǒng)計(jì)測(cè)試方法[6],但是應(yīng)用該方法之前需要建立軟件使用模型,這本身就很消耗工作量,而且因?yàn)槭且环N隨機(jī)測(cè)試方法,難以在軟件投入使用之前判定測(cè)試的充分性。另外,張德平[7]等人研究了劃分測(cè)試中劃分方案確定情形下,如何在各個(gè)子域中合理選擇測(cè)試用例問(wèn)題,但是由于要求測(cè)試人員了解待測(cè)軟件的錯(cuò)誤分布,并給出失效概率矩陣,因此不便于在實(shí)際應(yīng)用領(lǐng)域使用。為此,分析了制定測(cè)試策略時(shí)需要考慮的幾個(gè)因素,提出了一種對(duì)將要設(shè)計(jì)的測(cè)試用例進(jìn)行優(yōu)先級(jí)估計(jì)的方法,該方法的最大特點(diǎn)就是可在設(shè)計(jì)測(cè)試用例之前使用,在以上基礎(chǔ)上,提出了測(cè)試工時(shí)受限的測(cè)試策略。
制定測(cè)試策略時(shí)需要考慮的因素有很多,下面只對(duì)測(cè)試工時(shí)、測(cè)試充分性展開(kāi)探討。
在本文中,測(cè)試工時(shí)表示分配給測(cè)試工作的時(shí)間,也指完成測(cè)試工作所需要的時(shí)間。測(cè)試工作包括測(cè)試策劃、測(cè)試設(shè)計(jì)和實(shí)現(xiàn)、測(cè)試執(zhí)行、測(cè)試總結(jié)。假設(shè)有一個(gè)測(cè)試項(xiàng)目,有m個(gè)全職測(cè)試人員,要求在n個(gè)工作日內(nèi)完成,每個(gè)工作日有t小時(shí)的有效工作時(shí)間,那么對(duì)這個(gè)測(cè)試項(xiàng)目的測(cè)試工時(shí)有
測(cè)試策略的制定必然受到分配給測(cè)試工作的時(shí)間的影響,如果分配給測(cè)試工作的時(shí)間少于完成測(cè)試工作所需要的時(shí)間,則需要對(duì)測(cè)試策略進(jìn)行必要的調(diào)整和優(yōu)化。測(cè)試需求直接決定了完成測(cè)試工作所需要的時(shí)間,測(cè)試需求直接決定了需要進(jìn)行哪些類(lèi)型的測(cè)試以及相應(yīng)的測(cè)試設(shè)計(jì)方法,及測(cè)試用例的最少數(shù)量。測(cè)試用例的設(shè)計(jì)執(zhí)行所需時(shí)間直接受到測(cè)試用例類(lèi)型、測(cè)試用例數(shù)量及單位測(cè)試用例的設(shè)計(jì)執(zhí)行時(shí)間的影響。
從測(cè)試設(shè)計(jì)角度上看,采用的測(cè)試類(lèi)型和測(cè)試用例設(shè)計(jì)方法,以及設(shè)計(jì)的有效測(cè)試用例數(shù)量,會(huì)影響到測(cè)試充分性。采用的測(cè)試類(lèi)型越多,不同測(cè)試用例設(shè)計(jì)方法設(shè)計(jì)出的有效測(cè)試用例數(shù)量越多,則能達(dá)到的測(cè)試覆蓋率越高,也越可能發(fā)現(xiàn)更多的潛在缺陷,從而更能保證測(cè)試的充分性。但是另外一方面,采用的測(cè)試類(lèi)型越多,測(cè)試用例數(shù)量越多,也會(huì)導(dǎo)致測(cè)試成本更高。因此,在測(cè)試實(shí)踐當(dāng)中,需要在測(cè)試充分性與測(cè)試成本之間尋找合適的平衡點(diǎn)。
假設(shè)測(cè)試發(fā)現(xiàn)的所有缺陷都被修復(fù),測(cè)試成本與有效測(cè)試用例數(shù)量直接相關(guān),則判斷有效測(cè)試用例數(shù)量是否足夠的一個(gè)方法是:潛在的遺留缺陷(即在測(cè)試中未被發(fā)現(xiàn)的潛在缺陷)導(dǎo)致的質(zhì)量風(fēng)險(xiǎn)成本≤測(cè)試成本,如圖1所示。
圖1 測(cè)試用例數(shù)量、測(cè)試成本與質(zhì)量風(fēng)險(xiǎn)成本的關(guān)系
在有限的測(cè)試工時(shí)中,如果依照測(cè)試類(lèi)型和相應(yīng)的測(cè)試方法設(shè)計(jì)所有的用例,則必然會(huì)消耗較多的寶貴的測(cè)試工時(shí),因此有必要對(duì)將要設(shè)計(jì)的測(cè)試用例進(jìn)行優(yōu)先級(jí)估計(jì),然后再有選擇地設(shè)計(jì)較高優(yōu)先級(jí)的測(cè)試用例。
目前,對(duì)于已設(shè)計(jì)或執(zhí)行的測(cè)試用例的優(yōu)先級(jí)研究較多[8-10],但是卻沒(méi)有適合在測(cè)試用例設(shè)計(jì)前就預(yù)估其優(yōu)先級(jí)的實(shí)用方法,為此假設(shè)每個(gè)測(cè)試用例被設(shè)計(jì)之前都有針對(duì)性的測(cè)試目標(biāo),通過(guò)專家經(jīng)驗(yàn)及實(shí)際測(cè)試經(jīng)驗(yàn),提出了測(cè)試用例優(yōu)先級(jí)的6個(gè)度量元(見(jiàn)表1)供參考,即被測(cè)目標(biāo)重要度、被測(cè)目標(biāo)復(fù)雜度、被測(cè)目標(biāo)緊迫度、用例重要度、預(yù)計(jì)用例的檢測(cè)缺陷能力、開(kāi)發(fā)團(tuán)隊(duì)信心度,然后依據(jù)這6個(gè)度量元去估算測(cè)試用例的優(yōu)先級(jí)。記這6個(gè)度量元分別為ap、ac、ae、tp、td、tc,則測(cè)試用例的優(yōu)先級(jí)p的計(jì)算方法如下
表1 測(cè)試用例優(yōu)先級(jí)的度量元權(quán)值
在制定測(cè)試計(jì)劃時(shí),進(jìn)行測(cè)試設(shè)計(jì)之前,需要依據(jù)測(cè)試需求確定相應(yīng)的測(cè)試類(lèi)型,提出測(cè)試的基本方法,估計(jì)可產(chǎn)生的各類(lèi)測(cè)試用例及其優(yōu)先級(jí)、測(cè)試用例數(shù)量以及單位測(cè)試用例所需的測(cè)試時(shí)間,然后進(jìn)行測(cè)試用例選擇,僅設(shè)計(jì)和執(zhí)行選中的測(cè)試用例,從而能夠在測(cè)試設(shè)計(jì)階段就力爭(zhēng)用最少的測(cè)試用例發(fā)現(xiàn)盡可能多的缺陷。
測(cè)試設(shè)計(jì)人員可依照“測(cè)試用例優(yōu)先級(jí)的度量元權(quán)值”(見(jiàn)表1)估算測(cè)試用例的優(yōu)先級(jí),然后依據(jù)經(jīng)驗(yàn)或者歷史測(cè)試數(shù)據(jù),估算出各測(cè)試目標(biāo)對(duì)應(yīng)的測(cè)試用例數(shù)量以及每個(gè)測(cè)試用例所需的測(cè)試時(shí)間,填寫(xiě)測(cè)試用例估計(jì)表(見(jiàn)表2)。
表2 測(cè)試用例估計(jì)表(示例)
完成測(cè)試用例估計(jì)后,測(cè)試用例可表示為
式中:TC——測(cè)試用例,ID——用例標(biāo)識(shí),SM——被測(cè)軟件模塊,TK——測(cè)試目標(biāo),即采用何種測(cè)試類(lèi)型及測(cè)試方法,測(cè)試相應(yīng)種類(lèi)的缺陷,SF——是否合法用例,MP——測(cè)試用例的優(yōu)先級(jí),TT——測(cè)試所需的時(shí)間。
依據(jù)測(cè)試用例優(yōu)先級(jí),以及設(shè)計(jì)、執(zhí)行這些測(cè)試用例所需的測(cè)試工時(shí),可以計(jì)算出整個(gè)測(cè)試所需的測(cè)試工時(shí)。假設(shè)可設(shè)計(jì)出i個(gè)測(cè)試用例,第i個(gè)測(cè)試用例的優(yōu)先級(jí)、所需測(cè)試時(shí)間分別為pi、ti,則這些測(cè)試用例所需的測(cè)試工時(shí)ts為
記可支配的測(cè)試工時(shí)為tp,依據(jù)tp與ts的大小關(guān)系,判斷是否需要進(jìn)行測(cè)試用例選擇:
(1)如果tp=ts,則表示可以按時(shí)完成預(yù)計(jì)的所有測(cè)試用例的設(shè)計(jì)和執(zhí)行。
(2)如果tp>ts,則表示可以提前完成預(yù)計(jì)的所有測(cè)試用例的設(shè)計(jì)和執(zhí)行,可以考慮是否補(bǔ)充更多的測(cè)試用例。
(3)如果tp<ts,則表示無(wú)法按時(shí)完成預(yù)計(jì)的所有測(cè)試用例的設(shè)計(jì)和執(zhí)行,需要通過(guò)測(cè)試用例的選擇來(lái)調(diào)整測(cè)試用例數(shù)量,以減少測(cè)試所需時(shí)間。
本文著重考慮第三種狀況,即無(wú)法在可支配的測(cè)試工時(shí)范圍內(nèi),按時(shí)完成預(yù)計(jì)的所有測(cè)試用例的設(shè)計(jì)和執(zhí)行。對(duì)于這種狀況,需要進(jìn)行測(cè)試用例選擇,然后僅設(shè)計(jì)和執(zhí)行選中的測(cè)試用例。
測(cè)試用例選擇策略如下:
(1)對(duì)每一個(gè)功能模塊,從其相應(yīng)的測(cè)試用例中,選擇一個(gè)優(yōu)先級(jí)最高的合法用例,從而確保每一個(gè)軟件功能至少被一個(gè)合法用例所覆蓋;
(2)按第一個(gè)策略選擇完測(cè)試用例后,優(yōu)先選擇優(yōu)先級(jí)高的測(cè)試用例,如果兩個(gè)測(cè)試用例的優(yōu)先級(jí)相同,則優(yōu)先選擇預(yù)計(jì)所需測(cè)試工時(shí)較少的那個(gè)。
假設(shè)可選測(cè)試用例的集合為T(mén),已選擇的測(cè)試用例的集合為S,已選擇用例的累計(jì)所需測(cè)試工時(shí)為ts,可支配的測(cè)試工時(shí)為tp,則上述測(cè)試策略對(duì)應(yīng)的算法如下:
(1)0→ts;
(2)計(jì)算各測(cè)試用例的優(yōu)先級(jí);
(3)將T中的測(cè)試用例按照被測(cè)軟件模塊分組,依次從每組測(cè)試用例中選擇最高優(yōu)先級(jí)的合法測(cè)試用例到S中(如果同組中有多個(gè)用例的優(yōu)先級(jí)并列第一,則從這些用例中隨機(jī)選擇一個(gè)),同時(shí)從T中刪除相應(yīng)測(cè)試用例;
(4)S中所有測(cè)試用例所需的測(cè)試工時(shí)→ts;
(5)如果ts≥tp或者T中的測(cè)試用例數(shù)為0,則算法終止,否則轉(zhuǎn)入(6);
(6)將T中的測(cè)試用例按照優(yōu)先級(jí)升序排序;
(7)選取T中的最后一個(gè)測(cè)試用例到S中,同時(shí)從T中刪除相應(yīng)測(cè)試用例,ts+該測(cè)試用例所需測(cè)試時(shí)間→ts;
(8)如果ts≥tp或者T中的測(cè)試用例數(shù)為0,則算法終止,否則轉(zhuǎn)入(7)。
需要說(shuō)明的是,如果已選中的用例所需測(cè)試工時(shí)遠(yuǎn)超可支配的測(cè)試工時(shí),則說(shuō)明測(cè)試工時(shí)嚴(yán)重不足,一定需要增加更多的可支配工時(shí)。另外,對(duì)未被選擇的測(cè)試用例,可能需要視情況決定是否進(jìn)行風(fēng)險(xiǎn)決策。假設(shè)單位測(cè)試工時(shí)的成本為c,則設(shè)計(jì)和執(zhí)行該測(cè)試用例的成本ct=c*ti,假設(shè)該測(cè)試用例預(yù)計(jì)所檢測(cè)的缺陷在軟件實(shí)際運(yùn)行中出現(xiàn)的概率為pt,該缺陷顯現(xiàn)導(dǎo)致的損失和修復(fù)成本為qt,如果ct<pt,則表示該測(cè)試用例值得設(shè)計(jì)和執(zhí)行。另外,如果有嚴(yán)格的測(cè)試內(nèi)容、測(cè)試類(lèi)型覆蓋要求,還需要驗(yàn)證選擇的測(cè)試用例是否完全覆蓋了測(cè)試內(nèi)容,是否有對(duì)應(yīng)必要測(cè)試類(lèi)型的測(cè)試用例。
以某辦公系統(tǒng)為實(shí)驗(yàn)對(duì)象,該辦公系統(tǒng)功能包括用戶登錄、系統(tǒng)管理(含部門(mén)管理、用戶管理、通知公告管理、消息管理等)、資源共享、考勤管理、假期管理等,其中用戶登錄、部門(mén)管理、用戶管理部分復(fù)用代碼庫(kù)中的代碼,其余部分為新編寫(xiě)的代碼。使用功能點(diǎn)估算法估計(jì)的系統(tǒng)規(guī)模為286FP。首先依據(jù)測(cè)試需求、計(jì)劃采用的測(cè)試類(lèi)型及測(cè)試設(shè)計(jì)方法,估算出預(yù)計(jì)產(chǎn)生的各類(lèi)測(cè)試用例的優(yōu)先級(jí)、數(shù)量、單位用例設(shè)計(jì)和執(zhí)行所需的工時(shí),形成測(cè)試用例估計(jì)表(見(jiàn)表3)。如果不進(jìn)行測(cè)試用例選擇,預(yù)計(jì)會(huì)產(chǎn)生1447個(gè)測(cè)試用例,完成所有測(cè)試工作大約需要142人時(shí)。
表3 測(cè)試用例估計(jì)(用戶登錄功能)
隨后,不進(jìn)行測(cè)試用例選擇,按照測(cè)試需求、計(jì)劃采用的測(cè)試類(lèi)型及測(cè)試方法,設(shè)計(jì)和執(zhí)行所有的測(cè)試用例。最后再依據(jù)測(cè)試用例估計(jì)表,假設(shè)事先進(jìn)行了測(cè)試用例選擇,則不同的測(cè)試用例選擇數(shù)的設(shè)計(jì)執(zhí)行時(shí)間(測(cè)試工時(shí),單位:人時(shí))、檢出缺陷數(shù)、單位測(cè)試用例的設(shè)計(jì)執(zhí)行時(shí)間(人時(shí)/用例)、單位測(cè)試用例檢出的缺陷數(shù)(檢出缺陷數(shù)/用例)、檢出缺陷數(shù)/人時(shí)的比較結(jié)果見(jiàn)表4。從表4可看出,分配給測(cè)試的時(shí)間越少,能選擇的測(cè)試用例數(shù)越少,但是按照測(cè)試用例的估計(jì)和選擇方法選擇出的測(cè)試用例,平均每個(gè)用例檢出了更多的缺陷,單位時(shí)間檢出的缺陷數(shù)也更多。
表4 不同的測(cè)試用例選擇數(shù)(示例)
選擇不同數(shù)量的測(cè)試用例時(shí),平均每個(gè)測(cè)試用例檢出的缺陷數(shù)的趨勢(shì)如圖2所示,利用本文的測(cè)試策略,確實(shí)選擇出了檢出缺陷能力更強(qiáng)的測(cè)試用例。
選擇不同數(shù)量的測(cè)試用例時(shí),檢出的各級(jí)缺陷數(shù)如圖3所示,在4個(gè)缺陷級(jí)別中,一級(jí)缺陷表示致命缺陷,二級(jí)缺陷表示嚴(yán)重缺陷,三級(jí)缺陷表示一般缺陷,四級(jí)缺陷表示不影響用戶使用的缺陷。在選擇出的測(cè)試用例數(shù)比較少時(shí),所選的測(cè)試用例檢出重大缺陷的能力較強(qiáng),但是也說(shuō)明,要想檢測(cè)出所有較重大的缺陷,測(cè)試用例數(shù)不能太少,也就是說(shuō)分配給測(cè)試工作的時(shí)間不能太少。
實(shí)驗(yàn)結(jié)果表明,所提出的測(cè)試工時(shí)受限的測(cè)試策略,能夠選擇出檢出缺陷能力更強(qiáng),尤其是檢出重大缺陷能力更強(qiáng)的測(cè)試用例,從而可以在適當(dāng)減少需設(shè)計(jì)的測(cè)試用例數(shù)量的基礎(chǔ)上,達(dá)到較好的測(cè)試效果。
圖2 單位測(cè)試用例檢出的缺陷數(shù)
圖3 選擇的測(cè)試用例檢出的各級(jí)缺陷數(shù)
在測(cè)試工時(shí)受限的情況,如何制定有效的測(cè)試策略是一個(gè)有待解決的現(xiàn)實(shí)問(wèn)題,為此提出了測(cè)試工時(shí)受限的基于測(cè)試用例優(yōu)先級(jí)的測(cè)試策略。該策略將測(cè)試用例按被測(cè)目標(biāo)重要度、被測(cè)目標(biāo)復(fù)雜度、被測(cè)目標(biāo)緊迫度、用例重要度、預(yù)計(jì)用例的檢測(cè)缺陷能力、開(kāi)發(fā)團(tuán)隊(duì)信心度等多種因素綜合考慮,計(jì)算出各類(lèi)測(cè)試用例的優(yōu)先級(jí),接著估算各類(lèi)測(cè)試用例的數(shù)量、設(shè)計(jì)和執(zhí)行單位用例所需的工時(shí),然后采用測(cè)試用例選擇方法,確保在有限的測(cè)試工時(shí)內(nèi),設(shè)計(jì)和執(zhí)行盡可能多的優(yōu)先級(jí)高的測(cè)試用例,且力保每個(gè)功能至少被一個(gè)合法測(cè)試用例所覆蓋。實(shí)驗(yàn)結(jié)果表明了該測(cè)試策略的有效性。
[1]CHEN Xiang,CHEN Jihong,JU Xiaolin,et al.Survey of test case prioritization techniques for regression testing[J].Journal of Software,2013,24(8):1695-1712(in Chinese).[陳翔,陳繼紅,鞠小林,等.回歸測(cè)試中的測(cè)試用例優(yōu)先排序技術(shù)述評(píng)[J].軟件學(xué)報(bào),2013,24(8):1695-1712.]
[2]Mei H,Hao D,Zhang LM,et al.A static approach to prioritizing JUnit test cases[J].IEEE Trans on Software Engineering,2012,38(6):1258-1275.
[3]YANG Guanghua,BAO Yang,LI Donghong,et al.Test case prioritization based on requirement[J].Computer Engineering and Design,2011,32(8):2724-2728(in Chinese).[楊廣華,包陽(yáng),李東紅,等.基于需求的測(cè)試用例優(yōu)先級(jí)排序[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(8):2724-2728.]
[4]ZHANG Xiaofang,CHEN Lin,XU Baowen,et al.Survey of test suite reduction problem[J].Journal of Frontiers of Computer Science and Technology,2008,2(3):235-247(in Chinese).[章曉芳,陳林,徐寶文,等.測(cè)試用例集約簡(jiǎn)問(wèn)題研究及其進(jìn)展[J].計(jì)算機(jī)科學(xué)與探索,2008,2(3):235-247.]
[5]Yoo S,Harman M.Regression testing minimization,selection and prioritization:A survey[J].Software Testing,Verification &Reliability,2012,22(2):67-120.
[6]ZHANG Deping,NIE Changhai,XU Baowen.Acceleration testing method of safety-critical software with testing resource constraint[J].Computer Science,2009,36(5):138-141(in Chinese).[張德平,聶長(zhǎng)海,徐寶文.測(cè)試資源受約束的安全關(guān)鍵軟件加速測(cè)試方法[J].計(jì)算機(jī)科學(xué),2009,36(5):138-141.]
[7]ZHANG Deping,ZHA Rijun.Risk decision approach to test allocation problem in partition testing[J].Application Research of Computers,2010,27(12):4536-4540(in Chinese).[張德平,查日軍.劃分測(cè)試用例選擇的風(fēng)險(xiǎn)決策方法[J].計(jì)算機(jī)應(yīng)用研究,2010,27(12):4536-4540.]
[8]DAI Ruxin,GU Chunhua.Advanced test case prioritization for black box testing[J].Computer Engineering and Design,2010,31(20):4343-4346(in Chinese).[戴如昕,顧春華.用于黑盒測(cè)試的測(cè)試用例優(yōu)先級(jí)改進(jìn)算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(20):4343-4346.]
[9]PAN Weifeng,LI Bing,MA Yutao.Test case prioritization based on complex software networks[J].Acta Electronica Sinica,2012,40(12):2456-2465(in Chinese).[潘偉豐,李兵,馬于濤.基于復(fù)雜軟件網(wǎng)絡(luò)的回歸測(cè)試用例優(yōu)先級(jí)排序[J].電子學(xué)報(bào),2012,40(12):2456-2465.]
[10]Pravin A,Srinivasan S.Effective test case selection and prioritization in regression testing[J].Journal of Computer Science,2013,9(5):654-659.