彭玲 武漢軟件工程職業(yè)學(xué)院
目前整個軟件質(zhì)量工程環(huán)境與軟件開發(fā)的節(jié)奏越來越快,開發(fā)團隊受制于市場的競爭,需要持續(xù)構(gòu)建、持續(xù)集成、持續(xù)測試才能做到持續(xù)交付。開發(fā)關(guān)注的是構(gòu)建軟件產(chǎn)品的質(zhì)量,而測試是軟件質(zhì)量的守護者,可以幫助開發(fā)減少錯誤,提醒開發(fā)改進軟件質(zhì)量的方面。這樣就更好地幫助團隊構(gòu)建軟件質(zhì)量。
軟件測試的效率已經(jīng)成為軟件行業(yè)關(guān)注的焦點。白盒測試、黑盒測試、手工測試、自動化測試,哪一個效率更高呢?自動化測試公認(rèn)會帶來高效率。敏捷開發(fā)的回歸測試范圍越來越大,完全靠手工測試肯定不行。在一般情況下,軟件測試中回歸測試更適合自動化,即使在當(dāng)今的測試環(huán)境下,仍然適用。調(diào)查顯示,2016、2017年,國內(nèi)自動化測試的使用情況并不樂觀,2017年大部分測試任務(wù)自動化的占比為32%,自動化測試超過一半的公司僅23%,具體情況如圖1所示。
圖1 國內(nèi)自動化測試使用情況
AI測試工具可以理解代碼,但是真正跟業(yè)務(wù)結(jié)合起來的數(shù)據(jù)也很少。就像機器學(xué)習(xí)有時候需要大量的數(shù)據(jù),但是真正基于業(yè)務(wù)的數(shù)據(jù)比較少,像開源里面有4TB的代碼,這些代碼更多的是可以做Java、C、Python這方面語言的學(xué)習(xí),甚至可以做到Bug的自動定位、Bug的自動修復(fù)。但是如果真正結(jié)合業(yè)務(wù),發(fā)現(xiàn)與業(yè)務(wù)結(jié)合這個工具還是很弱的,需要靠人工進行測試。
從軟件測試的發(fā)展歷程來看,早期是純手工測試,然后發(fā)展到依賴部分自動化工具完成自動化測試,到后來使用健壯的TA工具與開源框架集成,受到業(yè)界的歡迎和廣泛的應(yīng)用。云計算、大數(shù)據(jù)技術(shù)的推動下,構(gòu)建代碼庫,把所有的代碼整合到一起,可以更好的復(fù)用或者學(xué)習(xí)。公司在不斷嘗試將自己的開發(fā)環(huán)境和測試環(huán)境放到云平臺,這樣才能有更多的數(shù)據(jù)積累下來,為機器學(xué)習(xí)提供便利。當(dāng)前基于云計算平臺和大數(shù)據(jù),基于生態(tài)鏈工具,可以更好地去完成自動化測試。未來,測試基于新的微服務(wù)架構(gòu)或者其他架構(gòu),可以真正做到自主、智能化。
未來,在測試過程中,測試人員更多地完成分析、設(shè)計、建模、訓(xùn)練模型的任務(wù)。所有的執(zhí)行測試的任務(wù)應(yīng)該交由測試工具去完成。例如,Google提供了TensorFlow(TF)或其他的一些平臺,針對自己的業(yè)務(wù),通過大量的分析來構(gòu)建對應(yīng)的模型。Google研發(fā)出了AlphaGo,然后加入人機交互智能生成了AlphaZero。人工智能或者機器人,或者未來的測試機器人是需要人去訓(xùn)練的。相當(dāng)于把測試工程師的經(jīng)驗和知識,對業(yè)務(wù)流程和業(yè)務(wù)場景的理解賦能給機器人。
一般來講,人工智能包含計算智能、感知智能和認(rèn)知智能,現(xiàn)在計算智能和感知智能發(fā)展相對比較成熟,但認(rèn)知智能比較弱,要讓人工智能真正去理解人類業(yè)務(wù)還是比較困難的。需要人類構(gòu)建業(yè)務(wù)流程或者知識圖譜,讓機器去理解、學(xué)習(xí)。人工智能的應(yīng)用前期需要依賴很多的人力,沒有大量的數(shù)據(jù)標(biāo)識,機器是不會去識別或者做預(yù)測的。所以有時候在某些相對落后地區(qū),有大量的人力從事數(shù)據(jù)標(biāo)識的基礎(chǔ)性工作,這個過程會比較慢。
人工智能的算法不一定要有數(shù)據(jù)標(biāo)識,監(jiān)督學(xué)習(xí)需要標(biāo)識數(shù)據(jù),還有無監(jiān)督學(xué)習(xí)、強化學(xué)習(xí)。目前無監(jiān)督的學(xué)習(xí)更受歡迎,有更好地應(yīng)用和發(fā)展。從單元測試擴展到系統(tǒng)測試,文字識別變成圖像識別來處理。在游戲行業(yè),騰訊、華為、網(wǎng)易等公司在測試上應(yīng)用AI能力方面有了良好應(yīng)用成果,與高清攝像頭結(jié)合,做到更多的場景識別、人工智能輔助決策,實時游戲控制等。
借助AI生成測試數(shù)據(jù)、生成測試用例等方面,進行了一段時間的探索,并取得了一定的收獲。人工智能的應(yīng)用,使用全局和局部的智能優(yōu)化算法,如遺傳算法、粒子群優(yōu)化算法、蟻群優(yōu)化算法、爬山算法、禁忌搜索算法等。
實踐表明,借助AI提高功能測試覆蓋率、源碼測試覆蓋率、回歸測試覆蓋率、系統(tǒng)非功能性測試覆蓋率等。同時,也可以借助關(guān)鍵字引導(dǎo)的搜索策略以提高測試覆蓋率。在回歸測試中利用AI,選擇40%測試用例集可以達到80%的測試覆蓋率,如圖2所示。
圖2 回歸測試覆蓋率提升
通過針對關(guān)鍵字索引提高測試覆蓋率。例如:Eggplant AI導(dǎo)入已有測試資產(chǎn)創(chuàng)建模型、使用智能算法選擇最佳測試集運行測試,基于模型算法能最大程度減少構(gòu)建與維護的成本。Eggplant AI的測試覆蓋率與以前相比,有很大提高,達到80%-90%。通過遺傳算法和對源碼“編譯時插樁”的方式自動生成測試用例。以探索二進制程序內(nèi)部新的執(zhí)行路徑,而且能夠不斷優(yōu)化執(zhí)行路徑,從而獲得高效的模糊測試策略。這樣可以大大提高源碼測試覆蓋率。
當(dāng)前人工智能能夠企及的地方,包括黑盒測試、單元測試、回歸測試等,但其結(jié)果只能作為測試員判斷的依據(jù)或是參考,起到一個輔助的作用。也就是說,AI還做不到“無人化”的參與效果。雖然并行計算與分布式計算給我們帶來了可靠的支撐,但目前的瓶頸是缺乏有效的建模。因此,未來的AI助力測試的理想狀態(tài)是結(jié)合MBT與AI,共同助力測試。