如何設計編制軟件測試用例
一、測試用例是軟件測試的核心
二、什么叫測試用例
三、編制測試用例
四、測試用例在軟件測試中的作用
五、相關問題
隨著中國軟件業的日益壯大和逐步走向成熟,軟件測試也在不斷發展。從最初的由軟件編程人員兼職測試到軟件公司組建獨立專職測試部門。測試工作也從簡單測試演變為包括:編制測試計劃、編寫測試用例、準備測試數據、編寫測試腳本、實施測試、測試評估等多項內容的正規測試。測試方式則由單純手工測試發展為手工、自動兼之,并有向第三方專業測試公司發展的趨勢。
一、測試用例是軟件測試的核心
軟件測試的重要性是毋庸置疑的。但如何以最少的人力、資源投入,在最短的時間內完成測試,發現軟件系統的缺陷,保證軟件的優良品質,則是軟件公司探索和追求的目標。每個軟件產品或軟件開發項目都需要有一套優秀的測試方案和測試方法。
影響軟件測試的因素很多,例如軟件本身的復雜程度、開發人員(包括分析、設計、編程和測試的人員)的素質、測試方法和技術的運用等等。因為有些因素是客觀存在的,無法避免。有些因素則是波動的、不穩定的,例如開發隊伍是流動的,有經驗的走了,新人不斷補充進來;一個具體的人工作也受情緒等影響,等等。如何保障軟件測試質量的穩定?有了測試用例,無論是誰來測試,參照測試用例實施,都能保障測試的質量?梢园讶藶橐蛩氐挠绊憸p少到最小。即便最初的測試用例考慮不周全,隨著測試的進行和軟件版本更新,也將日趨完善。
因此測試用例的設計和編制是軟件測試活動中最重要的。測試用例是測試工作的指導,是軟件測試的必須遵守的準則。更是軟件測試質量穩定的根本保障。
二、什么叫測試用例
測試用例(Test Case)目前沒有經典的定義。比較通常的說法是:指對一項特定的軟件產品進行測試任務的描述,體現測試方案、方法、技術和策略。內容包括測試目標、測試環境、輸入數據、測試步驟、預期結果、測試腳本等,并形成文檔。
[Kiki] 目前有以下一些解釋:
"A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement." - IEEE Standard 610 (1990)
"Test cases are ways of stating how we will verify what the system actually does, and therefore they should be tracked and maintained as requirements. We introduce the notion of requirements type to separate these different expressions of requirements." - RUP
不同類別的軟件,測試用例是不同的。不同于諸如系統、工具、控制、游戲軟件,管理軟件的用戶需求更加不統一,變化更大、更快。筆者主要從事企業管理軟件的測試。因此我們的做法是把測試數據和測試腳本從測試用例中劃分出來。測試用例更趨于是針對軟件產品的功能、業務規則和業務處理所設計的測試方案。對軟件的每個特定功能或運行操作路徑的測試構成了一個個測試用例。
三、編制測試用例
著重介紹一些編制測試用例的具體做法。
1、測試用例文檔
編寫測試用例文檔應有文檔模板,須符合內部的規范要求。測試用例文檔將受制于測試用例管理軟件的約束。
軟件產品或軟件開發項目的測試用例一般以該產品的軟件模塊或子系統為單位,形成一個測試用例文檔,但并不是絕對的。
測試用例文檔由簡介和測試用例兩部分組成。簡介部分編制了測試目的、測試范圍、定義術語、參考文檔、概述等。測試用例部分逐一列示各測試用例。每個具體測試用例都將包括下列詳細信息:用例編號、用例名稱、測試等級、入口準則、驗證步驟、期望結果(含判斷標準)、出口準則、注釋等。以上內容涵蓋了測試用例的基本元素:測試索引,測試環境,測試輸入,測試操作,預期結果,評價標準。
[Kiki] 對測試用例劃分等級有很多感觸:許多時候當開發部門應客戶需要或發現嚴重bug而快速發布一個新版本時,要求在限定的時間內快速測試以確保系統基本功能正常時,有些測試人員不知如何從現有的測試用例中挑選測試用例,更有甚者還是按順序測試。所以一定需要劃分級別,方便BVT或上述的測試。具體參加:《快速劃分測試用例的優先級》
2、測試用例的設置
我們早期的測試用例是按功能設置用例。后來引進了路徑分析法,按路徑設置用例。目前演變為按功能、路徑混合模式設置用例。
按功能測試是最簡捷的,按用例規約遍歷測試每一功能。
對于復雜操作的程序模塊,其各功能的實施是相互影響、緊密相關、環環相扣的,可以演變出數量繁多的變化。沒有嚴密的邏輯分析,產生遺漏是在所難免。路徑分析是一個很好的方法,其最大的優點是在于可以避免漏測試。
但路徑分析法也有局限性。在一個非常簡單字典維護模塊就存在十余條路徑。一個復雜的模塊會有幾十到上百條路徑是不足為奇的。筆者以為這是路徑分析比較合適的使用規模。若一個子系統有十余個或更多的模塊,這些模塊相互有關聯。再采用路徑分析法,其路徑數量成幾何級增長,達5位數或更多,就無法使用了。那么子系統模塊間的測試路徑或測試用例還是要靠傳統方法來解決。這是按功能、路徑混合模式設置用例的由來。
3、設計測試用例
測試用例可以分為基本事件、備選事件和異常事件。設計基本事件的用例,應該參照用例規約(或設計規格說明書),根據關聯的功能、操作按路徑分析法設計測試用例。而對孤立的功能則直接按功能設計測試用例;臼录臏y試用例應包含所有需要實現的需求功能,覆蓋率達100%。
設計備選事件和異常事件的用例,則要復雜和困難得多。例如,字典的代碼是唯一的,不允許重復。測試需要驗證:字典新增程序中已存在有關字典代碼的約束,若出現代碼重復必須報錯,并且報錯文字正確。往往在設計編碼階段形成的文檔對備選事件和異常事件分析描述不夠詳盡。而測試本身則要求驗證全部非基本事件,并同時盡量發現其中的軟件缺陷。
可以采用軟件測試常用的基本方法:等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、邏輯覆蓋法等設計測試用例。視軟件的不同性質采用不同的方法。如何靈活運用各種基本方法來設計完整的測試用例,并最終實現暴露隱藏的缺陷,全憑測試設計人員的豐富經驗和精心設計。
四、測試用例在軟件測試中的作用
1、指導測試的實施
測試用例主要適用于集成測試、系統測試和回歸測試。在實施測試時測試用例作為測試的標準,測試人員一定要按照測試用例嚴格按用例項目和測試步驟逐一實施測試。并對測試情況記錄在測試用例管理軟件中,以便自動生成測試結果文檔。
根據測試用例的測試等級,集成測試應測試那些用例,系統測試和回歸測試又該測試那些用例,在設計測試用例時都已作明確規定,實施測試時測試人員不能隨意作變動。
2、規劃測試數據的準備
在我們的實踐中測試數據是與測試用例分離的。按照測試用例配套準備一組或若干組測試原始數據,以及標準測試結果。尤其象測試報表之類數據集的正確性,按照測試用例規劃準備測試數據是十分必須的。
除正常數據之外,還必須根據測試用例設計大量邊緣數據和錯誤數據。
3、編寫測試腳本的"設計規格說明書"
為提高測試效率,軟件測試已大力發展自動測試。自動測試的中心任務是編寫測試腳本。如果說軟件工程中軟件編程必須有設計規格說明書,那么測試腳本的設計規格說明書就是測試用例。
4、評估測試結果的度量基準
完成測試實施后需要對測試結果進行評估,并且編制測試報告。判斷軟件測試是否完成、衡量測試質量需要一些量化的結果。例:測試覆蓋率是多少、測試合格率是多少、重要測試合格率是多少,等等。以前統計基準是軟件模塊或功能點,顯得過于粗糙。采用測試用例作度量基準更加準確、有效。
5、分析缺陷的標準
通過收集缺陷,對比測試用例和缺陷數據庫,分析確證是漏測還是缺陷復現。漏測反映了測試用例的不完善,應立即補充相應測試用例,最終達到逐步完善軟件質量。而已有相應測試用例,則反映實施測試或變更處理存在問題。
五、相關問題
1、測試用例的評審
測試用例是軟件測試的準則,但它并不是一經編制完成就成為準則。測試用例在設計編制過程中要組織同級互查。完成編制后應組織專家評審,需獲得通過才可以使用。評審委員會可由項目負責人、測試、編程、分析設計等有關人員組成,也可邀請客戶代表參加。
2、測試用例的修改更新
測試用例在形成文檔后也還需要不斷完善。主要來自三方面的緣故:第一、在測試過程中發現設計測試用例時考慮不周,需要完善;第二、在軟件交付使用后反饋的軟件缺陷,而缺陷又是因測試用例存在漏洞造成;第三、軟件自身的新增功能以及軟件版本的更新,測試用例也必須配套修改更新。
一般小的修改完善可在原測試用例文檔上修改,但文檔要有更改記錄。軟件的版本升級更新,測試用例一般也應隨之編制升級更新版本。
3、測試用例的管理軟件
運用測試用例還需配備測試用例管理軟件。它的主要功能有三個:第一、能將測試用例文檔的關鍵內容,如編號、名稱等等自動導入管理數據庫,形成與測試用例文檔完全對應的記錄;第二、可供測試實施時及時輸入測試情況;第三、最終實現自動生成測試結果文檔,包含各測試度量值,測試覆蓋表和測試通過或不通過的測試用例清單列表。
有了管理軟件,測試人員無論是編寫每日的測試工作日志、還是出軟件測試報告,都會變得輕而易舉。
開發一個軟件產品,會發布多個版本,伴隨著測試用例(Test case)的不斷維護, 使測試用例不斷完善并與產品功能、特性(features)的變化保持一致,所以測試用例是和產品版本相關聯的。特別是對提供軟件服務的軟件產品,多個版本常常共存,為客戶提供服務,這時多個版本的測試用例也是并存的,所以在新建、修改、刪除測試用例時要十分小心,并有相應的規則。
根據產品特性和test case一致性,分下面幾種情況分別處理:
1. 產品特性沒變,只是根據Late Discovery Bug 或 Remedy Ticket 來完善 test case,只有這時候可以修改Test case, 也就意味著當前修改的test case,對目前和以前的版本都有效。
2. 原有產品特性發生了變化,不是new feature, 而是enhanced features(功能增強), 這時候原有的 test case 只對先前版本(如version 1.0、2.0) 有效,而對新的版本(如 version 3.0)無效,這時絕不能修改 test case ,只能增加新的 test case,這一點很重要。原有的 test case 依然對原有版本有效(如version 1.0、2.0)。
3. 原有功能取消了,這時只要在新版本上使之對應的test case置為inactive(無效)。
4. 完全新增加的特性,大家比較清楚,增加對應的、新的測試用例。
這樣,新舊版本的相同測試用例得到一致的維護,測試用例數也不會成幾、十幾倍的增加,可以真正保證 test case 的完整性、有效性!