軟件測試工作的核心技術在哪里?
測試這行,如果按照客觀規律總的來說是:入門容易,提升難。 有些人做測試8-9年了,其針對同一個產品的測試思路和方法,與測試只有2-3年的人看不出有什么區別。于是行業中有了一種誤區,認為測試技術的提升主要集中在對性能測試工具的使用及腳本開發,自動化測試開發,測試工具開發領域。僅個人愚見:測試工具開發和自動化測試開發 主要還是開發技術而不是測試技術,從沒有做過測試分析,測試設計的開發人員也能勝任。如果僅狹義地認為測試技術的發展只在自動化測試框架開發或測試工具開發上,那么從邏輯上來說,任何一個開發人員都可以成為測試技術大拿。當然我想,沒有人會真正這么認為。
開發工作的目標從一開始是非常明確的,要實現什么,要做什么,做到什么程度大多數情況下都是清晰的,最大的困難則是如何實現如何做到,總的來說是一個不斷聚焦的過程。而測試工作的目標呢?其實很多時候,并不如開發那么明確,例如同樣一個性能指標,開發很清楚要通過實現什么算法來達到目標,而測試則需要對該性能指標先進行測試分析,再進行測試設計,可是測試分析做到什么程度卻是一個發散的過程, 2小時也可以,2天也不夠,這就導致了測試質量的浮動范圍是非常大的,由于開發和項目經理通常對測試設計并不了解,也無法了解(測試其實是一個專業度非常高的領域),因此會導致測試部的工作質量很難在過程中真正去度量和監督。
從哲學上來說,確定性的規律往往難度不大,不確定性的規律往往說明它是一個復雜系統。因此,我個人認為:測試技術領域最難的技術應該是測試分析和設計。從另一個角度來看,測試價值的體現最主要還是保障自己組織開發的軟件在關鍵應用時不要出故障,給組織造成商業損失。所以,有效的測試覆蓋率是最重要的測試工作目標(而不是自動化測試率),需要說明的是測試覆蓋率不等于代碼覆蓋率。通過單元測試達到代碼覆蓋率100%了就能保障產品無bug其實是一個誤區,因為很多組織會為了達到單元覆蓋率而去開發單元測試代碼,單元測試代碼或單元測試設計的質量只能保障消除產品編碼的問題,發現產品設計的問題則往往會很困難。而發現產品設計問題的最主要方法還得需要基于黑盒的測試分析和設計。
如何做好測試分析和測試設計,根據我的經驗和體會,建議測試分析和測試設計主要通過3個維度來做,則可以大致達到一個比較高的有效測試覆蓋率:
維度一:從用戶實際使用的場景和習慣入手,開發一批測試用例;
優點: 可以覆蓋到主要基本場景;
不足: 從事場景分析的人無法做到了解用戶所有的場景,必定受參與測試分析資源限制會有場景遺漏;
維度二:通過測試對象內部實現流程的路徑及依賴關系分析入手,開發一批測試用例;
優點:可填補維度一的部分遺漏場景,特別是異常處理和分支交互處理的場景;
不足:分析階段主要精力會被局限在內部流程的熟悉和分析中,從而也會遺漏真實環境中的一些偶然小概率事件;
維度三:依賴基于經驗的測試分析和設計,例如:錯誤猜測法或探索性測試法;
優點: 給維度二再做一次補充測試分析和設計;
不足: 維度三效果的質量高低取決于組織內部經驗的積累量及測試人員思維的發散能力和創造性;
總得來說:無論是功能測試還是各種專項測試,依次使用以上3個維度的測試分析和設計,基本上能覆蓋到被測對象的絕大部分應用場景,充分保障產品質量,減少問題遺漏。
因此:測試的核心技術是測試分析和測試設計的能力,它決定了后續所有測試活動的質量及效果。同時,要做好一個測試任務,掌握廣泛的測試類型也是必要的核心技術,如:如何給每個測試對象做細做深壓力測試,長時間測試,健壯性測試也是決定項目測試質量的關鍵所在。我本人不相信隨便做做的壓力測試設計和健壯性測試設計能夠保障產品實際應用表現良好。
測試活動的質量或者一個測試工程師技術水平如何將主要取決于:測試分析和設計的深度及系統化,以及掌握廣泛的專項測試類型。
文章來源于領測軟件測試網 http://www.k11sc111.com/