• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C++Test 在單元測(cè)試中的應(yīng)用研究

      2013-07-20 09:40:42唐躍川趙渝潔饒義瓊
      微處理機(jī) 2013年2期
      關(guān)鍵詞:違例單元測(cè)試測(cè)試用例

      唐躍川,趙渝潔,饒義瓊

      (重慶金美通信有限責(zé)任公司,重慶 400030)

      1 引言

      隨著軟件業(yè)的日益壯大和逐步成熟,軟件測(cè)試也在不斷發(fā)展。從簡(jiǎn)單的開(kāi)發(fā)人員自行調(diào)試逐漸往規(guī)范化、流程化的方向發(fā)展。其活動(dòng)過(guò)程十分復(fù)雜,如果不借助輔助工具,僅靠人工處理,則不僅效率低下、工作量巨大,而且可能出現(xiàn)無(wú)法解決的問(wèn)題。而單元測(cè)試又對(duì)測(cè)試人員的從業(yè)素質(zhì)提出了更高要求。鑒于以上問(wèn)題,利用一套好的單元測(cè)試工具來(lái)幫助軟件測(cè)試人員提高工作效率,提高工作質(zhì)量,改善工作條件是非常有必要的。

      C++Test是美國(guó)Parasoft 公司研發(fā)的一款針對(duì)CC++的單元測(cè)試工具,具有自己的專(zhuān)利技術(shù),其功能覆蓋了從代碼靜態(tài)檢查到仿真代碼運(yùn)行環(huán)境進(jìn)行動(dòng)態(tài)檢查,以及自動(dòng)生成測(cè)試用例和回歸測(cè)試等方方面面,從橫向的測(cè)試寬度和縱向的測(cè)試過(guò)程都能夠給軟件單元測(cè)試提供足夠的支持。

      2 功能簡(jiǎn)介

      C++Test 提供了以下一些功能:

      (1)靜態(tài)代碼檢測(cè)。C++ TEST 內(nèi)建了包括MISRA C++2008 在內(nèi)的共1456種編程規(guī)范,用戶可根據(jù)實(shí)際需要選擇符合自己要求的規(guī)范來(lái)對(duì)代碼進(jìn)行靜態(tài)編程規(guī)范檢測(cè)。

      (2)BugDetective(C ++ Test 專(zhuān)利技術(shù))。通過(guò)搜索代碼中的“可疑點(diǎn)”,開(kāi)始分析正在測(cè)試的源碼??梢牲c(diǎn)是潛在的錯(cuò)誤點(diǎn)。這些可疑點(diǎn)在Bug-Detective 規(guī)則中被定義。只要識(shí)別了可疑點(diǎn),Bug-Detective 就調(diào)查導(dǎo)致該可疑點(diǎn)的可能執(zhí)行路徑,并檢查是否有任何確實(shí)違反BugDetective 規(guī)則的路徑存在。如果找到了這樣的路徑,就報(bào)告一個(gè)違例。

      (3)單元測(cè)試。用戶可根據(jù)需求,配置TestConfiguration,進(jìn)行異常測(cè)試,功能測(cè)試,回歸測(cè)試。

      (4)自動(dòng)生成測(cè)試用例、驅(qū)動(dòng)函數(shù)、樁函數(shù)。根據(jù)用戶配置的TestConfiguration,自動(dòng)生成單元測(cè)試所需要的測(cè)試用例、驅(qū)動(dòng)模塊、樁模塊,并且用戶可以添加、修改、刪除這些自動(dòng)生成的模塊以達(dá)到精確測(cè)試的目的。

      (5)TCM(團(tuán)隊(duì)配置管理)和CVS(源碼控制器)。TCM 主要用于一個(gè)項(xiàng)目或者一個(gè)公司級(jí)的測(cè)試配置、抑制條件、規(guī)則文件和測(cè)試用例文件的共享,C++TEST 支持與CVS的連接來(lái)支持共享源碼和相關(guān)測(cè)試資源。

      (6)GRS(組報(bào)告系統(tǒng))。用于向項(xiàng)目管理者、軟件設(shè)計(jì)總師、軟件開(kāi)發(fā)人員提供基于角色的報(bào)告。

      3 自動(dòng)生成樁函數(shù)和驅(qū)動(dòng)函數(shù)

      做單元測(cè)試最大的問(wèn)題就在于驅(qū)動(dòng)函數(shù)和大量樁函數(shù)的編寫(xiě),這將占用測(cè)試人員大量的時(shí)間并且要求測(cè)試人員必須擁有比較豐富的編程經(jīng)驗(yàn),現(xiàn)在,C++TEST 可以幫助我們完成這個(gè)復(fù)雜的工作。

      其執(zhí)行過(guò)程如下:“Generate Unit Tests”→“Generate Stubs”→“Build Test Exectable”→“Run Unit Test”,其中“Generate Unit Tests”產(chǎn)生驅(qū)動(dòng)函數(shù),“Generate Stubs”產(chǎn)生樁函數(shù)。所產(chǎn)生的驅(qū)動(dòng)函數(shù)和樁函數(shù)均保存在用戶指定的工作空間內(nèi),可修改。

      執(zhí)行“Generate Stubs”后,可以從用戶指定的工作空間中找到C++TEST 自動(dòng)產(chǎn)生的樁函數(shù)如圖1所示。

      圖1 C++TEST 自動(dòng)產(chǎn)生的樁函數(shù)

      4 嵌入式系統(tǒng)的靜態(tài)測(cè)試

      用C ++Test 對(duì)某型交換機(jī)的嵌入式系統(tǒng)(Vx-Works)運(yùn)行程序(開(kāi)發(fā)環(huán)境:Tornado2.2)進(jìn)行靜態(tài)代碼測(cè)試。在系統(tǒng)環(huán)境變量下面添加PATH 變量的值如下:

      從GUI 面板中直接導(dǎo)入Tornado 工程,方式如圖2所示。

      然后執(zhí)行:“Test Using”→“Builtin”→“Static Analysis”→“MISRA C++2008”。執(zhí)行完成后察看C++TEST的違規(guī)報(bào)告如圖3 所示。

      5 BugDetective 功能

      在C++Test的主面板中執(zhí)行:“Test Using”→“Builtin”→“StaticAnalysis”→“BugDetective”。我們選擇的程序中包含以下的函數(shù)語(yǔ)句:

      執(zhí)行“BugDetecctive”后,C ++TEST 報(bào)告一個(gè)除0的違例。顯然,當(dāng)min(x,y,m,n)函數(shù)的返回值為0時(shí),出現(xiàn)除0的情況。該功能還能查找出使用未初始化內(nèi)存、空指針解除引用、內(nèi)存和資源泄露等問(wèn)題。

      6 構(gòu)建運(yùn)行庫(kù)

      執(zhí)行嵌入式系統(tǒng)的單元測(cè)試過(guò)程如下:

      (1)使用交叉編譯器,為目標(biāo)平臺(tái)建立C ++TEST 運(yùn)行時(shí)庫(kù);

      (2)配置C++TEST 使其可以在交叉編譯器和開(kāi)發(fā)環(huán)境上工作;

      (3)自定義測(cè)試流程定義;

      (4)執(zhí)行測(cè)試并使用C++TESE的GUI 來(lái)進(jìn)行結(jié)果分析。

      下面就Tornado2.0.2 編寫(xiě)的一個(gè)簡(jiǎn)單程序說(shuō)明如何在C ++TEST 上執(zhí)行嵌入式系統(tǒng)的單元測(cè)試。首先,從C++TEST的GUI 中導(dǎo)入一個(gè)Tornado項(xiàng)目,我們所使用的Tornado 源代碼如下:

      在C++TEST的安裝目錄下找到pluginscom.parasoft.xtest.libs.cpp.win32.x86_7.2.10.34oswin32x86libsource arget 目錄下的WR_egcs_simnt_VxWorks5_4.mk 文件,然后查詢和修改相關(guān)變量,在主Mkefile 文件中找到了這個(gè)變量,并將其值修改為:WR_egcs_simnt_VxWorks5_4,然后查找PLATFORM 宏,并 在 主 Makefile 文 件 中 查 找CPPTEST_INC_DIR 變量,將其值定義為../../etc/include,然后將Tornado 安裝目錄中的make.exe 文件拷貝到主Makefile 文件所在的目錄并執(zhí)行Make,如果編譯順利通過(guò),可以在目標(biāo)目錄下得到third_tornadoTest.out 文件,將這個(gè)文件拷貝到C ++TEST工作空間下的workspace.cpptest hird_tornadounit-datacurrent_tubf179707 目錄下,開(kāi)啟Tornado的注冊(cè)器、目標(biāo)服務(wù)器和仿真器,之后,在C ++TEST的GUI 中按照單元測(cè)試的步驟依次執(zhí)行到“構(gòu)建測(cè)試可執(zhí)行文件”并執(zhí)行:“Test Using”→“Builtin”→“Embedded Systems”→“Tornado”→“Load and Run Vxworks Test Object”。

      7 回歸測(cè)試

      回歸測(cè)試是在確認(rèn)已知程序正確性的基礎(chǔ)上,為這些已知的正確程序生成一個(gè)叫做“回歸基”的測(cè)試套件。如果用戶更改了這個(gè)已知程序,比如:源碼修改、添加、刪除等,那么,可以運(yùn)行已經(jīng)生成的回歸基測(cè)試套件,C ++TEST 能自動(dòng)捕獲測(cè)試輸出的不同點(diǎn),并作為一個(gè)違例報(bào)告給用戶。如果所有的輸出都是相同的,則不會(huì)有違例報(bào)告產(chǎn)生。根據(jù)這個(gè)違例報(bào)告,可以確認(rèn)用戶修改后的源代碼是否使以前的程序功能受到了影響。當(dāng)我們對(duì)一個(gè)程序作了充分測(cè)試并修改后,執(zhí)行“Test Using”→“Builtin”→“Unit Testing”→“Generate Regression Base”,就可以生成回歸基。以前的測(cè)試用例集和現(xiàn)在作為回歸基的測(cè)試用例集的區(qū)別:

      沒(méi)有作為回歸基的測(cè)試用例集的函數(shù)格式為:

      CPPTEST_POST_CONDITION_INTEGER("int_return",(_return)),其作用是:當(dāng)這個(gè)測(cè)試用例執(zhí)行完成后,在C++TEST的Console 面板中報(bào)告_return的值。

      而作為回歸基的測(cè)試用例集的函數(shù)格式為:

      CPPTEST_ASSERT_INTEGER_EQUAL(0,(_return)),其作用是:當(dāng)這個(gè)測(cè)試用例完成后,比較_return 和0是否相等,如果相等,則不產(chǎn)生操作,如果不相等,則產(chǎn)生一個(gè)違例報(bào)告給用戶,其中的這個(gè)“0”值,就是在執(zhí)行“Generate Regression Base”時(shí),C++TEST 在執(zhí)行該測(cè)試用例時(shí)所產(chǎn)生的值。然后C++TEST 把這個(gè)值作為執(zhí)行這個(gè)測(cè)試用例的標(biāo)準(zhǔn)輸出,當(dāng)用戶以這個(gè)回歸基為標(biāo)準(zhǔn)進(jìn)行回歸測(cè)試時(shí),C++TEST 就將這個(gè)標(biāo)準(zhǔn)輸出和進(jìn)行回歸測(cè)試時(shí)得到的輸出作比較。

      從圖4 中可以看出更改了函數(shù)內(nèi)容后C ++Test 所報(bào)告的違例。

      圖4 C++Test 所報(bào)告的違例

      從兩個(gè)紅色方框可以很清楚地看到,當(dāng)執(zhí)行test_max_3()這個(gè)測(cè)試用例時(shí),原來(lái)程序的返回值應(yīng)該是1,更改后的程序返回值是0,所以C ++TEST 給出一個(gè)回歸測(cè)試的違例報(bào)告。

      8 覆蓋率分析

      C++TEST 支持以下幾種覆蓋率分析:

      Line Coverage:語(yǔ)句覆蓋。

      Block Coverage:塊覆蓋。

      Path Coverage:路徑覆蓋。

      Decision Coverage:決策覆蓋。

      Simple Condition Coverage:簡(jiǎn)單條件覆蓋。

      Modified Condition/Decision Coverage:修正的條件/決策覆蓋。

      按照前面介紹的單元測(cè)試流程,執(zhí)行一遍單元測(cè)試,查看C++TEST的Coverage 面板如圖5 所示。

      以上是選擇Line Coverage 顯示的覆蓋率結(jié)果,同時(shí),我們還可以選擇查看以其他方式統(tǒng)計(jì)的覆蓋率結(jié)果,如圖6 所示。

      從C++TEST的主面板上查看源代碼的覆蓋率也是很方便的,它提供對(duì)已經(jīng)覆蓋部分和未被覆蓋部分的不同顏色的高亮顯示。

      由于C ++TEST 不檢測(cè)預(yù)處理語(yǔ)句、變量和函數(shù)定義等語(yǔ)句的覆蓋率,如int x=1;這樣的語(yǔ)句是不會(huì)有綠色的高亮顯示的。

      9 TestConfigurations 功能

      用于用戶定義適合自己項(xiàng)目的測(cè)試配置,包括測(cè)試源的過(guò)濾(只對(duì)某些代碼進(jìn)行測(cè)試,而另一些代碼不進(jìn)行測(cè)試)、靜態(tài)代碼規(guī)范的選擇、產(chǎn)生測(cè)試用例的規(guī)則(產(chǎn)生測(cè)試用例的對(duì)象、方式,測(cè)試用例集存放的地點(diǎn))、執(zhí)行超時(shí)時(shí)間、外部符號(hào)表等內(nèi)容,這里面的配置比較簡(jiǎn)單,各種選項(xiàng)基本上都能見(jiàn)名知義,并且?guī)в型ㄓ眯缘呐渲眠x項(xiàng)不多,只需要按照用戶自己的需求進(jìn)行選擇就行了。

      10 結(jié)束語(yǔ)

      C++TEST 作為一個(gè)以單元測(cè)試為主的測(cè)試工具,功能還是比較強(qiáng)大的。它的靜態(tài)編碼規(guī)范檢測(cè)內(nèi)置的編碼規(guī)范有1456種,并且具有TCM 和Rule-Wrizad 功能。只需要一個(gè)比較了解該項(xiàng)目或者公司實(shí)際需要的編碼規(guī)范的人來(lái)制定相應(yīng)的編碼規(guī)范,就可以在全公司范圍內(nèi)得到應(yīng)用和繼承。如果要做單元測(cè)試的話,利用它的這些功能,能極大地降低測(cè)試人員的工作量,還能降低出錯(cuò)概率和調(diào)試時(shí)間。由于它具有“回歸基”測(cè)試套件的功能,在比較熟悉一個(gè)項(xiàng)目源代碼的情況下,用它來(lái)作回歸測(cè)試也是個(gè)相當(dāng)不錯(cuò)的選擇。同時(shí),開(kāi)發(fā)人員也可以運(yùn)用這個(gè)功能作增量測(cè)試。

      [1]Dorota Huizinga,Adam Kolawa.Automated Defect Prevention:Best Practices in Software Management [M].Wiley-Blackwell,2007.

      [2]Adam Kolawa.The Next Leap in Productivity:What Top Managers Really Need to Know about Information Technology[M].Wiley,2009.

      [3]Delores M Etter,Jeanine A Ingber.Engineering Problem Solving with C ++ (3rd Edition)[M].Prentice Hall,2011.

      [4]D.S.Malik.C++ Programming:From Problem Analysis to Program Design[M].South-Western College Publishing,2012.

      [5]Ana Colton- Sonnenberg.Computer- based Language Testing:C- Test Vs.Rapid Profile[M].GRIN Verlag oHG,2007.

      猜你喜歡
      違例單元測(cè)試測(cè)試用例
      中小學(xué)生籃球比賽中違例情況的問(wèn)題分析與執(zhí)裁要點(diǎn)
      基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
      清代補(bǔ)服紋樣使用的違例現(xiàn)象與懲處
      基于混合遺傳算法的回歸測(cè)試用例集最小化研究
      基于依賴(lài)結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
      一年級(jí)上冊(cè)第五單元測(cè)試
      一年級(jí)上冊(cè)一、二單元測(cè)試
      第五單元測(cè)試卷
      第六單元測(cè)試卷
      軟件回歸測(cè)試用例選取方法研究
      中牟县| 大姚县| 达尔| 郧西县| 潜山县| 镇远县| 确山县| 富裕县| 界首市| 龙井市| 南乐县| 稻城县| 陆良县| 秦安县| 宕昌县| 安多县| 萨嘎县| 荃湾区| 玉门市| 麻栗坡县| 天柱县| 依兰县| 得荣县| 霍林郭勒市| 沧州市| 怀柔区| 石渠县| 和林格尔县| 怀仁县| 遵义市| 全椒县| 清远市| 迁安市| 茶陵县| 东乌珠穆沁旗| 保定市| 双桥区| 永泰县| 琼结县| 玉溪市| 桦川县|