軟件測試為什么失敗?
案例1: A公司是一家從事網游點卡交易的互聯網公司,去年年底我司做調研時發現一個問題:測試部門有近40人,獨立于研發團隊,團隊成員分為自動化測試和手工測試兩個小組,測試經理則是從IBM過來的,但據研發和測試人員反應,測試人員的地位非常低,自動化測試崗位形同虛設,沒有起到任何作用,在互聯網軟件開發的過程中,測試人員的價值非常有限,測試員工的成就感非常低,最近一個月也有30%-40%的離職率,這個問題讓負責測試部門的陳總非常頭痛,一方面人員不太穩定,一方面軟件質量的問題越來越多....
案例2:B公司是深圳一家醫療電子企業,公司有專業的軟件測試部,獨立向研發管理部匯報。經過我司的調研,B公司的軟件測試流程已具備,專業的測試人員也有一批,但測試人員相對于開發人員普遍薪酬低,缺乏激勵,加上公司領導層對研發過程質量不太關注,研發過程中測試不充分,導致許多致命的問題到客服現場才發現,最后又把責任推到測試頭上,測試人員不愿意承擔責任,導致團隊的測試效率非常低下,開發與測試之間相互推諉....
以上兩個案例,是中國目前很多企業遇到的問題。軟件究竟需不需要測試,軟件的測試究竟怎么做?如何通過軟件測試來保證產品質量?....在軟件開發越來越占重要地位的今天,越來越多的領導層已認識到軟件測試的重要性,但除了華為、中興、騰訊等為數不多的幾個公司做得好一點之外,很多企業都還在摸索,測試部門的價值在一個公司里往往成了爭論的焦點,測試人員的地位也無法與開發人員抗衡。
筆者曾經分別任職于華為和阿里巴巴公司,也曾經服務過一些中小型軟件公司,成功和失敗的案例都有,總體來說,中國目前的軟件測試體系還不成熟,很多公司試圖做好軟件測試,但由于在測試管理、測試技術、測試流程等方面缺乏高度的認識,往往導致測試失敗,如測試人員的待遇問題、測試技術如何提升、自動化需要做到什么程度等等,測試為什么失敗?根據筆者多年的測試管理經驗,可以歸結為以下三個方面:
1)缺乏測試組織的支撐。許多公司的測試組織仍然附屬于開發部門,沒有獨立的測試環境,不能從公平、公正的角度指出軟件存在的缺陷,并要求在限定的時間對軟件的缺陷進行修復。國外較成熟的測試組織(如微軟,Yahoo等),測試組織屬于QA部門,而不是研發部門,這樣更有利于保證產品質量。另一方面,許多公司對測試部門的定位是QC(質量控制)部門,而測試部門并沒有控制質量的權利,而成了QC(質量檢測)的角色,即在最后一個環節對軟件產品進行驗證,這個時候為時已晚,產品質量的很多問題可能已無法測試出來。在華為公司,測試和開發是平等的,兩個部門都是PDT(產品開發團隊)的組成部分。
PDT是臨時小組,在項目開始時成立,在產品成功發布后解散,PDT成員在概念階段一起作整個項目的計劃,PDT成員在執行階段一起管理整個項目,測試人員和開發人員同時參與項目的整個過程。只有測試人員一開始就進入產品開發團隊,才能有效的保證產品質量,因此,建立獨立于開發的測試體系是非常必要的。
2)缺乏測試流程的保障。很多公司建立了規范了開發流程,如CMMI或IPD等等,但軟件測試往往成了短板,如開發的版本發布頻繁,測試人員疲于奔命,測試人員缺乏質量檢測標準,測試過程中的軟件需求變更過快,沒有測試結束標準等...這些都是缺乏規范的測試流程的表現。沒有規范的測試流程,研發人員會經常會以此為借口,發布沒有完善的軟件版本,開發過程中不做版本規劃,修改缺陷時經常返工...
這些,都會增加測試人員的工作量,而作為開發的下游部門,測試人員很難去改變開發人員的這些不規范的行為,只能用大家公認的流程去約定大家的開發行為,如單元測試、集成測試、系統測試、驗收測試的入口條件、中斷條件、出口條件等。同時,在開發過程中,對開發人員和測試人員的行為進行約束,如開發修復缺陷后需要返工,要與績效掛鉤;測試人員漏測試致命或嚴重缺陷需要處罰等等。目前,業界較流行的開發流程采用V模型:
V模型的特點是:開發與測試緊密相連。在V模型中,從項目的需求分析、概要設計、詳細設計到具體的編碼編寫。開發的每一個環節都和軟件的測試緊密相扣,可以有效的保證產品質量。各個階段測試的工作如下:
① 需求階段主要活動是:測試工作從需求文檔中,設計系統測試的用例,按照需求文檔的功能劃分,突出測試重點。完成系統測試的計劃工作。
② 在功能概要設計階段活動是:依據功能概要設計的目標,設計測試用例,對集成測試階段的目標,作好一個準備。
③ 在詳細設計階段的活動是:在這一階段,對應的測試工作是單元測試工作,通過詳細設計的說明,測試工作人員可以準備好測試用例。這個是最小的測試執行單元。
④ 在編碼階段的活動是:測試工作可以根據上述的單元測試計劃,進行單元測試了。一面編程,一面進行單元測試。充分的單元測試可以極大的提高程序的質量。因為很大的一部分錯誤都是在單元中發現的,如條件組合問題、邊界值問題等。
編碼工作全部完成后,測試工作就可以按照計劃進行。從單元測試、集成測試、到系統測試。最后還有驗收測試,驗收測試工作主要是面向客戶,向客戶演示軟件功能的實現。通過系統測試的用例。給客戶展示,并確保用例全部執行通過,測試工作完成。建立規范的測試流程對測試部門的效率提升是非常關鍵的一環。
3)缺乏合適的測試人員。很多公司的HR認為對測試人員的要求較低,不需要懂得太多的知識,也不需要具備很多經驗,測試誰都可以做。其實,這些觀點都是錯誤的。要招聘到一個合適的測試人員不是一件容易的事。因為一個合格的軟件測試人員需要同時具備以下條件:
① 具備一定的產品和業務知識。
② 有一定的懷疑精神,有尋根問底的精神。
③ 良好的溝通能力。
④ 具備一定的編程能力,只有懂一兩門編程語言,跟開發的交流會更加順暢。
⑤ 具備良好的文檔編寫能力,能編寫較規范的測試報告。
⑥ 總結及分享的能力,能及時總結測試經驗及與他人分享的能力。
⑦ 學習能力較強,對新業務、新技術和新產品功能的掌握較快。
⑧ 具備發散性思維,需要對客戶的正常操作及異常操作進行推斷。
⑨ 掌握一定的自動化測試方法和工具,能對測試效率不斷進行改進。
除了上面幾點之外,還有些公司對測試人員的英文水平要求較高,或者要求有帶領團隊的能力。可見,測試人員需要掌握的知識還真多,具備以上要求的測試人員或管理人員少之又少,除了招聘之外,公司內部也可以進行培養。
由此可見,人、流程、組織對軟件測試的成功進行缺一不可。當然,研發管理的規范性,測試人員的績效考核和激勵機制也是非常重要的因素,一定要解決測試團隊的成就感問題,同時,應建立測試人員的職業通道。只有這樣,測試才有可能做好,不會陷入測試人員走了一批又來了一批的怪圈,一方面團隊不穩定,另一方面產品質量也不會穩定。