但是光進行測試案例的執行、按照事先設計好的使用步驟來測試軟件的使用狀況,只能達到上面所講的第一個目的,卻無法滿足第二個目的。原因是,當你的軟件在眾多的使用者手中被使用時,用戶們不見得一定會按照你所設計好的、或所期望的步驟來使用軟件,而是任意地使用的。這個時候軟件就有可能由于設計得不當或內部的缺陷而發生各種不同嚴重程度的問題。這一類的問題光用測試案例的執行不見得可以找得出來、而且通常往往是找不出來的。所以與執行測試案例的執行相并列的,還需要進行一系列的與正常的使用方案并不一樣、甚至毫無關系的測試。這一類的測試是盡量找出在非正;螂S意任意使用的情況下可能出現的Bug。
對這樣的測試目的,我們采用兩種手段來達到:第一種手段是由測試團隊設計并執行各種非正常性的測試,包括邊界測試、壓力測試、安全測試、以及進行一定數量的隨機任意性測試(這些測試種類的詳細定義見書中的解釋)。這樣的一些測試可以找出很多在正常使用情況下無法發現的缺陷。但是光靠測試團隊的有限人力和資源,還是無法照顧到大量的隨機任意性狀態下可能發生的出錯情況。所以你還得想辦法“動員群眾”來達到最好效果。微軟的企業文化在這方面有兩個很有意思的傳統,值得國內業界的借鑒:
第一個叫“抓蟲大掃除”(Bug Bash):在某一個版本的發行里程碑到達之后,在發行之前項目經理向全體開發組織發出通知,告訴大家哪一天的某個時間是Bug Bash的時間,到時候全體成員,包括開發、測試、文檔等團隊、甚至市場部門的員工,全都放下手中的工作,在規定的那一個或幾個小時的時間里,每個人把自己當作是用戶一樣來使用這個未成品的軟件,并且進行競賽,看誰能找到最多的Bug。這樣做的目的是,不是按照測試方案的順序來檢查軟件,而是通過像真正的用戶那樣來使用軟件,即完全是任意性的、無規則的順序,看看在這樣的使用條件下,還有沒有仍舊沒有被發現的嚴重的Bug。 我們往往采用誰找到最嚴重的Bug 就得獎的方法來鼓勵大家盡力找出Bug。抓蟲大掃除一結束,項目經理馬上進行新呈交的Bug數量的統計,然后向開發組織中的全體員工公布。得獎的小有免費的咖啡、午餐、電影票等,大有各種禮物。所以每次Bug Bash 大家都踴躍參加,找到很多測試案例執行時沒找到的問題。
抓蟲大掃除對任意性的手動式的測試很有效,但對任意性的自動測試則效率有限。所以我們又采用第二個手段:“分享大家的計算機”(Machine Share):當我們在測試服務器產品時,需要模擬成千上萬的使用者同時使用服務器的情況、或是需要模擬大量的黑客攻擊的情況。這時候測試團隊的機器往往不夠用,還需要大量額外的機器加入到這樣模擬中來。這時測試團隊就會去逐個請求其他員工、 請他們在下班后不使用計算機的時候,在他們的機器上運行模擬大量使用或攻擊的程序。誰的機器上的程序造成了服務器的崩潰或造成攻擊成功,這個機器的主人就會得到一個免費的冰淇淋。有個人的機器連續三次攻擊成功,測試團隊還制作了一個巨大的冰淇淋畫像掛在他辦公室門前的走廊上,第二天上班大家都看到、并昵稱他為黑客大王。
總結以上綜述,完善的測試是保證軟件質量的關鍵手段,而要做到測試的完善,需要制定完善的測試計劃,同時還需要開發團隊為達到兩種測試的目的進行帶創意的各種執行手段來找出各種缺陷和差錯 。
這里對測試計劃的管理理念以及TDD等概念作了一個簡單的介紹。有關測試計劃的細節、測試方法的種類等,你可以進一步參閱《軟件開發項目管理》一書。在后面的連載文章里,我會再來闡述和討論采用敏捷模式進行開發的一些實踐指南。你要是對如何進一步提高你的軟件質量有興趣或有責任負責推動項目管理的改革,可以通過網絡進一步了解業界在這方面的發展以及最新的動態。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/