前言
不得不說最近AI概念確實很火,好像什么搭上AI概念都立馬變得高大上了。但是也要看清,AI目前仍然是處于早起發(fā)展的階段,仍處于算法研究革新的階段,技術(shù)發(fā)展目前是先于應(yīng)用層面的?,F(xiàn)在比較成熟的應(yīng)用場景主要在,智能硬件、機器人、翻譯、醫(yī)療診斷和一些推薦系統(tǒng)等等
目前看現(xiàn)狀是大公司都在加大經(jīng)費投入算法研究和平臺建設(shè),比如現(xiàn)在很火的Tensorflow,百度推的Apollo等,都在想著做AI領(lǐng)域的IOS,Android。而中小型的公司則深耕某個垂直領(lǐng)域,比如語音識別領(lǐng)域的科大訊飛,計算機圖像識別領(lǐng)域的Face++等。
在此AI浪潮之下,作為一個測試人員,我們要怎么做,才能搭上風(fēng)口或者說不被浪潮拋下呢?個人覺得有兩個選擇:
- 只要你理論基礎(chǔ)足夠好,你可以轉(zhuǎn)型研究各種算法,參與框架和平臺的搭建,找個目前最火熱的職位-算法工程師
- 學(xué)習(xí)目前成熟的框架,調(diào)用別人封裝好的各種網(wǎng)絡(luò)和深度學(xué)習(xí)算法,利用自己手頭有的數(shù)據(jù),訓(xùn)練模型,利用AI解決一些問題
本文僅就在選擇第二種的前提下,討論在測試行業(yè)內(nèi),我們能利用AI做些什么,從而改善測試的質(zhì)量和效率
選擇有監(jiān)督、無監(jiān)督還是強化學(xué)習(xí)?
既然要在別人計算框架的基礎(chǔ)上,選擇網(wǎng)絡(luò)和深度學(xué)習(xí)算法訓(xùn)練模型,但是網(wǎng)絡(luò)和算法有這么多,選哪個?怎么選?
其實目前大部分深度學(xué)習(xí)算法大體可以分為有監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強化學(xué)習(xí)三大類。監(jiān)督學(xué)習(xí)就是基于一堆帶標(biāo)簽數(shù)據(jù)進行模型訓(xùn)練,無監(jiān)督學(xué)習(xí)簡單理解就是給一堆無標(biāo)簽數(shù)據(jù),讓計算機自己去學(xué)習(xí)總結(jié)規(guī)律。
目前應(yīng)用層面用的多還是監(jiān)督學(xué)習(xí),比如商業(yè)化比較成功的廣告推薦系統(tǒng),類似今日頭條那種新聞推薦,都是基于你日常瀏覽、搜索和用戶畫像標(biāo)簽數(shù)據(jù)的。
所以AI如何運用于測試領(lǐng)域,個人認(rèn)為重點還是數(shù)據(jù),找到我們已有的一些數(shù)據(jù),才知道我們到底能做什么。
數(shù)據(jù)數(shù)據(jù)!
那一般測試人員會有什么類型的數(shù)據(jù)呢?
- 系統(tǒng)運行時候產(chǎn)生的日志信息
- 移動App運行中收集連續(xù)性能數(shù)據(jù)
- 測試人員本身提的bug數(shù)據(jù),包括標(biāo)題、描述、截圖等
- 網(wǎng)站或app運營數(shù)據(jù),埋點數(shù)據(jù),用戶訪問路徑,用戶評論數(shù)據(jù)等
...
有了數(shù)據(jù),然后呢?發(fā)散一下
- 假設(shè)我們有了大量的報錯日志片段-標(biāo)簽是報錯責(zé)任人和報錯模塊,那么我們大概可以通過機器學(xué)習(xí)訓(xùn)練一個模型,該模型可以自動識別一段報錯日志,并提交給XX模塊的負(fù)責(zé)人YY
- 另外假設(shè)我們有app運行一段時間的各項性能指標(biāo),標(biāo)簽是性能是否達(dá)標(biāo),那么我們大概也可以訓(xùn)練一個模型,只要提交一段時間的各項性能數(shù)據(jù),機器自動會告訴你性能達(dá)標(biāo)與否
如果沒有數(shù)據(jù)呢?
前面說的都是在有大量人為標(biāo)注的格式化數(shù)據(jù)的前提下的想象,那萬一我們沒有這些數(shù)據(jù)積累了,我們還能做啥?
如果某些測試場景,我們不但沒有數(shù)據(jù),反而需要自己構(gòu)造一堆數(shù)據(jù),該怎么辦?AI有沒有辦法自動產(chǎn)生類似數(shù)據(jù)呢?
有的,這里介紹一個目前比較好的一個神經(jīng)網(wǎng)絡(luò),叫做GAN(對抗生成網(wǎng)絡(luò)),簡單講,這個網(wǎng)絡(luò)有兩個模型,一個是生成模型,一個是識別模型,生成模型不斷產(chǎn)生跟訓(xùn)練數(shù)據(jù)很像的數(shù)據(jù),企圖欺騙識別模型,識別模型在不斷訓(xùn)練,提高識別準(zhǔn)確率,企圖把所有生成模型生成的假的都找出來。在對抗的過程中,兩個模型不斷發(fā)展,最后達(dá)到一個比較好的平衡。

這里面比較有意思的變形就是DCGAN,即在生成和識別模型均使用卷積神經(jīng)網(wǎng)絡(luò)去處理圖像,可以通過一堆數(shù)據(jù),比如通過很多妹子的圖像,偽造一個妹子圖像。
訓(xùn)練頭像資源及教程來源于這篇博文:傳送門
生成二次元萌妹紙圖像如下:

假如隨著生成網(wǎng)絡(luò)算法的完善,比如測試車險的智能理賠業(yè)務(wù)的時候,我們是不是可以通過AI生成一堆不同車型,不同部位受損的照片,作為測試數(shù)據(jù)對智能理賠業(yè)務(wù)進行測試呢?
同理,類似車牌識別,人臉識別等等,我們是不是都可以想想辦法構(gòu)造類似數(shù)據(jù),看看人臉識別SDK是否能準(zhǔn)確檢測呢?
當(dāng)然,這里只是隨意YY一下,具體到實施肯定還有諸多問題。
基于強化學(xué)習(xí)的游戲測試
2013年的時候DeepMind就提出DQN(Deep Q Network)算法,實現(xiàn)端到端學(xué)習(xí)玩Atari游戲。輸入是一幀像素圖像,訓(xùn)練AI自動玩游戲。

假設(shè)我們遇到關(guān)卡類手游的測試,比如開心消消樂這種,是不是也可以訓(xùn)練AI來自動測試關(guān)卡難度呢?
比如酷跑類游戲,也可以邊訓(xùn)練AI,邊收集性能數(shù)據(jù),隨著AI越來越智能,就能收集到游戲長時間運行的數(shù)據(jù),也能發(fā)現(xiàn)長時間跑后可能出現(xiàn)的bug了,如果這些依賴人工操作的話,可能要耗費大量人力成本。
基于遷移學(xué)習(xí)-圖片相似度判斷
遷移學(xué)習(xí),簡單來說就是基于別人訓(xùn)練好的模型,來做自己的事情,而不用重新訓(xùn)練
比如,谷歌有個圖片識別模型Inception-v4,是谷歌用幾百萬圖片訓(xùn)練出來,對圖片進行分類識別的,識別準(zhǔn)確率很高,機器訓(xùn)練模型結(jié)構(gòu)很復(fù)雜,用了多個卷積核和多層卷積模型。
假設(shè)我們認(rèn)可這種識別圖片的模型,在此基礎(chǔ)下,我們截取模型最后輸出的特征向量來代表這張圖片,那如果要計算兩張圖片的相似度,我們是不是拿分別產(chǎn)生的兩個特征向量來計算余弦距離,距離越小相似度則越高。

93%相似度的兩張圖片:

85%相似度的兩張圖片:

40%相似度的兩張圖片:
