人工智能一直科技最高級的地域,將程序代碼、數據分析進行自動可視化,依托軟件和硬件一體去模仿人類一些或繁瑣或簡單的工作。
此文也是關于人工智能技術的探討,主題為:如何將人工智能技術應用到自動化測試上?
在測試中加入AI,自動測試也變為可能。將無聊、重復的工作交給AI,這樣測試人員就可以用更多時間做其他測試方面的思考。
布道師、Applitools的高級架構師Gil Tayar為我們介紹了如何將AI技術應用到自動化測試的內容。
InfoQ采訪了Tayar,咨詢了他有關現如今測試面臨的主要挑戰,自動化測試分為哪六個層次,軟件產業在這六個層次中取得了什么樣的進展,如何實現自動可視化測試,我們在測試中如何應用機器學習技術,以及AI給測試人員的工作會帶來什么影響。
Tayar:很遺憾的是,測試還沒有成為主流。我還記得在80年代、90年代的時候,整個行業都沒有把QA這個職業和手動測試軟件當一回事。不只是說沒有自動化測試,而是根本沒有測試!好在現在時代已經不一樣了,在交付產品之前測試人員都會定期測試軟件,而且很多人開始使用自動化測試。
但在如今的“互聯網時代”,這還不夠。由于使用了敏捷方法,我們需要部署得越來越快,這其實是一件好事。因為越來越多開發人員會自己測試自己的軟件,而不是慢悠悠地等待專門的測試人員來測試他們的軟件。
但是,開發人員測試自己的軟件還沒有成為主流。大多數開發人員不會自己寫測試來檢查代碼,他們選擇手動測試,或者等待測試人員進行測試,保證他們的軟件正常運作。
這正是測試面臨的主要挑戰,怎么讓開發人員編寫自己的測試。而不幸的是,AI在這方面起不到什么作用,AI只是測試時使用的工具,但如果你自己不測試,AI就沒用了。事實就是這樣,AI從現在到未來都只能作為測試的輔助,如果你自己不想測試,AI不可能自動幫你完成測試。
開發人員必須要有測試的想法,這就是我們在測試方面面臨的主要挑戰。
自動化測試的六個層次。它們分別是什么?
Tayar:這個概念來源于自動駕駛的五個層次。它們描述了AI如何幫助我們進行測試。
駕駛輔助:AI可以查看到頁面,幫助你寫出斷言。你還是要自己寫“驅動”應用程序的代碼,但是AI可以檢查頁面,并確保頁面中的期望值是正確的。
部分自動化:雖然能分辨實際頁面和期望值的區別這一點已經很好了,但是第二層次的AI需要有更深層的理解。比如說,如果所有頁面都有相同的變更,AI需要認識到這是相同的頁面,并向我們展示出這些變更。進一步來說,AI需要查看頁面的布局和內容,將每個變更分類為內容變更或是布局變更。如果我們要測試響應式web網站,這會非常有幫助,即使布局有細微變更,內容也應該是相同的。這是Applitools Eyes這樣的工具所處的層次。
條件自動化:在第二層,軟件中檢測的問題和變更仍然需要人來審查。第二層的AI可以幫助我們分析變更,但不能僅僅通過查看頁面判斷頁面是否正確,需要和期望值進行對比才能判斷。但是第三層的AI可以做到這一方面,甚至更多其他方面,因為它會使用到機器學習的技術。比如說,第三層的AI可以從可視化角度查看頁面,根據標準設計規則,例如對齊、空格、顏色和字體使用以及布局規則,判斷設計是否過關。AI也能查看頁面的內容,基于相同頁面之前的視圖,在沒有人工干預的情況下,判斷內容是否合理。我們還不能達到這一層次,但我們正在向這個方面努力。
高度自動化:直到現在,所有AI都只是在自動化地進行檢查。人類盡管使用自動化軟件,還是需要手動啟動測試,需要點擊鏈接,而第四層的AI可以自動啟動測試本身。AI將通過觀察啟動應用程序的真實用戶的行為,理解如何自己啟動測試。這層的AI可以編寫測試,可以通過檢查點來測試頁面。但這不是終點,它還需觀察人的行為,偶爾需要聽從測試人員的指令。
完全自動化:我必須承認,這個層次有點恐怖。這個層次的AI可以和產品經理“交流”,理解產品的標準,自己寫測試,不需要人的幫助。
軟件產業在這六個層次中取得了什么樣的進展?
Tayar:大多數公司肯定在第二層,目標向第三層努力。我相信要達到第四層需要一段時間,但我們終有一天是可以達到的。至于是否能達到第五層,我非常懷疑,但未來不可估量!(原文中引用了古猶太人毀壞第二圣殿的典故,比喻未來不可估量。)
Tayar:其實在幾年前,即使是開發人員都不能自動進行可視化測試,更不要說使用AI了!由于基于像素的算法誤報率過高,截圖應用程序,根據預期進行檢查是不可能的。
但是隨著計算機視覺算法和現代人工智能(AI)技術的應用的發展,編寫可視化測試已經成為現實。人們發現測試中缺少可視化測試。由于可視化測試的存在,現在我們可以測試到軟件的方方面面。
那我們如何使用AI技術避免誤報,AI是否能比單純比較像素的算法做得更好?答案不僅僅牽涉到一個技術,需要將不同算法結合在一起,一個算法解決一個準確度的問題,通過決策樹結合不同算法的結果(有時候將一個算法的結果應用到另一個算法中)來確定最后的結果。但要使用什么算法呢?分割算法就是一個例子,這個算法試圖確定圖片的文字和圖像部分。這不是一個簡單的問題,因為我們需要弄清,表情符號其實是文字,而圖像中的文本是圖像的一部分,并不是新的文字。這就是深度學習的魅力所在,由于我們代碼中使用了深度學習技術,我們的準確率從88%提高到了96%。
所以要做到自動視覺化測試,你需要使用現代的數據化測試工具,比如Applitools Eyes。這些工具有一些簡單的高級AI技術,因此你不需要理解并實現。看看這個例子:
在這個例子中,我們驗證了一個博客應用程序。在常規的、非視覺化、非AI的測試里面,我們需要驗證主頁和特定的博文,對于頁面中的每個元素進行幾十次檢查(即使這樣我們還是會遺漏一些)。但是在這個例子里面,我們只是“checkWindow”,截圖上傳到服務器,服務器使用AI技術檢驗截圖。
我一直覺得,測試是為開發過程服務的,它避免了在代碼中添加新功能的煩惱,更重要的是,避免了代碼重構的煩惱。但為什么這只能運用在業務邏輯上?為什么我們的可視化代碼(在CSS、HTML和JS文件中)不能測試,我們還要再為它們擔憂?AI可以幫助我們實現這一目標。
Appraise是另外一款可以用于視覺化測試的工具。早先,InfoQ采訪了Gojko Adzic有關使用Appraise進行自動視覺化測試的內容:
Adzic:Appraise采用實例化需求的方式,但將其運用于視覺化內容。我們采用具體的例子,讓其從自動化層面創建可執行的實例化需求,用headless Chrome截屏,與預期的結果進行對比。和普通的實例化需求工具(期望結果和實際結果不同就認為是錯誤的)不一樣,Appraise采用確證測試方法。它將所有的不同展現給人來評估,讓人決定差別是否正確,如果是的話就進行確認。
Tayar:我最近看到了一個講座,講的是如何使用機器學習測試Candy Crush游戲。由于Candy Crush是高隨機的游戲,任何情況都可能發生,標準的測試技術很難實現。King的目標是想要了解是否這局游戲可以成功完成,要完成有多復雜。他們一開始使用蠻力法嘗試所有路徑,計算其中有多少可以成功。這個方法確實有用,但需要花好幾個小時,因為組合可能太多了(使用去除無效路徑組合的算法)。要解決這個問題,他們使用了Genetic Algorithms,使用一些最基本的算法(如只使用粉色糖果,一直消除障礙等),在一局游戲中進行試驗。之后他們使用最佳算法(基于如何勝利完成一局游戲的算法),再結合兩者,“創建”一個新的算法。不斷重復,最后得到一個最佳算法。
再舉一個例子,卷積神經網絡幫助我們分析圖像,并從中提取語義信息。在生成圖像的應用程序中是非常實用的。可視化測試工具使用它來理解頁面的不同部分,以及相互之間的聯系,正如我上文所述一樣提取不同的文字和圖像塊。
Tayar:請問拖拉機會給農民的工作帶來什么影響?當然是巨大的影響!農民不再需要做枯燥、乏味的體力勞動工作,只要交給機器來做就可以了。我相信AI也會給測試人員帶來相同的影響。乏味、重復的工作交給AI,測試人員就可以用更多時間來思考。
大多數測試人員已經習慣思考測試相關的方方面面:思考產品,思考怎么測試,思考邊界情況等等,他們也需要工具來完成無聊、重復的工作。一些測試人員需要學會怎么思考更高層次的問題,確實會有一部分測試人員無法適應,但我相信他們只是少數。
新聞熱點
疑難解答
圖片精選