1.4 軟件測試的核心I:測試用例 前文提到,測試用例代表了軟件測試的工具方面,是它的核心之一。那么什么是測試用例,它又有哪些要點需要我們去掌握?
1.4.1 什么是測試用例
軟件測試的核心行為就是針對要測試的軟件設置測試用例。所謂測試用例,英文名為Test Case,是一個與程序部分行為以及輸入、輸出相關的描述或者標識。
【測試用例的IEEE定義】
美國電氣與電子工程師協會(IEEE,The Institute of Electrical and Electronics Engineers),它出臺了一個標準的測試用例定義,即"測試用例是描述輸入實際值和預期輸出行為或者結果的文檔,它同時也標識了測試過程結果與約 束。"
在實際工作中,花費測試工程師大部分時間的,都是與測試用例相關的。
1.4.2 測試用例的幾大要素
一般來說,測試用例應該清楚地描述出對被測試軟件發出什么數據或者條件,以及該輸入所期望的結果。在小白這樣的商業網站,測試部門規定測試用例應該具備如下幾個要素。
1.標識符
這一點雖然和測試用例的內容沒有關系,但卻是測試過程中不可缺少的。比如,小白所在的部門每周都要開一次例會,向經理或者開發部門的同事說明當前整個產 品的測試狀態,有時候需要特別指出某個測試用例的內容,那么用一個簡單的代號來代表這一測試用例是非常適合的,這個代號一般情況下都是一個正整數,比如 1、88、437等這樣。在小白所在的公司,測試用例是存放在一個數據庫中的,代號也就自然地采用了數據庫系統中的標識符字段類型。如果采用其他的方式存儲測試用例,可以人工指定,只要保證標識符不重復就可以了。
如圖1-6顯示了應用于真實測試場景的某測試用例文檔,它實際上是一個Office Word文件,測試工程師(即編寫者)在文件內容中手工指定了各個測試用例的標識符。

圖1-6 測試用例的標識符
2.測試的內容
測試內容可以說是測試用例最重要的部分,它一般指明了當前測試用例的運行目的,比如測試網頁是否可以打開、單擊按鈕后是否能夠顯示正確的計算結果等。在很多情況下,測試內容與下個要點:輸入的條件區別并不是很清楚。
3.輸入的條件
輸入條件可以是操作步驟,也可以是輸入的數據,還可以是系統運行環境的需求(比如處于某種特別的操作系統環境內這一條件)。圖1-6中的各個測試用例,都詳細地寫明了每一步驟的具體操作。
【復現步驟】
對于被測試軟件而言,不同的輸入條件會導致不同的輸出預期,因而可能出現的Bug表現并不一定相同。如果重復某些輸入條件,總會導致某個Bug的出現,那么就把這些輸入條件稱為Bug的復現步驟(Repro Step)。
4.輸出的預期 該項信息描述了在當前的輸入條件下,預期的輸出。比如計算器程序中十進制數字的2+3的輸出應該等于5。若輸出預期與實際結果不同,則應該考慮 為Bug的可能性(有的時候,輸出預期也會隨項目的進度而變化,因此預期與實際不同并不意味著100%是Bug,此時需要與項目經理等相關人員進行協 商)。
5.測試環境信息
這一部分的內容描述了該測試用例所適用的環境,比如操作系統的版本,所依賴硬件軟件的版本、語言等。測試環境信息有時候也可以成為輸入條件或者 復現步驟的一部分,比如某個按鈕只有在IE瀏覽器中才會出現、某個Bug只在IE瀏覽器中才會產生,那么IE既是測試環境信息,也是輸入條件和復現步驟。
6.與其他測試用例的依賴關系
在測試某些軟件的時候,比如MSN,如果登錄這個測試用例都無法通過,那么剩下的發消息,發文件等測試用例也肯定繼續進行(除去直接調用接口的 那些測試之外),這就是一種測試用例之間的依賴關系。合理地應用測試用例之間的依賴關系,能夠提高測試效率,減少無謂的測試時間浪費。
7.測試用例需要被開發、審閱、使用、維護和保存
這也是測試工作很重要的一部分。軟件的說明書Spec可能會變化,因此測試用例需要變化,這就要求對測試用例進行增加、修改和刪除。測試用例是 文檔,需要有固定的場所進行保存,一般是數據庫或者文件。測試用例需要審閱,以達到預期的效果和更高的工作效率(重復的測試用例肯定會浪費測試工程師的時 間)。
1.5 軟件測試的核心II:測試工程師
除了測試用例之外,軟件測試的另一個核心,同時也更為關鍵,就是測試工程師了。這是因為,測試用例也是由測試工程師來編寫的,受人的因素影響很大。可以說,人是決定軟件成敗的主要因素。本節將介紹測試工程師所必備的一些素質。
1.5.1 測試工程師與軟件質量保障
有的時候我們在招聘廣告上能夠發現有些公司招聘測試人員的時候,列出的職位名稱是軟件質量保障工程師(QA,quality assurance),那么這兩種稱呼是否是代表同一種工作內容呢?
回答是基本一樣,但有細微不同。軟件測試工程師的主要職責在于發現并確認Bug的解決與否,而軟件質量保障工程師則更進一步,在測試工程師的職 責之外,還包括創建、維護為保障軟件質量而確立的規范、規則與流程,比如軟件配置管理(Software Configuration Management,又稱SCM工程師)等。
【字面意義的理解】
從字面意義上來看,測試工程師主要針對軟件的已有Bug,類似體檢部門;而軟件質量保障工程師則不光針對已有Bug,還對預防Bug的產生提出建議,類似健康顧問。當然,在實際工作中,兩者的區別并不是那么清晰的,在很多公司內部,他們所從事的工作內容是完全一致的。
1.5.2 測試工程師應該具備的素質
一個合格的測試工程師,應該具備如下專業素質:
具備基本的數據結構,操作系統等專業知識。這一點對于從事性能測試的人員來說更為重要。
具備一定的程序開發經驗。掌握一到兩門語言對于進行自動測試是大有益處的,另外,具有程序開發經驗,也更容易理解軟件Bug的來龍去脈。這一到 兩門語言可以是某些高級語言,比如C#和VB.net,以及一種腳本語言,比如JavaScript、VBScript或者Python等的組合。
軟件使用經驗豐富,對于軟件的不正常行為敏感。這一點對于發現Bug是很有幫助的。
同時,測試工程師還應該具備如下的性格特征。
有好奇心,樂于探索軟件功能,樂于嘗試新的軟件產品。
樂于探索謎題,追根溯源。對于一個Bug,必須有追根溯源的精神,才能夠發現它的特點,這個性格特征在判斷Bug的產生原因,以及是否與其他Bug重復等日常的工作內容中都會展現。
有耐心,不輕言放棄。測試工程師在工作中經常會試圖復現一個軟件中的Bug,這需要細心、耐心和堅持。
必須具備一定的創造性。測試工程師是無法模擬出用戶使用軟件的所有場景的,因此必須具備一定的創造性,通過測試更多情況下軟件的不同表現,發現被測軟件更多的問題。
具備一定的溝通和交流技巧。這一點尤為重要,測試工程師由于工作性質的要求,要給開發工程師所編寫的代碼找到問題。因此在平時的工作中要注意利 用良好的溝通、交流技巧,使得開發工程師能夠接受自己正確的觀點,在保證軟件質量的情況下不影響團隊的合作氛圍,讓整個團隊都體會到測試工程師和測試工作 的重要性。
1.5.3 測試工程師的職業發展
軟件測試工程師在我國尚屬一個比較新的職業,目前專業人才相對缺乏。另外,和軟件開發相比,軟件測試具有進入門檻相對較低,職業生涯相對較長的特點。因此,從事軟件測試的職業是具備較好的發展前途的。隨著工作經驗的不斷積累,比較好的發展路 徑是:
初級測試工程師。進行黑盒手工功能性測試(第2章我們將講解什么是黑盒測試、功能性測試)或者本地化測試等,一般是從學校畢業后參加工作的2~3年,正處于學習或者進一步熟悉、鞏固測試基本知識與方法的階段。
中級測試工程師。進行測試計劃的編寫,測試工具的開發,各種測試的實施等。處于這一階段的人員,相比于初級測試工程師工作了更長的一段時間,掌握了測試的基本理論和知識,對軟件開發流程有了比較深入的了解,同時對某項軟件開發技術有較深入研究的程度。
高級測試工程師或者測試經理。經歷了初級和中級測試工程師的磨煉,從頭至尾參與了一個產品或者多個產品的生命周期,在其他方面能力也具備的情況下,就可以從事這樣的職位了。工作職責一般是統籌軟件的測試計劃,決定測試方法,確立、實現測試框架,管理控制測試進度等。
開發人員。實際上,從測試人員轉為開發人員的比例不算小,因為測試人員對產品比較熟悉,如果自身的開發能力較強,往往具備純開發人員所不具備的測試知識和用戶視角,因此編寫的代碼質量更高。
以上是軟件測試工程師的發展路線。在公司的選擇上,一般來講,大型或者國外的企業往往更加重視測試,所以軟件測試工程師更多出現在這樣的企業中,導致其平均薪資水平相對比較高。對于想從事初中級測試工程師的讀者來說,一般可以考慮如下4類公司。
國內的IT相關企業。這些企業大致有各軟件開發公司,通信、電子、游戲公司等。
外資企業在國內的研發中心。這類公司的產品開發人員相對更集中在公司總部,同時為了節省成本,測試工程師則較多地安排在國內。
為外資企業做軟件外包的國內企業。微軟、Google、IBM等很多在華的跨國企業都會聘用這些企業的員工進行外包測試工程師的工作。
大型網站。中小型網站往往沒有專職的測試人員;大型網站由于架構較復雜,分工相對更為專一,會有專職的測試工程師隊伍以保證質量。
1.6 本章小結
本章通過剛剛作為軟件測試工程師新人的小白短短幾天的經歷,對軟件測試的基礎知識進行了簡要的介紹。
在本章的開頭,給出了公認的軟件定義。所謂軟件,就是計算機系統中的程序和相關文件或文檔的總稱。
隨著軟件越來越復雜,軟件危機逐漸出現,人們為了從軟件開發的初期就避免出現這樣的問題,研究總結出若干軟件生命周期的模型,主要有如下4種:
Big-Bang大爆炸模型;
Code and Fix邊做邊改模型;
Waterfall瀑布模型;
Spiral螺旋模型。
通過在工作中應用這些模型,很好的進行了軟件項目管理。
但是,軟件中的Bug依然不可避免。所謂Bug就是軟件的錯誤或者偏差。在軟件開發的過程中,越早發現Bug就越能節約軟件開發的成本。
編寫測試用例,利用人工或者自動的方法尋找被測試軟件Bug并確認修復,是軟件測試工程師在工作中要完成的職責,加上有效的預防Bug產生的規范,就可以在很大程度上保障軟件的質量。
(未完待續)
相關鏈接:
捉蟲記--大容量Web應用性能測試與LoadRunner實戰(連載一)
捉蟲記--大容量Web應用性能測試與LoadRunner實戰(連載二)