王華
(中國電子科技集團公司第二十九研究所 四川省成都市 610036)
傳統測試中,通常在測試計劃階段測試人員需要按照需求或設計要求寫出測試方案和測試用例,但在我們沒有真正接觸一個軟件之前,我們很難完全了解這個軟件,因此寫出的測試方案和測試用例的可操作性有可能不強,而且在進行軟件測試分析時往往過于注重對測試需求點的分解,對軟件的運行欠缺系統性的整體分析,這對軟件質量的保證絕無裨益,基于此,有必要對軟件測試分析的方法進行研究。本文提出“探索式軟件測試分析方法”,利用探索式方式為軟件測試分析提供一種思考路徑。
James Bach將傳統的測試行為分為檢驗和測試。檢驗就是使用確定的測試步驟或者測試腳本來檢驗系統,而測試則是通過對未知的探索、學習和實驗等一系列科學手段,發現并設計出新的測試用例,最后執行這些測試用例來驗證系統。因此他認為真正的測試都需要探索,而測試分析則是探索式測試的核心部分,沒有良好的測試分析是不可能做好探索式測試的。
探索式軟件測試的思維模型簡稱為CPIE,即收集(collation)、劃分優先級(prioritization)、分析(investigation)和實施(experimentation)。
CPIE過程是一個循環的過程,在軟件的探索式測試過程中,信息的收集和優先級的劃分,是測試分析的前提,有利于加強對被測軟件的系統性認識,提高后續測試分析的針對性,而測試分析和實施又是互相驅動和完善的過程。
基于探索式軟件測試思維模型的特點,本文將從信息的收集、劃分優先級和基于場景的探索式測試分析三個方面對探索式軟件測試分析方法進行研究。
探索式軟件測試思維模型的第一步是收集,即接收到測試任務后,測試人員首先需要收集關于被測軟件的所有信息,如項目信息、需要達成的測試目標等。
2.1.1 項目信息
項目信息一般可從研制方案報告、軟件研制要求、研制任務書、需求規格說明等研發文檔中獲取,但探索式測試分析更強調測試人員與項目利益相關方(如用戶、軟件負責人、項目經理)的溝通交流,通過交流獲取項目相關信息,如軟件的使用用戶,用戶可能的使用行為、用戶的興趣點和使用目的、軟件重要等級、進度節點、測試環境、軟件復用信息、利益相關方明確的測試要求、項目相關的人員信息等。

圖1:測試場景分析法
獲取的項目信息是后續劃分優先級和測試分析的重要輸入,從信息的收集及與項目利益相關方的交流中,我們往往能夠發現軟件的典型使用場景和風險點,從而明確測試分析的重點。
項目信息的獲取應該是持續性的,貫穿于整個測試生命周期之中,并根據實時獲取到的項目信息明確或更新測試目標、優先級劃分及測試分析的內容。
2.1.2 項目測試目標
項目測試目標一般包括兩個方面:進度目標和質量目標。測試人員需要根據獲取的項目信息及與項目利益相關方的交流,明確利益相關方需要測試達成的測試目標是什么,即明確在什么時候以什么質量完成測試。
進度目標可結合項目研發計劃進行明確。質量目標可從以下維度考慮:是否滿足需求、是否滿足用戶標準、用戶反饋的重大缺陷是否已經解決。但同時質量目標應便于量化,參考量化指標如:用例密度、千行代碼缺陷數、需求覆蓋率、邏輯覆蓋率等,并參考同屬性項目歷史度量數據進行量化指標的分析評價。
測試目標可根據實際情況進行分解,如根據被測軟件不同特性的開發進度和交付節點的不同可確定不同的進度目標,根據被測軟件不同特性的重要程度、復用情況不同也可建立不同的質量目標,這便于為后續測試優先級的劃分和測試分析的重點提供依據。
信息收集完成之后,進入探索式軟件測試思維模型的第二個過程:劃分優先級。即測試人員需要對被測軟件進行優先級的劃分,優先級的劃分可從項目周期、模塊或特性的重要等級、軟件成熟度和測試目標等維度進行探索分析,分析思路如下:
(1)項目周期:短周期項目可將基本場景的遍歷作為高優先級;長周期項目可將特殊場景和異常場景的深度挖掘作為高優先級;

表1:數據記錄軟件子場景分析
(2)模塊或特性的重要等級:可根據用戶的主要應用和需求的優先順序來確定模塊或特性的重要等級,重要等級高的模塊或特性作為高優先級;
(3)軟件成熟度:新增部分的用戶需求應作為高優先級,在新增部分做重點分析及測試,即加強深度測試;繼承性部分加強特殊場景和異常場景的分析及測試,作為繼承性部分的高優先級;
(4)測試目標:根據確定的測試目標可在以上維度進行優先級的調整,保證整體測試目標的達成。
測試人員劃分好優先級后就進入探索式軟件測試思維模型的第三個過程:分析,即測試人員需要對確定即將測試的軟件進行分析,并預測其可能輸出的結果。
探索式軟件測試分析的立場是測試人員結合場景真正使用了解被測試軟件,因為只有對被測軟件有一定的了解和掌握才能高效地對該軟件進行測試,因此,探索式軟件測試分析注重對軟件運行場景的分析。
2.3.1 場景分析過程描述
對軟件運行場景的測試分析是一個從整體到局部的過程,可先將整個測試對象作為一個大系統,從系統角度進行探索分析。首先,前期收集的信息和優先級的劃分可作為測試分析的重要輸入,從信息的收集和用戶的交流中,我們能夠獲取軟件的使用用戶,進而探索分析其興趣點和使用目的,從用戶使用角度盡可能挖掘所有顯性和隱性的使用需求和可能的用戶使用行為,并探索分析潛在的系統破壞行為,即可能造成軟件失效的危險事件,從而提煉出典型的應用場景。然后,根據提煉出的典型應用場景,結合整個系統的外部輸入和輸出梳理系統業務流程圖,從整個全局的系統業務流程圖對運行場景進行探索分析不同的可能性,分析思路可參考典型的場景法,見圖1所示。
通過對系統業務流程圖的探索分析,獲取用戶可能的使用行為事件,事件觸發形成場景,不同的事件,其觸發和處理結果形成事件流;梳理場景中的主線,即可確定基本流;同時圍繞基本流,結合潛在的系統破壞行為,形成備選流事件。
2.3.2 場景分析實例
基于場景的探索式測試分析是循序漸進、逐漸分解的過程,逐層從主場景向下進行探索分析形成子場景,最終梳理形成整個被測軟件的所有運行場景。本次研究選取了某數據記錄軟件作為試點,對該軟件基于場景的探索式測試分析具體過程為:根據提煉出的典型應用場景,結合整個系統的外部輸入和輸出梳理系統業務流程圖,對業務流程圖中的主要輸入輸出業務點分析其可能存在的用戶使用行為、系統事件、以及潛在的系統破壞行為,結合這些行為事件,根據圖1典型的測試場景分析法梳理形成子場景,針對每一個子場景進行測試要點的探索分解,直到分解到不能再進行細分為止。本次實踐過程中,對該數據記錄軟件子場景的具體細分過程見表1,對每個子場景的分解從測試目標、輸入描述、輸入來源、觸發方式、測試要點、要點分解,觀測點及預期輸出共8個方面進行探索分析。
傳統的測試分析能夠根據已有的業務需求和驗收條件梳理出每個需求驗收點,但欠缺對軟件運行的整體系統性分析,為解決這一問題,本文提出探索式軟件測試分析方法,并通過對軟件運行場景的系統性分析給軟件測試者一個基于場景的探索式測試分析思路。隨著測試人員對項目信息的收集、優先級的劃分、軟件運行場景的逐層分解和分析,對軟件有了越來越深入的了解之后,測試人員會發現哪些是軟件運行過程中最為重要且風險最高的場景和技術點,并根據分析結果及時調整測試思路或方法,補充測試點,從而獲得更多高價值的測試用例,這將使測試變得更加有效率。