彭玲 武漢軟件工程職業學院
目前整個軟件質量工程環境與軟件開發的節奏越來越快,開發團隊受制于市場的競爭,需要持續構建、持續集成、持續測試才能做到持續交付。開發關注的是構建軟件產品的質量,而測試是軟件質量的守護者,可以幫助開發減少錯誤,提醒開發改進軟件質量的方面。這樣就更好地幫助團隊構建軟件質量。
軟件測試的效率已經成為軟件行業關注的焦點。白盒測試、黑盒測試、手工測試、自動化測試,哪一個效率更高呢?自動化測試公認會帶來高效率。敏捷開發的回歸測試范圍越來越大,完全靠手工測試肯定不行。在一般情況下,軟件測試中回歸測試更適合自動化,即使在當今的測試環境下,仍然適用。調查顯示,2016、2017年,國內自動化測試的使用情況并不樂觀,2017年大部分測試任務自動化的占比為32%,自動化測試超過一半的公司僅23%,具體情況如圖1所示。

圖1 國內自動化測試使用情況
AI測試工具可以理解代碼,但是真正跟業務結合起來的數據也很少。就像機器學習有時候需要大量的數據,但是真正基于業務的數據比較少,像開源里面有4TB的代碼,這些代碼更多的是可以做Java、C、Python這方面語言的學習,甚至可以做到Bug的自動定位、Bug的自動修復。但是如果真正結合業務,發現與業務結合這個工具還是很弱的,需要靠人工進行測試。
從軟件測試的發展歷程來看,早期是純手工測試,然后發展到依賴部分自動化工具完成自動化測試,到后來使用健壯的TA工具與開源框架集成,受到業界的歡迎和廣泛的應用。云計算、大數據技術的推動下,構建代碼庫,把所有的代碼整合到一起,可以更好的復用或者學習。公司在不斷嘗試將自己的開發環境和測試環境放到云平臺,這樣才能有更多的數據積累下來,為機器學習提供便利。當前基于云計算平臺和大數據,基于生態鏈工具,可以更好地去完成自動化測試。未來,測試基于新的微服務架構或者其他架構,可以真正做到自主、智能化。
未來,在測試過程中,測試人員更多地完成分析、設計、建模、訓練模型的任務。所有的執行測試的任務應該交由測試工具去完成。例如,Google提供了TensorFlow(TF)或其他的一些平臺,針對自己的業務,通過大量的分析來構建對應的模型。Google研發出了AlphaGo,然后加入人機交互智能生成了AlphaZero。人工智能或者機器人,或者未來的測試機器人是需要人去訓練的。相當于把測試工程師的經驗和知識,對業務流程和業務場景的理解賦能給機器人。
一般來講,人工智能包含計算智能、感知智能和認知智能,現在計算智能和感知智能發展相對比較成熟,但認知智能比較弱,要讓人工智能真正去理解人類業務還是比較困難的。需要人類構建業務流程或者知識圖譜,讓機器去理解、學習。人工智能的應用前期需要依賴很多的人力,沒有大量的數據標識,機器是不會去識別或者做預測的。所以有時候在某些相對落后地區,有大量的人力從事數據標識的基礎性工作,這個過程會比較慢。
人工智能的算法不一定要有數據標識,監督學習需要標識數據,還有無監督學習、強化學習。目前無監督的學習更受歡迎,有更好地應用和發展。從單元測試擴展到系統測試,文字識別變成圖像識別來處理。在游戲行業,騰訊、華為、網易等公司在測試上應用AI能力方面有了良好應用成果,與高清攝像頭結合,做到更多的場景識別、人工智能輔助決策,實時游戲控制等。
借助AI生成測試數據、生成測試用例等方面,進行了一段時間的探索,并取得了一定的收獲。人工智能的應用,使用全局和局部的智能優化算法,如遺傳算法、粒子群優化算法、蟻群優化算法、爬山算法、禁忌搜索算法等。
實踐表明,借助AI提高功能測試覆蓋率、源碼測試覆蓋率、回歸測試覆蓋率、系統非功能性測試覆蓋率等。同時,也可以借助關鍵字引導的搜索策略以提高測試覆蓋率。在回歸測試中利用AI,選擇40%測試用例集可以達到80%的測試覆蓋率,如圖2所示。

圖2 回歸測試覆蓋率提升
通過針對關鍵字索引提高測試覆蓋率。例如:Eggplant AI導入已有測試資產創建模型、使用智能算法選擇最佳測試集運行測試,基于模型算法能最大程度減少構建與維護的成本。Eggplant AI的測試覆蓋率與以前相比,有很大提高,達到80%-90%。通過遺傳算法和對源碼“編譯時插樁”的方式自動生成測試用例。以探索二進制程序內部新的執行路徑,而且能夠不斷優化執行路徑,從而獲得高效的模糊測試策略。這樣可以大大提高源碼測試覆蓋率。
當前人工智能能夠企及的地方,包括黑盒測試、單元測試、回歸測試等,但其結果只能作為測試員判斷的依據或是參考,起到一個輔助的作用。也就是說,AI還做不到“無人化”的參與效果。雖然并行計算與分布式計算給我們帶來了可靠的支撐,但目前的瓶頸是缺乏有效的建模。因此,未來的AI助力測試的理想狀態是結合MBT與AI,共同助力測試。