qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          測試數(shù)據(jù)建模

           現(xiàn)在很多軟件應用,都設(shè)計成2部分:應用程序Application + 數(shù)據(jù)庫DB。要對這種類型的應用軟件進行測試,“測試數(shù)據(jù)”這個概念就非常的關(guān)鍵。測試用例中的“前置條件”,基本就是圍繞測試數(shù)據(jù)來設(shè)計的。以淘寶網(wǎng)的測試為例,驗證每個功能點時,最重要的就是準備好各種類型的數(shù)據(jù)對象,比如:不通信用級別的賣家,不同類目屬性的商品等等。

            熟練的測試工程師手里都會保存一批測試數(shù)據(jù)(比如賬號、商品),并且分類管理,不同場景的測試用例,都會有專門的測試數(shù)據(jù)來支持。在ta的心里,存在著一套完整的測試設(shè)計方案,在工作中也會顯得游刃有余。要達到這種狀態(tài),需要經(jīng)過一段時間的積累,需要“磨合”。對測試數(shù)據(jù)的控制力,也是測試工程師的重要能力之一,可惜這種能力很難被識別,被比較。

            最近2年,軟件測試工作在逐漸向開發(fā)團隊轉(zhuǎn)移,由以前的測試團隊“全包”,變成了現(xiàn)在的“半包”。很多觀點也認為,開發(fā)團隊來做測試工作,有著得天獨厚的優(yōu)勢,因為開發(fā)對應用程序的結(jié)構(gòu)最熟悉,哪里容易出現(xiàn)問題也最清楚。當然也有很多開發(fā)表示反對,原因大概有下面幾個:

            ● 沒時間,能把代碼寫完就不錯了

            ● 開發(fā)工程師沒有測試工程師的那種思維方式

            ● 測試數(shù)據(jù)準備起來比較困難

            這里的“測試數(shù)據(jù)問題”是客觀存在的,但不僅僅是這么簡單的一句話可以概括,需要深入分析。我們觀察開發(fā)工程師在做測試工作的時候,在測試數(shù)據(jù)方面會遇到下面幾個問題:

            1、對于一些比較復雜的測試場景,搞不清應該構(gòu)造哪些測試數(shù)據(jù)對象,最后只好隨便抓一個來測試,只要沒拋異常,就算pass;

            2、就算搞清了測試數(shù)據(jù)的需求,去哪找這些數(shù)據(jù),仍然是一個大問題,最后還是隨便抓一個來測試;

            3、就算把所有的測試數(shù)據(jù)都做好,如何根據(jù)測試場景隨機應變的使用,如何維護這些數(shù)據(jù)始終有效,也非常不容易;

            分析到這里我們發(fā)現(xiàn),測試工程師對測試數(shù)據(jù)的控制能力,真的不簡單,開發(fā)工程師在工作中一般沒有接受過類似的訓練,所以很容易陷入“測試數(shù)據(jù)”的泥潭。而且,這個問題跟人的能力有關(guān),不是單純依靠工具能解決的。

            關(guān)于“測試數(shù)據(jù)建模”,主要是解決上面的第一個問題:當我們要測試一個功能點,或者一系列場景的時候,需要設(shè)計出怎樣的測試數(shù)據(jù)組合。

             我們先假設(shè)一個最簡單的場景,這個場景只需要用到1個數(shù)據(jù)對象:USER,那么這里的測試數(shù)據(jù),就是USER的每個屬性的枚舉值:性別、年齡、狀態(tài)、等 級,我們用一句話就可以概括一個數(shù)據(jù)對象,比如:女性user、20歲的user、狀態(tài)是已認證的user。測試用例可以這樣寫,但是實際測試時,熟練的 測試工程師并不會分別測試,而是把多種情況組合在一起,比如:20歲的已經(jīng)認證的女性user。每個人的組合方式都不一樣。有一種算法叫做 “Pairwise Testing”,可以比較科學的組合多個屬性的枚舉值。但是有經(jīng)驗的測試工程師發(fā)現(xiàn),年齡和性別的邏輯關(guān)系很密切,這里的組合需要特別的設(shè)計,依靠 Pairwise的基礎(chǔ)設(shè)計還遠遠不夠,需要引入業(yè)務邏輯的分析。

            所以同樣的測試用例,不同的工程師在測試時,花費的時間,得出的結(jié) 果,會有很大的不同。僅僅一個數(shù)據(jù)對象,就會產(chǎn)生這么復雜的情況,那么請設(shè)想一下,如果一個場景需要用到5個數(shù)據(jù)對象,并且它們之間存在復雜的邏輯關(guān)系 時,測試工程師需要面臨怎樣的困難局面,我們已經(jīng)無法用一句話來概括測試數(shù)據(jù)的具體值。這里“測試數(shù)據(jù)建模”的概念就自然的引出了,建模的目的,就是我們 可以很容易的描述清楚,復雜場景下的測試數(shù)據(jù)是怎樣的。

            很多工程師習慣用思維導圖來進行測試數(shù)據(jù)的設(shè)計,比如上文那個例子,大家會看到這樣的設(shè)計圖:

            但是在真實的測試場景中,我們使用的是matrix來組織測試數(shù)據(jù),如下:



            灰色的cell代表在這個場景下,該屬性隨便取什么值。在這個案例里,我們發(fā)現(xiàn)性別和年齡關(guān)系密切,而狀態(tài)和等級關(guān)系密切,所以測試數(shù)據(jù)需要分開設(shè)計,我們建立A、B兩個模型:

            A模型是:

              ● user.性別 : {"男" , "女" , "不知道"}
              ● user.年齡 : {"10" , "20" , "30" , "40"}

            B模型是:

              ● user.狀態(tài) : {"未認證" , "認證" , "刪除" }
              ● user.等級 : {"新人" , "熟練手" , "磚家" }

            每個模型都必須有一個唯一的名稱,目的是為了方便測試設(shè)計和交流。比如這個Test Suite(一組Test Case的集合)需要使用A模型,那個Test Suite需要B模型。這里的A、B只是一個代號,真實工作中可以根據(jù)產(chǎn)品特點重新定義命名規(guī)則。

            測試數(shù)據(jù)模型的真正內(nèi)涵是:把業(yè)務邏輯關(guān)聯(lián)最強的數(shù)據(jù)對象屬性聚在一起建立group,并列舉出需要的屬性值,方便測試用例的設(shè)計,更為重要的 是,模型讓開發(fā)和測試在圍繞“測試數(shù)據(jù)問題”進行討論的時候,有一個標準。由于模型里面已經(jīng)封裝了很多信息,只要指明模型的名稱,交流就變得更加簡單了。

            當然文章里這個案例的邏輯非常簡單,實際工作中并不需要測試數(shù)據(jù)建模,不過當數(shù)據(jù)對象比較多時,價值就能體現(xiàn)出來了。比如淘寶的下單,可能就會出現(xiàn)這樣的數(shù)據(jù)模型:

            ● 商品.價格 : {"",""}
            ● 賣家.狀態(tài) : {"",""}
            ● 買家.所在地 : {"",""}
            ● 類目.XXX : {"",""}

            復雜的數(shù)據(jù)模型,可能會有10個以上的數(shù)據(jù)對象屬性。不過我們不能把所有對象屬性,都堆在一個模型里,那樣沒有任何意義,我們需要根據(jù)業(yè)務邏輯 對屬性進行分類,建立不同的模型,比如優(yōu)惠、運費計算是不同的業(yè)務邏輯,因此需要建不同的模型。而圍繞優(yōu)惠這個概念,還會根據(jù)不同屬性組合關(guān)系,建立多個 模型。

            我想每個測試場景,需要建立的數(shù)據(jù)模型并不會很多,2、3個左右。數(shù)據(jù)模型必須是常用的,這樣才有實際意義。時間久了,研發(fā)團隊每個成員的腦海 里,對于測試數(shù)據(jù)模型的概念,會越來越深刻,甚至對于模型里的某個Test Case,如果被執(zhí)行的次數(shù)夠多的話,也會被大家記住。到時候Test Case也會需要名稱,為了方便大家記憶交流。

            在實際工作中,開發(fā)工程師經(jīng)常反映,要執(zhí)行某個Test Case,只修改某個數(shù)據(jù)對象(比如user)的屬性,根本不夠,必須要把多個數(shù)據(jù)對象(比如user、order、item)同時修改,才能完成。這其 實就是一個典型的需求:這個Case需要一個復雜的測試數(shù)據(jù)模型。

            當測試數(shù)據(jù)模型被大家接受以后,我們就可以圍繞模型做一些工具開發(fā),來簡化準備測試數(shù)據(jù)的工作。如果工具只能分別修改某個對象的屬性,那么可用 性就不會太好,需要人為進行組合操作。如果工具能以測試數(shù)據(jù)模型為單元,就可以很快生成數(shù)據(jù)模型里的某個Test Case,這樣會大大簡化測試準備工作。

            需要說明的是,本文是基于工作現(xiàn)狀的推理,這種建模方式僅僅是“原型”,還缺少一些最佳實踐。如果本文的論述能引起你的共鳴,歡迎你在自己的產(chǎn)品測試中試一試。

          posted on 2013-01-10 13:41 順其自然EVO 閱讀(224) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桐城市| 天峻县| 边坝县| 临颍县| 疏附县| 巴东县| 新晃| 大姚县| 芦溪县| 高台县| 阿勒泰市| 阜康市| 东丽区| 台安县| 灌南县| 通许县| 周口市| 增城市| 余干县| 黔江区| 凌云县| 会昌县| 太和县| 确山县| 濉溪县| 台中市| 莱州市| 甘肃省| 大丰市| 绥江县| 武宁县| 凯里市| 安新县| 宜章县| 博乐市| 贡山| 陈巴尔虎旗| 综艺| 隆尧县| 定远县| 固镇县|