天天看點

基于特征驅動的自動化方案

概述

資料驅動在PS産品線是一種常見的自動化方式,由于想法自然、設計簡單、收益顯著,是一種自動化的常見方案。然而資料驅動卻存在着一些缺點讓我們很頭疼,首先是資料的維護問題,我們需要儲存大量的輸入和預期輸出,子產品一旦涉及功能上的更新,我們就需要手動添加測試用例來保證自動化工具的case覆寫率和有效性,同時随着子產品不斷地更新,資料集不斷增大,自動化的執行時間也越來越長;其次是資料驅動在回歸測試方面引用廣泛,但在新功能測試方面顯得不是很有效,新功能測試一般來講注重的是政策的分析和資料的構造,而資料驅動的思想則不能夠很好地支援資料的自動構造,最主要的資料構造過程還是需要手動完成;再次,資料驅動最大的問題就是資料失效問題,一般一個測試點需要對應多組資料,如果子產品的一次更新在某個功能點上發生變化,那麼對應測試點的幾組資料全部都需要修改,前面提到資料驅動的資料集會不斷增大,是以資料失效引起的維護成本是不可忽略的,随時間的推移,會越來越大,并且一旦子產品功能發生重大更新(如切詞更新),很可能引起大片資料的失效,導緻工具運作時出現大片的“FAIL”,這時的資料維護成本會急劇上升。在這裡我們提出一種基于特征驅動的自動化方案,能夠較好解決上述資料驅動方式的三個不足,大大減輕了資料成本的維護工作量,測試工程師的焦點更關注于政策本身,而不必手動構造、添加大量的case。我們首先在架構、代碼較為清晰的DA子產品上做了嘗試,通過該自動化思想下的指引做了DA子產品的自動化改造,通過投入試用後發現,相比之前的資料驅動方式,測試效率有了明顯的提升。

關鍵詞

自動化方案,資料驅動,特征驅動,資料維護

介紹

所謂特征驅動,是指通過資料的特征來驅動case的驗證。所謂基于特征驅動的自動化方案,是指通過儲存每個功能點資料的特征來實作case的回歸自動化,通過構造特征來實作case的新能能自動化。那麼何為特征呢?其實很簡單,就是指資料的一些特定屬性。看一個DA的資料驅動case,構造輸入:“無料アニメ畫像掲示闆”& 構造預期輸出:“R_IBD 11”,這個query之是以傳回R_IBD是因為滿足兩個屬性 —— 論壇屬性和寫真屬性,那麼這個資料驅動的case,我們就可以改寫為,輸入特征:“isForum=1,isPhoto=1”& 預期輸出:“R_IBD 11”。

從case書寫的角度看,似乎兩者并沒有什麼本質的差別,隻不過一邊是真實的query,一邊是一串符号,但帶來的變化是不可忽視的,第一,case的可讀性增強,顯然,“isForum=1,isPhoto=1”清楚表達了輸入資料的特點以及政策的思想,而單純一個query放在那兒,隻能靠感覺來判斷這個輸入資料的政策預期;第二,case的表達性增強,用集合論的術語來講,資料驅動中一組case表示的隻是一個元素,而特征驅動中一組case表示的是一個集合,換句話說,“isForum=1,isPhoto=1”不僅代表了“無料アニメ畫像掲示闆”,而且代表了所有滿足論壇屬性和寫真屬性的query;第三,case的有效性加強,直接使用輸入資料來存儲,一旦切詞程式、屬性詞典等其他因素發生變化,儲存資料就可能失效,而屬性表達的是資料之上的進階特征,不存在特征失效的問題,除非政策發生了變化或者出現了沖突,即便出現政策沖突情況時,case的可讀性也會發揮作用,不會在追查問題上耗費大把的時間。

那麼在使用了特征表示case以後,如何進行測試點的驗證呢?有了一系列特征表示輸入,我們首先要通過一個轉換工具将特征還原為輸入資料,然後再将輸入資料導入到資料驅動模式下的自動化。其中重點問題在于如何将特征還原為資料,我們的思路是準備一個比較大的資料集合,如果我們需要構造query就應擷取一個比較龐大的query集合,如果需要構造網頁就先擷取一個比較龐大的url集合,這樣我們不需要直接去構造我們想要的資料,而是通過特征從這個資料集當中選取出來即可。當然,有可能滿足特征的資料不在這個集合當中,而從實際的情況看,基本不存在這個問題,那query集合舉例,從線上随機擷取的10w左右的query,基本就能覆寫到大多數的特征,100w基本已經覆寫完畢,從另一種角度上去看,如果從10w随機query中都選取不到,那麼我們可以認為政策的影響面已經小于0.001%,要麼這個政策本身有問題,要麼這個政策其實可以忽略了。

應用

依據特征驅動的思想,首先在架構清晰、代碼簡潔的DA子產品下進行了嘗試。DA是一個典型的對query進行分析的子產品,能夠根據線下挖掘或實時挖掘得到的一些專名/屬性詞典,判斷query的時效性、圖檔、視訊需求以及同義詞、term重要性等資訊。DA的現有自動化工具是一個非常完整的基于資料驅動的自動化工具,能夠儲存query和對應的預期分析結果,并且能夠支援相應屬性詞典的構造,從資料驅動自動化的實作角度可以說非常完整。但不足之處正如前面所提到的幾個資料驅動的弱點,需要人工編輯大量的用例資料以及相應的詞典,并且更新過程時常會伴有輸入資料的失效問題,雖然自動化工具有效提高了自動化率,但顯然仍需消耗大量人力在資料的維護上。

将資料驅動改造為特征驅動,首先需要将資料進行抽象化,所謂抽象化,就是将資料用更淺顯易懂且友善的方式表示,同時大大降低對資料的維護成本。根據DA輸入資料以及測試方案的特點,可以考慮将query的某些query級、term級屬性抽象出來,用特征來表示輸入資料。

收益

由維護大量的輸入資料轉變為功能點相關的輸入特征,極大簡化了資料的維護方式,降低了維護成本。

通過一個特征可以抽取出多組資料,測試充分性得到了加強。

資料的失效性問題得到了很好地解決,有效防止了政策更新引起的輸入資料的大面積失效。

總結

特征驅動是一種建立在資料驅動之上的一種自動化方案,其思想是通過特征代替原資料來減少維護成本。通過實踐,該方案思想主要适用于資料處理密集型的子產品,在複雜資料處理的功能測試方面表現良好。10年首先在DA子產品上進行了試用,根據DA的政策分析進行了對DA自動化方面的改造,并在10年Q2将自動化工具投入使用,投入的第一個項目就發現了7例bug,其中特征構造時間為5分鐘,運作時間為10分鐘,DA子產品的整體測試效率和項目周期都得到了很大程度上的改善。

(作者:dingwenchao)

【本文轉自百度測試技術空間】http://hi.baidu.com/baiduqa/blog/item/a5ab61ed68756921acafd5f8.html

【關注百度技術沙龍】