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

下載本文檔

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

文檔簡(jiǎn)介

諸多C單元測(cè)試工具測(cè)評(píng)報(bào)告概念簡(jiǎn)介

黃碩2013624單元測(cè)試1bug,錯(cuò)誤盤根錯(cuò)節(jié)。理不出個(gè)頭緒出來。TestSuite2(測(cè)試套件)定義的一組測(cè)試用例,中間用precondition,postcondition相連。用來測(cè)試軟件一個(gè)方面的特性是否到達(dá)要求。TestFixture3(測(cè)試夾具〕一種掌握好的測(cè)試情境,掌握好的輸入輸出參數(shù),掌握xUnitSetup 建立起TestFixture所需的測(cè)試環(huán)境,初始化一切該初始化的IO、參數(shù)、線程、內(nèi)存、硬件等等Exercise進(jìn)展實(shí)際的測(cè)試操作Verify驗(yàn)證測(cè)試結(jié)果TearDownTestFixtureTestCase(測(cè)試用例)MockFunction 〔仿真函數(shù))當(dāng)使用一些庫函數(shù)的時(shí),有寫狀況下無法調(diào)用一些尚未存在或者不便利調(diào)用的函數(shù),那么就寫一些仿真函數(shù)來關(guān)心測(cè)試。Precondition〔前提條件〕一步測(cè)試的前提條件,例如內(nèi)存、數(shù)據(jù)、指針、數(shù)據(jù)構(gòu)造甚至是硬件的狀態(tài)。Postcondition〔后置條件〕一步測(cè)試的后置條件,如返回值、內(nèi)存、數(shù)據(jù)、指針、數(shù)據(jù)構(gòu)造甚至是硬件的狀態(tài)。用來供給應(yīng)下一階段的測(cè)試或驗(yàn)證。本測(cè)試報(bào)告的目的是對(duì)幾種單元測(cè)試的框架進(jìn)展橫向比照簡(jiǎn)介。如需學(xué)習(xí)測(cè)試框架請(qǐng)參考各個(gè)官網(wǎng)的教學(xué)文獻(xiàn)。1ockery簡(jiǎn)介cmockery是一個(gè)相對(duì)來說功能、使用難度、學(xué)習(xí)難度很低的開源單元測(cè)試框架。opmock2,但是他沒有測(cè)試用例生成器。但是功能上更加強(qiáng)化了。之前的opmock2assertion的驗(yàn)證,而cmockeryexception,內(nèi)存泄露,實(shí)參與形參的匹配,mockfunction返回值的匹配。平臺(tái)cmockery支持Windows,Unix,Linux 和Mac,同時(shí)支持32位與64位操作系統(tǒng)。cmockery支持precondition和postcondition。即允許用戶撰寫setup和teardown方法??梢哉f測(cè)試的功能的掩蓋已經(jīng)很全面了。供給了rpm和deb的安裝包,源代碼還有Windows上的Makefile。cmockery支持老的c編譯器,最的C11的編譯器功能很多沒有被收錄進(jìn)去。cmockery只需要Link到CStandardLibrary 即可運(yùn)行。支持的編譯器依據(jù)環(huán)境使用的編譯器為準(zhǔn)。用法簡(jiǎn)析運(yùn)行的方法和opmock2類似,是把測(cè)試的方法注冊(cè)在一個(gè)類似于堆棧的構(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的建立。具體的使用方法請(qǐng)參考4評(píng)價(jià)試用起來感覺比opmock2要好很多。到底他包含了更多的測(cè)試方法、宏使得可以更全面的測(cè)試代碼。另外cmockery是Googleopmock2全部cmockery并沒有全面修正。比方:沒有IDE整合沒有自動(dòng)輸出保存結(jié)果總結(jié)cmockery有更大的潛力和進(jìn)展空間,cmockery比起opmock2更適合我們的測(cè)試需求。但是假設(shè)要想運(yùn)用的很好很輕松仍需自己撰寫插件。下載請(qǐng)見52.CTest簡(jiǎn)介CTest其實(shí)是一個(gè)CMake內(nèi)嵌的程序,用來供給測(cè)CMakebuild出來的軟件。平臺(tái)支持Windows,Unix,Mac,Linux32 位或64位用法簡(jiǎn)析在運(yùn)行CMakegeneratedbuildtree 的時(shí)候,開啟ENABLE_TEST和ADD_TEST宏,CTest將會(huì)自動(dòng)運(yùn)行測(cè)試并且記錄測(cè)試結(jié)果到XML文件。評(píng)價(jià)CTest是一個(gè)運(yùn)行測(cè)試的機(jī)制,其并不具備單元測(cè)試的框架、方法、環(huán)境的集成??偨Y(jié)目前對(duì)于我們來說沒有實(shí)際用途。3.Check簡(jiǎn)介Check是C單元測(cè)試中的大牌,諸多著名開源工程都在用Check6。例如GNUPDF,OpenSync,GStreamer等等。Check是完全免費(fèi)并且開源的。Check嚴(yán)格支持xUnit并可以自己定義宏Check不光支持一般的assert,同時(shí)可以檢查內(nèi)存泄露,pthread相關(guān)的以及LinuxKernelAPI 返回的一系列Signal。平臺(tái)在平臺(tái)上Check支持Linux/Unix居多,但是供給了源代碼。理論上可以在WindowsCheck本領(lǐng)承受C編寫。用法分析用戶需要#include<check.h>最簡(jiǎn)潔的用例如下所示:START_TEST(test_name){/*unittestcode*/}END_TEST用戶需要自己編寫makefile來編譯測(cè)試用例,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來建立測(cè)試套件,并協(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ù)是把測(cè)試用例整合到測(cè)試套件里。Check與眾不同的一點(diǎn)是支持輸出更具體的結(jié)果報(bào)告。需要調(diào)用SRunner函數(shù)。輸出的報(bào)告范例如下: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===============================================評(píng)價(jià)Check的功能很強(qiáng)大,有一系列的assert可以比大小。但是Check沒有自動(dòng)生成測(cè)試用例、頭文件的機(jī)制。沒有IDE的整合,沒有自動(dòng)測(cè)試檢測(cè)。需要手動(dòng)注冊(cè)測(cè)試用例??偨Y(jié)Checkopmock2cmockeryAceUnit不差。而且是開源,完全可以依據(jù)自己的需求修改宏的定義和檢測(cè)機(jī)制。4.AceUnit簡(jiǎn)介AceUnit是一個(gè)基于Java的免費(fèi)C單元測(cè)試框架。AceUnit不是開源的,但是免費(fèi)。AceUnit2013615平臺(tái)AceUnit是基于JavaSE6.0,AceUnitAceUnit的開發(fā)者稱會(huì)在將來推出用C7C89C99用法分析AceUnit完全仿照J(rèn)Unit來實(shí)現(xiàn)C語言的單元測(cè)試。JUnit是Java通用的單元測(cè)試標(biāo)準(zhǔn)。被幾乎全部開發(fā)Java的大型企業(yè)應(yīng)用,OraclePayPalebay、AmazonAceUnit可以自動(dòng)化生成測(cè)試用例的頭文件方法。例如測(cè)試的文件叫做Test.c。當(dāng)Test.h#includeTest.h”放入“Test.c”內(nèi)之后執(zhí)行java-jarAceUnit.jarTest>Test.h這樣省去了自己寫頭文件的時(shí)間。實(shí)際上用起AceUnit感覺AceUnit其實(shí)和Check差不多。實(shí)際的范例語法如下所示: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測(cè)試一般用例專用A_Before返回值type用途A_Test測(cè)試一般用例專用A_Before測(cè)試Precondition,每個(gè)用例一次A_After測(cè)試Postcondition,每個(gè)用例一次A_BeforeClass測(cè)試Precondition,全部用例只有一次A_AfterClass測(cè)試Postcondition,全部用例只有一次A_Ignore被無視的用例,AceUnit不會(huì)執(zhí)行1除了在正常的PC下進(jìn)展測(cè)試,AceUnit的執(zhí)行不需要像check,opmock2和cmockerymain函數(shù)里。AceUnit評(píng)價(jià)AceUnit自動(dòng)生成頭文件有一套很嚴(yán)格的語法用來寫單元測(cè)試類似于JUnitTestSuite,TestFixture,Testcases,Setup和TearDown不需要手動(dòng)注冊(cè)測(cè)試用例,AceUnit會(huì)自動(dòng)檢測(cè)全部的方法自動(dòng)執(zhí)行。支持嵌入式測(cè)試缺點(diǎn)有:沒有很好的和IDE整合嵌入式測(cè)試有些狀況下會(huì)出錯(cuò)沒有輸出xml的功能Java撰寫而不是CC++不開源不支持自定義宏總結(jié)AceUnit相比opmock2,check,cmockery 更專業(yè),更嚴(yán)格。相對(duì)來說更適合我們的需求。5.opmock2簡(jiǎn)介opmock是一個(gè)開源的C/C++單元測(cè)試的框架。該框架主要分為兩大版本。opmock1和opmock2。本片主要測(cè)試opmock2。特性opmock2的功能主要有如下四個(gè):單元測(cè)試框架代碼的自動(dòng)生成供給很多宏用來驗(yàn)證各個(gè)類型結(jié)果的正確性自動(dòng)運(yùn)行測(cè)試代碼可以和其他單元測(cè)試框架結(jié)合使用單元測(cè)試框架代碼的自動(dòng)生成opmock2承受承受一個(gè)shellscript,refresh_tests.sh 來自動(dòng)生成測(cè)試文件和方法。用戶輸入需要測(cè)試的文件〔頭文件和代碼〕作為運(yùn)行此腳本的實(shí)參,該腳本自動(dòng)檢測(cè)輸入文件的后綴以及掃描文件,并依據(jù)結(jié)果自動(dòng)生成所需的.c和.h文件用來編寫測(cè)試用例。供給很多宏用來驗(yàn)證各個(gè)類型結(jié)果的正確性opmock2總共供給了15組宏用來驗(yàn)證中間運(yùn)行結(jié)果。涵蓋了char,unsignedchar,byte,unsignedbyte,short,unsignedshort,int,unsignedint,long,unsignedlong,float,cstring,bool,buffer 以及虛擬lib每一組包含了equal和notequal兩種推斷。我認(rèn)為其中的,file和buffer格外適合驗(yàn)證圖像相關(guān)的代碼??梢砸淮沃苯訖z測(cè)整個(gè)buffer的正確性。也可以驗(yàn)證ti庫中函數(shù)返回結(jié)果的正確性??梢院推渌麊卧獪y(cè)試框架結(jié)合使用可以整合CppUnit和GoogleC++TestFramework 進(jìn)展大型C++軟件的測(cè)試。另外,opmock的代碼格外簡(jiǎn)潔,并且是公開的。所以可以依據(jù)自己的需求進(jìn)展修改。平臺(tái)opmock1承受Java編寫,可以運(yùn)行于任何可以運(yùn)行JavaSE6.0以上的平臺(tái)。opmock2則承受C++編寫,需要使用LLVMClang編譯器與解釋器編譯??梢栽贚inux,Unix和Mac32位與64位兩種操作系統(tǒng)上nativecode的測(cè)試。opmock1現(xiàn)已停頓更,所以本篇評(píng)測(cè)只要針對(duì)的是opmock2。用法分析測(cè)試的方法如下。首先行型opmock2自帶的腳本生成必要的測(cè)試方法。當(dāng)寫測(cè)試用例的時(shí)候就像寫任何C的代碼,直接編寫測(cè)試用例的規(guī)律即可。然后把它們注冊(cè)在測(cè)試用例名目下的main函數(shù)里。比方說我們要測(cè)試運(yùn)行方法test_rgb2gray,則寫opmock_register_test(test_rgb2gray,“test_rgb2gray“);當(dāng)注冊(cè)完全部的測(cè)試用例方法之后運(yùn)行opmock_test_suite_run;下面是測(cè)試用例的返利代碼和測(cè)試結(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時(shí)可以自定模擬的lib和輸入實(shí)參的結(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也支持測(cè)試用例中的函數(shù)回調(diào)?;卣{(diào)函數(shù)必需定義成為指向函數(shù)的指針并入下模板所示:typedefint(*OPMOCK_do_sound_CALLBACK)(char* sound,intcalls);當(dāng)完成了全部測(cè)試用例的編寫,需要寫出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評(píng)價(jià)opmock2簡(jiǎn)潔,學(xué)習(xí)曲線短。不到一小時(shí)就能會(huì)用開源,可以自己隨便修改可擴(kuò)展功能,和其他測(cè)試框架共同使用缺點(diǎn)是:沒有和任何IDE整合需要自己寫Makefile沒有precondition和postcondition總結(jié)opmock2本身很簡(jiǎn)潔,有一些最根本的單元測(cè)試功能。有點(diǎn)太簡(jiǎn)潔。假設(shè)需要和IDE使用。6.TPT簡(jiǎn)介TPT是一個(gè)專業(yè)級(jí)的付費(fèi)測(cè)試軟件。由德國公司PIKETEC開發(fā)。不同于維基百科的描述,TPT并不是一個(gè)實(shí)打?qū)嵉臏y(cè)試C代碼的單元測(cè)試軟件。但是確實(shí)一款針對(duì)安全性的嵌入式掌握系統(tǒng)綜合測(cè)試軟件。他符合ISO26262標(biāo)準(zhǔn)。平臺(tái)目前只看到了WindowsEclipse,就像是CCS。用法分析此款軟件結(jié)合了測(cè)試建模,測(cè)試執(zhí)行和測(cè)試評(píng)估三個(gè)步驟。其中測(cè)試建模局部由專業(yè)的圖形軟件來繪制測(cè)試流程,并可以整合MatlabSimulink,ASCET 和AUTOSAR軟件的測(cè)試模型。在執(zhí)行過程中可以掌握全部條件并對(duì)每一步輸出做出反響。驗(yàn)證步驟則可以輸出圖標(biāo)式的高級(jí)測(cè)試報(bào)告。評(píng)價(jià)這款軟件適合綜合測(cè)試多個(gè)嵌入式模塊之間的理論模型,而不是針對(duì)代碼的License$1000總結(jié)不適合用于單元測(cè)試。7.ParaSoftC/C++DevelopmentTest簡(jiǎn)介假設(shè)資金不是限制,ParaSoft目前還沒有收到該公司的回復(fù)?,F(xiàn)已申請(qǐng)了Windows和LinuxParasoft是功能最完善的單元測(cè)試框架。他集成了代碼分析,CodeReview,單RunTime的錯(cuò)誤檢查。平臺(tái)操作系統(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)。用法分析尚未拿到測(cè)試用的軟件,但是它支持直接在CCS里分析、調(diào)試、運(yùn)行、報(bào)告測(cè)試用例。支持CCS內(nèi)的團(tuán)隊(duì)合作,CodeReview,代碼分析。在不用運(yùn)行代碼的狀況下HTML,PDF等等。它還包括了一個(gè)Server版,可以直接做Server使用。他可以自動(dòng)檢測(cè)代碼里的特性并且自動(dòng)生成測(cè)試的代碼。固然這個(gè)功能還有待檢查。評(píng)價(jià)

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論