
軟體測試過程是一種抽象的模型,用于定義軟體測試的流程和方法。軟體開發過程至關重要,因為開發過程的品質将決定軟體的整體品質;同樣,測試過程也是十分重要的,因為測試過程的品質會直接影響測試結果的準确性和有效性。軟體測試過程與軟體開發過程都必須遵循軟體工程原理和管理學原理。
随着測試過程管理的進步,許多優秀的測試過程模型被軟體測試專家通過無數次的實踐總結出來。這些優秀的模型将測試活動進行抽象,并與開發活動相結合,是測試過程管理的重要參考依據。
在軟體開發的曆史長河中,開發人員及研究人員總結了很多種開發模型,比如瀑布模型、螺旋模型、增量模型、原型模型、疊代模型、快速原型模型以及 Rational 統一過程等,這些模型對軟體開發過程都有良好的指導作用,但這些過程方法并未充分強調測試的價值,也并未對測試工作給予足夠的重視,是以利用這些模型無法更好地指導測試實踐。
軟體測試與軟體開發是密切相關的有計劃的系統性活動,顯而易見,軟體測試也需要測試模型去指導實踐。值得欣慰的是,軟體測試專家也通過無數次測試實踐總結出了許多優秀的測試模型。當然,由于測試與開發的結合非常密切,這些測試模型也都對開發過程進行了很好的總結,展現了測試與開發的融合。下面講解幾種主要的測試模型。
V模型是最具有代表性的測試模型,其最早由保羅·魯克(Paul Rook)在20世紀80年代後期提出,于英國國家計算中心文獻中釋出,主要用于改進軟體開發的效果和效率。
在傳統的開發模型(如瀑布模型)中,通常把測試過程作為在需求分析、概要設計、詳細設計和編碼全部完成後的一個階段,盡管測試工作可能會占用整個項目周期一半的時間,但仍有人認為測試隻是一個收尾工作,而不是主要的工程。V模型是軟體開發瀑布模型的變種,它反映了測試活動與分析、分析與設計的關系。V模型從左到右分别描述了開發的基本過程和測試行為,标明測試工程中存在的不同級别,清楚地描述了測試階段和開發過程各階段的對應關系。
V模型如圖1所示。模型圖中箭頭代表時間方向,左邊的是開發過程的各階段,與此相對應的是右邊測試過程的各個階段。
圖1 軟體測試V模型
V模型采用了包括低層測試和高層測試的軟體測試政策,低層測試是為了保證源代碼的正确性,高層測試是為了使整個系統可以滿足使用者需求。
V模型存在一定的局限性,它把測試過程僅僅作為軟體開發的最後一個階段,這樣會間接地讓人認為測試可以放在最後來做,如此一來,需求分析等開發的前期工作中隐藏的問題隻能到後期驗收時發現,這不僅會影響整個開發工作,還可能造成嚴重的損失。
V模型無法展現“盡早地和不斷地進行軟體測試”的原則。在V模型中增加對應軟體各開發階段應同步進行的測試,就演化為W模型。在模型中不難看出,開發是“V”,測試是與其并行的“V”。基于“盡早地和不斷地進行軟體測試”原則,在軟體的需求和設計階段的測試活動應遵循IEEE 829-1998标準。W模型如圖2所示。
圖2 軟體測試W模型
W模型由Evolutif公司提出,相對于V模型,W模型更科學。可以說W模型是V模型的更新版,其主要強調的是測試工作伴随着整個軟體開發周期,并且測試的對象不隻是程式,需求、功能和設計也需要測試。測試與開發同步進行,有利于盡早地發現問題。
W 模型也有局限性。W 模型和 V 模型二者都将軟體的開發視為需求、設計、編碼等一系列串行的活動,無法支援疊代、自發性以及變更調整。
前面的兩個測試過程模型都不能較好地展現測試流程的完整性。H 模型的提出就是為了解決上述問題。H 模型将測試活動完全獨立出來,形成一個獨立的流程,并将測試準備活動和測試執行活動清晰地展現出來。H模型如圖11.3所示。
圖3 軟體測試H模型
圖3是在整個生産周期中某個層次上的一次測試“微循環”。其中的“其他流程”可以是任意開發流程,如設計流程、編碼流程,也可以是其他非開發流程,如品質保證流程甚至測試流程本身。隻要測試條件成熟,測試準備活動完成,測試執行活動便可進行。
H模型具體揭示了以下内容。
(1)軟體測試是一個獨立的流程,其貫穿産品整個生命周期,與其他流程并行。
(2)軟體測試要盡早準備,盡早執行。
(3)軟體測試根據被測對象的不同而分層次進行。不同層次的測試活動可以按照某個次序先後進行,但也有可能會反複進行。
(4)軟體測試不單單指測試的執行,還包括很多其他的活動。
X模型的基本思想是由馬裡克(Marick)提出的,但 Marick 最開始并不打算建立一個替代模型。羅賓(Robin F.Goldsmith)引用了Marick的一些想法,并對其進行重新組織,建立了 X 模型。選擇“X 模型”這一名稱是由于X一般代表未知,而Marick也認為他的觀點并不足以支撐一個完整的模型,但已經含有一個模型所需要的部分主要内容,包括模型中的一些亮點,如探索性測試(Exploratory Testing)。X模型如圖4所示。
圖4 軟體測試X模型
Marick認為V模型的最大缺點是無法引導項目的全部過程。他還認為一個模型必須能處理開發的所有問題,包括交接、頻繁重複的內建以及需求文檔的缺乏等。
Marick認為,一個模型不應規定與目前公認的實踐不一緻的行為。X模型的左側描述的是針對單獨程式片段而進行的互相分離的編碼和測試,此後二者将進行頻繁的交接,通過內建最終合成可執行程式(圖11.4右上半部分),其中可執行程式還需要進一步測試。已認證內建測試的成品可進行封版(圖11.4右上的最後一個操作)并送出給使用者,也可作為更大規模和範圍内內建的一部分。多根并行的曲線表示變更可以發生在各個部分。
由圖11.4可見,X模型還定位了探索性測試(圖11.4右下方)。探索性測試是不進行事先計劃的特殊類型的測試。
X模型包含的測試設計步驟與工具配置步驟一樣多,而V模型中并沒有。但從這層意義來看,X模型也不夠真實,實際上,應允許在任何時候采用測試設計步驟。
Marick 對 V 模型提出質疑,還因為 V 模型基于一套必須按照一定順序嚴格排列的開發步驟,而這并不能很好地反應實際的開發過程。
盡管很多項目缺乏足夠的需求分析,V模型仍然從需求出發。V模型提示測試人員需要對各開發階段中已得到的内容進行測試,但未規定需要取得内容的數量。若沒有任何需求資料,開發人員可能根本不清楚自己需要做什麼。而X模型忽略了需求。一個有效的模型有利于很多良好的實踐方法的采用,是以,V模型的一個優點是它對需求角色的确認,而X模型并未如此做,這可能是X模型的一個不足之處。
X模型填補了V模型和W模型的缺陷,可以為測試人員和開發人員帶來非常明顯的幫助。
前面介紹了4種典型的測試模型,上述模型對指導測試工作的進行具有很重要的意義。但任何一個模型都不是完美的,應盡可能地去應用模型中對項目有實用價值的部分,切不可為使用模型而使用模型,那沒有任何實際意義。
在上述模型中,V模型強調在整個軟體項目開發過程中需要經曆的若幹個測試級别,而且每一個測試級别都對應一個開發級别。但它忽略了測試的對象不隻是程式,或者說它并沒有明确指出應對軟體需求以及設計進行測試,而這些在 W 模型中都得到了補充。
W 模型強調測試計劃等工作先行和對系統需求、系統設計的測試,但 W 模型和 V 模型都沒有專門針對軟體測試的流程予以說明。
事實上,随着軟體品質越來越為大家所重視,軟體測試也逐漸發展成一個獨立于軟體開發的活動,每個軟體測試的細節都有一個獨立的操作流程。例如,現今最常見的第三方測試,就包含了從測試計劃和編寫測試用例,到測試實施以及測試報告編寫的全過程,此過程在H模型中有相應的展現。
在H模型中,測試是獨立的部分,隻要提前做好測試準備工作,就可以開始進行測試。
當然,X模型又在此基礎上增加了許多不确定因素的處理措施,因為在真實項目中,經常會有突發情況出現,比如需求變更。
在實際工作中,若要靈活運用各模型的優點,則可在 W 模型的架構下,運用 H 模型的思想進行測試,同時将測試和開發密切結合,尋找恰當的就緒點開始測試并進行反複疊代測試,最終保證如期完成預定目标。