一、技術方案
大家早上好,我是陳冠誠,很高興有機會來到阿里的主場參加-阿里巴巴質量技術創新大會。最近一兩年隨著深度學習技術浪潮的誕生,圖像識別和自然語言處理領域技術的發展使得智能化測試成為可能,今天我想跟大家分享AI如何引領下一代測試的新航向。我們這一塊的分享是拋磚引玉的,我相信不管是阿里,還是業界的同行在整個測試開發領域里面,大家都做了很多的實踐,所以我今天希望跟大家分享一下我的觀點。
二、測試框架的痛點
整個軟件自動化誕生非常多的軟件,不管是QTP,還是非常老的基于圖形化的自動化測試的框架,這些框架都有非常多的痛點。
第一,學習成本高。需要一個具備測試開發能力的人寫測試代碼,我們知道測試分層,代碼級的測試,服務級的測試,還有UI級的測試驅動級腳本能被檢測嗎,我們把單元測試做得足夠好,很多工作不用在接口層和UI層做,但是測試行業,因為人員結構的問題,不是所有的公司都是在阿里可以招聘很多有開發能力的測試工程師,作為初級或者說不太具備開發能力的從業人員,能否用一個簡單的方法把自動化跑起來是一個問題。
第二個問題就是維護成本高,業務邏輯更新之后修改腳本花費的時間比較長,腳本如何不用改,把維護成本盡可能降低到最低是第二個挑戰。
第三個就是跨平臺。測試腳本如何盡可能復用?我們看很多的APP,包括現在的小程序他們的業務邏輯是共通的地方。從技術角度上面去看未來,能不能實現跨平臺和應用的復用,這一塊是我們看到典型的問題。
三、AI測試方向
可喜的是,隨著深度學習的這一波浪潮,我們確實看到有一些問題可以在我們的量變基礎上開始產生一定的質變。目前能夠看到是,整個自動化測試領域里面,深度學習在視覺相關的處理,比如說圖像的處理、文字的處理,包括整個測試的自然語言的交互上面,確實有可取之處,能夠把我們整個自動化的水平往上提升一個臺階。
我們把整個方向分為四大塊,第一大塊,是機器像人一樣看懂人話,比如說你告訴他說,你幫我測試我的登錄功能,他幫助你測試,你告訴他說測試我的轉賬功能,你告訴他的邏輯之后,他可以幫助你生成各種各樣的用例,當然今天我們沒有完全做到這點,但我覺得這是未來大的方向,就是機器像人一樣看懂人話。
第二個環節,是機器怎么樣像人一樣理解圖形。在整個應用里面,隨著多媒體、短視頻和長視頻出現在應用里面,不管你是搜索圖標,還是一個圖片,還是一個APP里面有導航欄、文字、圖文典型的場景,人可以識別哪些是圖哪些是文,那有沒有可能機械像人一樣知道哪些是圖,哪些是文,知道哪些是導航。從未來來講,隨著整個自動化程度的越來越高,機器應該可以像人一樣理解整個圖形,包括整個版面的邏輯關系。
第三個環節是自定義圖標,人不可能窮舉各種各樣的圖標:因為圖標是帶靈感和創造性的,不可窮舉。機器有沒有可能對自定義的圖標可以比較好的理解它,這是我們想要解決的第三個問題。
第四個問題就是機器有沒有可能像人一樣執行測試用例,其實核心點是有沒有可能在執行過程當中對圖片文字或者是業務邏輯進行很好的識別。
四、取得的進展
跟大家分享我們取得的一些進展,第一個是自然語言的腳本,第二個是OCR文字識別,第三個是以圖找圖和通用圖標的識別。
第一、自然語言腳本。在整個測試中有非常多的工作,我們核心目標是降低測試工程師編寫腳本的難度,實現一個目標——會說中文,就能夠寫自動化測試。
如圖所示,右邊是我們可以做到的效果,左邊這個大家都是熟悉的,寫一段自動化測試代碼,右邊是我們實現的能力:比如說向下滑動的操作,只要寫向下滑動這四個字就可以做向下滑動的操作。我們希望用純中文的方式實現跨平臺,無視控件變動,降低腳本維護成本,利用自然語言的優勢,編寫效率高,易理解,易維護。大家閱讀別人閱讀的自然語言的腳本,理解比較容易,維護難度也降低了。這是我們目前的語法規則,核心是會中文就會寫測試程序,會用手機就理解別人寫的測試程序。
第二塊是在OCR上面做的事情。傳統的OCR文字識別的方法,有很大的局限性,就是識別率不夠高。我們面臨的場景是應用的文字識別,首先是印刷字體。我們做測試的時候,很多時候基于業務功能做邏輯的回歸,這個時候需要識別準確的對象,往往是核心功能的按紐,把這些按鈕進行特征分析,會發現他們典型的特征是印刷字體。其次很多時候都是水平排列,或者是垂直排列,或者是帶角度排列相對特別少。這牽扯到說我們做識別的時候,要做的任務存在哪個象限,就是在學界和工業界大家比較公認的OCR或者是文字識別的象限。最難就是右下角通用手寫體的識別,你用手機拍的海報是毛筆字你怎么識別它,我們的手機截屏是屬于右上角,屬于第二個難度,不是屬于最困難的一類。今年有一個專門的文字識別競賽,這個場景下面目前來講最高識別精度在70%左右。比較容易是左下角基于定制化的表格,他有很強的規則,比如說,身份證的文字有多少個字都是固定的。
首先講文字識別,現在做深度學習是講端到端,端到端可以分為兩個環節,第一個環節文字檢測,你標注出來應用的截屏哪些是文字塊,哪些不是文字塊,這就是文字的檢測,第二個階段把檢測出來的文字塊進行識別,識別出來這個文字塊里面有哪些單詞,加上標點符號組成。
文字識別在深度學習浪潮起來之前,有基于傳統機器學習的方法,有兩種是典型的,基于非常多的規則,包括精巧算法的設計,相對不是這么通用,但是垂直領域的使用下精度還好。但是一旦遇到自然場景,帶角度、旋轉、光線,因為他們不是靠訓練數據驅動的,它的識別效果不如CPTN或者是EAST這種算法這么好。
但是我們識別的時候需要做精度和性能之間的平衡,后面兩種方案最大的問題是必須要求GPU才有一個比較好的性能,有好的GPU才能有500毫秒的性能。我們這個產品可以云端部署和私有化部署,私有化部署如果要求客戶配置一個GPU才能跑起來,對于有的客戶來講不能承受,我們內部實現多個版本,CPU和GPU方案都支持,可以根據用戶的場景和預算靈活配置。
下面講講識別。文字識別是基于CRNN的模型做的。這是業界里面相對通行的方法。基于CRNN的思想,最核心點就是使用CNN的方法提取圖像的特征,通過循環神經網絡,利用OCR典型的特征去識別,不是一個一個的字符去識別,而是識別一個詞,詞有上下文的關聯關系,登錄是有上下文,循環神經網絡可以實現。
我們在整個深度學習和機器學習里面有算法和數據,還有算力。這里面又牽扯到另外一個問題,數據怎么來的問題。我們知道最簡單的方法或者是最容易想到的方法是做大量APP界面截屏或者是人工做標注,但是你想要拿到千萬級別的訓練數據,用人工的方式效率非常低。
我們考慮一點是說從手機的角度來講,包括APP的角度上面來講,我們用自動化測試的引擎,做大量App的測試執行。比如說有5萬臺手機可以做大量的手機的截屏,先做第一步的篩選,用控件樹的信息,把文字的內容和控件的內容進行關聯。再用機器做校驗,然后用人工做校驗。用OCR做檢測,主要是對他位置的框定。把自己的傳統的OCR識別匹配上面的信息給對應起來做框定,可以拿到很多數據。其實靠數據做檢測不一定準,我們還有人工復核,我們請云測的AI數據標注部門來幫助我們做這事情,機器生成之后機器做二次校驗,人工再做校驗,得到源源不斷的數據。
還有一個有意思的點就是數據的泛化,有很多場景數據模擬顯示不全,不同的背景,模擬分辨率低,模擬立體可以通用機器的方法實現,可以通過數據的變形之后拿到大量訓練的數據樣本。
這些都是跟數據訓練相關,還有一塊是性能。很多客戶不具備用GPU部署的能力,我們在想有沒有辦法在CPU上面跑更好,是英特爾基于自身現有的硬件平臺開發的一個框架。這是我們跟某一家云廠商的付費OCR高精度版本在APP上的測試結果,我們比他們在App和Web場景下精度更高。
第三,以圖找圖和圖標識別。我們想要實現三個目標,看左邊第一個圖,這是一個典型的圖文場景,我們看到手機的截屏,不管任何一個圖片在屏幕上面的位置會發生變化,甚至背景顏色也會不一樣,我們希望實現在不同的背景顏色下面找到同一個圖。
第二個就是常見的系統按紐,典型安卓三個按紐,返回,主頁,還有系統功能,有很多圖標是通用的,比如說,主頁加一個搜索圖標,通用圖標能不能做更好的識別。
在這個圖標里面有一個問題,不同的設備上面,分辨率不同,識別圖標的大小不一樣,第二個很多的圖標是非常簡約的設計,特征點非常小,不像做貓或者是狗,目標和整個輪廓性比較豐富,我們很多圖標只有一個線,非常的抽象,這個特征非常少的情況下,你怎么樣對他進行識別,給我們帶來非常多的挑戰。
第三個就是場景或者是背景會發生變化,比如說暫停按紐在不同播放音樂過程當中背景發生變化,但是人眼可以看出來是同一個圖標,但是機器怎么樣進行識別。我們用的算法很簡單,我們不認為深度學習就是唯一的方法,我們發現特征工程+深度學習結合更好,因為傳統算法很輕量,這是我們不為深度學習論的最核心的原因,因為他需要GPU才能跑起來。第二點我們在整個全屏搜索上面我們做了大量優化,優化全屏搜索效率。第三個相似度的判別器。我們和行業大廠的以圖找圖的工具做過對比,他們的精度在68-70%,我們的以圖找圖精度可以達到97%。
還有一類是通用圖標,這里使用100W+圖標標注數據做訓練。國外有學者做開源的數據集,他們也是用機器控件進行識別和人工標注的方式結合。這里回到另外一個問題,我們講深度學習或者是AI有多少人工才有多少智能。我們人工標100萬的圖標級,比如說,典型的前進,搜索,收藏等等典型的圖標。舉一個應用的例子,比如說自動在整個應用里面找出哪些是“個人中心”的圖標,“更多”這樣的圖標,包括“主頁”這樣的圖標,還有“返回”的相關圖標。
舉一個真實QQ音樂APP的應用場景。你點擊搜索,他直接點擊搜索,通過OCR直接找點擊搜索音樂這四個字,這時我們說輸入周杰倫,他就會輸入周杰倫在輸入框里面。點擊周杰倫《說好不哭》,他就會通過OCR里面輸入周杰倫《說好不哭》,點擊第三個《說好不哭》,第三個是我們的關鍵字驅動級腳本能被檢測嗎,他會被點擊到,這里有一個相對位置,我們在移動目標的下側找另外一個目標,這是點擊下側,輸入畫像向右滑動,點擊暫停按鈕。這個時候,暫停按紐是人工標注好,點擊分享按紐,分享按紐是我們識別過的這是一個分享按紐。
數據在這個行業里面是最大的壁壘,為什么這么說呢,因為我們去講算法、算力、數據這三個要素。我認為今天來講,算法可以通過招到優秀的人才可以解決,包括今天很多算法大家分階段學界發表相關的論文,但是數據這個事情,相對來說壁壘更高的一件事情。我們有大量的真機,做了各種各樣的自動化測試,通過這些測試,確實有可能讓整個門檻變得更高。
比如說OCR,前幾天遇到識別錯誤的Bug,用戶用非常藝術化的字體進行識別,我們訓練的字庫里面沒有這個字體。因為我們見到了這個字體,所以我們想到要把這個字體拿到我們的訓練數據里面來,加入到OCR文字識別里面,讓整個文字識別的精度更高,這是我發現數據在AI應用里面最核心的一個場景,或者是最核心的一個壁壘。
五、總結
AI在自動化測試里面的一些工作,我覺得今天能夠到測試的三大環節,一個是測試用例的生成,測試的執行,測試結果的生成。整個測試的執行環節,通過文字識別,圖像的識別,圖標的識別,讓整個測試的執行變得更加穩定,兼容性更好,而不用基于傳統機械控件的方式,因為OCR可以通過自動檢測,哪怕你整個文字也好,包括你的控件在頁面上換了位置,只要還在這個頁面上,算法都可以自動進行檢測,原來用控件的方式你要告訴整個腳本控件變成了什么,所以整個識別變得更加智能,包括說整個測試結果的解析上面,不管說自動進行UI異常的識別,兼容性的識別,崩潰的識別,還有各種數據的分享,把整個測試的結果變得更智能。
深度學習核心可以做的事情就是重復性的事情,比如說文字的識別,圖標的識別,這些事情都是屬于重復性的工作,什么是重復性的工作:漢字就10000個。我們對技術有深刻的信仰,相信技術能推動整個行業發展,不管是深度學習的突破或者是強化學習的突破,會在整個自動化測試行業上有更多的進展。我相信云測也好,阿里也好,還是在座的各位同仁大家都應該做非常多的嘗試,期待下一次有機會跟大家一起交流,向大家學習和分享AI怎么樣把云測試變得更好。