張燕華,賈永娜
(1.西藏民族學(xué)院信息工程學(xué)院,陜西 咸陽(yáng) 712082;2.思特沃克軟件技術(shù)(北京)有限公司,北京 100007)
迭代開(kāi)發(fā)模式相對(duì)于傳統(tǒng)的開(kāi)放模式,具有可以控制項(xiàng)目風(fēng)險(xiǎn)、允許需求變動(dòng)、保證項(xiàng)目開(kāi)放進(jìn)度等優(yōu)點(diǎn),使其在軟件項(xiàng)目開(kāi)發(fā),尤其是商業(yè)軟件項(xiàng)目開(kāi)發(fā)中得到了廣泛的應(yīng)用[1]。目前雖然大規(guī)模的軟件項(xiàng)目開(kāi)發(fā)都采用迭代的開(kāi)發(fā)模式來(lái)降低項(xiàng)目風(fēng)險(xiǎn),但是還沒(méi)有形成一套完整的關(guān)于迭代開(kāi)發(fā)模式下自動(dòng)化測(cè)試的理論和方法。為打破這種軟件測(cè)試技術(shù)和理論落后于軟件開(kāi)發(fā)的現(xiàn)狀,對(duì)迭代開(kāi)發(fā)模式下的自動(dòng)化測(cè)試技術(shù)的研究就非常有必要。
為降低測(cè)試腳本的維護(hù)開(kāi)銷(xiāo),使自動(dòng)化測(cè)試在迭代開(kāi)發(fā)模式下更加有效,把構(gòu)件復(fù)用技術(shù)、分離邏輯和實(shí)現(xiàn)等知識(shí)應(yīng)用到軟件的自動(dòng)化測(cè)試框架設(shè)計(jì)之中,提出了迭代模式中基于可復(fù)用構(gòu)件的自動(dòng)化測(cè)試框架(automation test framework based on reused component in iterative model,AFRI)。AFRI借鑒了現(xiàn)有測(cè)試框架的優(yōu)點(diǎn),提出了更加適合迭代開(kāi)發(fā)模式的測(cè)試流程和設(shè)計(jì)方法,吸收復(fù)用技術(shù)、分離邏輯和實(shí)現(xiàn)以及測(cè)試數(shù)據(jù)與測(cè)試腳本等思想,提高了測(cè)試框架的復(fù)用性、可維護(hù)性,降低了后期的開(kāi)發(fā)和維護(hù)成本。
在迭代開(kāi)發(fā)模式中,往往把整個(gè)項(xiàng)目分解為多個(gè)階段性的小迭代。尤其是在需求變化快、工期緊的商業(yè)軟件開(kāi)發(fā)環(huán)境中,每次迭代之后,都要進(jìn)行全面的測(cè)試[2-4]。所以,測(cè)試工作成為迭代開(kāi)發(fā)項(xiàng)目整體質(zhì)量和進(jìn)度控制的關(guān)鍵點(diǎn)。測(cè)試工作的每個(gè)環(huán)節(jié)都要有很好的繼承性和可復(fù)用性,而復(fù)用技術(shù)按照可復(fù)用的抽象程度,可以分為代碼復(fù)用、設(shè)計(jì)的復(fù)用、分析的復(fù)用、測(cè)試信息的復(fù)用4個(gè)級(jí)別。
本文提出的可復(fù)用技術(shù)涉及測(cè)試過(guò)程中的許多環(huán)節(jié),例如對(duì)測(cè)試用例和測(cè)試數(shù)據(jù)的復(fù)用,以及對(duì)自動(dòng)化測(cè)試框架中測(cè)試腳本的復(fù)用,這都是為了與迭代開(kāi)發(fā)模式的特性保持一致。
迭代模式中基于可復(fù)用構(gòu)件的測(cè)試框架AFRI主要分為元素層、管理層、腳本層、集成層4層,其結(jié)構(gòu)示意如圖1所示。
圖1 AFRI系統(tǒng)結(jié)構(gòu)圖
1.1.1 元素層
該層的主要作用是建立測(cè)試腳本和待測(cè)程序中界面元素之間的聯(lián)系。通過(guò)把實(shí)際的界面元素抽象到元素層,可以使測(cè)試人員通過(guò)調(diào)用元素層中的對(duì)象,來(lái)操作待測(cè)程序中的界面元素,從而實(shí)現(xiàn)工作分工。如果開(kāi)發(fā)和測(cè)試遵守統(tǒng)一的界面標(biāo)準(zhǔn),則在每次迭代的過(guò)程中,軟件開(kāi)發(fā)和界面元素的提取工作可以同時(shí)進(jìn)行。當(dāng)待測(cè)程序界面有所改動(dòng)時(shí),只要改動(dòng)元素層中被改動(dòng)的界面元素對(duì)象就可以很快地適應(yīng)新的需求。
1.1.2 管理層
管理層的作用是為元素層中的對(duì)象定義相應(yīng)的操作接口,例如:對(duì)dropdownlist的點(diǎn)擊,以及對(duì)其中item的選擇動(dòng)作;對(duì)文本編輯框的輸入、粘貼、刪除、全選等編輯動(dòng)作。管理層的接口與元素層對(duì)象相互對(duì)應(yīng),每個(gè)元素都應(yīng)該有自己的操作管理集合,但不一定是一對(duì)一的關(guān)系,要根據(jù)具體情況對(duì)管理層的操作接口進(jìn)行分類(lèi),權(quán)衡每個(gè)管理集合的操作范圍和種類(lèi)。管理接口完成后,可在后期的測(cè)試工作中得到復(fù)用。由于每種界面元素的操作方式是一定的,即管理層提供的接口是固定的,腳本層中不同的測(cè)試腳本可能會(huì)操作同一個(gè)界面元素,這種重復(fù)的操作通過(guò)復(fù)用管理層中相應(yīng)的操作接口即可完成。
1.1.3 腳本層
腳本層的作用是根據(jù)前期設(shè)計(jì)好的測(cè)試用例,完成對(duì)被測(cè)軟件的功能和業(yè)務(wù)邏輯的驗(yàn)證。腳本層包括測(cè)試數(shù)據(jù)、場(chǎng)景測(cè)試腳本和測(cè)試結(jié)果驗(yàn)證腳本3部分。測(cè)試數(shù)據(jù)集合不但要提供測(cè)試腳本需要的輸入數(shù)據(jù),同時(shí)也要提供測(cè)試結(jié)果校驗(yàn)數(shù)據(jù)。一個(gè)場(chǎng)景測(cè)試腳本只是完成一個(gè)特定的測(cè)試場(chǎng)景。整個(gè)過(guò)程中,測(cè)試腳本從測(cè)試數(shù)據(jù)文件內(nèi),讀取測(cè)試數(shù)據(jù),然后調(diào)用管理層中操作相關(guān)界面元素的管理接口,完成測(cè)試用例所描述的操作序列,最后通過(guò)測(cè)試結(jié)果校驗(yàn)?zāi)_本對(duì)測(cè)試結(jié)果進(jìn)行校驗(yàn)。
1.1.4 集成層
集成層的主要功能是根據(jù)不同測(cè)試階段的測(cè)試目的集成不同的測(cè)試腳本。例如:冒煙測(cè)試,只需要從宏觀(guān)上驗(yàn)證被測(cè)程序的基本功能,其對(duì)應(yīng)的測(cè)試腳本集合相對(duì)較小,可設(shè)為{a1,a2,a3,a4,…,ak};而集成測(cè)試需要驗(yàn)證被測(cè)程序各個(gè)功能模塊集成后的功能和性能,其測(cè)試腳本集合除了要包含每個(gè)模塊的功能測(cè)試腳本外,還要包含驗(yàn)證各個(gè)模塊之間接口的功能測(cè)試腳本,可以設(shè)為{a4,a5,a6,…ak,…an},且有 n>k,但同時(shí),這兩個(gè)測(cè)試集合都有共同的測(cè)試腳本集合{a4,a5,a6,…ak},所以不需要重復(fù)的開(kāi)發(fā)測(cè)試腳本{a4,a5,a6,…ak},只需要根據(jù)不同的測(cè)試目的,從腳本層中選擇需要的測(cè)試腳本組成測(cè)試腳本集合。由此可見(jiàn),腳本層在后期的測(cè)試工作中也得到了復(fù)用。
測(cè)試的實(shí)施過(guò)程要從需求說(shuō)明書(shū)開(kāi)始[5]。根據(jù)需求說(shuō)明書(shū)設(shè)計(jì)軟件功能說(shuō)明,然后制定測(cè)試計(jì)劃、設(shè)計(jì)測(cè)試用例、開(kāi)發(fā)測(cè)試腳本,最后進(jìn)行集中測(cè)試和缺陷管理。在迭代開(kāi)發(fā)模式中,測(cè)試工作也是迭代進(jìn)行的?;贏(yíng)FRI系統(tǒng)進(jìn)行測(cè)試的流程如圖2所示。
圖2 基于A(yíng)FRI的測(cè)試流程圖
迭代開(kāi)發(fā)過(guò)程中,軟件的功能說(shuō)明和用戶(hù)需求,隨著每次的迭代而逐漸完善和增加,而在迭代比較頻繁的開(kāi)發(fā)中,需求的變動(dòng)也是經(jīng)常的;所以,測(cè)試用例的可復(fù)用性也至關(guān)重要[6-7]。本文針對(duì)迭代開(kāi)發(fā)中以功能界面為基礎(chǔ)的特點(diǎn),提出了以被測(cè)軟件界面元素為基本單位,基于UML順序圖模型的測(cè)試用例生成方法。該方法不但能夠在每次的迭代中復(fù)用前期迭代中產(chǎn)生的界面組件,還可以復(fù)用該界面組件對(duì)應(yīng)的測(cè)試數(shù)據(jù)。
在順序圖中,場(chǎng)景被定義為在相互交互的對(duì)象間傳遞的一個(gè)消息序列[8],每個(gè)消息序列代表用例的一個(gè)可能的事件流。在順序圖中可以詳細(xì)地說(shuō)明前置條件和后置條件,以及一個(gè)消息序列涉及到的參數(shù),如界面元素,而這些參數(shù)序列又可以產(chǎn)生一個(gè)或多個(gè)描述測(cè)試場(chǎng)景的有向無(wú)環(huán)圖。例如,一個(gè)成績(jī)錄入系統(tǒng)中,老師登陸系統(tǒng),并更改某個(gè)學(xué)生成績(jī)的操作序列,可以用如圖3所示的UML順序圖表示。
圖3 更改成績(jī)操作順序圖
基于UML順序圖生成測(cè)試用例的過(guò)程包括:按照功能說(shuō)明畫(huà)出完整的順序圖(包括前置條件、后置條件、約束條件、消息序列,以及參數(shù)等信息),根據(jù)順序圖中的信息得到所有測(cè)試場(chǎng)景有向無(wú)環(huán)圖(尤其是每個(gè)消息序列中,每個(gè)參數(shù)所對(duì)應(yīng)的測(cè)試數(shù)據(jù)),采用兩因素組合覆蓋的方式遍歷整個(gè)測(cè)試場(chǎng)景有向無(wú)環(huán)圖,最后生成測(cè)試用例。由圖3的部分操作信息所生成的測(cè)試場(chǎng)景有向無(wú)環(huán)圖如圖4所示。
圖4主要描述了圖3中的login和search事件所生成的測(cè)試場(chǎng)景的有向無(wú)環(huán)圖,主要驗(yàn)證login和search的功能點(diǎn)。對(duì)于change和browse事件的測(cè)試場(chǎng)景生成方法是完全相同的。圖中節(jié)點(diǎn)分為4類(lèi):1,0,-1,-2,分別對(duì)應(yīng)該層界面元素可以選取的 4種測(cè)試數(shù)據(jù)集合,其中只有1代表有效的測(cè)試數(shù)據(jù)。樹(shù)的每一層都描述了一個(gè)界面元素所對(duì)應(yīng)的測(cè)試數(shù)據(jù),而對(duì)于按鈕節(jié)點(diǎn),只有在前面的輸入信息組件中輸入有效的數(shù)據(jù)才可以通過(guò),其他無(wú)效的輸入都不會(huì)通過(guò)按鈕節(jié)點(diǎn)到達(dá)下一層。例如,對(duì)于password層,只有有效數(shù)據(jù)1連接到下一層,而無(wú)效數(shù)據(jù)-1和空值0都不可能成功登陸,所以沒(méi)有一條連到下層的線(xiàn)段。這樣,就可以過(guò)濾掉無(wú)效輸入數(shù)據(jù)所產(chǎn)生的組合序列,從而大大減少測(cè)試用例集合中有效測(cè)試用例的數(shù)量。
圖4 相應(yīng)測(cè)試場(chǎng)景的有向無(wú)環(huán)圖
以某軟件公司的軟件M為測(cè)試對(duì)象,驗(yàn)證了AFRI的可行性。采用Douglas Hoffman所提出的自動(dòng)化收益分析方法,充分考慮到了除了測(cè)試工作之外的其他額外花銷(xiāo)。
式中:ΔBa——自動(dòng)化測(cè)試相對(duì)于手工測(cè)試的額外回報(bào)。
ΔCa——自動(dòng)化測(cè)試相對(duì)于手工測(cè)試的額外支出。
使用AFRI系統(tǒng)進(jìn)行自動(dòng)化測(cè)試的收益情況,可以通過(guò)圖5直觀(guān)地表示。
從圖5中可以看出,使用AFRI系統(tǒng)進(jìn)行自動(dòng)化測(cè)試在第一次發(fā)布時(shí),收益為0.7712,入不敷出,還沒(méi)有收益;但在后面的迭代過(guò)程中,自動(dòng)化測(cè)試表現(xiàn)出了較好的效益,而且隨著自動(dòng)化測(cè)試復(fù)用次數(shù)的增加,效益逐漸增加,并趨于平緩。這說(shuō)明使用AFRI系統(tǒng)進(jìn)行自動(dòng)化測(cè)試,可以在后期的迭代中得到更高的收益,尤其是測(cè)試構(gòu)件復(fù)用率高、功能需求變動(dòng)較少的情況。但在測(cè)試腳本變的龐大時(shí),收益的增長(zhǎng)幅度就變小了,這是由后期的測(cè)試腳本維護(hù)量變大、自動(dòng)化測(cè)試固定支出增多等原因造成的??蚣茉O(shè)計(jì)開(kāi)發(fā)活動(dòng)是一個(gè)迭代的、逐步遞增的過(guò)程,好的框架一般是多次迭代及辛苦努力的結(jié)晶。要得到更好的收益,需要根據(jù)具體的測(cè)試環(huán)境進(jìn)行多次的迭代開(kāi)發(fā)和改進(jìn)。
圖5 基于A(yíng)FRI的自動(dòng)化測(cè)試收益分析圖
AFRI為自動(dòng)化測(cè)試提供了一個(gè)有效框架,尤其是對(duì)迭代開(kāi)發(fā)模式中的自動(dòng)化測(cè)試工作具有較強(qiáng)的理論價(jià)值和實(shí)際意義。通過(guò)測(cè)試過(guò)程中得到的實(shí)際測(cè)試數(shù)據(jù),使用目前成熟的自動(dòng)化測(cè)試收益分析方法,證明了迭代開(kāi)發(fā)模式中AFRI系統(tǒng)進(jìn)行自動(dòng)化測(cè)試收到了很好的效益,可以達(dá)到一次開(kāi)發(fā)、長(zhǎng)期收益的效果。
[1]Paul C J.軟件測(cè)試[M].北京:機(jī)械工業(yè)出版社,2003.
[2]朱菊,王志堅(jiān),楊雪.基于數(shù)據(jù)驅(qū)動(dòng)的軟件自動(dòng)化測(cè)試框架[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(5):68-70.
[3]古樂(lè),史九林.軟件測(cè)試技術(shù)概論[M].北京:清華大學(xué)出版社,2004:216-217.
[4]Chen J J, Subramaniam S, GUI A.Environment to manipulate FSMs for testing GUI-based applications in java [C]∥Proceedings of the 34th Hawaii International Conference on System Sciences,2001:1-10.
[5]Burnstein I,Suwanasart T,Carlson C.Developing a testing maturity model:Part I[J].Journal of Defense Software Engineering,1996,9(8):21-24.
[6]Kuhn D R,Reilly M J.An investigation of the applicability of design of experiments to software testing[C]∥Proceedings of the 27th Annual NASA Goddard/IEEE Software Engineering Workshop,2003:4-6.
[7]黃雨田,聶麗琴,段富,等.用例需求分析技術(shù)的應(yīng)用[J].太原理工大學(xué)學(xué)報(bào),2005,36(2):224-227.
[8]飛思科技產(chǎn)品研發(fā)中心.實(shí)用軟件測(cè)試方法與應(yīng)用[M].北京:電子工業(yè)出版社,2003.