亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        2 功能簡(jiǎn)介

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

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

        (2)BugDetective(C ++ Test 專利技術(shù))。通過搜索代碼中的“可疑點(diǎn)”,開始分析正在測(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的連接來支持共享源碼和相關(guān)測(cè)試資源。

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

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

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

        其執(zhí)行過程如下:“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)行程序(開發(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ù)語句:

        執(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)存和資源泄露等問題。

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

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

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

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

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

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

        下面就Tornado2.0.2 編寫的一個(gè)簡(jiǎn)單程序說明如何在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,如果編譯順利通過,可以在目標(biāo)目錄下得到third_tornadoTest.out 文件,將這個(gè)文件拷貝到C ++TEST工作空間下的workspace.cpptest hird_tornadounit-datacurrent_tubf179707 目錄下,開啟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ū)別:

        沒有作為回歸基的測(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í),原來程序的返回值應(yīng)該是1,更改后的程序返回值是0,所以C ++TEST 給出一個(gè)回歸測(cè)試的違例報(bào)告。

        8 覆蓋率分析

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

        Line Coverage:語句覆蓋。

        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ù)處理語句、變量和函數(shù)定義等語句的覆蓋率,如int x=1;這樣的語句是不會(huì)有綠色的高亮顯示的。

        9 TestConfigurations 功能

        用于用戶定義適合自己項(xiàng)目的測(cè)試配置,包括測(cè)試源的過濾(只對(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)基本上都能見名知義,并且?guī)в型ㄓ眯缘呐渲眠x項(xiàng)不多,只需要按照用戶自己的需求進(jìn)行選擇就行了。

        10 結(jié)束語

        C++TEST 作為一個(gè)以單元測(cè)試為主的測(cè)試工具,功能還是比較強(qiáng)大的。它的靜態(tài)編碼規(guī)范檢測(cè)內(nèi)置的編碼規(guī)范有1456種,并且具有TCM 和Rule-Wrizad 功能。只需要一個(gè)比較了解該項(xiàng)目或者公司實(shí)際需要的編碼規(guī)范的人來制定相應(yīng)的編碼規(guī)范,就可以在全公司范圍內(nèi)得到應(yīng)用和繼承。如果要做單元測(cè)試的話,利用它的這些功能,能極大地降低測(cè)試人員的工作量,還能降低出錯(cuò)概率和調(diào)試時(shí)間。由于它具有“回歸基”測(cè)試套件的功能,在比較熟悉一個(gè)項(xiàng)目源代碼的情況下,用它來作回歸測(cè)試也是個(gè)相當(dāng)不錯(cuò)的選擇。同時(shí),開發(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é)生籃球比賽中違例情況的問題分析與執(zhí)裁要點(diǎn)
        基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
        清代補(bǔ)服紋樣使用的違例現(xiàn)象與懲處
        基于混合遺傳算法的回歸測(cè)試用例集最小化研究
        基于依賴結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
        一年級(jí)上冊(cè)第五單元測(cè)試
        一年級(jí)上冊(cè)一、二單元測(cè)試
        第五單元測(cè)試卷
        第六單元測(cè)試卷
        軟件回歸測(cè)試用例選取方法研究
        中文字幕无码不卡免费视频| 日本一区二区三区免费精品| 成人午夜福利视频后入| 少妇厨房愉情理伦片免费| AV无码免费不卡在线观看| 中文字幕色婷婷在线视频| 人妻少妇中文字幕在线| 国产98在线 | 日韩| 国产91 对白在线播放九色| 久久国产精品懂色av| 亚洲综合av一区二区三区蜜桃| 18女下面流水不遮图| 亚洲色成人网一二三区| 国产三级精品三级在专区中文| 国产午夜激无码av毛片不卡| 人人爽人人爱| 91精品国产免费青青碰在线观看| 中文字幕一区二区三区综合网| 成 人色 网 站 欧美大片在线观看| 少妇人妻200篇白洁| 精品久久久久88久久久| 亚洲熟妇一区二区蜜桃在线观看| 丝袜美腿一区二区三区| 国产目拍亚洲精品一区二区| 色婷婷激情在线一区二区三区| 精品视频在线观看日韩 | 成人欧美一区二区三区的电影| 日本少妇按摩高潮玩弄| 国产高清在线精品一区二区三区| 草草地址线路①屁屁影院成人| 人人妻人人添人人爽日韩欧美| 看黄色亚洲看黄色亚洲| 国产三级视频不卡在线观看| 老师粉嫩小泬喷水视频90| 亚洲自拍愉拍| 亚洲av熟女传媒国产一区二区| 久久国产免费观看精品3| 日韩www视频| 日本一区二区啪啪视频 | 国产a√无码专区亚洲av| 成年女人永久免费看片|