基於分詞搜尋的測試用例複用研究論文
基於分詞搜尋的測試用例複用研究論文
摘 要 隨著軟體行業快速發展,軟體功能的複雜程度隨之提高,軟體質量逐漸受到重視。在軟體的整個生命週期中,軟體測試是一個非常重要的環節。軟體質量在很大程度上由軟體測試的完整程度所決定。然而,隨著軟體複雜度的提高,軟體測試的工作成本在不斷增加。為了減少測試中的冗餘現象,提高軟體測試的效率,測試用例複用技術被應用於各個軟體測試環節。本文建立了一套測試用例管理系統,透過統一儲存並管理測試用例,提出將分詞技術應用於測試用例複用查詢,提高測試用例查詢結果的有效性和可複用性。
關鍵詞 軟體測試,測試用例,複用,分詞
0 引言
軟體測試是在規定的條件下對程式進行操作,以發現程式錯誤,由此來衡量軟體質量,並對其是否能滿足設計要求進行評估的過程。作為軟體生命週期中的重要環節,其成敗直接決定著軟體的最終質量。軟體測試工作不僅保證了軟體質量,而且降低了日後維護成本。隨著我國軟體產業的蓬勃發展以及對軟體質量的重視,軟體測試也逐漸受到軟體企業的關注,正逐步成為一個新興的產業。測試用例是為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,用於測試某個程式路徑或核實是否滿足某個特定需求。
隨著軟體規模越來越龐大,軟體測試的工作量也與日俱增。軟體測試過程中,測試用例的設計是軟體測試過程的核心,直接影響了軟體測試的效率。測試設計的好快直接決定著測試結果及其成效,測試用例是最有可能發現軟體錯誤的測試資料和流程的集合。測試用例複用是將已執行過的測試用例重複使用或改進使用於不同的軟體或軟體測試階段中,以此來降低測試用例設計環節的工作成本。為了提高軟體測試的效率,測試用例複用技術被廣泛地應用於各類軟體測試的設計和迴歸測試階段,用於減少測試設計階段的成本,以縮短測試周期,提高測試效率。本文透過對可複用測試用例的收集以及分析,提出了一種以行業領域和基於分詞搜尋策略的測試用例複用思路,以提高測試用例的複用率。但是當測試用例管理系統中的測試用例數量過於龐大時,則不利於測試用例的篩選,因此有必要設計了推薦演算法來按照一定規則對可能被複用的測試用例進行排序推薦。
1 測試用例複用研究
1.1 測試用例複用的概念
測試用例複用是指測試工程師在執行一項新的測試工作時,透過直接呼叫或修改現有的、合適的測試用例,並將其應用在測試執行中的過程。如果搜尋後得到的測試用例與需求完全一致,則直接複用現有測試用例,但是一般情況下,直接複用測試用例的情況很少;如果搜尋到的測試用例與需求近似,則對其進行修改,得到新的測試用例之後再複用。在一定程度上,測試用例複用可以節省重新設計測試用例的時間,減少測試工程師的工作量,提高軟體測試的效率。
然而,並非所有的測試用例都適合複用,有些測試用例定製化程度較高,只適合某些特定的測試場景,這樣的測試用例可複用程度不高。由此可知,測試用例要能進行復用,須具備一定的可複用特性。
1.2 可複用測試用例特性
經過對大量可複用測試用例的收集以及分析,本文認為可複用測試用例需滿足以下5個特性:標準化、通用性、有效性、獨立性、小粒度1]。
1) 標準化。測試用例通常用自然語言進行描述,但由於自然語言的非結構化特性,無統一結構的測試用例不利於測試用例複用。因此,測試用例的設計必須使用統一的格式或結構,以消除由於自然語言的表述的差異帶來的問題。標準化不僅強調測試用例的可複用能力,更偏向於測試用例管理。採用明確無歧義的語言描述測試用例並用統一結構進行儲存,如表1測試用例描述案例所示2]。其中,加粗字體表示測試用例的欄位,中括號 ]裡的內容表示測試用例的具體內容或相關屬性。
2) 有效性:測試用例的目標是發現軟體中的問題或者驗證功能是否正確,因此測試用例必須是針對它的'測試目的而設計,並且經稽核後必須是正確、完整、適用於被測物件並且是可執行的。
3) 通用性:測試用例不侷限於具體的應用,不過分依賴於被測軟體的需求、設計、環境、其他功能以及其他業務流程,可複用測試用例可多次適用於不同版本的軟體測試或廣泛應用於某同類軟體或類似功能模組的測試。
4) 獨立性:測試用例不過分受制於測試環境、相關業務流程以及前置測試用例。理論上,測試用例與其他因素的耦合度越小,則獨立性也就越高,其測試用例的可複用程度相對較高。
5) 小粒度:通常指一個被測模組的末梢功能,測試用例的粒度設計追求功能的不可分割性。粒度越小並且相對獨立的功能,針對其功能設計的用例,可複用性也就越高。
以登入功能舉例,該功能相對於整個應用系統來說粒度最小,並且與其他功能相對獨立,同時,針對登入功能設計的測試用例具有較強的通用性,所以通常情況下,登入功能的測試用例具有較高的可複用性。
1.3 測試用例複用場景
然而,並非所有的軟體測試過程都適合進行測試用例複用。測試用例複用是為了避免測試用例的重複設計,提供現有的測試用例給測試工程師直接使用。因此,只有在需要重複執行的測試用例時,測試用例的複用才能真正發揮作用。通常情況下,測試用例複用主要由三類測試場景3]:
1) 軟體升級:包括版本升級、缺陷修復等升級行為。例如:一家公司的業務管理系統的升級,或某個功能的改進。通常不會引起非常大的業務流程變動或介面改動,因此前一個版本的測試用例可被大量複用。
2) 產品測試:此類場景多存在於軟體研發公司,多從事於某個領域的軟體研發工作,通常此類公司有著自己的測試用例庫。比如:從事ERP(企業資源計劃)軟體開發的公司。雖然不同行業的業務流程都不完全一致,但也有存類似的可複用業務流程,例如員工管理模組等。
3) 第三方測評4]:第三方測評機構適用於此類測試用例複用場景。由於第三方測試機構會對大量的軟體進行測評,其中不乏相同領域的軟體產品。如果對每個測試軟體重新設計測試用例,必然增加工作成本。因此,對於第三方測評機構測試用例複用是十分有必要的。測試用例複用在不同領域和場景中有著廣泛應用,對於大量測試用例的複用需要建立在大量測試用例基礎上,需要將以往設計的測試用例加以儲存和管理,因此設計一套測試用例管理系統是測試用例複用成為可能的先決必要條件。
2 測試用例複用庫模型設計與實現
測試用例複用就是對已經執行的測試用例進行重複使用或修改使用。要實現測試用例複用,則需要對以往設計的測試用例進行有效的儲存以及分類管理以供後續使用。對測試用例的管理就需要建立一個測試用例複用庫來儲存測試用例,在測試用例複用庫中使用統一的規範資料格式對測試用例進行管理。當測試工程師要設計測試用例時,可先在測試用例庫中進行搜尋,查詢合適的測試用例進行復用。但是,隨著時間的增長以及測試專案的增加,測試用例庫也隨之擴充,測試用例數目與日俱增,這就增加了搜尋的工作量。為了提高搜尋的效率,根據測試用例適用的行業領域,對測試用例進行劃分儲存,並打上行業領域的標記。其原因在於,相同行業領域的軟體其測試用例的通用性更高,可複用性也更高。
為了提高在測試用例庫中的搜尋效率和準確度,將分詞技術應用於測試用例搜尋功能中,對使用者的搜尋輸入進行分詞、篩選,得出有效的搜尋關鍵字,根據關鍵字在測試用例複用庫中進行搜尋,減少了非關鍵字的干擾,提高了查詢速度,並且搜尋結果更準確。
通常情況下,測試用例複用分為直接使用以及修改使用,但無論何種情況,都需要對新測試用例進行稽核,確定其有效性和唯一性方能進入測試用例複用庫,測試用例複用模型如圖1所示。
3 測試用例複用搜尋設計與實現
3.1 分詞詞庫
測試工程師進行測試用例複用時,需要對查詢輸入進行處理,常用方法是使用分詞技術提取其中的關鍵字進行查詢。分詞技術中,英文單詞之間以空格作為自然分界符,而中文是以字為基本的書寫單位,詞與詞之間沒有明顯的區分標記,因此,對中文資訊處理相對比較複雜。語義分析是中文資訊處理的基礎與關鍵,常見的分詞演算法有兩種:
演算法1:建立詞庫,對待分析字串逐詞匹配,分離關鍵字;
演算法2:建立詞庫,對目標串構造全文索引,然後將結果集與詞庫進行笛卡爾積匹配,獲取匹配結果。
以上演算法如果用於較大規模詞庫時,存在如下效率問題:
1) 當詞庫較大時,逐詞匹配耗時較長;
2) 採用全文索引方式消耗多餘內容,同時不適用於測試用例複用查詢功能,因為使用者輸入的查詢資訊較短,而全文索引多適用於長文字字串搜尋功能。
在測試用例複用查詢功能中,使用者查詢輸入相對簡單,但需要進行精確分詞,因此針對此類特點,本文對文獻5]中提出的索引方法加以改進,採用二級索引對中文詞條進行分詞(這裡只討論中文分詞,英文分詞可使用Lucene工具進行分詞),以確保能快速並精確地進行分詞。由於長度為2的中文詞條佔整個漢字詞條約70%5]以上,同時假設漢字詞長度2、3、4的詞條個數比例為7:2:1,因此,大約90%的情況下,執行兩次檢索便能定位一個漢字詞條,以保證較高的分詞效率。同時為減少磁碟I/O,在系統啟動時,將詞庫載入至記憶體,使所有計算可在記憶體中進行,進一步提高分詞效率。根據《中國大百科全書》目前收錄約6 000萬個詞條為例,整個中文詞庫大約適用300MB~400MB記憶體,因此,常見的主機可滿足其硬體需求。
3.2 搜尋演算法
隨著軟體測試專案的日益增加,測試用例複用庫不斷擴充,這勢必會影響到搜尋的效率。本文中,當接收到使用者的查詢輸入,程式首先將其與分詞詞庫進行匹配,對查詢輸入進行分詞,然後根據被測軟體的行業領域,查詢對應領域的測試用例資料,並且根據排序演算法對查詢結果進行排序。由於該分詞演算法僅用於測試用例查詢,因此對於中文分詞演算法中歧義詞的處理可以忽略不計,其虛擬碼如下所示:
由於詞庫在初建之時,未必能覆蓋所有中文詞條,並且隨著各個行業的高速發展,每天都可能會有新詞條出現,因此必然存在無法匹配的詞條。當出現新詞時,分詞演算法將自動定位到下一個可匹配詞條,然後繼續進行拆分,而新詞則被單獨作為一個分詞載入至分詞結果中。同時儲存該使用者輸入,待管理員進行稽核,人工加入到詞庫中。採用人工新增新詞而非程式自動新增新詞的原因在於,程式還不夠智慧,也無意義做到足夠智慧,同時對於新詞的理解或判斷的正確率遠低於人判斷的正確率。
3.3 結果排序
針對測試工程師進行測試用例的複用查詢,其查詢結果可能是幾條,也可能是幾十條,甚至是幾萬條資料,然而並非所有查詢到的測試用例都是查詢者所需要的,當查詢結果數量龐大時,逐條檢視篩選所消耗的時間可能早已超過了重新設計一個測試用例所需的時間,必然導致時間成本上的浪費,這與測試用例複用的初衷相違背。由此可見,根據查詢到的測試用例與使用者所需測試用例的相關性,為使用者推薦一個“好”的測試用例是十分必要的。
可複用測試用例的查詢結果的排序可以為使用者提供選擇測試用例的依據,針對查詢主要針對教育期刊網
關鍵詞 的搜尋,因此對查詢結果中的測試用例按照一個三元組方式排序,其中K表示搜尋的教育期刊網
關鍵詞 集合,ki是該教育期刊網
關鍵詞 集合中的某個教育期刊網
關鍵詞 ,則排序三元組表示如下:
C(ki)表示當前查詢結果中是否有與ki匹配的教育期刊網
關鍵詞 ,如有,則C(ki)記為1,如沒有,則C(ki)記為0。
C(ki)是K中每個教育期刊網
關鍵詞 在本次查詢中是否匹配的計數之和,始終大於0,因為查詢結果中顯示的是至少有一個查詢關鍵字匹配的搜尋結果。S(ki)表示當前查詢結果中教育期刊網
關鍵詞 ki出現的頻次。S(ki)是K中每個教育期刊網
關鍵詞 在本次查詢中出現頻次之和。Creuse則表示查詢結果中該條測試用例被複用的次數。
透過上述三元組對測試用例的查詢結果進行排序。首先按照C(ki)列進行降序排序,若該列數值相同,則按S(ki)列進行降序排序,若此列數值相同,則按Creuse列進行降序排列。由此可以發現,查詢關鍵字匹配越完全,其滿足查詢需求的程度就越高,同時,複用次數越多的測試用例,越具有通用性。
4 總結
測試用例複用的核心思想是將以往的測試用例加以收集積累,透過建立測試用例管理系統來統一管理測試用例庫。本文提出了將分詞技術和軟體行業領域應用於測試用例複用來提高測試用例複用程度。按領域劃分測試用例可使得查詢結果更具有可複用性,同時設計了一套採用二級索引結構的中文分詞詞庫使分詞效率更高效。因此,系統為測試用例設計人員推薦更“好”的可複用測試用例,對查詢結果順序稍加改進便於篩選,便能極大的減少測試用例設計階段的工作量。