步細化),并和項目經(jīng)理溝通、協(xié)調(diào),以將一些重要的信息及時反映給項目經(jīng)理,從而使項目計劃能較好地支持測試工作的開展。
二、軟件測試需求分析
理論上,軟件測試需求是源于軟件需求的,而軟件需求又是源于用戶需求的。然而,有些時候在分析軟件測試需求時并不存在已經(jīng)文檔化的軟件需求規(guī)格說明。在這種情況下,要分析軟件測試需求可能仍然需要追溯到用戶需求(當發(fā)生這種情況時,普通測試工程師會很吃驚地發(fā)現(xiàn)自己原來還肩負著需求開發(fā)工程師的部分職責。是的,事實上,資深的軟件測試工程師會發(fā)現(xiàn)軟件測試這個職位幾乎涉及所有的開發(fā)技能和部分管理技能。)由于后者涉及需求工程的專門知識,本文略過不做細述;這里重點討論前者。在一個規(guī)范化的軟件需求規(guī)格說明中,用戶需求是由更高層次的業(yè)務需求(體現(xiàn)在項目章程、SOW、項目建議書等文檔中)細化而成,它通常描述了用戶使用該軟件系統(tǒng)會涉及到的不同的執(zhí)行路徑、工作邏輯以及所預期的處理結果。在UML表示方法中,用戶需求通常通過Use Case來進行刻畫。接下來,用戶需求將進一步轉化為三類需求項,即功能需求項、性能需求項以及約束性需求項。這三類需求項就是通常意義上的軟件需求項。管理這三類需求項的矩陣被稱為需求矩陣。
理論上,在測試資源許可并且確有必要的前提下,測試的使命將是驗證和確認待開發(fā)的軟件及其中間產(chǎn)品滿足需求矩陣各個需求項。(注意:為了簡化討論,這里筆者沒有把需求的驗證與確認納入進來,實際上這部分工作也是軟件測試工作的重要組成部分。詳細論述請參閱拙文《試論軟件測試學科架構建設》)然而,幾乎沒有幾個公司或開發(fā)團隊能夠提供這類測試所需的諸多的資源,此時,一種可行的策略是將待測試的軟件需求項按照優(yōu)先關系進行排序,以幫助測試經(jīng)理決策在既定資源的情況下,應該如何統(tǒng)籌安排測試工作。
軟件需求項是測試需求分析的起點,這一點在工程實踐中并不絕對。對于不同階段的測試(這里主要指單元測試、集成測試、系統(tǒng)測試和驗收測試,暫不考慮驗證技術和需求設計確認),測試需求開發(fā)所涉及的工作內(nèi)容和方法都會略有差異。例如,如果是一個驗收測試,那么,除了個別的需求需要做進一步明確外,幾乎可以將測試需求等同于用戶需求和業(yè)務需求(由于該類測試是以客戶為主體,因此并不需要向下追溯到軟件需求);又如,如果是系統(tǒng)測試,除了需要對不具備可測試性的軟件需求項進一步開發(fā)外,幾乎可以對軟件需求和測試需求不做區(qū)分。再如,如果是集成測試,測試需求應該從概要設計規(guī)格說明中導出。如果尚不存在概要設計規(guī)格說明,就需要從軟件需求規(guī)格說明出發(fā),與軟件設計人員協(xié)同工作,具體定出構成系統(tǒng)的各個模塊、子系統(tǒng)、分系統(tǒng)的功能、性能、約束性條件以及相互接口關系。根據(jù)協(xié)同工作的結果,開發(fā)出對應的測試需求。最后,如果是單元測試,測試需求應該從詳細設計規(guī)格說明中導出。如果項目不存在概要設計規(guī)格說明,就需要從概要設計規(guī)格說明出發(fā),與軟件設計人員明確每個模塊內(nèi)部的對象屬性與方法以及對象與對象間的通信關系。根據(jù)此結果,進一步開發(fā)相應的測試需求。相應地,上一節(jié)所說的對軟件需求項進行優(yōu)先關系排序在實踐中要變通地理解為對測試需求項進行優(yōu)先關系排序。
讀者朋友可能會問,對于整周期的開發(fā)項目,以上論述是否意味著測試需求開發(fā)的依據(jù)文檔是否要根據(jù)測試所處的階段而不斷調(diào)整呢?是的,筆者認為這也是完全必要的。我們不能指望軟件需求項能夠描述清楚集成或單元測試階段的測試需求。測試需求的開發(fā)總是有賴于相應層次的軟件規(guī)格說明書(只有在開發(fā)團隊不能提供的情況下才確有必要循著“詳細設計規(guī)格說明->概要設計規(guī)格說明->軟件需求規(guī)格說明->用戶需求規(guī)格說明->項目章程、合同、項目建議書、工作說明書等”的順序往前追溯)。通常相關依據(jù)文檔的可測試性越好,測試需求開發(fā)所需要的工作量越少。
除了對軟件需求項、測試需求項做優(yōu)先關系排序、對不具備可測試性或不確定的需求進一步細化、明確化之外,測試需求開發(fā)階段的工作還包括分析各測試需求項之間可能的時間關系排序。哪些測試需求項應該先測,哪些可以延后,那些是可以并行等等,都需要在測試需求開發(fā)階段一并分析清楚。