原創|行業資訊|編輯:鄭恭琳|2020-06-10 15:24:18.037|閱讀 432 次
概述:人工智能是軟件開發行業中最新的流行語之一。但這到底是什么意思?在軟件測試自動化的背景下,人工智能與廣義定義有何不同?本文將針對以上幾個問題為您解惑。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
人工智能是軟件開發行業中最新的流行語之一。但這到底是什么意思?在軟件測試自動化的背景下,人工智能與廣義定義有何不同?
當我們談論AI及其姊妹術語機器學習時,我們是什么意思?我以為我會清理我們的用法,所以很清楚我們如何使用AI和機器學習來推動軟件測試的最新發展。
人工智能是市場上最繁瑣的流行語之一。“AI”讓人聯想到功能強大的超級計算機之類的圖像,這些圖像深深地被人類摧毀。通過Alexa或Siri的語音控制幫助;電腦象棋對手;或自動駕駛汽車。
維基百科將AI研究定義為“……對‘智能代理’的研究:任何能感知其環境并采取行動以最大程度地成功實現其目標的設備。”但這有點太抽象了,我喜歡將AI看作是計算機程序或機器思考(自身原因)和學習(收集數據并以有益的方式修改未來行為)的能力。在AI對軟件開發工具和技術意味著什么的背景下,人們開始看到更有意義的東西。
同樣重要的是要意識到,“AI”的范圍會隨著時間而變化。例如,曾經有一次,光學字符識別(OCR)被認為是AI中的最新技術。或曾經被認為是最先進的Siri和Alexa的問答式回答,現在在很大程度上被認為是理所當然的,并不總是被視為AI。軟件測試工具也將發生同樣的事情——隨著新功能的發展,當今自動化領域的創新將成為人們期待的事情。但是現在,讓我們考慮一下2019年軟件測試自動化中的AI。
人工智能在軟件開發中的使用仍處于起步階段,其自主性水平遠低于自動駕駛系統或語音輔助控制等更發達的領域,盡管它仍在朝著自主的方向發展測試。AI在軟件測試工具中的應用旨在簡化軟件開發生命周期。通過推理、問題解決以及在某些情況下的機器學習的應用,人工智能可用于幫助自動化和減少開發和測試中平凡而繁瑣的任務。
“還沒有測試自動化工具嗎?”你可能會問。
答案當然是:“是!他們愿意!”......但是它們有局限性。
人工智能在軟件開發中大放異彩的地方就是它被應用來消除那些限制,以使軟件測試自動化工具能夠為開發人員和測試人員提供更多價值。AI的價值來自減少開發人員或測試人員直接參與最普通的任務。(在應用業務邏輯等方面仍然非常需要人類智能。)
例如,考慮到大多數(如果不是全部)測試自動化工具為您運行測試并提供結果。大多數人不知道要運行哪些測試,因此它們會運行所有測試或預定的一組測試。那么,如果啟用AI的機器人可以查看測試狀態的當前狀態,最近的代碼更改,代碼覆蓋率和其他指標,確定要運行的測試,然后再運行它們,該怎么辦?引入基于更改數據的決策是應用AI的一個示例(順便說一下,Parasoft就是這樣做的)。該軟件可以有效地在決策過程中替代開發人員/測試人員。將其應用于CI/CD管道的好處顯而易見。
那么,機器學習呢?機器學習可以通過應用算法來增強AI,算法允許工具通過收集測試產生的大量數據來自動改進。
機器學習研究是整個AI研究的一個子集,其重點是基于先前觀察到的數據進行決策。這是整個AI的重要方面,因為隨著學習的改善,智能需要修改決策。但是,在軟件測試工具中,機器學習并非總是必要的——有時,最好手動微調支持AI的工具以適合使用該工具的組織,然后不管結果如何,任何時候都可以應用相同的邏輯和推理。
在其他情況下,數據收集是決策過程的關鍵,并且機器學習可能非常有價值,首先需要一些數據,然后隨著收集更多數據而進行改進或調整。例如,隨著時間的流逝,代碼覆蓋率、靜態分析結果、測試結果或其他軟件指標可將有關軟件項目狀態的信息告知AI。
深度學習
機器學習有其自己的名為“深度學習”的子集,該子集建立在處理大量數據以供學習的基礎上。在大多數情況下,此類數據由多層神經網絡表示——它們是受人類神經元網絡啟發的模型,可幫助計算機獲取新知識并高度智能地推理。
深度學習的關鍵方面是以神經網絡為代表的大量信息,以驅動決策過程。如此大量的數據并不總是可用或不適用于軟件測試-也許這就是為什么我們在這些領域沒有看到很多深度學習案例的原因。一個可能的示例是從數千萬行代碼中“學習”,以了解不同類型的安全沖突,并基于這種深度學習模型來實現靜態分析引擎。
這是Parasoft的重要研發領域。令人興奮的是,我們當前的產品僅僅是開始,而我們對AI和ML的持續研究繼續為將這些技術集成到我們的產品中帶來新的方式。我們已經采用了以下幾種方法。
使用人工智能自動執行單元測試的生成和參數化
第一個示例在Parasoft Jtest中,這是我們針對Java開發人員的軟件測試解決方案,其中包括靜態分析、單元測試、覆蓋率和可追溯性等。在這里應用AI,我們發布了自動測試用例生成,可幫助開發人員填補空白從稀疏的JUnit工具開始。
Parasoft Jtest的IDE插件通過簡單的一鍵式操作即可創建、擴展和維護單元測試,從而為單元測試實踐提供了有用的自動化功能。通過使用支持AI的Jtest,用戶可以實現更高的代碼覆蓋率,同時將構建全面而有意義的Junit測試用例套件所需的時間和精力減少一半。
實現此目的的一種方法是使創建存根和模擬程序更容易以隔離測試中的代碼。底層的AI使Jtest能夠觀察被測單元以確定其對其他類的依賴關系,并且在創建這些依賴關系的實例時,建議將其模擬給用戶以創建更多隔離的測試。自動創建必要的模擬和存根可以減少測試創建中最耗時的部分之一的工作量。
Parasoft Jtest還可以自動檢測現有測試套件未涵蓋的代碼,并遍歷源代碼的控制路徑,以找出需要將哪些參數傳遞給被測方法,以及如何初始化sub/mocks才能達到該代碼目的。通過啟用此AI,Jtest可以自動生成新的單元測試,并應用修改后的參數來增加整個項目的總體代碼覆蓋率。
使用AI和機器學習自動執行API測試的生成和維護
另一個很好的例子是Parasoft SOAtest的Smart API Test Generator,它增加了機器學習功能,它超越了記錄和回放測試,它利用AI和機器學習將手動UI測試轉換為完整的自動化API測試方案。
智能API測試生成器使用推理來理解在執行UI時進行的不同API調用中的模式和關系。通過該分析,構造了一系列API調用,這些API調用表示在UI流期間進行的基礎接口調用。然后,它通過觀察有關不同API資源的內容并將其作為模板存儲在專有數據結構中,來應用機器學習。通過檢查用戶庫中的其他測試用例,可以在學習API時學習不同類型的行為(例如,聲明或在正確的位置添加特定的標頭)來更新此內部結構。
此處AI的目標是創建更高級的測試(不僅僅是重復用戶所做的事情,就像通過簡單的記錄和播放測試一樣)。該工具可以識別流量內部的模式,創建觀察參數的全面數據模型,生成自動化的API測試,并能夠將學習到的模式應用于其他API測試以增強它們,并幫助用戶創建更高級的自動化測試場景。由此產生的自動化API測試具有更完整的可重用性、可伸縮性和更改彈性。
使用機器學習自我修復Selenium測試的執行
自動驗證UI層是測試策略的另一個關鍵組成部分,以確保產品在投入生產之前已得到完全驗證。Selenium框架已被廣泛用于UI測試,這是用戶的明確選擇,但用戶仍無法擺脫常見的Selenium測試在可維護性和穩定性方面的挑戰。AI技術(尤其是機器學習)可以在此提供幫助,在運行時提供自我修復功能,以解決與UI測試執行相關的常見可維護性問題。
我們通過提供此功能,它可以在定期執行Selenium測試期間“了解”內部數據結構。引擎監視每次運行,并捕獲有關被測應用程序的Web UI內容的詳細信息。它提取DOM元素,它們的屬性、定位符等,并將它們與UI驅動的測試執行的操作相關聯。采用Parasoft專有的數據建模方法,將該信息存儲在其AI引擎中,并且該模型會不斷更新,分析所有測試的歷史執行以繼續變得“更智能”。
如果網頁的UI元素被顯著移動或修改而導致測試失敗,則這是至關重要的時間節省。通過,引擎使用的AI啟發式算法可以將那些更改的元素與模型表示的歷史數據“匹配”,并自動生成可抵抗更改的“智能定位器”,以在運行時恢復Selenium測試的執行。有關這些更改的信息會自動通過模型傳播,并且會根據這些更改來調整未來的新定位器。
那么接下來呢?我們正在這一領域積極研發,繼續追求人工智能和機器學習的進一步應用,以擴大我們的軟件測試工具套件。有很多研究途徑,但是最終目標很明確:幫助團隊更有效地開發和測試代碼,快速創建更高質量的軟件。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn