劉國峰,孫玫肖,劉文韜
(中國鐵道科學研究院電子計算技術研究所 , 北京100081)
鐵路互聯網退票模塊是鐵路客票互聯網售票系統的主要組成部分,對用戶而言,安全、可靠、方便是其推廣應用的基礎,因此,在該模塊投入使用前,要進行全面測試,盡可能發現退票模塊功能性的缺陷和不足,充分保證退票模塊在實際應用中,為旅客提供準確、便捷和人性化的網上退票服務。互聯網退票測試工作要站在旅客的角度上,充分考慮旅客在網上退票過程中可能產生的各種情形,全面測試退票模塊的基本功能,最大限度地發現退票模塊中的缺陷和不足。基于這樣的測試需求,以及退票業務流程清晰的特點,采用場景法對互聯網退票模塊進行測試。
場景法是黑盒測試中應用比較廣泛的測試方法,黑盒技術設計測試用例的方法主要有:等價類劃分、邊界值分析、因果圖和場景法。在對流程性較強的互聯網退票測試中,與其他幾種主要方法相比,場景法有著不可比擬的優勢。場景法能夠站在用戶角度上,將測試的過程按照事件流劃分為不同的場景,更加清晰、全面地體現軟件的設計思想和用戶對于軟件的體驗,有利于測試設計者設計測試用例,同時使測試用例更容易理解和執行。
應用軟件大多是用事件觸發來控制流程的,事件觸發時的情景便形成了場景,而同一事件不同的觸發順序和處理結果就形成事件流。這種在軟件設計方面的思想也可引入到軟件測試中,可以比較生動地描繪出事件觸發時的情景。
用例場景用來描述流經用例的路徑,從用例開始到結束遍歷這條路徑上所有基本流和備選流。

圖1 用例場景
圖1中,經過用例的每條路徑都用基本流和備選流來表示,基本流用黑色粗直線表示,是經過用例的最簡單的路徑,是完成某個操作必須要經過的步驟。各備選流如圖1中所標注,一個備選流,可能從基本流開始,在某個特定條件下執行,然后重新加入基本流中(如備選流 1 和 備選流3);也可能起源于另一個備選流(如備選流 2),或者終止用例而不再重新加入到某個流(如備選流 2和備選流 4)。根據圖1中每個經過用例的路徑,可以得到不同的用例場景。其中,基本流為一個場景,基本流與其他備選流的不同組合為其他場景。
根據定義,場景法的基本設計步驟為:
(1)根據軟件設計說明書,畫出用例圖。(2)確定程序的基本流及各項備選流。(3)根據基本流和各項備選流生成不同的場景。(4)對每一個場景生成相應的測試用例。(5)對生成的測試用例進行復審,去掉多余的測試用例。測試用例確定后,對每一個測試用例確定測試數據值。
從上面場景法實施的步驟中不難看出,步驟1畫出準確的用例圖是場景法的基礎,它將影響到對系統行為的分析,以及基本流和備選流的確定。由于用例圖表意不夠豐富,不能夠細致、全面地描述系統行為。所以,需要一種新的系統表示方法代替用例圖,以便全面、準確地描述系統的行為。
另外,傳統場景法中生成測試矩陣的過程太過繁瑣,占用了用例設計的很大一部分精力,淹沒了場景法在分析系統活動方面的優勢。
針對場景法存在的問題,提出以下改進方案,并將該方案用于互聯網退票的測試。
采用活動圖代替用例圖來表現軟件執行過程。與用例圖相比,應用活動圖的優勢在于:
(1)活動圖表示了活動可能發生的順序,可以在活動圖中方便地識別基本流和備選流。(2)基于活動圖的測試方法是進行軟件自動化測試的重要途徑之一。
對于測試矩陣過于繁瑣的問題,可以在測試場景生成后,基于測試矩陣中因素分析思想,應用生成用例的其他方法,分析所處場景的基本流和備選流,直接得到需要的測試用例。
互聯網退票模塊流程性強,使用場景法設計測試用例,可以使退票的整個流程在測試用例中得到清晰的體現。同時,對流程進行場景的劃分,利于設計者抓住流程中的主要事件,繼而挖出其中的測試點,使得測試用例覆蓋面更加全面、廣泛。
依據互聯網售票退票模塊的軟件設計說明書,得出退票模塊的活動圖如圖2。圖2中,人與軟件交互部分用動作狀態框表示,其他狀態用狀態框表示。

圖2 退票模塊的活動圖
確定測試流程中的基本流和備選流是應用場景法設計測試用例的關鍵。通過退票模塊的活動圖,容易得到基本流和備選流。
一般的,基本流是將程序從開始直接執行到結束,不出現任何差錯的所有步驟按照程序執行的順序排列出來而得到的。
如圖2,按照圖中控制流指示順序,關注動作狀態框中的相關動作,找到完成整個退票過程最簡短的路徑,即可得到退票模塊的基本流為:登陸→選擇“退票”→按訂票日期查詢→選擇起始日期→選擇結束日期→點擊查詢→選擇“退票”按鈕→確認退票→退票成功→返回退票界面。
備選流可以從圖2中按照下面幾個原則來確定:
(1) 轉換(分叉)處,除去基本流之外的分支為備選流。(2) 判定框處,基本流之外的另一種判定(一般為否定的)為備選流。(3)基本流之外的動作狀態框所在的分支為備選流。
由此,得到該模塊中的5個備選流。如表1。

表1 互聯網退票模塊備選流
測試場景是在基本流的基礎上,結合備選流的各種組合建立的。具體方法就是依照程序執行的流程,以基本流為主,遍歷備選流,生成測試場景。將上面列出的備選流按照不同的順序進行組合,可以發現會產生上百種組合形式,顯然,這種場景爆炸的情形是必須要避免的。所以,備選流的組合方式需遵循一定的規則:
(1) 活動圖中,不重疊、距離遠的備選流不進行組合。(2)邏輯上,關聯性小的備選流不進行組合。(3)一個備選流在一個場景中只需被執行一次。(4)對排列順序可能會影響結果的備選流,進行排序組合。
例如:在活動圖中,備選流A5,與A1和A2距離遠、無重疊,不進行組合,與A3、A4關聯性小,可以將組合產生的場景刪除。按照如上的原則,產生的測試場景如表2。

表2 互聯網退票模塊測試場景
建立測試場景后,可以通過從確定執行用例場景所需的數據元素入手構建測試矩陣,然后根據測試矩陣生成測試用例。然而這種方法太過繁瑣,我們可以針對每個測試場景,采用其他用例生成方法,直接產生測試用例。
根據測試矩陣思想,分析每個測試場景,找出導致場景發生的因素,將這些條件作為變量,考慮變量發生變化時,對結果的不同影響,生成測試用例。下面以場景1和場景10為例說明測試用例的生成過程。
場景1:該場景是只有基本流的情況。基本流中的變量就是在活動圖中動作框中各種動作狀態,如“選擇起始日期”,選擇的日期的情況包括:訂票之前、訂票當日和訂票之后,考慮“選擇結束日期”時,還應增加起始日期與結束日期相同的情況。考慮完所有可變的動作狀態,即可得到場景1的測試用例。
場景10:該場景是備選流組合的情況,為避免測試用例的重復,主要考慮組合后備選流之間的相互影響。場景7、8、9中,已經驗證了備選流A1、A2、A3兩兩組合,系統不同功能的實現。這個場景中,只選擇其中一種輸入情況,驗證執行A3對A1和A2的查詢功能是否有影響。
遍歷每個場景,生成相應的測試用例,將所有用例合在一起,并賦給相應的數據,得到互聯網退票模塊的測試用例。
鐵路互聯網退票測試充分利用了場景法在設計測試用例方面的優勢,并結合黑盒測試技術中的其他測試方法,對該模塊進行了全面的測試,準確地發現了互聯網退票模塊功能的缺陷和不足,獲得了很好的測試效果,為改進和完善退票模塊提供了重要依據。
[1] 柳純錄,黃子河,陳淥萍. 軟件評測師教程[M] . 北京:清華大學出版社,2005.
[2] 田建剛,史浩山. 一種基于UML活動圖模型的系統測試方法[J] . 航空計算技術,2008,38(2).
[3] 李偉波,劉永祥,王慶春. 軟件工程 [M] . 2版 武漢:武漢大學出版社,2010.