隨著敏捷開發(fā)過程流行,敏捷
測試方法也開始受到更多的關(guān)注。同時,
軟件測試用例的選擇和生成也是軟件測試中的一個重要研究領(lǐng)域,測試用例的質(zhì)量將直接決定軟件測試的科學(xué)性和有效性。本文基于集成測試框架FIT(Framework for Integrated Test),并結(jié)合兩兩組合覆蓋的測試用例自動生成
技術(shù),實現(xiàn)從接口參數(shù)邊界值的確定,到以HMTL形式顯示集成測試結(jié)果過程的半自動化過程。
1 研究背景
隨著敏捷開發(fā)的流行,傳統(tǒng)的軟件測試也在發(fā)生著翻天覆地的變化。傳統(tǒng)的軟件測試已不能適應(yīng)當(dāng)前的開發(fā)方式,急需新的理論和方法論來尋求改變,并以此來推進(jìn)軟件工程的進(jìn)步。本文將關(guān)注與敏捷測試相關(guān)理論與技術(shù)。
1.1 敏捷技術(shù)方法與分析
我們現(xiàn)在面對著飛速變化的業(yè)務(wù)和技術(shù)環(huán)境。在這樣一個環(huán)境中,傳統(tǒng)的軟件開發(fā)方法所認(rèn)為需求需要在項目初期分析清楚并且保持穩(wěn)定的想法是行不通的。不能快速持續(xù)的將需求變化融合到軟件中就意味著對業(yè)務(wù)環(huán)境反映遲鈍,最終導(dǎo)致業(yè)務(wù)上的失敗。同樣,新技術(shù)不斷地涌現(xiàn),也要求軟件產(chǎn)品的代碼時刻處于一種良好的狀態(tài),能夠適應(yīng)各種調(diào)整。于是,敏捷開發(fā)過程應(yīng)運而生。
2001年以Kent Beck,Martin Fowler,Robert C.Martin及Ward Cunningham等為首的一些軟件工程的專家成立了“敏捷聯(lián)盟”(Agile Alliance),并提出了著名的敏捷宣言,即敏捷過程的價值觀:
? 人和交互重于過程和工具。
? 可以工作的軟件重于求全責(zé)備的文檔。
? 客戶合作重于合同談判。
? 隨時應(yīng)對變化重于循規(guī)蹈矩。
這些價值觀是專家們在求同存異的基礎(chǔ)上對敏捷技術(shù)的最基本的總結(jié),也是他們在敏捷技術(shù)方面達(dá)成的最大共識,其反映的是兩個更深層的特點:
1) 敏捷型方法是“適應(yīng)性”而非“預(yù)見性”
工程方法試圖對一個軟件開發(fā)項目在很長的時間跨度內(nèi)做出詳細(xì)的計劃, 然后依計劃進(jìn)行開發(fā)。這類方法在一般情況下工作良好,但(需求、環(huán)境等) 有變化時就不太靈了。因此它們本質(zhì)上是拒絕變化的。而敏捷型方法則歡迎變化。其實,它們的目的就是成為適應(yīng)變化的過程,甚至能允許改變自身來適應(yīng)變化。
2) 敏捷型方法是“面向人”的,而非“面向過程”的
工程型方法的目標(biāo)是定義一個過程,不管是誰用都工作。而敏捷型方法 則認(rèn)為沒有任何過程能代替開發(fā)組的技能,過程起的作用是對開發(fā)組的 工作提供支持。
敏捷聯(lián)盟還以這4個價值觀為原則,提出了敏捷過程的12條指導(dǎo)原則,以期能更好的指導(dǎo)人們了解敏捷過程。
敏捷開發(fā)過程,指的就是一種與傳統(tǒng)的瀑布模型開發(fā)和CMM(Capability Maturity Model,軟件開發(fā)的能力成熟度模型)所追求的嚴(yán)謹(jǐn)?shù)奈臋n制度截然相反的開發(fā)過程。這一開發(fā)過程注重開發(fā)團(tuán)隊和成員之間的關(guān)系而不是以開發(fā)的進(jìn)程和使用的工具為重點,注重所開發(fā)的軟件產(chǎn)品而不是追求廣泛的文檔編制,注重開發(fā)過程中與客戶的協(xié)同工作而不是以簽訂合同的談判為工作的核心,注重在開發(fā)過程中隨時調(diào)整計劃而不是同意完全遵循某一開發(fā)計劃,以實現(xiàn)所謂開發(fā)過程的“敏捷”。
1.2 敏捷測試及其研究現(xiàn)狀
敏捷方法的發(fā)展,打破了傳統(tǒng)的瀑布開發(fā)模型,改變了整個軟件開發(fā)過程中的角色和定位。由于在敏捷開發(fā)運動的初期,主要依靠開發(fā)人員來進(jìn)行推動。很多測試人員不了解敏捷方法,仍然習(xí)慣了按照傳統(tǒng)的瀑布模式進(jìn)行軟件測試,即按照V模型所指導(dǎo)的步驟進(jìn)行測試,保證軟件與需求、設(shè)計的相符合,但這樣很容易形成了一種測試思維的定勢。當(dāng)“用戶需求不明確”、“需求變化較快”時,沿用傳統(tǒng)測試方法的測試人員將變的無所適從。
目前比較流行的敏捷測試方法有測試驅(qū)動開發(fā)和相關(guān)環(huán)境驅(qū)動測試等。還有很多國外知名專家按照“敏捷”的原理為軟件測試開發(fā)了相應(yīng)的測試框架,其中最著名的就是Kent Beck等提出的xUnit系列單元測試框架和Ward Cunningham等提出的Framework for Integrated Test(FIT)集成測試框架。xUnit系列提出的比較早,目前已有一套完善的測試工具和方法論來支持了,適用于各種語言的單元測試。FIT框架是當(dāng)前國內(nèi)外的研究重點,很多知名的測試專家如Lisa Crispin等都在如何使用FIT進(jìn)行有效的軟件測試方面得出了很多的研究成果。
1.3 基于接口參數(shù)的測試用例自動生成算法
在軟件測試工作中,由于輸入、輸出空間,特別是輸入空間的無限性,使得無法對軟件進(jìn)行全面的測試。因此,如何從大量的輸入數(shù)據(jù)中挑選適量的具有代表性、典型性的數(shù)據(jù),特別是怎樣用較少的測試用例對軟件進(jìn)行較全面的測試是測試人員面臨的一大難題。
測試用例的選擇無論是對黑箱測試還是對白箱測試都起著關(guān)鍵的作用,決定著軟件測試的質(zhì)量和效果。所謂測試用例選擇就是指從所有的可用測試用例中選出少量典型的測試用例,以達(dá)到對測試域的最大限度覆蓋。多年來,許多研究者對之進(jìn)行了廣泛而深入的研究,并取得了許多研究成果。常用的基于接接口參數(shù)的黑箱測試用例選擇方法是對系統(tǒng)每個接口參數(shù)采用邊際值分析法和等價類劃分法等選取一組典型的值,然后在這些取值組合中隨機選取一組測試用例,或者使用一些啟發(fā)式方法從中進(jìn)行篩選。但這些方法的缺點是帶有主觀傾向性,不具有普遍性。
2 基于敏捷測試的相關(guān)技術(shù)討論
2.1 FIT框架及應(yīng)用
在敏捷開發(fā)過程中,軟件測試是至關(guān)重要的,尤其是在最為流行的敏捷開發(fā)過程:極限編程(XP)中顯的更為突出。誠然,所有的過程都提到測試,但一般都不怎么強調(diào)。可是XP將測試作為開發(fā)的基礎(chǔ),要求每個程序員寫一段源碼時都得寫相應(yīng)的測試碼。這些測試片段不斷地積累并被整合到系統(tǒng)中。這樣的過程會產(chǎn)生一個高度可靠的建造平臺,為進(jìn)一步開發(fā)提供了良好的基礎(chǔ)。
但是,即使是單元測試工具JUnit也存在一些缺點:比如JUnit里要進(jìn)行數(shù)據(jù)填充,但是數(shù)據(jù)經(jīng)常改變,使維護(hù)工作變成了可怕的噩夢,測試不同的組合,需要不同的數(shù)據(jù),這也許會使測試工作變得日益復(fù)雜。而目前的集成測試又缺乏有效的方法論,不能自動化,測試的質(zhì)量比較依賴測試人員的水平。
Framework for Integrated Test(簡稱FIT)就是一個用于增強交流和協(xié)作的工具。FIT創(chuàng)建了一個在客戶和程序員之間的反饋循環(huán)。FIT讓客戶和測試人員可以使用諸如Microsoft Office之類的工具來給出程序應(yīng)當(dāng)如何表現(xiàn)的例子——而無需成為直接編碼的程序員。FIT自動針對實際的程序檢測那些例子,這樣就在業(yè)務(wù)世界和軟件工程世界之間建立了一個簡單而且有效的橋梁。
FIT給予了客戶和程序員一個關(guān)于軟件的精確交流的方法。客戶所給的具體的例子讓程序員能深刻理解將要構(gòu)建的產(chǎn)品。程序員的對于裝置的工作和軟件可以讓客戶給出不同的例子進(jìn)行試驗來獲取對于軟件如何真正工作更深入的了解。這樣通過一起工作,整個團(tuán)隊可以學(xué)會更多關(guān)于產(chǎn)品的內(nèi)容并產(chǎn)生更好的結(jié)果。
2.2 測試用例自動生成技術(shù)
正交試驗設(shè)計起源于科學(xué)試驗,它由田口玄一博士在1949年創(chuàng)立,并于60年代初從日本傳人中國。它應(yīng)用依據(jù)Galois理論導(dǎo)出的正交表,從大量試驗條件中挑選出適量的、有代表性的條件來合理地安排試驗。運用這種方法安排的試驗具有“均勻分散、整齊可比”的特點。“均勻分散”性使試驗點均衡地分布在試驗范圍內(nèi),讓每個試驗點有充分的代表性;“整齊可比”性使試驗結(jié)果的分析十分方便,可以估計各因素對指標(biāo)的影響,找出影響事物變化的主要因素。
但正交試驗設(shè)計仍然存在著一些有待解決的弊端:比如正交表難以構(gòu)造,因素、水平過多時測試用例數(shù)目還是過多等。所以一些專家又提出一種基于對接口參數(shù)進(jìn)行組合覆蓋的黑箱測試用例自動生成算法模型,據(jù)此來得到一個對所有接口參數(shù)進(jìn)行兩兩組合覆蓋的測試用例表。這種方法有著類似正交試驗設(shè)計的特點,實際上,在特定情況下,這種算法模型得出的測試用例表就是正交表。
3 技術(shù)實現(xiàn)的考慮
3.1 基于FIT框架對軟件進(jìn)行集成測試
使用基于FIT框架的開源FIT工具來實現(xiàn)真正的測試先行開發(fā)過程,并讓客戶、需求提報工程師、開發(fā)人員、以及測試人員進(jìn)行協(xié)同工作,達(dá)到需求更精準(zhǔn)、減少需求更改、測試數(shù)據(jù)與JUnit單元測試代碼分離的目的,讓這一切更簡潔、更易于維護(hù)。
將根據(jù)以下步驟進(jìn)行研究:
1) 使用FIT框架進(jìn)行實際項目測試的實踐,從中提煉出一套使用FIT框架進(jìn)行集成測試的通用方法。
2) 通過實踐,對FIT框架進(jìn)行合理的改進(jìn)和拓展,結(jié)合JUnit單元測試,現(xiàn)實單元測試和集成測試的無縫連接,達(dá)到提高軟件質(zhì)量的效果。
3) 在理論研究和實踐的基礎(chǔ)上,規(guī)約出適用于單元測試和集成測試的通用方法。
3.2 整合測試用例的自動生成技術(shù)至FIT
按照敏捷過程中“簡單”原則,本課題將編寫一個輔助接口測試的工具,用來自動產(chǎn)生少而有效的測試用例,以達(dá)到對測試域的最大限度覆蓋。通過該工具產(chǎn)生的測試用例表,能符合FIT框架的要求,并可被FIT所執(zhí)行而得到HTML形式的可視化的測試結(jié)果。通過這種方式,大大增加了測試的自動化。
為了實現(xiàn)該目標(biāo),將按照以下步驟進(jìn)行研究:
1) 查看“正交試驗設(shè)計方法”的原理及其資料,了解測試用例生成的規(guī)則。
2) 查閱兩兩覆蓋測試用例生成的相關(guān)算法,并根據(jù)算法用程序?qū)崿F(xiàn),進(jìn)行實踐研究。
3) 根據(jù)實踐研究,對兩兩覆蓋測試用例進(jìn)行改進(jìn),以期能更高效的實現(xiàn)測試用例的生成。
4) 修改依據(jù)改進(jìn)后的算法實現(xiàn)的測試工具,使其輸入輸出符合FIT框架的要求。在此基礎(chǔ)上,把此工具集成到FIT框架中。
4 小結(jié)
本文討論了當(dāng)前軟件測試中的兩大重要研究領(lǐng)域:敏捷測試方法和測試用例的選擇與生成技術(shù)。進(jìn)一步的工作是,根據(jù)“敏捷”的集成測試框架FIT需要人工構(gòu)造表格形式的數(shù)據(jù)作為輸入的前提,深入研究如何自動生成FIT需要的表格數(shù)據(jù)?再對FIT進(jìn)行擴展,為FIT嵌入測試用例表格自動生成功能。其中測試用例集的生成將依據(jù)各參數(shù)兩兩覆蓋的原則,以求達(dá)到對測試域的最大限度覆蓋