前言:算法
在測試領域,精準測試已經成了測試數字化的代名詞,漸漸獲得測試開發人員的關注,也是測試行業一個具備挑戰性的議題,本文試圖回答如下幾個問題:安全
有必要作精準測試嗎?微信
什麼是精準測試?架構
精準測試適合的項目類型與關鍵特性是什麼?分佈式
設計和實現一個精準測試方案,要點與價值有哪些?函數
目錄:微服務
1、非精準測試的五宗罪單元測試
2、精準測試:一種可追溯的軟件測試技術測試
3、精準測試的核心:數據與追溯設計
4、精準測試的關鍵特性
5、精準測試體系方案的價值和實現
6、不一樣類型對精準測試的需求程度
7、總結
1、非精準測試的五宗罪
精準測試這一理念之因此產生,主要是基於以下的6個方面的考慮:
測試過程和規範沒法知足要求
項目驗收缺乏具有公信力的手段
傳統的手工測試效率較低
測試與開發的斷層
新技術架構的挑戰
隨着測試行業的發展,軟件測試作得愈來愈規範,但大部分的測試仍是基於對業務的理解,與真實業務數據還有差距,準確性難以保證,測試結果沒法精確的對軟件質量進行定義和判斷,系統上線後,問題開始暴露出來,使用體驗差,更有甚者形成巨大的經濟損失。歸根結底,就是由於測試不充分,沒有引入精準的測試分析,僅依靠測試經驗是根本沒法判斷的。
軟件是拿來使用的。雖然軟件項目驗收過程當中驗收的內容比較多,包括合同約定內容、技術協議、開發文檔、產品文檔、用戶文檔、程序代碼等,但客戶最關心的是他們的業務可否真的在系統中落地運行,而且運行良好,單憑投入少許人力進行業務功能的驗證,抽樣的檢測結果不表明軟件所有,可信性不具有技術公信力。
使用傳統的手工測試,採用的是基於人工評定的黑盒測試方法,打造高可靠性的軟件產品須要投入大量人工成本。因爲測試執行沒法精準量化控制,憑主觀定性評價結果爲主,對人力經驗依賴大,人員變更狀況大,質量抖動厲害,看不到明確測試差距和量化目標。雖然在不斷的執行測試,但缺陷發現率並不高,無效的測試消耗了大量的測試成本。
缺陷處理的通常流程是:測試人員執行用例,發現缺陷就提交缺陷系統,開發人員看到缺陷,進行重現或遠程調試。若是測試給開發提供的測試結果都是比較模糊的功能邏輯描述,重現缺陷須要花費大量的時間。若是測試人員採用了精準測試技術,經過執行的用例就能夠找到對應執行的程序代碼塊,這樣解決問題就會快不少,開發人員和測試人員之間的協同工做就會輕鬆好多。
採用分佈式/微服務架構,使軟件系統愈來愈複雜,測試的挑戰性愈來愈大,採用傳統的測試方法執行測試,系統質量也難以保證。
在移動互聯網大力發展時代,軟件開發對質量要求愈來愈高,而迭代開發要求項目週期愈來愈短,快速的版本驗證面臨挑戰。
從字面理解,精準就是很是準確。很是準確須要用數字說話。
在測試領域,精準測試是一套計算機測試輔助分析系統,對測試過程的活動進行監控,將採集到的監控數據進行分析,獲得精準的量化數據,使用這些量化數據進行質量評價,利用這些分析數據能夠促進測試過程的不斷完善,造成度量及分析閉環。精準測試是一種可追溯的軟件測試技術。
精準測試的核心思想就是使用很是精確和智能的軟件來解決軟件測試的問題,從根本上引領從經驗型方法向技術型方法的轉型。質量的評估再也不靠經驗,而是經過精準的數據來斷定。
精準測試沒有改變傳統的軟件測試方法,區別只在於,由軟件去採集測試過程執行的代碼邏輯及測試數據的過程,自動創建測試用例與程序代碼之間的邏輯關係。在測試過程加入軟件的採集過程,能夠造成正向和逆向的追溯。
經過正向追溯,開發人員能夠看到測試人員執行用例的代碼細節,以方便進行缺陷的修復,測試數據能夠直接爲開發調試提供依據,快速定位並修復缺陷。
經過逆向追溯,測試人員經過修改的源代碼快速肯定測試用例的範圍,極大減小回歸測試的盲目性和工做量,快速修訂測試用例,達到測試覆蓋率最大化。
軟件測試示波器
在功能測試過程當中自動分析程序運行的一些數據指標,以波形的形式進行實時輸出。示波器是一種實時的監控,實時的計算測試過程數據並展示。
執行一個測試用例之後,精準測試經過程序自動的記錄和顯示這個測試用例執行的代碼。若是測試人員關注某一些代碼行,它能夠追溯出哪些用例在執行過程當中運行過這段代碼。
根據代碼的變更範圍來直接精確的定位須要迴歸的用例,這樣使迴歸測試所需的時間更短,迴歸的範圍更準確。
精準測試覆蓋率形式多樣,最高支持標準MC/DC(修訂的條件/斷定覆蓋)的100%覆蓋率要求。
根據缺陷與用例的對應關係,快速找到執行用例對應的代碼行。
根據前文所講到的需求、概念和關鍵特性,咱們能夠設計出以下的一種精準測試體系。這也是咱們的技術團隊一直在客戶現場採用的測試方案。
精準測試體系主要以持續集成平臺、統一測試平臺和測試監控分析平臺爲測試能力支撐。
經過持續集成完成代碼的構建編譯、靜態代碼掃描和測試環境部署;
使用統一測試平臺實現自動化測試迴歸;
經過測試監控分析平臺,精確、詳盡的記錄測試用例運行的狀況,提供大量原生分析性數據,進行過後的缺陷分析、追蹤,創建測試用例與程序代碼的關聯,實現測試用例和程序代碼的雙向追溯,真正實現數據化的測試管理。
精準測試的總體過程以下圖所示:
精準測試須要結合持續集成、持續部署和持續測試的過程,並結合白盒測試技術和黑盒測試技術,實現代碼規範、質量和安全掃描,完成單元測試及覆蓋率的評測,經過自動化測試的手段實現系統的功能測試。經過測試監控分析平臺,從靜態測試和動態測試兩個維度實現軟件質量的精準化評估。
精準測試的核心流程就是經過測試監控分析平臺實現測試用例和程序代碼的雙向追溯。
在測試監控分析平臺的幫助下,實現測試用例和海量的代碼執行信息自動關聯,精確到函數級別及代碼塊級別。測試人員能夠知道測試用例到底測試了哪些功能,覆蓋了哪些代碼。
上圖就是測試用例到被測代碼的正向追溯,經過正向追溯可直接在代碼級定位測試現場故障和缺陷邏輯,並提供最後運行的時序數據;經過正向追溯自動記錄產生功能對應的詳細設計實現,輔助軟件解耦和架構分析;經過正向追溯,能夠迅速定位缺陷對應的代碼執行邏輯,幫助開發人員快速修復缺陷,可追蹤難復現缺陷。
相反,在測試監控分析平臺的幫助下,能夠實現程序代碼到測試用例的反向追溯。下圖就是反射追溯的一個過程展現。
經過反向追溯,咱們很容易就能肯定代碼塊對應的測試集,獲取到的增量代碼,經過智能用例選取算法,能夠準確的肯定須要迴歸的測試用例。精準的肯定迴歸測試範圍,避免了全量回歸形成測試資源的浪費,既保證了質量又縮短了版本的迭代週期。
有了精準測試,覆蓋率統計再也不是白盒測試的技術專利。使用精準測試技術,系統測試也能夠實現程序的覆蓋率分析,並且能夠不須要源代碼,實現運行代碼的指令覆蓋、分支覆蓋、圈複雜度、行覆蓋和方法覆蓋的統計分析。
程序代碼的覆蓋率統計能夠是單次執行的數據,也能夠是屢次執行的累計數據,得到一段時間內或多人測試執行的累計效果,支持在軟件研發週期內總體評估測試的覆蓋程度。
傳統的黑盒測試技術屬於經驗型模糊測試,質量、進度不可視,產生的無效勞動較多,系統與人員的管理成本極高,軟件質量風險高。
傳統的黑盒測試大約70%的缺陷很容易發現,但以後缺陷的發現效率會急劇的降低。而傳統的白盒測試技術直接面對代碼測試,難度大、效率低,僅關注覆蓋率,無系統性。精準測試是採用傳統黑盒測試與白盒測試相結合的模式,它能夠在黑盒測試過程當中,經過專用軟件自動採集白盒級別的運行邏輯數據,根據可視化出來的不足點和漏洞點,引導開發和測試有針對性的補充測試用例,提升缺陷發現效率。
精準測試體系的創建也是一個系統化的工程,須要長遠規劃,按部就班,並逐步完善。須要以理論爲基礎,以實踐爲準繩,持續改進,讓精準測試體系使測試更加智能化,對質量評估更精準。
並不是是全部的項目類型,都適用精準測試,精準測試的核心需求是來自於對軟件質量的較高要求,而不一樣的項目類型對質量的敏感程度是不一樣的。
移動互聯網型的產品通常需求響應快,並且產品發佈成本低,採用灰度發佈,使用A/B測試方法替代傳統的功能測試即便用小流量測試新功能,若有問題迅速下線,對發佈質量並不太敏感。
項目型的產品通常以用戶爲中心,須要準確把握用戶的需求,須要進行系統測試,一般採用用戶測試的方式對項目進行驗收,對項目的上線質量比較敏感。
產品型的產品需求由本身把握,產品的研發週期相對較長,一般都有獨立的測試團隊,須要按照必定的規程執行測試,由開發人員進行單元測試,由測試人員進行集成測試和系統測試,並且知足必定的質量目標才容許發佈,對發佈質量要求較高。
精準測試的核心是以自動化的軟件對軟件測試過程數據進行記錄,從而實現雙向的追溯:從開發到測試的正向追溯以及從測試到開發的逆向追溯。
經過雙向追溯,咱們能夠實現軟件質量的實時監控,迴歸用例的智能篩選,測試覆蓋率的精準分析以及軟件缺陷的快速定位。
但精準測試並不是適用於全部的軟件項目類型,互聯網應用、項目級應用和產品級應用,對軟件質量的需求,也就是對精準測試的要求是逐漸遞增的。
精準測試的誕生,核心動因是對於軟件質量的要求。不管是項目驗收公信力手段、測試效率管控、測試與開發人員的協同以及複雜的分佈式架構帶來的挑戰,無不圍繞着對軟件質量的需求知足。而軟件質量的最終價值,是用戶體驗的提高。在Gartner提出數字化轉型的雙模式理念後,各個領域都在尋找各自業務領域裏應用和實踐數字化轉型的方案,對精準測試的實現過程,實際上也是軟件測試過程數字化的一種體現。精準測試經過提高軟件質量,改善了用戶體驗,從而賦予企業數字化轉型更可靠的軟件能力。
關於做者:王俊其,普元軟件產品部統一測試平臺產品經理,十餘年的開發與測試工做經驗,一直專一於持續集成與自動化測試領域技術的研究,帶領團隊成功實施多個有關金融、保險、證券等客戶的持續集成與自動化測試項目,現擔任普元統一測試平臺產品經理,全面負責測試產品研發、售前諮詢、項目實施等工做。
關於EAWorld:微服務,DevOps,數據治理,移動架構原創 技術分享,長按二維碼關注