一、怎樣的技術
精準測試是一套計算機測試輔助分析系統。
精準測試的核心元件包含的軟體測試示波器、用例和代碼的雙向追溯、智能回歸測試用例選取、覆寫率分析、缺陷定位、測試用例聚類分析、測試用例自動生成系統,這些功能完整的構成了精準測試技術體系。
最開始在2014年的國際軟體測試大會上釋出精準測試的時候,它叫穿線測試,英文名字叫Threading Test,表達了精準測試的本質,Threading這個英文單詞本身有兩個含義,一個是穿線一個是線程,建立用例和代碼的關系,相當于把黑盒和白盒關聯起來,做黑盒測試也能看到白盒資料,同時把開發和測試能夠關聯起來,測試一做完,開發的邏輯馬上就能自動生成。
另一個層面,精準測試最本質就是線程測試,因為精準測試基于覆寫率白盒理論産生,它跟白盒最大的差別是它的覆寫率是線程級的,也就是說要追溯到用例這個級别。
二、技術發展
•曆史發展
•成熟度模型的五級劃分
三、知識與技能
這裡介紹兩款,分别為JAVA和C/C++相關,
- 開發的基礎和核心(程式設計)知識及所需要用到的版本管理工具(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需要注意覆寫率的誤差,一些語句行,分支層級,其誤差會被指數級放大。其更适用于偏向輔助個人開發者和小型項目組對項目覆寫率進行非常基礎的評估。
誤差産生的具體成因:
- 複雜系統通常由大子子產品組成,JaCoCo無法實作對于内部被調用的子子產品進行插裝,是以對于子子產品覆寫率的評估會産生顯著的誤差。
- 如果某個子子產品沒有被調用,那麼對于JaCoCo來說,該子產品内的方法等同于不存在。JaCoCo需要調用該子子產品,才能将該子子產品内的代碼計入覆寫率計算的“分母”。
- 除了幾種既定的邏輯意外事件,JaCoCo無法正确處理例外情況(Exception),如果在控制流程中遇到Exception,JaCoCo會把這種情況直接标記為未覆寫,這種判定方式直接的影響到了對程式邏輯關系的把控,造成對于覆寫率無法準确評估。
誤差引發的後果:
- 僞瓶頸的産生,以及對測試品質的錯誤高估。第一種情況,測試人員投入大量工作之後,卻無法進一步提升覆寫率,造成對資源和實踐的浪費;第二種情況,會讓使用者誤将未達标的系統判定為達标,有可能引發嚴重的生産事故。
- 無法實作缺陷定位,大量的算法和應用依托覆寫率的輸入,而缺陷定位更是其中最主要的實踐。
- 回歸測試的精準度,受到了嚴重的影響。
無損插樁技術(推薦)
精準測試推出的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、網易嚴選的精準測試實踐, https://www.infoq.cn/article/xuu91crqa4hcjz8uomjs
作者:京東工業 宛煜昕
内容來源:京東雲開發者社群