AI賦能一鍵自動檢測:頁面異常、控件異常、文本異常

1.前言

閒魚質量團隊一直致力於交付高質量的app給用戶,當前隨着AI技術不斷髮展,TensorFlow大熱,也給測試手段帶來了更多種可能,本文接下來給你們介紹AI在閒魚測試的一點實踐:如何應用AI技術經過圖片找bug。html

2.模型選型

不須要理解業務就能發現的bug主要有總體頁面空白、部分控件顯示異常和文本異常這幾類。對於總體空白圖片,發現它們的共同特徵是比較明顯:大面積空白或者中心區域報錯,因此選擇使用TensorFlow搭建的簡單CNN模型來識別正常圖片和異常圖片。對於文本異常這類包含亂碼的圖片,則是用OCR+LSTM創建了一個簡單的漢字識別模型來識別圖片中的文本內容後判斷是否存在亂碼。
訓練以上模型的樣本則來源於bug歷史截圖和mock的正向數據樣本。前端

3.模型重訓練——提升模型識別準確率

初始模型在訓練時樣本有限,但隨着app不停更新迭代,圖片檢測樣本數量的逐漸增多,會出現某些新頁面被錯誤分類,要解決這類誤報問題,亟需加入模型重訓練。
顯然靠人肉啓動模型重訓練並替換舊模型成本過高,因此在前端實現了個勾選圖片去重訓練的入口,經過Jenkins定時任務,讀取全部重訓練圖片並執行重訓練腳本,並把舊模型替換成新生成的便可。通過幾輪自動迭代後模型識別準確率有大幅提高。
git

4.圖片處理——提高結果的人工甄別效率

4.1特殊截圖

有些截圖多是存在大面積空白,但從業務角度上來講這類圖片是正確的,好比搜索中間頁。此類若不處理,每次都會被識別爲異常圖片上報,浪費你們check的時間,若放入模型進行重訓練又有致使模型不收斂的風險。爲了解決這類圖片,維護了一個圖庫,對模型識別爲異常的圖片,會與圖庫中的圖片進行對比,若是與圖庫中任意一張類似度超過設定閾值,即認爲該圖片可被忽略不用上報。
github

4.2圖片去重

目前遍歷截圖任務爲了保證頁面上全部元素都取到,單次遍歷任務會至少訪問同一個頁面兩次;同時遍歷時,爲了方便頁面上下文分析,會對點擊元素用紅框標記。這帶來了一個問題:待識別圖片集中,同一個頁面會有多張重複截圖、且同一頁面上可能會在不一樣的地方有紅框標記。人工檢驗大量重複圖片識別結果不免視覺疲勞,因此展現去重後的結果能夠大大提高人工甄別效率,減小成本。算法

4.2.1解決辦法

圖片數量大,且不肯定此次遍歷截圖了多少不一樣頁面時,可使用層次聚類算法解決這個問題。本文采用的是自底向上的聚類方法,即先將每一張截圖分別當作一個簇,而後找出距離最小的兩個簇進行合併,不斷重複到預期簇或者知足其餘終止條件。數組

4.2.2實現[2]

1)計算圖片之間的距離

先將圖片轉換成wh3維向量,把向量間的歐式距離做爲圖片之間的距離,圖片越類似,距離越小。app

def get_pic_array(url,w,h):
    file = cStringIO.StringIO(urllib2.urlopen(url).read())
    img = Image.open(file)  # PIL打開圖片
    img=img.resize((w, h))
    try:
        r, g, b, k = img.split()  # rgb通道分離,兼容4通道狀況
    except ValueError:
        r, g, b = img.split()
    # 得到長度爲(w*h)的一維數組
    r_arr = np.array(r).reshape(w * h)
    g_arr = np.array(g).reshape(w * h)
    b_arr = np.array(b).reshape(w * h)
    #將RGB三個一維數組(w*h)拼接成一個一維數組(w*h*3)
    image_arr = np.concatenate((r_arr, g_arr, b_arr))
    return image_arr

一次app遍歷獲得的n張圖片要完成聚類,先單張圖片按照上述處理後,再總體拼接成 n(wh*3)的矩陣,作爲樣本集。工具

2)計算簇之間距離的方法

single:兩個簇中距離最近的兩個樣本的距離做爲這簇間的距離
complete:兩個簇中距離最遠的兩個樣本的距離做爲這簇間的距離
average:兩個簇間樣本兩兩距離的平均值決定,解決個別異常樣本對結果對影響,但計算量比較大
ward:離差平方和,計算公式較複雜,要想了解具體計算公式和其餘計算方法見計算簇之間距離的方法
經過嘗試後發現ward效果比較好,因此最終選用ward做爲計算簇之間距離的方法。佈局

Z = linkage(X, 'ward')

執行上述語句後,聚類完成。測試

3)臨界距離選擇

該值直接影響聚類的效果,臨界距離太小,會致使某些類似圖片不能彙集到一類,臨界距離過大,又會致使不是同一個頁面的圖片聚在一塊兒,因此如何選一個合適的距離很是重要。
實驗發現,若是圖片被頁面異常模型識別爲異常圖片時,每每這類圖片之間的類似性越高,爲了避免錯誤聚類不一樣的異常頁面,分別對識別爲異常和正常的圖片進行聚類,而且異常類的臨界距離會設置更小一點。

5.總結與展望

目前該工具對總體頁面異常的識別效果較好,文本異常的識別準確率也在豐富樣本的過程當中不斷提高。

接下來咱們會集成LabelImg工具,用TensorFlow搭建SSD模型來識別控件異常的圖片,此外元素/文字佈局錯亂等問題頁面識別、頁面操做預期結果識別也在不斷嘗試中。使用圖片處理和錯誤識別技術,做爲質量保證的一種方法,咱們會持續探索下去。

參考文檔:

[1]圖片聚類計算:https://haojunsui.github.io/2016/07/16/scipy-hac/



本文做者:閒魚技術-鎮雷

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索