諸多C單元測試工具測評報告_第1頁
諸多C單元測試工具測評報告_第2頁
諸多C單元測試工具測評報告_第3頁
諸多C單元測試工具測評報告_第4頁
諸多C單元測試工具測評報告_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

諸多C單元測試工具測評報告概念簡介

黃碩2013624單元測試1bug,錯誤盤根錯節(jié)。理不出個頭緒出來。TestSuite2(測試套件)定義的一組測試用例,中間用precondition,postcondition相連。用來測試軟件一個方面的特性是否到達(dá)要求。TestFixture3(測試夾具〕一種掌握好的測試情境,掌握好的輸入輸出參數(shù),掌握xUnitSetup 建立起TestFixture所需的測試環(huán)境,初始化一切該初始化的IO、參數(shù)、線程、內(nèi)存、硬件等等Exercise進(jìn)展實際的測試操作Verify驗證測試結(jié)果TearDownTestFixtureTestCase(測試用例)MockFunction 〔仿真函數(shù))當(dāng)使用一些庫函數(shù)的時,有寫狀況下無法調(diào)用一些尚未存在或者不便利調(diào)用的函數(shù),那么就寫一些仿真函數(shù)來關(guān)心測試。Precondition〔前提條件〕一步測試的前提條件,例如內(nèi)存、數(shù)據(jù)、指針、數(shù)據(jù)構(gòu)造甚至是硬件的狀態(tài)。Postcondition〔后置條件〕一步測試的后置條件,如返回值、內(nèi)存、數(shù)據(jù)、指針、數(shù)據(jù)構(gòu)造甚至是硬件的狀態(tài)。用來供給應(yīng)下一階段的測試或驗證。本測試報告的目的是對幾種單元測試的框架進(jìn)展橫向比照簡介。如需學(xué)習(xí)測試框架請參考各個官網(wǎng)的教學(xué)文獻(xiàn)。1ockery簡介cmockery是一個相對來說功能、使用難度、學(xué)習(xí)難度很低的開源單元測試框架。opmock2,但是他沒有測試用例生成器。但是功能上更加強(qiáng)化了。之前的opmock2assertion的驗證,而cmockeryexception,內(nèi)存泄露,實參與形參的匹配,mockfunction返回值的匹配。平臺cmockery支持Windows,Unix,Linux 和Mac,同時支持32位與64位操作系統(tǒng)。cmockery支持precondition和postcondition。即允許用戶撰寫setup和teardown方法??梢哉f測試的功能的掩蓋已經(jīng)很全面了。供給了rpm和deb的安裝包,源代碼還有Windows上的Makefile。cmockery支持老的c編譯器,最的C11的編譯器功能很多沒有被收錄進(jìn)去。cmockery只需要Link到CStandardLibrary 即可運(yùn)行。支持的編譯器依據(jù)環(huán)境使用的編譯器為準(zhǔn)。用法簡析運(yùn)行的方法和opmock2類似,是把測試的方法注冊在一個類似于堆棧的構(gòu)造里。例如:constUnitTesttests[]={unit_test(leak_memory_test),unit_test(buffer_overflow_test),unit_test(buffer_underflow_test),};returnrun_tests(tests);不同的是cmockery把每一輪運(yùn)行的狀態(tài)保存了下來,用來支持postcondition和precondition的建立。具體的使用方法請參考4評價試用起來感覺比opmock2要好很多。到底他包含了更多的測試方法、宏使得可以更全面的測試代碼。另外cmockery是Googleopmock2全部cmockery并沒有全面修正。比方:沒有IDE整合沒有自動輸出保存結(jié)果總結(jié)cmockery有更大的潛力和進(jìn)展空間,cmockery比起opmock2更適合我們的測試需求。但是假設(shè)要想運(yùn)用的很好很輕松仍需自己撰寫插件。下載請見52.CTest簡介CTest其實是一個CMake內(nèi)嵌的程序,用來供給測CMakebuild出來的軟件。平臺支持Windows,Unix,Mac,Linux32 位或64位用法簡析在運(yùn)行CMakegeneratedbuildtree 的時候,開啟ENABLE_TEST和ADD_TEST宏,CTest將會自動運(yùn)行測試并且記錄測試結(jié)果到XML文件。評價CTest是一個運(yùn)行測試的機(jī)制,其并不具備單元測試的框架、方法、環(huán)境的集成??偨Y(jié)目前對于我們來說沒有實際用途。3.Check簡介Check是C單元測試中的大牌,諸多著名開源工程都在用Check6。例如GNUPDF,OpenSync,GStreamer等等。Check是完全免費(fèi)并且開源的。Check嚴(yán)格支持xUnit并可以自己定義宏Check不光支持一般的assert,同時可以檢查內(nèi)存泄露,pthread相關(guān)的以及LinuxKernelAPI 返回的一系列Signal。平臺在平臺上Check支持Linux/Unix居多,但是供給了源代碼。理論上可以在WindowsCheck本領(lǐng)承受C編寫。用法分析用戶需要#include<check.h>最簡潔的用例如下所示:START_TEST(test_name){/*unittestcode*/}END_TEST用戶需要自己編寫makefile來編譯測試用例,makefile的語法如下:TESTS=check_moneycheck_PROGRAMS=check_moneycheck_money_SOURCES=check_money.c$(top_builddir)/src/money.hcheck_money_CFLAGS=@CHECK_CFLAGS@check_money_LDADD=$(top_builddir)/src/libmoney.la@CHECK_LIBS@MakefileMakefile.inautoreconf--install,./configuremake用戶通過用戶通過suite_create來建立測試套件,并協(xié)調(diào)永利之間的關(guān)系:START_TEST(test_money_create){Money*m;m=money_create(5,“USD“);ck_assert_int_eq(money_amount(m),5);ck_assert_str_eq(money_currency(m),“USD“);money_free(m);}END_TESTSuite*money_suite(void){money_suite(void){Suite*s=suite_create(“Money“);/*Coretestcase*/TCase*tc_core=tcase_create(“Core“);tcase_add_test(tc_core,test_money_create);suite_add_tcase(s,tc_core);returns;}其中的tcase_add_testsuite_add_tcase函數(shù)是把測試用例整合到測試套件里。Check與眾不同的一點(diǎn)是支持輸出更具體的結(jié)果報告。需要調(diào)用SRunner函數(shù)。輸出的報告范例如下:Runningsuite(s):Money0%:Checks:1,Failures:1,Errors:0check_money.c:9:F:Core:test_money_create:0:Assertion”money_amount(m)==5”failed:money_amount(m)==0,5==5FAIL:check_money===============================================1of1testfailedPleasereporttocheck-develAT===============================================評價Check的功能很強(qiáng)大,有一系列的assert可以比大小。但是Check沒有自動生成測試用例、頭文件的機(jī)制。沒有IDE的整合,沒有自動測試檢測。需要手動注冊測試用例。總結(jié)Checkopmock2cmockeryAceUnit不差。而且是開源,完全可以依據(jù)自己的需求修改宏的定義和檢測機(jī)制。4.AceUnit簡介AceUnit是一個基于Java的免費(fèi)C單元測試框架。AceUnit不是開源的,但是免費(fèi)。AceUnit2013615平臺AceUnit是基于JavaSE6.0,AceUnitAceUnit的開發(fā)者稱會在將來推出用C7C89C99用法分析AceUnit完全仿照J(rèn)Unit來實現(xiàn)C語言的單元測試。JUnit是Java通用的單元測試標(biāo)準(zhǔn)。被幾乎全部開發(fā)Java的大型企業(yè)應(yīng)用,OraclePayPalebay、AmazonAceUnit可以自動化生成測試用例的頭文件方法。例如測試的文件叫做Test.c。當(dāng)Test.h#includeTest.h”放入“Test.c”內(nèi)之后執(zhí)行java-jarAceUnit.jarTest>Test.h這樣省去了自己寫頭文件的時間。實際上用起AceUnit感覺AceUnit其實和Check差不多。實際的范例語法如下所示:A_TestvoidtestCompareInt{intn1;intn2;n1=0;n2=0;assertEquals(“Comparingtwoequalnumbersmustreturn0.“,0,compareInt(&0,&1));n1=1;n2=2;assertTrue(“Comparing1with2mustreturnavalue<0.“,compareInt(&n1,&n2)<0);n1=2;n2=1;assertTrue(“Comparing2with1mustreturnavalue>0.“,compareInt(&n1,&n2)>0);}返回值type用途A_Test測試一般用例專用A_Before返回值type用途A_Test測試一般用例專用A_Before測試Precondition,每個用例一次A_After測試Postcondition,每個用例一次A_BeforeClass測試Precondition,全部用例只有一次A_AfterClass測試Postcondition,全部用例只有一次A_Ignore被無視的用例,AceUnit不會執(zhí)行1除了在正常的PC下進(jìn)展測試,AceUnit的執(zhí)行不需要像check,opmock2和cmockerymain函數(shù)里。AceUnit評價AceUnit自動生成頭文件有一套很嚴(yán)格的語法用來寫單元測試類似于JUnitTestSuite,TestFixture,Testcases,Setup和TearDown不需要手動注冊測試用例,AceUnit會自動檢測全部的方法自動執(zhí)行。支持嵌入式測試缺點(diǎn)有:沒有很好的和IDE整合嵌入式測試有些狀況下會出錯沒有輸出xml的功能Java撰寫而不是CC++不開源不支持自定義宏總結(jié)AceUnit相比opmock2,check,cmockery 更專業(yè),更嚴(yán)格。相對來說更適合我們的需求。5.opmock2簡介opmock是一個開源的C/C++單元測試的框架。該框架主要分為兩大版本。opmock1和opmock2。本片主要測試opmock2。特性opmock2的功能主要有如下四個:單元測試框架代碼的自動生成供給很多宏用來驗證各個類型結(jié)果的正確性自動運(yùn)行測試代碼可以和其他單元測試框架結(jié)合使用單元測試框架代碼的自動生成opmock2承受承受一個shellscript,refresh_tests.sh 來自動生成測試文件和方法。用戶輸入需要測試的文件〔頭文件和代碼〕作為運(yùn)行此腳本的實參,該腳本自動檢測輸入文件的后綴以及掃描文件,并依據(jù)結(jié)果自動生成所需的.c和.h文件用來編寫測試用例。供給很多宏用來驗證各個類型結(jié)果的正確性opmock2總共供給了15組宏用來驗證中間運(yùn)行結(jié)果。涵蓋了char,unsignedchar,byte,unsignedbyte,short,unsignedshort,int,unsignedint,long,unsignedlong,float,cstring,bool,buffer 以及虛擬lib每一組包含了equal和notequal兩種推斷。我認(rèn)為其中的,file和buffer格外適合驗證圖像相關(guān)的代碼??梢砸淮沃苯訖z測整個buffer的正確性。也可以驗證ti庫中函數(shù)返回結(jié)果的正確性??梢院推渌麊卧獪y試框架結(jié)合使用可以整合CppUnit和GoogleC++TestFramework 進(jìn)展大型C++軟件的測試。另外,opmock的代碼格外簡潔,并且是公開的。所以可以依據(jù)自己的需求進(jìn)展修改。平臺opmock1承受Java編寫,可以運(yùn)行于任何可以運(yùn)行JavaSE6.0以上的平臺。opmock2則承受C++編寫,需要使用LLVMClang編譯器與解釋器編譯??梢栽贚inux,Unix和Mac32位與64位兩種操作系統(tǒng)上nativecode的測試。opmock1現(xiàn)已停頓更,所以本篇評測只要針對的是opmock2。用法分析測試的方法如下。首先行型opmock2自帶的腳本生成必要的測試方法。當(dāng)寫測試用例的時候就像寫任何C的代碼,直接編寫測試用例的規(guī)律即可。然后把它們注冊在測試用例名目下的main函數(shù)里。比方說我們要測試運(yùn)行方法test_rgb2gray,則寫opmock_register_test(test_rgb2gray,“test_rgb2gray“);當(dāng)注冊完全部的測試用例方法之后運(yùn)行opmock_test_suite_run;下面是測試用例的返利代碼和測試結(jié)果:1:#include“fizzbuzz.h“#include<string.h>#include<stdlib.h>#include<stdio.h>char*fizzbuzz(inti){char*result=(char*)calloc(1,20);if(!(i%3))strcpy(result,“FIZZ“);if(!(i%5))strcat(result,“BUZZ“);if(!strlen(result))sprintf(result,“%d“,i);returnresult;}Main:#include“opmock.h“#include“fizzbuzz_test.h“intmain(intargc,char*argv[]){opmock_test_suite_reset;opmock_register_test(test_fizzbuzz_with_3,“test_fizzbuzz_with_3“);opmock_register_test(test_fizzbuzz_with_5,“test_fizzbuzz_with_5“);opmock_register_test(test_fizzbuzz_with_15,“test_fizzbuzz_with_15“);opmock_register_test(test_fizzbuzz_many_3,“test_fizzbuzz_many_3“);opmock_register_test(test_fizzbuzz_many_5,“test_fizzbuzz_many_5“);opmock_register_test(test_fizzbuzz_many_3_and_5,“test_fizzbuzz_many_3_and_5“);opmock_test_suite_run;return0;}最終輸出結(jié)果:OKtest”test_fizzbuzz_with_3”O(jiān)Ktest”test_fizzbuzz_with_5”O(jiān)Ktest”test_fizzbuzz_with_15”O(jiān)Ktest”test_fizzbuzz_many_3”O(jiān)Ktest”test_fizzbuzz_many_5”O(jiān)Ktest”test_fizzbuzz_many_3_and_5”O(jiān)PMOCK:6testsrun,0testsfailed.當(dāng)需要模擬輸入一些參數(shù),甚至lib時可以自定模擬的lib和輸入實參的結(jié)果并運(yùn)用opmock2lib#ifndefSOUND_H_#defineSOUND_H_intdo_sound(char*sound);#endif修改后的代碼:#include“fizzbuzz.h“#include“sound.h“#include<string.h>#include<stdlib.h>#include<stdio.h>char*fizzbuzz(inti){char*result=calloc(1,20);if(!(i%3))strcpy(result,“FIZZ“);if(!(i%5))strcat(result,“BUZZ“);if(!strlen(result))sprintf(result,“%d“,i);intres=do_sound(result);if(res!=0){sprintf(result,“ERROR“);}returnresult;}加載模擬lib的命令行:>opmock2-isound.h-o.-I/usr/include-I/usr/include/x86_64-linux-gnu-I/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixedopmock2也支持測試用例中的函數(shù)回調(diào)。回調(diào)函數(shù)必需定義成為指向函數(shù)的指針并入下模板所示:typedefint(*OPMOCK_do_sound_CALLBACK)(char* sound,intcalls);當(dāng)完成了全部測試用例的編寫,需要寫出makefile 如下面的模板:CPPFLAGS=-O0 -ggdbOBJECTS=fizzbuzz.ofizzbuzz_test.omain.oopmock.o3all:fizzbuzzTest./fizzbuzz_test6fizzbuzz.o:fizzbuzz.hfizzbuzz_test.o:fizzbuzz.hopmock.o:opmock.h1011fizzbuzzTest:$(OBJECTS)fizzbuzz.h12 gcc-ofizzbuzz_test$(OBJECTS)1314clean:15-rm-f$(OBJECTS)16-rm-ffizzbuzz_test評價opmock2簡潔,學(xué)習(xí)曲線短。不到一小時就能會用開源,可以自己隨便修改可擴(kuò)展功能,和其他測試框架共同使用缺點(diǎn)是:沒有和任何IDE整合需要自己寫Makefile沒有precondition和postcondition總結(jié)opmock2本身很簡潔,有一些最根本的單元測試功能。有點(diǎn)太簡潔。假設(shè)需要和IDE使用。6.TPT簡介TPT是一個專業(yè)級的付費(fèi)測試軟件。由德國公司PIKETEC開發(fā)。不同于維基百科的描述,TPT并不是一個實打?qū)嵉臏y試C代碼的單元測試軟件。但是確實一款針對安全性的嵌入式掌握系統(tǒng)綜合測試軟件。他符合ISO26262標(biāo)準(zhǔn)。平臺目前只看到了WindowsEclipse,就像是CCS。用法分析此款軟件結(jié)合了測試建模,測試執(zhí)行和測試評估三個步驟。其中測試建模局部由專業(yè)的圖形軟件來繪制測試流程,并可以整合MatlabSimulink,ASCET 和AUTOSAR軟件的測試模型。在執(zhí)行過程中可以掌握全部條件并對每一步輸出做出反響。驗證步驟則可以輸出圖標(biāo)式的高級測試報告。評價這款軟件適合綜合測試多個嵌入式模塊之間的理論模型,而不是針對代碼的License$1000總結(jié)不適合用于單元測試。7.ParaSoftC/C++DevelopmentTest簡介假設(shè)資金不是限制,ParaSoft目前還沒有收到該公司的回復(fù)。現(xiàn)已申請了Windows和LinuxParasoft是功能最完善的單元測試框架。他集成了代碼分析,CodeReview,單RunTime的錯誤檢查。平臺操作系統(tǒng)上它支持WindowsLinuxSolarisUltraSPARCIDE它支持(有CCS):ARMADSGreenHillsMULTIIAREmbeddedWorkbenchKeilμVisionIDEKeilRealViewMicrosofteMbeddedVisualC++MicrosoftVisualStudioTexasInstrumentsCodeComposerWindRiverTornado編譯器支持:AlteraNIOSGCCADS(ARMDevelopmentSuite)ARMforKeiluVisionARMRVCTARMDS-5GNUCompilationToolsCosmicSoftware68HC08eCosCentricGCCFreescaleCodeWarriorC/C++forHC12FujitsuFRFamilySOFTUNEGCC(GNUCompilerCollection)GreenHillsMULTIforV800IARC/C++forARMIARC/C++forMSP430KeilC51MicrosoftVisualC++forWindowsMobileMicrosoftEmbeddedVisualC++QCC(QNXGCC)RenesasSHSERIESC/C++STMicroelectronicsST20STMicroelectronicsST40TASKING80C196CTASKINGTriCoreVX-toolsetC/C++TITMS320C2x/C2xx/C5xTITMS320C2000C/C++TITMS320C54xC/C++TITMS320C55xC/C++TITMS320C6xC/C++TIMSP430C/C++WindRiverGCCWindRiverDIABBuild系統(tǒng)支持:GNUmakeSunmakeMicrosoftnmake源掌握支持:AccuRevSCMBorlandStarTeamCVSGitIBMRationalClearCaseIBMRationalSynergyMicrosoftTeamFoundationServerMicrosoftVisualSourceSafePerforceSCMSerenaDimensionsSubversion(SVN)真可謂是太全了,CCS,TI的編譯器都在內(nèi)。用法分析尚未拿到測試用的軟件,但是它支持直接在CCS里分析、調(diào)試、運(yùn)行、報告測試用例。支持CCS內(nèi)的團(tuán)隊合作,CodeReview,代碼分析。在不用運(yùn)行代碼的狀況下HTML,PDF等等。它還包括了一個Server版,可以直接做Server使用。他可以自動檢測代碼里的特性并且自動生成測試的代碼。固然這個功能還有待檢查。評價

1并且有不錯的嵌入式開發(fā)配套。具體的使用感受還需要實際使用過后才知道??偨Y(jié)這個軟件很心儀。Lint簡介Lint不是一個單元測試工具,但是卻是一個很好的代

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論