青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

構(gòu)建理想的模塊自測(cè)結(jié)構(gòu)

構(gòu)建理想的模塊自測(cè)結(jié)構(gòu)

溫輝敏(wenhm@sina.com)

    軟件測(cè)試的工作量很大(業(yè)界統(tǒng)計(jì)達(dá)到40% 60%的總開發(fā)時(shí)間),而又有很大部分適于自動(dòng)化,因此,測(cè)試的改進(jìn)會(huì)對(duì)整個(gè)開發(fā)工作的質(zhì)量、成本和周期帶來非常顯著的效果。

極限編程(XP)中推薦的自動(dòng)化單元測(cè)試,是指在編寫代碼之前先寫好測(cè)試代碼,代碼編到一定階段就用寫好的測(cè)試代碼進(jìn)行測(cè)試。自動(dòng)化單元測(cè)試可以帶來如下好處:

  l         由于測(cè)試代碼(測(cè)試用例)的不斷增加,這些測(cè)試總讓我們寫出的代碼往正確的方向靠攏,使我們不至于重犯以前的錯(cuò)誤。

  l         由于可以實(shí)現(xiàn)自動(dòng)測(cè)試,所以可以很好的解決人工很難進(jìn)行的回歸測(cè)試問題。

我們沿著“建立測(cè)試=>令測(cè)試通過=>再建立測(cè)試=>再令測(cè)試通過”的模式,一步一步地把整個(gè)程序正確地開發(fā)出來。

1.測(cè)試代碼的幾個(gè)關(guān)鍵環(huán)節(jié)

對(duì)測(cè)試代碼進(jìn)行概括性分析,可以發(fā)現(xiàn)測(cè)試代碼都具有類似的結(jié)構(gòu),每一個(gè)測(cè)試用例的執(zhí)行都要包括測(cè)試數(shù)據(jù)初始化、運(yùn)行要測(cè)試的代碼、驗(yàn)證測(cè)試結(jié)果正確性三部分,見圖1-1


1-1 測(cè)試代碼的一般性流程

由于測(cè)試代碼一般都包含了圖1-1中的三部分,我們要改善測(cè)試代碼使之具有良好的結(jié)構(gòu)只要從這三方面入手即可。

       1)將測(cè)試數(shù)據(jù)和測(cè)試結(jié)果從測(cè)試代碼中分離出來

在采用CXXUNIT系列測(cè)試工具開發(fā)測(cè)試代碼時(shí),發(fā)現(xiàn)一般編程人員都是測(cè)試用例和測(cè)試代碼混雜在一起,同樣測(cè)試結(jié)果也是和測(cè)試代碼混雜在一起,這樣就導(dǎo)致測(cè)試用例和測(cè)試結(jié)果的管理非常困難,因?yàn)橐芾砻總€(gè)用例的數(shù)據(jù)和結(jié)果實(shí)際上就是去管理這些代碼。而且對(duì)于一個(gè)函數(shù)(或功能) 每增加新測(cè)試用例,就要多出一份類似的代碼,代碼的邏輯實(shí)際上都是一致的,和以前測(cè)試代碼的不同點(diǎn)就是在初始化數(shù)據(jù)、測(cè)試結(jié)果的不同,這實(shí)際上也導(dǎo)致了代碼的重復(fù)。

我們可以將測(cè)試數(shù)據(jù)和測(cè)試結(jié)果從測(cè)試代碼中分離出來,使得某一個(gè)函數(shù)(或功能)的測(cè)試代碼就一份,這一份測(cè)試代碼應(yīng)可以進(jìn)行多組測(cè)試數(shù)據(jù)的測(cè)試,可以進(jìn)行多組測(cè)試結(jié)果的驗(yàn)證。

2)將測(cè)試數(shù)據(jù)和測(cè)試結(jié)果放入文件中,并按目錄存放

將測(cè)試數(shù)據(jù)和測(cè)試結(jié)果從測(cè)試代碼中分離出來是為了更好的管理代碼和測(cè)試數(shù)據(jù),將每個(gè)測(cè)試用例的數(shù)據(jù)和結(jié)果都放入到一個(gè)文件中,文件名字或文件所在目錄起上能表明測(cè)試用例含義的名字,這樣管理起來就方便多了,見圖1-2


1-2 測(cè)試用例文件及目錄結(jié)構(gòu)圖

由圖1-2中可以看出此時(shí)測(cè)試用例非常直觀,從目錄名就可以知道該目錄下的為那個(gè)功能的測(cè)試用例,從測(cè)試用例文件名就可以知道這個(gè)測(cè)試用例測(cè)的哪一個(gè)方面。當(dāng)一個(gè)功能的測(cè)試用例非常多可以分成許多類別時(shí)我們還可以在下面再創(chuàng)建測(cè)試用例分類子目錄,使得不同類型的測(cè)試用例能分隔開方便管理(詳見圖2-1)

3)將測(cè)試數(shù)據(jù)和測(cè)試結(jié)果綁定在一起

當(dāng)每個(gè)測(cè)試用例對(duì)應(yīng)的測(cè)試結(jié)果都一樣時(shí)可以將測(cè)試結(jié)果嵌入到測(cè)試代碼中,當(dāng)不同的測(cè)試用例要對(duì)應(yīng)不同的測(cè)試結(jié)果時(shí),根據(jù)1)中論述應(yīng)該將測(cè)試結(jié)果也從測(cè)試代碼中分離出來。為了不混淆測(cè)試數(shù)據(jù)和測(cè)試結(jié)果之間的關(guān)系,將它們放在同一個(gè)文件中。這里舉個(gè)例子,圖1-2中的“閏年2月份的測(cè)試用例.ini”文件中內(nèi)容如圖1-3

1-3 測(cè)試用例結(jié)構(gòu)圖

由圖1-3可以看到,測(cè)試數(shù)據(jù)和測(cè)試結(jié)果放在一起,增加了可讀性和維護(hù)性。

4) 一份測(cè)試代碼來運(yùn)行多份測(cè)試用例

怎樣讓一份測(cè)試程序可以進(jìn)行多組數(shù)據(jù)的測(cè)試和結(jié)果的比較呢?3)中已經(jīng)將測(cè)試用例分門別類,并由相應(yīng)的目錄結(jié)構(gòu)組織起來。此時(shí)測(cè)試程序只需每次從測(cè)試目錄中取出一個(gè)測(cè)試用例文件,進(jìn)行初始化,然后執(zhí)行測(cè)試,最后比較測(cè)試結(jié)果;測(cè)試完一個(gè)用例文件,再取下一個(gè)文件進(jìn)行測(cè)試,如此循環(huán)直到所有的用例文件都測(cè)了一遍,詳見圖1-4

1-4一份測(cè)試代碼測(cè)試多個(gè)測(cè)試用例的流程圖

 

2.測(cè)試用例管理方案設(shè)計(jì)

    若再加上邊界數(shù)據(jù)要測(cè)試的數(shù)據(jù)組數(shù)就更多了,一般CXXUNIT系列編寫的測(cè)試代碼是每組測(cè)試數(shù)據(jù)(其實(shí)一組數(shù)據(jù)就對(duì)應(yīng)一個(gè)測(cè)試用例)都要編寫初始化代碼,然后調(diào)用相應(yīng)功能函數(shù)測(cè)試。這樣導(dǎo)致:

    在自動(dòng)測(cè)試的整個(gè)過程中,測(cè)試用例的可維護(hù)性會(huì)影響到將來測(cè)試用例增加的難易度,良好的自測(cè)程序應(yīng)能很方便的擴(kuò)充測(cè)試用例。

    在采用CXXUNIT系列測(cè)試工具開發(fā)測(cè)試代碼時(shí),對(duì)于一些簡(jiǎn)單的測(cè)試可以測(cè)試用例就嵌在測(cè)試代碼中。但當(dāng)某一個(gè)功能或函數(shù)要進(jìn)行很多組數(shù)據(jù)(如邊界數(shù)據(jù))的測(cè)試時(shí)使用這種方法就得重復(fù)編寫測(cè)試代碼,可能每增加一個(gè)測(cè)試用例就要編寫大量的重復(fù)測(cè)試代碼。

    舉例:要測(cè)試周期會(huì)議預(yù)約功能的代碼,要測(cè)試以下幾組數(shù)據(jù):

1)每日召開的周期會(huì)議

1.1)按召開次數(shù)預(yù)約的周期會(huì)議

1.2)按開始時(shí)間、終止時(shí)間預(yù)約的周期會(huì)議

2)每周召開的周期會(huì)議

……(內(nèi)容和1.11.2一致)

3)每月召開的周期會(huì)議

    ……(內(nèi)容和1.11.2一致)

    4)每年召開的周期會(huì)議

    ……(內(nèi)容和1.11.2一致)
    

 l         隨著測(cè)試數(shù)據(jù)組數(shù)的增加,將出現(xiàn)大量做重復(fù)動(dòng)作的測(cè)試代碼,這些測(cè)試代碼之間唯一的不同是由于初始化的數(shù)據(jù)不一樣而已。

 l         當(dāng)一個(gè)功能只需一兩個(gè)測(cè)試用例時(shí),測(cè)試用例嵌入在測(cè)試代碼中可以進(jìn)行控制和管理,當(dāng)一個(gè)功能測(cè)試時(shí)需要大量的測(cè)試用例時(shí)(見舉例),大量的測(cè)試用例嵌在代碼中將很難管理,你要知道某個(gè)用例是否已經(jīng)有了還得去遍歷測(cè)試代碼比較麻煩。

2.1測(cè)試用例目錄結(jié)構(gòu)

    為此很有必要設(shè)計(jì)一套能良好管理和添加測(cè)試用例的體系結(jié)構(gòu)。

當(dāng)一個(gè)功能有很多組測(cè)試數(shù)據(jù)時(shí),我們可以將測(cè)試用例數(shù)據(jù)全部存放在文件中,使測(cè)試用例和測(cè)試代碼分離開。由于測(cè)試用例脫離測(cè)試代碼而存在,可以很方便的進(jìn)行管理和維護(hù)。我們可以為每個(gè)要測(cè)試的函數(shù)(或功能)建個(gè)目錄,每個(gè)測(cè)試用例放在一個(gè)單獨(dú)的文本文件中,將所有對(duì)應(yīng)于該函數(shù)的測(cè)試數(shù)據(jù)文件全部放入該目錄下,當(dāng)測(cè)試數(shù)據(jù)量很大時(shí)還可以在目錄下再創(chuàng)建相應(yīng)的子目錄,分類進(jìn)行管理。這樣可以方便測(cè)試用例的管理,而測(cè)試程序也只用專注于測(cè)試邏輯。還以測(cè)試周期會(huì)議預(yù)約功能的例子為基礎(chǔ)進(jìn)行討論。

2-1 測(cè)試用例目錄結(jié)構(gòu)圖

    由2-1上可以看到,當(dāng)某個(gè)函數(shù)(或功能)的測(cè)試用例很多時(shí),還可以在“某功能測(cè)試用例總目錄”下再使用子目錄來劃分,若覺得劃分不夠細(xì)還可以繼續(xù)加深目錄層次,直到分類比較清晰為止。

由于測(cè)試用例數(shù)據(jù)和測(cè)試代碼進(jìn)行了分離,以后對(duì)于某個(gè)函數(shù)(或功能)有了新的測(cè)試用例時(shí)不用再去修改測(cè)試代碼,只需在該功能的測(cè)試數(shù)據(jù)目錄下添加新的測(cè)試用例文件即可。該功能的測(cè)試程序每次運(yùn)行時(shí)對(duì)于相應(yīng)測(cè)試數(shù)據(jù)目錄下的每個(gè)測(cè)試用例文件(包括各級(jí)子目錄下的用例文件)都要執(zhí)行一遍。

    使用了目錄結(jié)構(gòu)對(duì)它們進(jìn)行了分門別類方便了以后的管理,正如良好的程序應(yīng)具有好的可讀性和維護(hù)性一樣,良好的測(cè)試數(shù)據(jù)也應(yīng)具有好的可讀性和維護(hù)性。

2.2測(cè)試用例文件結(jié)構(gòu)

       測(cè)試用例文件中存放測(cè)試用例初始化數(shù)據(jù)和測(cè)試完畢后的驗(yàn)證數(shù)據(jù)。數(shù)據(jù)的結(jié)構(gòu)采用一般配置文件的格式,詳見圖2-2

2-2 測(cè)試用例文件結(jié)構(gòu)圖

1)段名

配置文件中使用了段的概念,段相當(dāng)于C++中的NameSpace,每個(gè)段內(nèi)的關(guān)鍵字(Key)與其它段內(nèi)的關(guān)鍵字互不影響,Section即為段名。

2)關(guān)鍵字

關(guān)鍵字用來標(biāo)志不同元素的值,Key即為關(guān)鍵字的名字,關(guān)鍵字的名字不區(qū)分大小。

3)

每個(gè)關(guān)鍵字都對(duì)應(yīng)一個(gè)值,Value 即為值,值要區(qū)分大小。

4)注釋

支持單行注釋,字符“#”后面的內(nèi)容為注釋。

5)行結(jié)構(gòu)

一行的結(jié)構(gòu)只能是以下幾種:

l         [Section]

l         Key=Value

l         空行

l         以上三中情況之一加上注釋

 

2.3測(cè)試程序通用庫(kù)

       測(cè)試數(shù)據(jù)從測(cè)試代碼中分離出來后,增加了管理測(cè)試數(shù)據(jù)文件和解析測(cè)試數(shù)據(jù)文件的代碼,這部分代碼是通用的,可以將它們組織成庫(kù)供開發(fā)測(cè)試程序時(shí)使用。

 

 

2-3 測(cè)試程序和測(cè)試通用庫(kù)關(guān)系圖

2.3.1管理測(cè)試數(shù)據(jù)文件的庫(kù)

管理測(cè)試數(shù)據(jù)文件的庫(kù)的功能如下:

1)獲取目錄下所有測(cè)試文件路徑的接口

能找出某個(gè)目錄下 (包括該目錄下所有子目錄)所有的測(cè)試文件(如“*.ini”文件)的路徑并存起來。

2)獲取下一個(gè)測(cè)試文件的接口

向用戶提供下一個(gè)測(cè)試文件的路徑,若已沒有下一測(cè)試文件則返回空。

2.3.2解析測(cè)試文件的庫(kù)

解析測(cè)試文件的庫(kù)的功能如下:

1)文件解析接口

按照 2.2測(cè)試用例文件結(jié)構(gòu) 中的文件結(jié)構(gòu)解析出一個(gè)測(cè)試文件。

2)獲取值的接口

向用戶提供測(cè)試文件中某個(gè)段內(nèi)某個(gè)關(guān)鍵字對(duì)應(yīng)的值。

由于測(cè)試文件的結(jié)構(gòu)和一般配置文件結(jié)構(gòu)一致,可以使用已有的庫(kù)來實(shí)現(xiàn)(PWLIB中配置文件解析類)

3.總結(jié)

一個(gè)完整的測(cè)試用例包含測(cè)試數(shù)據(jù)和測(cè)試代碼,當(dāng)測(cè)試數(shù)據(jù)和代碼混在一起時(shí)給測(cè)試用例的維護(hù)帶來了很大困難,而且給測(cè)試代碼帶來許多冗余。本文提出了將測(cè)試數(shù)據(jù)和測(cè)試代碼分離的想法,并對(duì)怎樣進(jìn)行分離進(jìn)行了闡述。測(cè)試數(shù)據(jù)從測(cè)試代碼中分離出來后,使得測(cè)試數(shù)據(jù)維護(hù)簡(jiǎn)單、方便。


 

4.參考資料

CppUnit 主頁 : http://cppunit.sourceforge.net/

xprogramming 主頁 :http://www.xprogramming.com

4. 關(guān)于作者

溫輝敏,當(dāng)前關(guān)注于軟件開發(fā)自動(dòng)測(cè)試方面,可通過郵件wenhm@sina.com和我聯(lián)系。

posted on 2007-04-08 10:07 楊粼波 閱讀(331) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            性色一区二区| 一卡二卡3卡四卡高清精品视频| 欧美久色视频| 久久久99国产精品免费| av不卡免费看| 亚洲国产精品99久久久久久久久| 午夜宅男久久久| 中日韩男男gay无套| 亚洲精品久久| 在线精品一区二区| 国内精品免费午夜毛片| 国产精品久久久久影院亚瑟| 欧美理论在线播放| 免费在线一区二区| 久久久美女艺术照精彩视频福利播放| 亚洲视频自拍偷拍| 99在线热播精品免费99热| 亚洲国产日韩在线一区模特| 久久视频精品在线| 欧美在线网站| 羞羞色国产精品| 亚洲欧美激情视频| 亚洲综合精品自拍| 亚洲无限乱码一二三四麻| 亚洲精品视频在线看| 亚洲精品欧洲| 亚洲精品人人| 亚洲精品视频二区| 亚洲精品一区久久久久久| 亚洲黄色一区| 亚洲精品国精品久久99热| 亚洲国产精品久久久久秋霞影院| 一区二区三区在线免费视频 | 蜜臀91精品一区二区三区| 久久国产精品久久国产精品| 欧美在线1区| 久久久精品国产99久久精品芒果| 欧美综合国产| 久久免费少妇高潮久久精品99| 久久精品国产久精国产一老狼| 久久精品国产清高在天天线| 久久精品动漫| 蜜桃av一区| 亚洲第一精品夜夜躁人人爽| 91久久久亚洲精品| 99成人在线| 亚洲永久视频| 久久精品日韩| 欧美jjzz| 欧美日韩亚洲系列| 国产精品热久久久久夜色精品三区 | 欧美亚洲综合久久| 久久精品一本| 欧美a级在线| 欧美性天天影院| 国产日韩亚洲| 亚洲精品免费在线播放| 亚洲已满18点击进入久久| 欧美一级网站| 欧美xxx成人| 亚洲精品一区二区三区av| 亚洲香蕉网站| 久久亚洲美女| 欧美日韩伦理在线免费| 国产私拍一区| 亚洲老板91色精品久久| 性伦欧美刺激片在线观看| 蜜桃av久久久亚洲精品| 亚洲精品三级| 欧美在线中文字幕| 欧美日韩不卡合集视频| 国产免费观看久久| 最近看过的日韩成人| 亚洲一区在线直播| 欧美aa国产视频| 亚洲天堂成人| 免费中文日韩| 国产日产欧产精品推荐色| 亚洲激情啪啪| 久久精品国产v日韩v亚洲| 亚洲第一网站| 午夜久久电影网| 欧美精品在欧美一区二区少妇| 国产伦理一区| 制服丝袜激情欧洲亚洲| 美日韩精品免费观看视频| 99国产精品久久久久老师| 久久午夜色播影院免费高清| 国产精品嫩草影院一区二区| 亚洲黄色影片| 久久嫩草精品久久久精品| 在线视频欧美精品| 奶水喷射视频一区| 国产一区二区三区无遮挡| 亚洲图片欧洲图片日韩av| 欧美福利电影网| 久久高清国产| 国产精品久久久91| 亚洲美女精品久久| 免费影视亚洲| 久久爱www久久做| 国产精品久久久久久久浪潮网站 | 亚洲欧美激情精品一区二区| 亚洲国内欧美| 久久亚洲综合色| 国产主播一区| 久久aⅴ国产紧身牛仔裤| 一本色道久久综合一区| 欧美电影在线| 亚洲精品免费电影| 欧美成人午夜| 久久人人爽爽爽人久久久| 国产亚洲免费的视频看| 午夜一区不卡| 一区二区日本视频| 欧美日韩一区高清| 亚洲视频成人| 夜夜爽www精品| 欧美四级电影网站| 中文av一区二区| 亚洲美女诱惑| 欧美日韩一区在线观看| 一区二区成人精品| 亚洲精品美女免费| 欧美高清视频| 日韩一级在线观看| 最新国产成人av网站网址麻豆| 欧美大色视频| 99re亚洲国产精品| 亚洲精品视频一区| 欧美日韩中文字幕在线| 国产精品99久久久久久久vr | 国产乱码精品一区二区三| 欧美一区二区精品久久911| 亚洲视频导航| 国产午夜精品久久久久久久| 久久精品国产一区二区三区免费看 | 亚洲在线视频免费观看| 国产精品日韩专区| 久久久高清一区二区三区| 久久精品主播| 亚洲国产欧美日韩| 91久久国产综合久久蜜月精品| 欧美精品二区| 亚洲一区二区日本| 亚洲男人天堂2024| 国语自产在线不卡| 欧美激情亚洲视频| 欧美日本一道本| 午夜精品一区二区在线观看| 欧美一区二区三区视频在线| 一区二区三区在线看| 亚洲国内欧美| 国产精品欧美日韩一区| 久久久综合香蕉尹人综合网| 久久综合久久久| 亚洲午夜国产成人av电影男同| 亚洲嫩草精品久久| 亚洲电影免费观看高清完整版| 91久久精品www人人做人人爽| 欧美性片在线观看| 久久在精品线影院精品国产| 免费短视频成人日韩| 亚洲一区欧美二区| 久久久久国产成人精品亚洲午夜| 亚洲日本无吗高清不卡| 亚洲私人黄色宅男| 亚洲第一在线综合网站| 99re热这里只有精品视频| 国产日韩专区| 亚洲高清自拍| 国产日本精品| 欧美激情一区二区| 国产精品久久国产愉拍| 欧美国产日韩二区| 国产精品久久久久久五月尺| 欧美承认网站| 国产伦精品免费视频| 亚洲国产小视频| 国产婷婷97碰碰久久人人蜜臀| 亚洲国产va精品久久久不卡综合| 国产精品视频福利| 亚洲国产导航| 国产自产女人91一区在线观看| 亚洲免费电影在线| 欧美欧美午夜aⅴ在线观看| 美女精品在线| 免费不卡在线观看| 香蕉亚洲视频| 欧美日韩成人综合在线一区二区| 久久精彩视频| 欧美体内she精视频| 亚洲第一毛片| 一区二区亚洲精品国产| 亚洲欧美日韩另类| 一区二区三区日韩在线观看| 久久久久一区二区| 欧美在线一级va免费观看| 欧美日韩调教| 欧美激情一区二区三区在线视频 |