唐躍川 彭汝鳳 涂小麗
(重慶金美通信有限責(zé)任公司,重慶,400030)
基于VisualUnit的Linux項(xiàng)目單元測(cè)試方法研究
唐躍川 彭汝鳳 涂小麗
(重慶金美通信有限責(zé)任公司,重慶,400030)
首先介紹了VisualUnit的功能特色,然后詳細(xì)介紹了使用該工具構(gòu)建Linux項(xiàng)目測(cè)試工程的方法,最后對(duì)使用過(guò)程中的技巧和使用過(guò)程中發(fā)現(xiàn)的工具本身的問(wèn)題進(jìn)行了總結(jié)和分析。該工具已經(jīng)應(yīng)用到了多個(gè)項(xiàng)目的測(cè)試中并取得了良好效果。
可視化測(cè)試;嵌入式系統(tǒng);單元測(cè)試;白盒測(cè)試;測(cè)試工程;測(cè)試工具
伴隨著嵌入式軟件行業(yè)的規(guī)模壯大并逐步成熟,嵌入式軟件測(cè)試也在不斷發(fā)展,而嵌入式Linux就是其中的佼佼者[1]。從最初的開(kāi)發(fā)人員逐行調(diào)試向越來(lái)越規(guī)范化、流程化的方向發(fā)展。其活動(dòng)過(guò)程也變得越來(lái)越復(fù)雜,如果不借助測(cè)試工具,則不僅效率低下、工作量巨大,甚至可能出現(xiàn)無(wú)法解決的問(wèn)題,導(dǎo)致無(wú)法進(jìn)行測(cè)試[2]。而單元測(cè)試又對(duì)測(cè)試人員的從業(yè)素質(zhì)提出了更高要求。鑒于以上問(wèn)題,利用一套好的單元測(cè)試工具來(lái)幫助軟件測(cè)試人員提高工作效率和工作質(zhì)量是非常必要的[3]。
Visual Unit(簡(jiǎn)稱VU)是由廣州凱樂(lè)軟件公司研發(fā)的一款C/C++單元測(cè)試、可視編程工具[4]。對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō),其支持eTDD開(kāi)發(fā)模式(易行測(cè)試驅(qū)動(dòng)開(kāi)發(fā)),能夠提升開(kāi)發(fā)人員代碼的質(zhì)量及開(kāi)發(fā)效率;對(duì)于軟件測(cè)試來(lái)說(shuō),它可以完成100%的語(yǔ)句、條件、分支、路徑覆蓋,并提供詳盡的測(cè)試報(bào)告和測(cè)試數(shù)據(jù)[5]。
VU提供了以下一些特色功能:
(1)自動(dòng)生成樁代碼、驅(qū)動(dòng)代碼、用例代碼和用例框架;
(2)使用表格編輯測(cè)試用例數(shù)據(jù);
(3)提供依據(jù)有效值范圍、分段點(diǎn)、指定組合等方式生成用例;
(4)提供底層函數(shù)輸入、局部靜態(tài)變量及終端模擬功能;
(5)提供用例設(shè)計(jì)器,自動(dòng)找出遺漏用例、邊界用例,實(shí)現(xiàn)全面、高效的覆蓋;
(6)支持內(nèi)部輸出的自動(dòng)判斷。
對(duì)于Linux項(xiàng)目來(lái)說(shuō),為了提供交叉編譯環(huán)境,必須先安裝Cygwin。
完整的Cygwin可以從官網(wǎng)進(jìn)行下載,目前有12G,這里使用VU技術(shù)支持提供的較低版本,它只包含VU需要使用的庫(kù)文件和頭文件等內(nèi)容,只有120M左右,安裝過(guò)程如圖1所示。
圖1 cygwin安裝方法
安裝完成后,會(huì)形成一個(gè)C:cygwin目錄文件夾。
這里,用某型通信控制器的一部分源代碼為例,來(lái)說(shuō)明構(gòu)建Linux項(xiàng)目測(cè)試工程的方法。
這也是VU的一個(gè)特點(diǎn),只要提供一個(gè)能編譯通過(guò)的C/C++文件,就可以使用它進(jìn)行單元測(cè)試,這就為某些大型項(xiàng)目在集成代碼之前進(jìn)行單元測(cè)試提供了基礎(chǔ),也為測(cè)試工程師從某些大型項(xiàng)目中挑選測(cè)試價(jià)值高的部分代碼進(jìn)行測(cè)試提供了有效手段[6]。
第二步,啟動(dòng)VU4,選擇Linux項(xiàng)目模板,如圖2所示。
圖2 項(xiàng)目模板選擇
然后,在“常規(guī)”面板中的“產(chǎn)品項(xiàng)目根目錄”中選擇需要測(cè)試的項(xiàng)目源文件,如圖3所示。
其它選擇默認(rèn),一直“下一步”到VU自動(dòng)進(jìn)行項(xiàng)目編譯,可以得到如圖4所示的編譯結(jié)果:
圖3 項(xiàng)目源文件選擇
圖4 初次編譯結(jié)果
由于Cygwin、Linux、VU4這三個(gè)軟件的版本均較多,所以,它們之間兼容性很差。
同時(shí),VU是不能指定編譯器的,它使用VC6-Mini編譯器來(lái)編譯Linux項(xiàng)目,會(huì)產(chǎn)生很多編譯問(wèn)題,解決這些問(wèn)題是單元測(cè)試能做得下去的前提[7]。
切換到Build Error界面,先來(lái)看第一個(gè)錯(cuò)誤,如圖5所示。
可以看到,錯(cuò)誤類型是:外部申明函數(shù)clock_gettime()的類型有沖突。由于它是一個(gè)外部申明函數(shù),其功能顯然并不會(huì)影響對(duì)這個(gè)C文件進(jìn)行單元測(cè)試,所以,解決問(wèn)題的方式是:直接屏蔽該行代碼,使用VU的自動(dòng)生成莊代碼功能來(lái)替代這個(gè)函數(shù)。如圖6所示。
圖5 類型沖突錯(cuò)誤
圖6 屏蔽外部函數(shù)
重新編譯后,該錯(cuò)誤消失,重新編譯得到結(jié)果,如圖7所示。
圖7 修改源文件代碼
直接在測(cè)試文件中增加預(yù)處理命令#include<linux/ip.h>,重新編譯后,可以看到該類型的錯(cuò)誤消失了,得到圖8所示的錯(cuò)誤報(bào)告。
圖8 符號(hào)未定義錯(cuò)誤
這是一個(gè)符號(hào)未定義錯(cuò)誤,AF_PACKET這個(gè)符號(hào),可以采用上面的方法,從.h文件里面找到這個(gè)符號(hào)的定義,然后添加這個(gè)頭文件。然而,VU還提供一種更簡(jiǎn)單的解決方案,找到這個(gè)常量的定義之后,直接在測(cè)試文件中定義這個(gè)常量,這是為了避免在包含了這個(gè)符號(hào)定義的頭文件之后,會(huì)引出更多的頭文件包含,由于第5節(jié)開(kāi)篇所說(shuō)的原因,可能會(huì)引起更多的編譯錯(cuò)誤,使單元測(cè)試沒(méi)法進(jìn)行下去。而直接定義這個(gè)常量不會(huì)影響到測(cè)試結(jié)果,所以,這是一個(gè)比較好的解決方式。如圖9所示。
圖9 修改測(cè)試文件
保存之后重新編譯,這個(gè)錯(cuò)誤類型消失了,但是,會(huì)出現(xiàn)亂碼提示的錯(cuò)誤信息。這個(gè)時(shí)候,可以采用一種比較暴力的解決方式。首先,分析一下源代碼,可以看出,這行語(yǔ)句是屬于某一個(gè)語(yǔ)句塊的中間代碼,它并不包含任何的判斷/條件,那就意味著,屏蔽這行代碼之后,不會(huì)對(duì)這個(gè)函數(shù)的單元測(cè)試過(guò)程和結(jié)果造成任何影響;其次,這只是一個(gè)單獨(dú)的錯(cuò)誤,屏蔽它的工作量很小,不需要整篇代碼去查找類似的錯(cuò)誤并且作屏蔽工作,所以,可以直接屏蔽代碼,然后重新編譯??梢钥吹剑@個(gè)錯(cuò)誤已經(jīng)消失了,并且沒(méi)有引入新的錯(cuò)誤,如圖10-11所示。
圖10 無(wú)效代碼錯(cuò)誤
圖11 無(wú)效代碼錯(cuò)誤
現(xiàn)在報(bào)告的3個(gè)錯(cuò)誤類型雖然不一樣,但是其實(shí)質(zhì)是一樣的,都是由于中間屏蔽了部分測(cè)試代碼,造成這些測(cè)試代碼無(wú)效,那么,既然是無(wú)效的測(cè)試代碼,直接刪除就行了。將以上3個(gè)錯(cuò)誤報(bào)告出現(xiàn)的測(cè)試代碼刪除后,重新編譯,得到如圖12所示的結(jié)果。
圖12 得到正確結(jié)果
至此,表示編譯鏈接順利通過(guò),已經(jīng)可以開(kāi)始表格驅(qū)動(dòng)數(shù)據(jù)的測(cè)試用例設(shè)計(jì)了。
通過(guò)這個(gè)過(guò)程,可以總結(jié)出VU本身存在的一些BUG或者是使用上不太方便的地方,同時(shí),在實(shí)際使用過(guò)程中,還發(fā)現(xiàn)一些VU存在的問(wèn)題,下面分別列舉:
(1)編譯結(jié)果的錯(cuò)誤提示中有亂碼。
(2)不支持自選編譯器,所有的嵌入式項(xiàng)目默認(rèn)都使用VC-Mini編譯器。
(3)測(cè)試VS系列項(xiàng)目時(shí),使用導(dǎo)入工程文件的方式導(dǎo)入項(xiàng)目數(shù)據(jù)會(huì)丟失resouce.h文件。
(4)VU的多文件搜索功能不能準(zhǔn)確定位查找目標(biāo)。
(5)VU可能會(huì)自動(dòng)導(dǎo)入多余的LIB庫(kù)。
綜合來(lái)講,VU具備兩個(gè)功能,其一是支持eTDD(易行測(cè)試驅(qū)動(dòng)開(kāi)發(fā)),其二是支持各種嵌入式項(xiàng)目、Linux項(xiàng)目、VC系列項(xiàng)目等的C/C++單元測(cè)試,且其覆蓋標(biāo)準(zhǔn)為目前單元測(cè)試中最嚴(yán)格的歐美航空標(biāo)準(zhǔn)——MC/DC覆蓋[8]。雖然其本身還存在很多BUG,對(duì)Linux項(xiàng)目的支持也不是很好,但是,所有的問(wèn)題VU基本都提供了對(duì)應(yīng)的解決方法,使得單元測(cè)試可以做得下去,較好的解決了單元測(cè)試“落地”的問(wèn)題。同時(shí),對(duì)于一直以來(lái)困擾企業(yè)單元測(cè)試實(shí)踐的幾個(gè)核心問(wèn)題,諸如:編寫測(cè)試代碼花銷較高、高標(biāo)準(zhǔn)的測(cè)試覆蓋難以實(shí)現(xiàn)等等,都提供了對(duì)應(yīng)的解決方法,使得其對(duì)提高代碼質(zhì)量和開(kāi)發(fā)效率及測(cè)試效率、降低測(cè)試成本有很大的促進(jìn)作用。
[1]余艷.軟件單元測(cè)試技術(shù)研究[D].武漢:華中科技大學(xué),2004. Yu Yan.Software unit testing technology research[D].Wuhan: HuazhongUniversityofScience and Technology,2004.
[2]黃錚.基于Junit的自動(dòng)單元測(cè)試環(huán)境開(kāi)發(fā)及應(yīng)用研究[D].上海:上海交通大學(xué),2005. Huang Zheng.Based on the development and application of the automatic test environment unit Junit[D].Shanghai: Shanghai JiaoTongUniversity,2005.
[3]豐勵(lì).單元測(cè)試技術(shù)研究與應(yīng)用[D].武漢:華中師范大學(xué),2008.Feng Li.Research and application of unit testing technology [D].Wuhan:HuazhongNormal University,2008.
[4]陳靜.單元測(cè)試在軟件開(kāi)發(fā)過(guò)程中的作用[J].艦船電子對(duì)抗2006,6(4):31-32. Chen Jing.The role of unit testing in software development [J].shipboard electronic warfare 2006,6(4):31-32.
[5]聚光科技.單元測(cè)試指導(dǎo)手冊(cè)[J].聚光科技股份有限公司,2010,13(1):19-20. Focusing technology.Unit test guidance manual[J].spotlight Polytron Research ofTechnologies Inc,2010,13(1):19-20
[6]王陳,左雪梅,黃燁明.實(shí)時(shí)嵌入式系統(tǒng)平臺(tái)自動(dòng)測(cè)試工具[J].計(jì)算機(jī)應(yīng)用,2004,23(29):7-8. Wang Chen,Zuo Xuemei,Huang Yeming.Automatic testing tool for real-time embedded system platform[J].computer application,2004,23(29):7-8.
[7]CemKamer,Jack FaIk,HungQuoc Nguye,著.計(jì)算機(jī)軟件測(cè)試[M].王峰,陳杰,喻琳,譯.北京:機(jī)械工業(yè)出版社2004. Cem Kamer,Jack FaIk,Hung Quoc Nguyen Write,.Computer software testing[M].Wang Feng,Chen Jie,Yu Lin translation.Beijing:Mechanical IndustryPress,2004.
[8]趙斌.軟件測(cè)試技術(shù)經(jīng)典教程[M].北京:科學(xué)出版社,2007. Zhao Bin.Software testing technology classic tutorial[M]. Beijing:Science Press,2007.
Research on Linux Project Unit Testing Method Based on VisualUnit
Tang Yuechuan,Peng Rufeng,Tu Xiaoli
(Chongqing Jinmei Communication Co.,Ltd.,Chongqing 400030,China)
This article firstly introduces basic features of VisualUnit,and then particularly details the methods of building Linux project test engineering by the tool.Finally,the author summarizes and analyses techniques and problems of the tool in using.The tool is applied to project tests and achieves good results.
Visual testing;Embedded system;Unit test;White-box test;Test project;Test instrument
10.3969/j.issn.1002-2279.2017.02.012
TP311
B
1002-2279-(2017)02-0052-04
唐躍川(1983-),男,重慶市人,軟件工程碩士,主研方向:軟件測(cè)試。
2016-10-25