一、怎樣的技術
?百度百科:
精準測試是一套計算機測試輔助分析系統。
精準測試的核心組件包含的軟件測試示波器、用例和代碼的雙向追溯、智能回歸測試用例選取、覆蓋率分析、缺陷定位、測試用例聚類分析、測試用例自動生成系統,這些功能完整的構成了精準測試技術體系。
?其他定義
精準測試是中國自己有知識產權的完全的理論體系,它同時關注功能點和代碼相關邏輯這樣一個方法論,是一種灰盒的測試模式。
最開始在2014年的國際軟件測試大會上發布精準測試的時候,它叫穿線測試,英文名字叫Threading Test,表達了精準測試的本質,Threading這個英文單詞本身有兩個含義,一個是穿線一個是線程,建立用例和代碼的關系,相當于把黑盒和白盒關聯起來,做黑盒測試也能看到白盒數據,同時把開發和測試能夠關聯起來,測試一做完,開發的邏輯馬上就能自動生成。另一個層面,精準測試最本質就是線程測試,因為精準測試基于覆蓋率白盒理論產生,它跟白盒最大的區別是它的覆蓋率是線程級的,也就是說要追溯到用例這個級別。
二、技術發展
?歷史發展
?成熟度模型的五級劃分
三、知識與技能
第一,開發的基礎和核心(編程)知識及所需要用到的版本管理工具(GIT)等。
第二,領域特定的知識、技術需要具備如下:
JAVA:Javassist(官網- https://www.javassist.org/ ),
ASM3.0(官網- https://asm.ow2.io/ ),
JaCoCo(官網- https://www.eclemma.org/jacoco/)。
C/C++:匯編、反匯編,PE,逆向工程(IDA)。
要用C/C++實現,通用與效率等方面沒得說,但各協議的插樁,代碼信息的收集,復雜程度和工作量都不是一般人所能承受,要做好心里建設。
直接使用JaCoCo需要注意覆蓋率的誤差,一些語句行,分支層級,其誤差會被指數級放大。其更適用于偏向輔助個人開發者和小型項目組對項目覆蓋率進行非常基礎的評估。
?誤差產生的具體成因:
1.復雜系統通常由大量子模塊組成,JaCoCo無法實現對于內部被調用的子模塊進行插裝,因此對于子模塊覆蓋率的評估會產生顯著的誤差。
2.如果某個子模塊沒有被調用,那么對于JaCoCo來說,該模塊內的方法等同于不存在。JaCoCo需要調用該子模塊,才能將該子模塊內的代碼計入覆蓋率計算的“分母”。
3.除了幾種既定的邏輯意外事件,JaCoCo無法正確處理例外情況(Exception),如果在控制流程中遇到Exception,JaCoCo會把這種情況直接標記為未覆蓋,這種判定方式直接的影響到了對程序邏輯關系的把控,造成對于覆蓋率無法準確評估。
?誤差引發的后果:
1.偽瓶頸的產生,以及對測試質量的錯誤高估。第一種情況,測試人員投入大量工作之后,卻無法進一步提升覆蓋率,造成對資源和實踐的浪費;第二種情況,會讓用戶誤將未達標的系統判定為達標,有可能引發嚴重的生產事故。
2.無法實現缺陷定位,大量的算法和應用依托覆蓋率的輸入,而缺陷定位更是其中最主要的實踐。
3.回歸測試的精準度,受到了嚴重的影響。
?無損插樁技術(推薦)
精準測試推出的SABI和SASI是中國自己的技術
SABI,SouceCode Analyzer ByteCode Intrumentation,就是說源碼分析,字節碼查看,觀測和分析是在源碼,插樁是在字節碼。
SASI,SouceCode Analyzer SouceCode Intrumentation,這是傳統商用白盒最基礎的技術,有時候對源碼進行分析,直接在源碼插裝。源碼插裝以后,代碼經過高級語言、高級編譯器的編譯,直接生成最后發布包。這種是完全無損的標準技術,插裝代碼經過編譯器編譯后執行可靠性更高。
四、總結與介紹
大綱
1、測試范圍,代碼分析
2、差異化
?
3、調用關系
4、度量與分析
5、質量評估
6、知識庫兼優化
7、用例預分析
8、自動化測試與精準測試
五、平臺
>設計思路
從產品的需求、功能模塊,開發的代碼到測試的用例,從正向到逆向的覆蓋,追溯和可視。
>大綱
>調用鏈與代碼覆蓋
使用的是插樁,有點類似C++中的Hook技術,獲取所需數據信息。
協議,HTTP,MySql,Dubbo,Redis等,需要先進行分析,找到關鍵插樁位置,然后結合使用設計模式進行收集(所需)信息。
設計模式推薦兩個,1、反射+適配器,2、動態代理。
需要注意,代碼膨脹問題。
>影響范圍
假如有個應用系統開發出A版本提測,通過前端功能發起HTTP接口,平臺的實時快照收到HTTP接口信息,將該次的接口相關信息(類、方法、執行代碼行數)保存為系統快照; 當A版本開發后變為A_01版本,使用平臺對兩次版本(Jar包或War包)進行比對,通過系統快照中信息會分析出變更項與影響項,如:類、方法、接口。
根據影響用例中的菜單與接口,到接口測試工具中進行執行。
>實現與應用
通過數據進行可視化,顯示服務/應用的啟動,拓撲圖,調用鏈,代碼覆蓋,版本比對等信息。
>>項目列表
添加,服務/應用
>>項目動態
啟動,服務/應用
1、搜索
可顯示多個服務/應用的拓撲關系圖
1)詳情視圖
?表結構,可查看接口與數據庫表間的關聯
?熱點,可查看接口與數據庫表的關聯個數
2)展開快照
這里顯示的節點是保存到系統快照的。
?表結構-數據庫表,遠程服務-調用的rpc接口,源碼-代碼關系圖層;
?遠程服務,顯示遠程調用接口,如dubbo接口;
?源代碼關系圖譜,可查看代碼關聯關系和覆蓋程度;
?清除圖譜,清除表結構、遠程服務、源代碼關系節點;
?詳情頁,跳轉到快照詳情頁;
?概要,顯示快照詳情中圖片;
?刪除節點,刪除顯示的節點;
3)搜索
?搜索數據庫表中,表名,字段名,篩選條件;
?搜索接口,HTTP接口;
2、監控臺
通過HTTP接口實時獲取到協議、代碼相關信息,不同于通過單元測試得到代碼覆蓋率,然后將這些信息保存下來(我的快照和系統快照)。
1)實時監控
實時展示接口的調用鏈及鏈上各節點信息
2)我的快照
實時監控中可保存為我的快照,
2.1)調用鏈和鏈路分析的可視化
調用鏈即是服務與中間件的調用鏈拓撲圖層;鏈路分析即是代碼鏈路分析關系圖譜。
?"流程圖(拓撲圖)"中可查看到覆蓋后端及各中間件信息;
?"堆棧列表"中展示服務與中間件的應用名,類型,服務/方法,用時等信息;
?點擊""彈窗為代碼圖譜(代碼鏈路分析關系圖譜),點擊某個節點,即顯示某個方法的方法名稱、執行到的代碼行數、代碼總數、代碼覆蓋率和圈復雜度信息,
根據某個尾節點,能尋到開始節點;
2.2)查看代碼覆蓋率報告
代碼覆蓋率信息列表,顯示我的快照列表中所有覆蓋率信息,類名、方法名、執行代碼行數、方法行數、覆蓋率、圈復雜度;
3、應用中心
1)在線應用
2)應用
2.1)系統快照
快照目錄,點擊鏈接進入系統快照詳情頁
系統快照詳情頁,基本信息頁簽
系統快照詳情頁,流程圖頁簽
系統快照詳情頁,堆棧列表頁簽,點擊打開代碼關系圖層(代碼關系鏈)
2.2)版本比對
比對文件格式為Jar或War包,比對之后會產生記錄報告
開始比對后的結果顯示,能查看報告,顯示差異項,(比對)日志輸出(新增、修改、變更、刪除的文件與方法,類與方法的影響數)
2.2.1)報告
比對成功后查看報告,顯示變更項,影響用例,對比日志;點擊影響用例鏈接,會跳轉到(系統)快照詳情頁
參考
1、百度百科-精準測試, https://baike.baidu.com/item/精準測試/22355867?
2、精準測試白皮書v3.0-2019最新版,作者:星云精準測試, https://wenku.baidu.com/view/fe7e99a401d276a20029bd64783e0912a2167c23.html
3、《不測的秘密-精準測試之路》,作者:TMQ精準測試實踐團隊。
4、源碼閱讀網:http://www.coderead.cn/home/index.html?
5、網易嚴選的精準測試實踐, https://www.infoq.cn/article/xuu91crqa4hcjz8uomjs
?審核編輯 黃宇
-
測試
+關注
關注
8文章
5706瀏覽量
128867
發布評論請先 登錄
評論