# 定義
直接引用百度的 :
精準測試是一套計算機測試輔助分析系統。精準測試的核心組件包含的軟件測試示波器、用例和代碼的雙向追溯、智能迴歸測試用例選取、覆蓋率分析、缺陷定位、測試用例聚類分析、測試用例自動生成系統,這些功能完整的構成了精準測試技術體系
# 背景
集團的同學分享了關於精準測試的文章,看了下簡單記錄一下
# 正文
(以下都是個人理解,如果有不對歡迎留言討論)
1. 做測試的朋友都可能碰到過:漏測/少測,根本原因是不知道研發改動了什麼/影響到什麼 or 是知道了改動了什麼但因爲一些需求歷史不清楚,導致不知道影響到了什麼;
1. 精準的對立就是模糊,精準測試說白了就是當研發提交一個新版本過來的時候,你知道它改動了什麼,影響到哪些接口/方法,然後針對改動點去測試。是從測試的角度去看待問題,提高測試的效率,畢竟之前是要求全量回歸的,現在只需要測試部分;
2. 精準測試 跟 迴歸測試有沒有悖論呢 ?迴歸測試,驗證新功能會不會對其他原有功能造成影響;而精準測試貌似說是可以發現這些影響面? 瞭解了精準測試的大致原理,我只能說很難發現,why?
3. 精準測試的大致思路:研發改動了什麼 --> 影響面評估 --> 篩選用例 --> 用例執行 ;
# 沒有精確測試
1. 提測 -- 研發提交代碼,告知改動點,可能的影響面,自測點,測試重點(這裏需要靠譜的研發!!)
2. 用例編寫 -- 針對這次需求/改動點編寫用例,用業務經驗/技術經驗來評估影響面來新增用例;
3. 用例review -- 用例發給組內同學一起討論下,從別人的角度看待問題;
4. 用例執行 ;
總結: 其實用業務經驗、技術經驗、用例組內review就是一種精確測試,只是人工的形式罷了
# 有了精確測試
1. 提測 -- 通過git工具獲取本次提交的變更記錄,獲取改動的情況,可具體到哪個文件;
2. diff -- 通過diff工具,git也有diff功能,class文件的diff,目的就是找出方法級別的改動;
3. 分析調用鏈路 -- 通過分析源碼,找到入口,也就是top方法,java的service層,controller層
4. 篩選用例 -- 根據鏈路上的影響分析需要回歸哪些用例;
總結:整體大致流程就是:代碼push --> 觸發精準測試任務 --> 通過git工具獲取改動詳情(文件,方法,入口)--> 在用例庫中篩選用例自動化執行 --> 報告輸出(用例+覆蓋率)
# 精確測試好處
1. 評估影響面,對長鏈路測試有幫助,A-B-C-D,修改了C,能評估中ABD中方法級別的影響;
2. 提高測試效率,避免了不必要的用例執行;
# 精確測試的疑問
1. 如果同一個工程中的鏈路,用精確測試確實可以精確的發現影響面,提供測試效率,但是多系統之間呢 ?如購物車系統 + 訂單系統,兩個不同的團隊之間的鏈路,只能評估到比較粗的粒度;
2. 數據依賴的,無法解決;A系統的代碼變更導致寫入DB中的數據變化了,B系統知識根據數據來走業務流程,那麼A跟B的聯繫 就斷開了,目前看到的文章只能在代碼級別做關聯;
# 可借鑑的
1. 思路:從代碼追溯到接口級別的改動來篩選用例,可以幫忙評估影響面,結合CI流程,是不是每次代碼push可以有個大致的影響面評估圖呢?