軟件測試漫談
2007年5月18日,眾多使用諾頓防病毒軟件的中國個人用戶和企業用戶在重啟系統后出現藍屏,系統不能正常使用。雖然諾頓當天下午就給出了解決方案,但是諾頓作為專業安全公司的信譽受到了嚴重影響,損失重大。該事故原因非常簡單,就是當天的諾頓更新把兩個簡體中文版的Windows系統文件誤當成了病毒。這個本該在實驗室的測試中能被輕易發現的問題,卻由于各種技術或管理原因被漏掉了。
因軟件缺陷而導致重大負面影響或損失的例子數不勝數,業內頂級廠商都不能幸免究其原因,幾乎都可歸入軟件測試不夠充分。如此多的案例,一方面佐證了軟件測試的重要性,另一方面,也說明了做好軟件測試遠不是一件容易的事情。
那么,什么是測試?如何做好測試?
一、軟件測試的經典定義
即使是有經驗的測試專家,也會因其自身經驗和理念的差異,對軟件測試給出不同的定義。業界引用較多的是G.J. Myers在其經典著作《軟件測試之藝術》(The Art of Software Testing)中給出的測試的定義:測試是為了發現錯誤而執行程序的過程。 (The process of executing a program or system with the intent of finding errors.)
另一個經典的定義是IEEE 1999年對測試的定義:測試是在特定條件下,操作一個系統或部件,觀察和記錄結果,對系統或部件的某些方面進行評估的過程。(The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component).
這兩個定義代表了兩種主流的測試理念,前者強調測試的目的是為了發現問題,而后者則認為測試的目的是驗證(在特定條件下)沒有問題,兩者各有特點。這兩種測試理念都有不少追隨者,在實踐上,一般以某種理念為主,同時吸取另一種理念的長處。
以發現問題為目的的測試,會引導測試工程師全力投入易發現問題的測試方向,效率相對較高;但弊端是會忽略不易發現問題的方面,即使是系統的關鍵部分,也可能因不易發現問題而導致測試投入不夠,事實上,“不能發現問題”本身就是主觀認定的,不測更無法發現問題。這種測試理念如果把控不好,很容易導致測試方向錯誤,遺漏重要問題。
以驗證(在特定條件下)沒有問題的測試,這種理念最大的好處是測試范圍明確,即所謂特定條件下,常見的是以產品需求、規格、應用場景來確定測試范圍。一旦范圍明確,測試計劃和測試策略都相對容易制定,測試執行也可以有條不紊的展開。不好的地方,是必要的覆蓋測試會降低平均問題發現效率。
不同的測試理念,必然導致不同的實踐結果。但即使測試認知水平相近,其實踐結果一樣可能迥異。事實上,測試要真正起到質量把關作用,認知是前提,在實踐中的制度設計、資源投入也非常關鍵。
首先,制度設計上,測試團隊必須保持相對獨立,和開發團隊形成互相制衡、共同進步的關系。測試團隊如果在組織管理上隸屬于開發團隊,則必然喪失獨立性,只會淪為橡皮圖章,質量控制也成為空談。
其次,測試消耗巨大,必須保證資源投入。統計表明,一個大型的軟件項目,測試相關的時間和費用往往占到50%以上,這將對商業公司的質量決心構成嚴峻考驗。只有始終把質量放在第一位,才能做到在測試上的持續投入。
二、H3C的測試觀
H3C更認同IEEE的測試觀念,認為從質量控制理論出發,從關注客戶應用的角度,驗證沒有問題比發現問題更重要。測試覆蓋度是軟件質量控制的關鍵衡量指標,只有全面驗證了產品的各項規格,驗證了產品在各種可能的客戶應用場景下都沒有問題,才能對質量有相對的信心。應該在確保測試覆蓋度的前提下,再考慮盡可能高效的發現問題。
在這種認知下,H3C基于多年的測試實踐給出了自己對于測試的定義:測試是指為了高效的驗證被測系統是否滿足目標客戶的需求,是否提供了規格定義的功能和性能,而開展的一系列活動的總和。這個定義反映了H3C的測試理念,同時也是H3C測試實踐的指導原則,指導H3C測試團隊實施“好”的測試。
首先,測試必須目標明確,有的放矢,即驗證規格定義的功能和性能,驗證是否滿足了客戶的各種需求。H3C要求產品的測試需求分析和測試方案設計必須緊緊圍繞產品規格、產品定位、目標客戶的業務模型和應用場景展開,形成覆蓋完備的測試用例體系。在測試執行階段,則提倡二八原則,即80%的精力投入到已有測試用例的覆蓋測試中,20%的時間可供測試工程師發散測試,投入到其認為可以更好的發現問題的活動中,充分發揮工程師的主觀能動性。
其次,測試是一個系統工程。一個好的測試,需要系統的組織各項測試活動,全面的制定測試計劃和測試策略,合理應對風險,設定測試目標,安排測試內容,開展測試執行,評估測試結果與產品質量,確定什么時候測試可以結束,分析測試如何改進等。H3C通過PTM(Product Test Management)構建了一套完整的質量保證流,對貫穿產品生命周期全過程的測試活動進行規范,H3C測試團隊從產品立項第一天起就開始介入,每一個開發活動,都設置了對應的測試活動來進行質量保證,并通過事前引導、事中監控、事后審計來使得質量控制措施落到實處。
最后,高效的測試需要有強有力的工具和先進的方法支撐。所謂測試無極限,沒有工具和方法的支撐,在有限的人力、時間和資源情況下,覆蓋近乎無窮盡的測試需求是一個不可能完成的任務。在測試分析設計階段,H3C提供經過實踐檢驗的工程方法,指導測試工程師通過分析分解,抽象融合,以相對較少的測試方案有效覆蓋最多的測試需求。在測試執行階段,則有大量自開發和第三方的測試儀器和測試工具,輔助測試工程師高效率的開展復雜的測試,并且通過公司多年開發積累的系列自動化測試腳本來覆蓋產品功能,保證每個發布版本達到100%的測試覆蓋度。
三、結束語
測試,從來都不簡單,也容不得半點馬虎,只有知行合一,踏踏實實把每個環節做到極致,才能通過用戶應用的最終考驗。