軟件行業長期存在一個痛點(diǎn),即測試效果無法度量。通常依賴於測(cè)試人員的能力和經驗,測試結果往(wǎng)往不可控,極端(duān)情況下同一(yī)個業務功能,即使是(shì)同一個人員在不同的時間段,測試場(chǎng)景和(hé)過(guò)程也(yě)可能不一(yī)致,從而無法有效地保障軟件產品質(zhì)量。
質量總監總是抱怨:每一次版本(běn)發布時,時間並不是很充分,我們不確定這些需求代碼變動到底影(yǐng)響範圍有多大,無法精準地評估(gū)出測試範圍,要麽執行完整的全回(huí)歸測試,花(huā)費大量的時間,嚴重影響交付效率;要麽靠個人經驗和(hé)主(zhǔ)觀能力,有選擇的驗證部分功能,很容易忽(hū)略出(chū)問(wèn)題的業務場景,導致漏測現象和bug泄露。
測試人員總是抱怨:這(zhè)個任(rèn)務明明隻(zhī)需要改A需求,為啥(shá)會影響到B需求?谘詢對應的開發(fā)人(rén)員,反饋為(wéi)所有(yǒu)功能都需要重測(cè)。
多年來,許多大型(xíng)企業都(dōu)嚐試過各種不(bú)同(tóng)的方法,比如提升測試人員技能、標準化流程、加大(dà)需求評審的投資等等,但這些措施(shī)隻能暫時緩解問題,最終軟件產(chǎn)質量還是不盡人意。
有沒有(yǒu)一種解(jiě)決方案或者工具可以量化、數字化地解決這個問(wèn)題呢?
可度量的測(cè)試體係(xì)-精準測試(shì)
先(xiān)來(lái)回答一下什麽叫精準測試,它涉及軟件測試、數據分析、機器(qì)學習(xí)等(děng)多個交叉(chā)領域。其目的是通過(guò)收集和分析測試數據,預測軟件缺陷的位置和嚴重程度(dù),從而提高測試效率和準確性。
精準測試(shì)主要包括以下幾個方(fāng)麵:收集覆蓋麵廣(guǎng)、質量高的測試數據是實現精準測(cè)試的基礎(chǔ)。測試數(shù)據包括測試用例、代碼變動、業務工單、API接口等所有(yǒu)過程數據,這需要采(cǎi)用自動化測試工具、人工測試等手段,在不同的測試階段獲取足夠的有效數據。同時,建立測試數(shù)據管理平(píng)台(tái),對測試數據進行分(fèn)類、存儲、分析和(hé)共享,以便在測試過程中為測試人員提供支持。
基於機(jī)器(qì)學習和數據挖掘技術,分析曆史測試數據,挖掘出潛在的測試(shì)用(yòng)例覆蓋不足和(hé)冗餘(yú)。通過對測(cè)試用例進行優化,可(kě)以提高測試覆蓋率和降(jiàng)低測試成本。
通過對測試(shì)數據(jù)的分(fèn)析,建立軟件缺陷預測模型。該模型(xíng)可以根據測試數據預測軟件中可能存在的缺陷位置和嚴重程度,從而幫助測試人員優先處理高風險的缺陷,提高測試效率。
通過大數據(jù)和機器學習技術,為測試人員(yuán)提供輔助決策支持。例如,在測試過程(chéng)中,根據測試數據為測試人員推薦合(hé)適的測試(shì)策略、測(cè)試用例和缺陷處理方法等。
將測試數據進行可視化處理,使測試人員能(néng)夠更直觀(guān)、快速地了解軟件測(cè)試狀況。可視化分析可以幫助測試人員發現測試過程中的問題和改進方向,提高(gāo)測試效果。
將需求、代碼、用例建立(lì)映射關係,通過數(shù)字化、可量化(huà)的數據判斷(duàn),實現代碼覆蓋率(lǜ)的可衡量性,從而提高測試效率,提高(gāo)版本質量。
精準測試從2012年開始提出和發展,至今已經過了10年多的(de)曆程(chéng),越來(lái)越多的企業發現它的價值點,但是落地卻很困難,行業內的(de)質疑聲也一直存在(zài),並沒有形(xíng)成一個通用、完整的解決(jué)方案,無法適配不同公司的產品業務。
總結一(yī)下,難點主(zhǔ)要有如下方麵:

打造精(jīng)準測(cè)試框架是解決(jué)這(zhè)些難點的(de)最重要和有用的方案。為了實現這一目標,我們可以圍繞三個核心特征來定義企業級平(píng)台:平台底座、價值變現和用戶體驗。

平台底座是技術架構的基礎構建,它包括四個主要部分:數據采集、代碼(mǎ)插樁、正向追溯(sù)和數據存儲(chǔ)。
數據采集:通過(guò)過多種消息中間件(jiàn),利用流量隔離的技術並行采集,自(zì)動化采(cǎi)集數據並入庫(kù),提升執行效率,解決數據采集困(kùn)難的問題。
- 使(shǐ)用調用鏈做流量隔離,實現並(bìng)行采集,這(zhè)也是精準測試落地到人工測試的基礎條件,其最大的優勢為:
- 使(shǐ)用(yòng)類似kafka做(zuò)消息管道,利用其(qí)高可靠,高性能的優勢,支撐了每秒百萬級的消息處理(lǐ)。

代碼插樁:使用JAVA Instrumentation,無侵入的對業務代碼插樁,在容器化基礎(chǔ)上,進一步標準(zhǔn)化啟動腳本,隻需修(xiū)改(gǎi)環境變量即可(kě)控製是否插樁(zhuāng)使用調用鏈數據或者Agent插件注入(rù)來形成插樁方式。
- 無(wú)侵入性:此技術不會改變業務代碼,不會對應用程序(xù)的功能產生(shēng)負麵影響。
- 靈活性:通過容器化、環境變量控製動態插樁的(de)方式,可以在不修改代碼的(de)情況下,根據環境輕鬆切換不同的插樁策略(luè)。
- 標(biāo)準化和可擴展性:使用容器化技術(shù)和標準化啟動腳本,可以使插樁過程可複製,方便在多個項目或環境中應用。
正向追溯(sù)、反向追(zhuī)溯:通過數據采集和存儲建立的映射關係以及覆蓋率報告,可以更好地理解業務需求與代碼實現之間的關係,評估測試的效果,並擴展建(jiàn)立需求、用例、代碼片段(塊/行)和版本基線的(de)基礎映(yìng)射關係,通過正向追溯和反向追溯的方式增強項目管理、變更管(guǎn)理和持續改進(jìn)的能力。

數據存儲:精準測(cè)試過(guò)程(chéng)中會產生大量數(shù)據,鏈路結構的特性使得數據存儲和管理變得(dé)複雜。為了應對這種情況,建議使用非關係型數(shù)據(jù)庫進行數據存儲。例如,可以使用類似ElasticSearch、Neo4j、ClickHouse等數據庫來支持精準測試(shì)數據。這些數據庫能夠處理百億級別的數據量,並(bìng)實時維護覆(fù)蓋率數據的(de)追溯關係。通過使用(yòng)這些(xiē)數(shù)據庫,我們(men)可(kě)以(yǐ)提高數據存儲和查(chá)詢的性能,更好地管理精準測試數據。
-
高性能:ElasticSearch具有(yǒu)強大的全文搜索功能和數(shù)據分析能力,而Neo4j則擅長處理圖結構(gòu)數據,ClickHouse具備高壓縮比,低存儲成本(běn),都是為處理大規模數2據和複雜查詢而設計的。
-
可擴展性:具有(yǒu)水平擴展的能力,可以隨著數據量的(de)增加自動進行分片和負載均衡,確保係統的可(kě)伸縮性。
-
實時性:可以實時更(gèng)新和查詢數據,對於需要實時反(fǎn)饋的場景非常適用。
-
開放性:開源組件,可以自(zì)由(yóu)使用和定製,同(tóng)時也提供了豐(fēng)富的API和工(gōng)具,方(fāng)便進行二次開發和維(wéi)護。

價值變現:精準(zhǔn)測試平台的價值主要表現(xiàn)在針對企業不同實際業務,通(tōng)過多元化業務場景(jǐng)功能來實現。例如覆蓋率視圖等基本價值能力在此不再贅述,本段重點介紹代碼染色和用例(lì)智能推薦。
代碼染色:代碼染色是一種通(tōng)過分析代碼邏輯和結構(gòu),為代碼片段賦予顏色(sè)標記的技術(shù)。精準測試平台利用代碼染色技(jì)術,通過Bug泄露情(qíng)況,代碼變動頻率(lǜ)等多種維度的數據聚合,將代碼中的重要程度直觀地展示出來,幫助開發人員快(kuài)速發現和定位問題。同時,代碼染色還可以提示開發人員某些(xiē)代碼(mǎ)片段可能(néng)存在的潛在風險,從而提前預防和解決潛在問題。
- 故障率維度:根據數據積累,每個故障泄(xiè)露對應的代碼文(wén)件,可以(yǐ)定義文件引起的故障率,一般來講,此類高危定(dìng)義的權重最高。
- 外部依賴維度(dù):核心程序被調用情況,可以在一(yī)定程度上定義代碼的重(chóng)要程度,通用的就是扇入扇出。
- 修改頻(pín)率:每個文件的修改頻率,在一定範圍內會影響Bug的泄露,一般修改頻率越高,引起問題的幾率會增大。
- 自身代碼複(fù)雜程度:代碼的(de)易維護程度,越難維護出(chū)問題幾率越大,比如(rú)圈複雜度(dù),重複代碼度。

用例智能推薦和變更範圍分析:常見的技術是使用建模語言(UML)和工具來創建業務模(mó)型、用例模型和代碼模型,通過類圖和業務模型之間的關聯來(lái)建立業務和(hé)用例與代碼之間(jiān)的映射(shè)。
- 根據需求、用例和代碼變動(dòng),從追溯映射數據庫中智能匹配現(xiàn)有場景用(yòng)例,用例最小集+有效場(chǎng)景(jǐng)覆蓋,並反饋給開發和測試人員,讓測試更(gèng)清(qīng)晰和準確(què),有效提升測試效率。
- 依據(jù)代(dài)碼變動片(piàn)段信息,分(fèn)析出關聯影響,提供變更的函數、接口、功能、菜單以(yǐ)及對應的業務列表,精準地評(píng)估影響範(fàn)圍,同用例智能推薦(jiàn)融合使用。
用戶體驗:用(yòng)戶體驗是精準測試落(luò)地的關鍵(jiàn)點,我們可以從易用性和交互性著手,盡可能的(de)降低測試/開發的額外工作(zuò)量,降低額外的資(zī)源和環境,開箱即用(yòng),從而(ér)幫助用(yòng)戶提高工作(zuò)效率、增強用戶(hù)滿意度、降(jiàng)低錯誤率,我們可以在下麵兩個方麵考慮:
係統(tǒng)快照:將用戶的(de)測試操作,通過插樁和流(liú)量監控,形成step by step的測試(shì)用例。
- 一鍵生成文本測試用例。通過瀏覽器(qì)插件事件監聽API,流量監聽API,以及(jí)本(běn)地Gotest流(liú)量監聽工具,自動記錄人(rén)工測試(shì)的操作過程。
- 采集代碼覆蓋率信息。將文本用例,手工(gōng)測試,代碼覆蓋率三者整合(hé),可以很大程度上(shàng)提高測試效率,豐(fēng)富用例代碼關係庫。
插件能力(lì):提供瀏覽器插件、任務單一鍵錄製、接(jiē)口插件等能力,用戶無需額外投入學習成本,解決易用性低的痛點。


最終形成DevOps的全場景價值平台,解決(jué)價值鏈單一問題,實現從數據版本匹配覆蓋率到(dào)整合需求任(rèn)務單管理、嵌入DevOps流程,形成質(zhì)量門禁和(hé)多維度(dù)度量統計視圖的全方位改進,實現全鏈路效率提升(shēng)。通過精準測試完整體係,可以(yǐ)更高效地管理和監(jiān)控軟件開發過程,提高軟件質量,降低開發成本,同時增強團隊協作和溝通。

采集側:考(kǎo)慮無(wú)調用鏈應用(yòng)的接入,適配更多的業務產品(pǐn)情況,進一步(bù)提升精準測試的覆蓋範(fàn)圍(wéi)
易用性:易用性能力的進一步(bù)提升(shēng),在任務單處理環節,用(yòng)戶可以一鍵式的采集(jí)流(liú)量信息;根據流(liú)量信息自動生成(chéng)測試用例和測試(shì)快照,進一步提升測試效率(lǜ)
AI分析(xī):用例(lì)推(tuī)薦更加(jiā)AI化,同GPT融合,能(néng)夠分析出有效用例
缺陷分析能力:基(jī)於業務(wù)場景、任務單、測試用例(lì)數據,能夠分析出漏測點,提示並補充測試