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