摘要:隨著軟件規(guī)模的龐大,程序量和復(fù)雜度在不停地增長(zhǎng),測(cè)試工作變得越加艱巨,自動(dòng)化軟件測(cè)試可以在一定程度上減少測(cè)試開銷,同時(shí)增加在有限時(shí)間內(nèi)的測(cè)試。文章在單元測(cè)試框架CPPUnit的基礎(chǔ)上開發(fā)了Windows文件系統(tǒng)的自動(dòng)化測(cè)試框架,將CPPUnit從單元測(cè)試領(lǐng)域擴(kuò)展到功能測(cè)試和非功能測(cè)試領(lǐng)域,設(shè)計(jì)的框架不僅可以支持文件系統(tǒng)的功能回歸測(cè)試,而且可以支持文件文件系統(tǒng)的部分非功能測(cè)試,結(jié)果用XML文件保存并可在Web上瀏覽,論文詳細(xì)的闡述了該自動(dòng)化測(cè)試框架的結(jié)構(gòu)以及設(shè)計(jì)模式,該設(shè)計(jì)思路對(duì)于研究文件系統(tǒng)自動(dòng)化測(cè)試工具有一定的參考價(jià)值。
關(guān)鍵詞:軟件工程;軟件自動(dòng)化測(cè)試;功能測(cè)試;CPPUnit;回歸測(cè)試;文件系統(tǒng)
中圖分類號(hào):TP309.05文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)25-1467-03
Research and Design of Automatic Test Framework for Windows File System
MA Chi, XIAO Jun-mo, WANG Xue-qiang
(College of Software Engineering, Southeast University, Nanjing 210008, China)
Abstract: Test work becomes more and more arduous along with the rise of the software size, program quantity and complexity. Automatic software test can reduce the test expenses in a certain extent, at the same time it can increase the test within the limited time. Based on the CPPUnit, the author has developed an automatic test framework for Windows file system, which also extends the domain form unit test area to functional and non-functional test area. This test framework supports not only the regression testing but also some non-functional test for file system; however the test result can be save as xml files and be browsed on the Web. This paper has expatiated for the structure of the framework and design patterns in the automatic test framework. This idea has certain reference value on the research of automatic test tools for Windows file systems.
Key words: software engineering; automatic software test; functional test; CPPUnit; regression test; file system
軟件測(cè)試是發(fā)現(xiàn)軟件錯(cuò)誤、提高軟件可靠性與保證軟件質(zhì)量的重要手段,是軟件公司致力于提高軟件產(chǎn)品質(zhì)量的重要手段之一。測(cè)試具有一定的重復(fù)性,主要體現(xiàn)在回歸測(cè)試中。任何一個(gè)軟件測(cè)試項(xiàng)目后期都需要進(jìn)行回歸測(cè)試,可能是由于修正缺陷,也可能是由于軟件不斷升級(jí)而新加功能、增強(qiáng)功能。回歸測(cè)試就是要驗(yàn)證已經(jīng)實(shí)現(xiàn)的大部分功能。為了消除代碼改動(dòng)所造成的影響而要進(jìn)行大量的測(cè)試。雖然回歸測(cè)試找到軟件缺陷的可能性小,效率比較低,但又是必要的、不可缺少的。如果由手工完成不斷重復(fù)的回歸測(cè)試,會(huì)在很大程度上降低測(cè)試工作的趣味性。如果由測(cè)試工具完成回歸測(cè)試,將會(huì)解放測(cè)試人員,會(huì)是一件非常有意義的事。所以在測(cè)試過程中,測(cè)試工具是必需的。
1 文件系統(tǒng)的測(cè)試
操作系統(tǒng)中負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)稱為文件管理系統(tǒng),簡(jiǎn)稱文件系統(tǒng)。文件系統(tǒng)由三部分組成:與文件管理有關(guān)的軟件、被管理的文件以及實(shí)施文件管理所需的數(shù)據(jù)結(jié)構(gòu)。從系統(tǒng)角度來(lái)看,文件系統(tǒng)是對(duì)文件存儲(chǔ)器空間進(jìn)行組織和分配,負(fù)責(zé)文件的存儲(chǔ)并對(duì)存入的文件進(jìn)行保護(hù)和檢索的系統(tǒng)。具體地說,它負(fù)責(zé)為用戶建立文件,存入、讀出、修改、轉(zhuǎn)儲(chǔ)文件,控制文件的存取,當(dāng)用戶不再使用時(shí)撤銷文件等。文件系統(tǒng)是整個(gè)操作系統(tǒng)中重要的組成部分,是操作系統(tǒng)正常運(yùn)行的基本條件。
Windows和Linux是目前使用最多的兩種文件系統(tǒng),Windows可以支持的文件系統(tǒng)有FAT12,F(xiàn)AT16,F(xiàn)AT32和NTFS等;而Linux系統(tǒng)核心可以支持十多種文件系統(tǒng)類型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
Linux的廣泛使用使得其虛擬文件系統(tǒng)機(jī)制VFS越來(lái)越得到人們的認(rèn)識(shí)和了解,而在Windows下的可安裝文件系統(tǒng)IFS機(jī)制卻不為很多人熟悉。實(shí)際上,該機(jī)制允許通過編制文件驅(qū)動(dòng)程序來(lái)支持新的文件系統(tǒng)。
文件驅(qū)動(dòng)程序是一種高層內(nèi)核模式驅(qū)動(dòng)程序,其安裝過程與其他內(nèi)核模式驅(qū)動(dòng)程序基本相同,但其屬于“File System”或者“Boot File System”驅(qū)動(dòng)程序組。文件驅(qū)動(dòng)程序需要在初始化完成時(shí)通過IoRegisterFileSystem例程向I/O管理器登記為文件驅(qū)動(dòng)程序以便能夠管理磁盤文件卷,他支持文件系統(tǒng)控制請(qǐng)求,這些文件系統(tǒng)控制請(qǐng)求將由I/O管理器發(fā)送給文件驅(qū)動(dòng)程序。主要功能是實(shí)現(xiàn)Create/Open,I/O操作以及Close操作等諸多流程的處理。
在實(shí)際應(yīng)用中,在Linux和Windows系統(tǒng)之間會(huì)存在數(shù)據(jù)交換的需要。在Linux下可以支持對(duì)Windows常見文件系統(tǒng)的訪問,而反之在Windows系統(tǒng)下就有一定的困難。但是,如果借助與結(jié)合IFS機(jī)制開發(fā)支持Linux分區(qū)的文件驅(qū)動(dòng)程序,就可以實(shí)現(xiàn)在Windows下仍訪問Linux下的某些文件系統(tǒng)了。
隨著Windows在操作系統(tǒng)屆的日益壟斷,由于各種商務(wù)需要,不同的產(chǎn)品需要在Windows下為其開發(fā)獨(dú)自的文件系統(tǒng)以實(shí)現(xiàn)各種功能需求,可安裝文件系統(tǒng)IFS以及如何利用IFS機(jī)制編制文件驅(qū)動(dòng)程序來(lái)使Windows支持新的文件系統(tǒng)的需求日益增加,隨之增加的是對(duì)Window IFS測(cè)試的需求,但是目前尚未有完整的自動(dòng)化測(cè)試框架可用于Windows IFS的測(cè)試。
在Linux下可以通過對(duì)LTP測(cè)試套件的定制對(duì)某種文件系統(tǒng)進(jìn)行具體的功能和性能測(cè)試,LTP(Linux Test Project)是 SGI、IBM、OSDL、Bull 和 Wipro Technologies 合作的項(xiàng)目,目的是為開放源代碼團(tuán)體提供測(cè)試套件,以測(cè)試 Linux 的可靠性、健壯性和穩(wěn)定性。Linux Test Project 是測(cè)試 Linux 內(nèi)核和相關(guān)部件的工具的集合。目的是通過使內(nèi)核測(cè)試工作自動(dòng)化來(lái)幫助改進(jìn) Linux 內(nèi)核。Linux Test Project 團(tuán)隊(duì)的成員們分享了他們對(duì) Linux?誖內(nèi)核進(jìn)行壓力所使用的測(cè)試的方法、原理以及腳本和工具。
使用來(lái)自 Linux Test Project 測(cè)試套件可以設(shè)計(jì)Linux下文件系統(tǒng)的功能測(cè)試和壓力測(cè)試,可對(duì)于Windows上的可安裝文件系統(tǒng)卻并沒有一個(gè)通用的自動(dòng)化測(cè)試框架。
2 CPPUnit自動(dòng)測(cè)試框架
■
圖1 CPPUnit基本框架類關(guān)系圖
CppUnit是個(gè)基于LGPL的開源項(xiàng)目,最初版本移植自JUnit,是一個(gè)非常優(yōu)秀的開源測(cè)試框架,它是xUnit系列中的C++實(shí)現(xiàn)版本,第一個(gè)移植版本由Michael Feathers完成,是操作系統(tǒng)相關(guān)的,是一個(gè)已經(jīng)被多數(shù)程序員采用和實(shí)證的優(yōu)秀的測(cè)試框架,基本類結(jié)構(gòu)如圖1所示。
CppUnit和JUnit一樣主要思想來(lái)源于極限編程(XProgramming)。主要功能就是對(duì)測(cè)試進(jìn)行管理,并可進(jìn)行自動(dòng)化測(cè)試。
3 Windows文件系統(tǒng)測(cè)試框架的設(shè)計(jì)
3.1 功能概要
本文設(shè)計(jì)的Windows文件系統(tǒng)自動(dòng)化測(cè)試框架WFSTester是建立在單元測(cè)試工具CPPUnit的基礎(chǔ)上,他擴(kuò)展了CPPUnit的功能,實(shí)現(xiàn)了功能測(cè)試的自動(dòng)化,以測(cè)試驅(qū)動(dòng)開發(fā)的新軟件理論搭建了Windows文件系統(tǒng)的測(cè)試框架。測(cè)試框架的流程如圖2所示。
■
圖2 WFSTester流程圖圖3 Windows虛擬文件系統(tǒng)
Linux下的虛擬文件系統(tǒng)Virtual File System(或者被稱為Virtual File system Switch或者VFS)為L(zhǎng)inux下的各種文件系統(tǒng)提供一個(gè)通用的接口,它屬于內(nèi)核軟件層,用來(lái)處理與標(biāo)準(zhǔn)文件系統(tǒng)有關(guān)的所有系統(tǒng)調(diào)用。其強(qiáng)壯表現(xiàn)在能為各種文件系統(tǒng)提供一個(gè)通用的接口。Windows雖然封裝了內(nèi)核,但是在實(shí)現(xiàn)上它也有虛擬文件系統(tǒng)的概念,也可支持多種文件系統(tǒng),如FAT和NTFS,該文件系統(tǒng)也為Windows下的各種文件系統(tǒng)提供了接口。
3.2 框架設(shè)計(jì)
對(duì)Windows文件系統(tǒng)的調(diào)用可以通過組合Windows API實(shí)現(xiàn),從系統(tǒng)角度來(lái)看,文件系統(tǒng)的功能主要有文件的創(chuàng)建,存入、讀出、修改、轉(zhuǎn)儲(chǔ)文件,控制文件的存取,刪除文件等。在WFSTester的框架設(shè)計(jì)中,根據(jù)測(cè)試所調(diào)用的Windows API函數(shù)以及其各種可能組合,引用邊界值分析法設(shè)計(jì)測(cè)試用例,邊界值分析是考慮邊界條件而選取測(cè)試用例的一種黑盒測(cè)試方法,是對(duì)等價(jià)類劃分方法的補(bǔ)充。實(shí)踐證明,軟件在輸入、輸出域的邊界附近容易出現(xiàn)差錯(cuò),而不是在輸入范圍的內(nèi)部。因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查出更多的錯(cuò)誤。
這里主要針對(duì)不同功能需求所調(diào)用的Windows API函數(shù)的輸入和輸出設(shè)計(jì)測(cè)試用例,并根據(jù)測(cè)試用例的特點(diǎn)將用例分類,組成一組組的測(cè)試套件,在套件的基礎(chǔ)上再進(jìn)行分類,以便于測(cè)試更好的執(zhí)行。
在基于CPPUnit基礎(chǔ)上的WFS測(cè)試框架設(shè)計(jì)中,引入了如下幾個(gè)概念:
1) TestCase:測(cè)試用例,是WFSTester中原子級(jí)測(cè)試單位,是為某個(gè)特殊目標(biāo)而編制的一組測(cè)試輸入、執(zhí)行條件以及預(yù)期結(jié)果,以便核實(shí)是否滿足某個(gè)特定需求,如圖4所示。
2) TestSuite:測(cè)試套件,由若干個(gè)同類的TestCase可以組成一個(gè)TestSuite,如圖4所示。
3) TestModule:測(cè)試模塊,可以包含多個(gè)TestCase或TestSuite,通過多次反復(fù)調(diào)用一個(gè)或一組測(cè)試用例,用于實(shí)現(xiàn)系統(tǒng)的性能測(cè)試和壓力測(cè)試,如圖4所示。
4) TestIntercurrent:并發(fā)測(cè)試塊,并發(fā)調(diào)用一個(gè)或一組測(cè)試用例,用于實(shí)現(xiàn)系統(tǒng)的并發(fā)性測(cè)試。
其中TestCase和TestSuite是CPPUnit中原有的概念。
■
圖4 WFS測(cè)試框架
在WFS測(cè)試框架下,設(shè)計(jì)的測(cè)試用例包含Windows 文件系統(tǒng)范圍內(nèi)的Windows API函數(shù):
1) 單獨(dú)調(diào)用的每個(gè)Windows API函數(shù)
如CreateFile()共有七個(gè)函數(shù),該函數(shù)根據(jù)輸入?yún)?shù)的不同可以實(shí)現(xiàn)創(chuàng)建一個(gè)文件并返回創(chuàng)建文件的句柄或打開一個(gè)文件并返回該文件句柄等功能,利用等價(jià)類劃分和邊界值分析法,然后將各種可能參數(shù)進(jìn)行組合,作為函數(shù)的輸入域,根據(jù)不同的輸入確定返回值,每一種不同的輸入和輸出作為一個(gè)測(cè)試用例TestCase,每個(gè)TestCase需要一個(gè)setup()和teardown()函數(shù)為每個(gè)TestCase搭建準(zhǔn)備環(huán)境和處理相應(yīng)的收尾工作,每個(gè)TestSuite中的所有的TestCases共用相同的setup()和teardown()函數(shù)。
2) 組合調(diào)用的多個(gè)Windows API函數(shù)組合
分析測(cè)試的功能點(diǎn)所可能調(diào)用的各種函數(shù)的組合,如調(diào)用Windows API函數(shù)CreateDirectory()創(chuàng)建一個(gè)目錄,在該目錄下調(diào)用CreateFile()函數(shù)創(chuàng)建一個(gè)文件并以可讀可寫的方式打開該文件的句柄,再調(diào)用WriteFile()函數(shù)在該文件中寫入部分內(nèi)容,調(diào)用CloseFile()函數(shù)關(guān)閉文件句柄后再調(diào)用DeleteFile()函數(shù)刪除該文件這樣一系列的操作,利用等價(jià)類劃分法,將各種可能組合進(jìn)行等價(jià)類劃分,在此基礎(chǔ)上再次利用等價(jià)類劃分和邊界值分析法,對(duì)各種可能組合的輸入?yún)?shù)進(jìn)行組合,作為函數(shù)的輸入域,根據(jù)不同的輸入確定返回值,每一種不同的輸入和輸出作為一個(gè)TestCase,而每種函數(shù)的組合作為一個(gè)TestSuite,其下層可以再次定義多個(gè)子TestSuite,在子TestSuite中的所有的TestCases共用相同的setup()和teardown()函數(shù)。
3) 并發(fā)調(diào)用的單個(gè)Windows API函數(shù)
列出單個(gè)可并發(fā)調(diào)用的函數(shù),如CreateFile()和CreateFile(),DeleteFile()和DeleteFile()等,即在一個(gè)線程創(chuàng)建文件的時(shí)候有另一個(gè)線程也在創(chuàng)建該文件,或在一個(gè)線程刪除一個(gè)文件的時(shí)候另一個(gè)線程也在刪除該文件,對(duì)諸如此類的函數(shù)設(shè)計(jì)測(cè)試用例來(lái)測(cè)試文件系統(tǒng)的并發(fā)性。
4) 并發(fā)調(diào)用的多個(gè)Windows API函數(shù)組合
這個(gè)很容易理解,是單個(gè)可并發(fā)調(diào)用函數(shù)的擴(kuò)展,如WriteFile()和DeleteFile(),CreateDirectory()和RemoveDirectory()等,即在一個(gè)線程在寫文件的時(shí)候有另一個(gè)線程想要?jiǎng)h除該文件,或在一個(gè)線程創(chuàng)建目錄的時(shí)候有另一個(gè)線程想要?jiǎng)h除該目錄等。
5) 重復(fù)調(diào)用的單個(gè)Windows API函數(shù)
對(duì)單個(gè)API函數(shù)進(jìn)行重復(fù)調(diào)用,如對(duì)一個(gè)文件多次讀寫等操作。
6) 重復(fù)調(diào)用的多個(gè)Windows API函數(shù)組合
對(duì)多個(gè)API函數(shù)組合重復(fù)調(diào)用,如重復(fù)調(diào)用如下函數(shù)的組合:調(diào)用CreateFile()函數(shù)創(chuàng)建一個(gè)文件后,調(diào)用WriteFile()函數(shù)向該文件寫數(shù)據(jù),然后調(diào)用DeleteFile()函數(shù)刪除該文件。
對(duì)于文件系統(tǒng)的性能測(cè)試和壓力測(cè)試的設(shè)計(jì)需要根據(jù)文件系統(tǒng)的特性分析性能測(cè)試和壓力測(cè)試的指標(biāo),如文件讀寫的性能,并發(fā)處理的性能等設(shè)計(jì)相應(yīng)的測(cè)試用例,例如可通過多個(gè)TestCase的多線程并發(fā)來(lái)設(shè)計(jì)并發(fā)性測(cè)試,或反復(fù)多次的執(zhí)行某些指定的TestCases來(lái)進(jìn)行壓力測(cè)試。
3.3 測(cè)試結(jié)果記錄和導(dǎo)出
對(duì)于自動(dòng)化測(cè)試,結(jié)果的記錄和導(dǎo)出是很重要的。WFSTester可以借助CPPUnit輸出純文本格式,以編譯器兼容方式和XML格式的結(jié)果。
除此之外,還需要記錄性能測(cè)試和壓力測(cè)試的結(jié)果。并將結(jié)果生成圖片以便與查看Bugs的分布和性能測(cè)試的結(jié)果。
4 結(jié)束語(yǔ)
WFSTester的開發(fā)平臺(tái)是VC 6.0 IDE,使用C++語(yǔ)言,參考MSDN的Windows API,分析文件系統(tǒng)通用功能,設(shè)計(jì)測(cè)試用例,不僅可以完成功能測(cè)試,而且可以完成部分性能測(cè)試和壓力測(cè)試,利用測(cè)試驅(qū)動(dòng)開發(fā)的基本思想,在用戶在寫好測(cè)試用例之后進(jìn)行代碼的開發(fā),并針對(duì)各功能分別進(jìn)行第一時(shí)間的測(cè)試工作,保證開發(fā)質(zhì)量,提高開發(fā)效率。
參考文獻(xiàn):
[1] Kent Beck. Test Driven Development:By Example[M].Original English Language ed. Pearson Education,Inc,2004.
[2] David Astels. Test-Driven Development:A Practical Guide[M].Original English Language ed. Prentice Hall PTR,2004.
[3] Paul C Jorgensen. Software Testing:A Craftsman's Approach[M].Original English language ed. CRC Press LLC,2003.
[4] 朱少民. 全程軟件測(cè)試[M].北京:電子工業(yè)出版社,2007.
[5] 鄧正宏,高邐,鄭玉山. 面向?qū)ο笞詣?dòng)化測(cè)試框架的研究與設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2005,22(2):169-172 .