摘 要:闡述了軟件測試流程的相關概念,論述了基于工作流技術實現(xiàn)軟件測試流程定義與監(jiān)控的概念模型,詳細探討了軟件測試流程定義與實例化和軟件測試流程的執(zhí)行與監(jiān)控所涉及的主要內(nèi)容及其具體實現(xiàn)方案。
關鍵詞:工作流; 測試流程; 測試階段; 測試流程控制項
中圖法分類號:TP311.51文獻標識碼:A
文章編號:1001—3695(2007)02—0043—03
1 引言
研究新的開發(fā)方法、技術和工具以提高軟件項目的生產(chǎn)效率和質(zhì)量一直是軟件工程研究的熱點。三十多年來,盡管新的開發(fā)方法和技術在軟件開發(fā)過程中的應用起到了一定的作用,但軟件產(chǎn)業(yè)隨著軟件規(guī)模和結構復雜度的提高依然沒能擺脫項目延期及超出預算的困擾。
一個成功的軟件項目意味著能夠在沒有超出預算的情況下,按時交付質(zhì)量合格的軟件產(chǎn)品。IEEE資料表明,僅1995年一年內(nèi),大型軟件系統(tǒng)的失敗率(取消率)達到了20%;而在剩下的80%中,大約有2/3的項目延期,并且有些項目的經(jīng)費開支超過了預算的一倍;而且也有2/3的項目因為第一年開發(fā)中所存在的可靠性和質(zhì)量方面的問題而頻頻出現(xiàn)故障[1]。
許多企業(yè)項目屢遭失敗的主要原因是:①缺乏有效的軟件過程管理體系,過多地依賴軟件設計與開發(fā)者的個人素質(zhì);②大多沒有建立起完善的質(zhì)量保障體系,忽視軟件測試的重要作用。
軟件測試是軟件質(zhì)量保證的關鍵步驟,軟件開發(fā)生命周期中受到最多關注的就是測試[2]。測試的目標是以最少的人力、物力和時間投入,盡可能多地找出軟件中潛在的各種錯誤和缺陷[2]。建立良好的測試過程管理體系不僅能夠發(fā)現(xiàn)錯誤和缺陷,保證產(chǎn)品質(zhì)量,還能夠通過對測試過程進行度量,輔助組織進行過程改進,提高測試生產(chǎn)率,降低測試成本。
因而,研究有效的軟件測試過程管理方法就成為近年來的一個熱點。經(jīng)過軟件專家們的不懈努力,軟件測試過程管理的理論已相對成熟,測試的技術、方法和工具得到了相當?shù)陌l(fā)展,但是對軟件測試流程的定義及監(jiān)控卻缺乏相應的研究。為了使測試管理方法能夠適合不同類型軟件的測試,適合不同軟件測試部門的測試流程,開發(fā)具有軟件測試流程管理功能的軟件過程管理工具就成了一種需要。由于工作流技術已經(jīng)成為目前比較流行的過程實現(xiàn)技術,本文的研究就以工作流技術為依據(jù),探討如何對軟件測試流程進行定義與監(jiān)控。
2 工作流技術
近幾年來工作流管理技術逐步被應用于過程自動化以及應用系統(tǒng)集成中。WfMC將工作流定義為一種過程,在該過程中,文檔、信息或任務等按照一定的過程規(guī)則在過程參與者之間傳遞[3]。過程是為了實現(xiàn)某個目標而將一系列相互關聯(lián)的活動協(xié)調(diào)起來的一個集合[3]。工作流管理系統(tǒng)是用來定義、創(chuàng)建和管理工作流的軟件系統(tǒng)[3]。WfMC定義的工作流管理系統(tǒng)參考模型[4]如圖1所示。此工作流參考模型定義了工作流管理系統(tǒng)的基本結構,它包含工作流管理系統(tǒng)的主要組件以及這些組件之間的接口。
(1)工作流執(zhí)行服務組件(Workflow Enactment Services)提供了一個運行環(huán)境,在該環(huán)境中,利用一個或多個工作流引擎進行過程的實例化、解釋以及激活,并且支持與外部必要的資源的交互。它由一個或多個創(chuàng)建、管理和執(zhí)行工作流實例的工作流引擎組成。
(2)工作流引擎(Workflow Engine)是一個為工作流實例提供運行執(zhí)行環(huán)境的軟件服務。
(3)過程定義組件(Process Definition)主要用于描述、分析并記錄業(yè)務過程。它輸出一個能被工作流引擎解釋的過程定義。
(4)工作流管理和監(jiān)控組件(Administration Monitoring)主要負責對工作流實例的運行進行監(jiān)控。管理員可以通過工作流管理工具獲得目前各個活動的運行情況報告,并干預實例的行進。
(5)工作流客戶端應用組件(Workflow Client Application)是與活動相關的人員進行交互的軟件實體。通常包括工作列表(Worklist)以及工作列表管理器(Worklist Handler)兩個主要組成部分。
(6)外部應用調(diào)用組件(Invoked Applications)是指工作流執(zhí)行服務在過程運行中調(diào)用處理應用數(shù)據(jù)的外部應用程序。
(7)其他工作流執(zhí)行服務組件(Other Workflow Enactment Services)是不同的工作流管理系統(tǒng)之間的互操作。
3 測試流程相關概念
在具體討論軟件測試流程定義及其監(jiān)控之前,我們先明確文中所述的幾個與軟件測試流程相關的概念。首先我們先討論一下軟件過程的定義。軟件過程是軟件工程界討論和研究的熱點之一,依據(jù)CMM(能力成熟度模型)的觀點,軟件過程是指軟件開發(fā)人員開發(fā)和維護軟件及相關產(chǎn)品的一套行為、方法、實踐及變換過程[1];從工作流的角度理解,軟件過程是軟件生存周期中為達到某個目標而必須實施的所有軟件工程活動的集合[6]。依據(jù)軟件過程定義,我們給出軟件測試過程及相關概念的定義如下:
定義1 軟件測試過程是在軟件測試中為達到某個目標而必須實施的所有活動的集合。
定義2 測試階段是軟件測試過程中的子過程,是根據(jù)某種要求對測試過程進行的一種劃分。
定義3 測試流程是由測試階段以及這些測試階段之間的轉移關系、各測試階段的相關數(shù)據(jù)以及測試流程控制項等構成。
定義4 測試流程控制項是依據(jù)測試過程管理的需要,從各個測試階段中提取出來的階段完成所必須滿足的前置條件。
定義5 測試流程模板指的是用戶可以在不同的項目中進行重用的測試流程。
定義6 測試流程實例是指測試流程模板與某個具體測試項目相結合,設定了測試流程模板中的相關屬性,用來對具體測試項目的流程進行控制。
軟件測試過程一般包括四個階段,即測試策劃、測試設計、測試執(zhí)行和測試總結。測試流程一般包含測試階段、測試階段之間的關系、測試流程控制項和測試階段基數(shù)(測試流程所包含的測試階段個數(shù))。測試階段之間的關系主要有串行和并行兩種關系。
測試階段主要包含計劃起止時間、實際起止時間、運行狀態(tài)、啟用狀態(tài)等屬性,其中運行狀態(tài)有未開始、活動、暫停、完成四種狀態(tài),只有測試階段處于活動狀態(tài)時測試階段中的功能才能被使用,處于其他三種狀態(tài)時都不能被使用。啟用狀態(tài)包含啟用和禁用兩種狀態(tài)。測試階段處于禁用狀態(tài)時,不受測試流程所定義的約束所控制,測試階段中的功能可以被任意使用;測試階段處于啟用狀態(tài)時,測試階段將受到測試流程所定義的約束的控制。
測試流程控制項主要有啟用狀態(tài)和完成狀態(tài)兩個屬性:①啟用狀態(tài)包含啟用和禁用兩種狀態(tài)。測試流程控制項處于啟用狀態(tài)時,它在測試流程中起作用;測試流程控制項處于禁用狀態(tài)時,它在測試流程中不起作用。②完成狀態(tài)包含未完成和完成兩個狀態(tài),分別表示測試流程控制項中定義的條件是否滿足。
測試階段與測試流程控制項之間的關系是,一個測試階段中可能包括幾個測試流程控制項,一個測試流程控制項只可能屬于一個測試階段。一個測試階段如果受流程控制(即測試階段的啟用狀態(tài)處于啟用時),那么該測試階段完成的條件是:當測試階段的計劃終止時間到達時,屬于測試階段的啟用狀態(tài)為啟用的測試流程控制項的完成狀態(tài)均必須為完成。
測試流程模板就是沒有對測試流程的相關信息進行設定的,可以被多個項目所使用的測試流程。測試流程實例就是對測試流程模板中的相關信息進行設定并用于對具體項目進行控制的測試流程。測試流程模板與測試流程實例之間的關系就好像面向對象技術中類(Class)和對象(Object)的關系。
本文首先設計一種流程定義工具,對測試流程模板進行圖形化的定義,針對具體測試項目對測試流程模板進行實例化生成測試流程實例,然后通過對測試流程實例的執(zhí)行和監(jiān)控對測試項目進行控制。
4 測試流程定義與監(jiān)控
4.1 測試流程定義與監(jiān)控系統(tǒng)框架
根據(jù)軟件測試過程的特點,本文對圖1的工作流管理系統(tǒng)參考模型進行了簡化,將測試流程定義與監(jiān)控系統(tǒng)的結構分為五個模塊。其UML用例包圖表示如圖2所示。
其中,測試流程定義組件、軟件測試流程執(zhí)行和監(jiān)控組件以及管理組件將在下面說明。測試應用組件(測試過程管理工具的核心內(nèi)容)主要用于管理各測試階段內(nèi)部的數(shù)據(jù)流轉和操作;數(shù)據(jù)外部組件主要用于對測試流程實例執(zhí)行中的某些實際數(shù)據(jù)進行相應的描述以及外部處理,這兩部分內(nèi)容并非本文論述的重點,不再贅述。
4.2 測試流程的定義與實例化
從實現(xiàn)的角度講,測試流程是用于定義測試過程中的測試階段及其關系,其中包括指明測試階段的開始和結束的條件、測試階段本身的信息以及測試階段中的測試流程控制項等。對測試流程的定義,可以采用基于文本和基于圖形可視化兩種方式。為了方便用戶的使用以及測試流程定義的直觀性,本系統(tǒng)采用可視化圖形定義方式定義測試流程。
4.2.1 測試流程的定義
測試流程是由測試階段以及這些測試階段之間的轉移關系、各測試階段產(chǎn)生的相關數(shù)據(jù)以及測試流程控制項等四種關鍵元素構成,同時這四種元素之間有各種關系,各個元素本身又有其自身特點。
測試流程的定義是指利用現(xiàn)有的測試流程,通過裁減或者新建一個測試流程作為控制具體測試項目的可以重用的資源,這些資源被稱為測試流程模板。這些操作均采用可視化圖形操作方式,在測試流程模板的可視化繪制和顯示中,本文采用了UML活動圖建模符號的子集,包括起始圖元、測試階段圖元、并發(fā)同步圖元、連接圖元和結束圖元五種圖元。起始圖元、結束圖元、并發(fā)同步圖元、連接圖元基本與UML保持一致,測試階段圖元采用UML中的活動圖元表示。圖3為利用測試流程定義工具繪制的串并行四階段測試流程。其中,并行的意義表示除了測試階段的起止時間可以重疊之外,其他的前置條件均相同;串行的意義是指后面測試階段的開始受制于前面測試階段是否完成。用戶通過圖形化方式繪制測試流程中的測試階段和它們之間的串并行關系。繪制的測試流程控制模板保存時必須對以下規(guī)則進行合法性檢查:
(1)圖元規(guī)則。必須有且僅有一個起始圖元和結束圖元;流程圖中測試階段圖元的數(shù)目必須小于等于流程模板基數(shù);流程起始圖元的入度必須是0,除流程起始圖元外的所有圖元的入度必須大于等于1;流程結束圖元的出度必須是0,除流程結束圖元外的所有圖元的出度必須大于等于1;起始圖元與結束圖元不能相連;除了并發(fā)同步圖元外,所有圖元之間的連線不能超過一條。
(2)測試階段規(guī)則。測試階段的名稱必須在預先定義的測試階段名稱集合中,測試階段之間的順序必須滿足一定的約束。例如,如果預先定義了四個測試階段,即測試策劃、測試設計、測試執(zhí)行和測試總結,那么就不能定義一個名稱為測試準備的測試階段,測試設計要么與測試策劃并行,要么在測試策劃之后出現(xiàn),不能將測試策劃放在測試設計之后。
用戶在完成了測試階段以及相互之間的轉移關系的定義后,可以對屬于各測試階段的流程控制項的啟用狀態(tài)進行設定。在四階段測試流程中,測試流程控制項的啟用狀態(tài)為啟用的意義以及所屬的測試階段如表1所示。
4.2.2 測試流程的實例化
軟件測試流程的實例化是指對選擇的測試流程模板所進行的一系列操作。這些操作包括:首先要針對具體的測試項目根據(jù)需要選擇一個測試流程模板,然后設定測試流程控制所必需的信息,在通過了合法性檢查之后,最后啟用流程。實例化后的測試流程即可對項目測試過程進行控制。
測試流程模板實例化中需要對測試流程相關的所有數(shù)據(jù)進行設定,包括測試階段、測試流程控制項信息的設定。測試階段中主要對測試階段的計劃起止時間、運行狀態(tài)進行設定;測試流程控制項主要對測試流程控制項的啟用狀態(tài)進行設定。
測試流程模板實例化完成后,數(shù)據(jù)合法性檢查必須通過后才能啟用流程,對實際測試項目進行控制。這里所說的合法性檢查就是對以下規(guī)則進行檢查:
必須對測試階段的計劃起止時間進行設定;各個測試階段的起止時間不能超出測試項目的時間范圍;測試階段的計劃結束時間不能早于計劃開始時間;一個測試階段如果有前序測試階段,那么它的計劃開始時間必須晚于前序測試階段的計劃結束時間。
4.3 測試流程執(zhí)行和監(jiān)控
測試流程的執(zhí)行和監(jiān)控是工作流引擎的一個簡化。測試流程的執(zhí)行主要是指依據(jù)測試階段的計劃起止時間以及測試階段之間的約束關系對測試階段實行自動啟動和自動完成功能;依據(jù)測試流程控制項的啟用意義對測試過程產(chǎn)生的數(shù)據(jù)和文檔進行統(tǒng)計,并設定測試流程控制項的完成狀態(tài)。測試流程對應用程序的控制主要是依據(jù)測試階段以及測試流程控制項的各種狀態(tài)為測試應用程序提供訪問接口,進而對應用程序進行控制。
軟件測試流程管理與監(jiān)控是指擁有權限的
人員對測試流程進行查看和人工干預控制。測試流程查看功能是指以圖形化的方式提供對測試流程的查看,主要包括以顏色來實時反應測試階段的四種狀態(tài)、以對話框來查看測試階段的計劃起止時間和測試流程控制項的完成情況。測試流程人工干預控制功能是指以圖形化的方式對測試流程進行人工變更,主要包括變更測試階段計劃起止時間、變更測試階段運行狀態(tài)(圖4)和變更測試流程控制項啟用狀態(tài)。
5 小結
本文首先對軟件測試流程的相關概念進行了闡述,然后從概念層到實現(xiàn)層詳細論述了測試流程定義、執(zhí)行和監(jiān)控機制。本文所提出的概念和方法已經(jīng)在北航軟件所開發(fā)的測試過程管理工具QEsuite 2.0得到了很好的應用,實現(xiàn)了對軟件測試項目的測試過程以及相關文檔和數(shù)據(jù)的有效管理,提高了軟件測試工作的效率。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。