Windows文件系统自动化测试框架的研究与设计

时间:2022-09-14 10:30:45

Windows文件系统自动化测试框架的研究与设计

摘要:随着软件规模的庞大,程序量和复杂度在不停地增长,测试工作变得越加艰巨,自动化软件测试可以在一定程度上减少测试开销,同时增加在有限时间内的测试。文章在单元测试框架CPPUnit的基础上开发了Windows文件系统的自动化测试框架,将CPPUnit从单元测试领域扩展到功能测试和非功能测试领域,设计的框架不仅可以支持文件系统的功能回归测试,而且可以支持文件文件系统的部分非功能测试,结果用XML文件保存并可在Web上浏览,论文详细的阐述了该自动化测试框架的结构以及设计模式,该设计思路对于研究文件系统自动化测试工具有一定的参考价值。

关键词:软件工程;软件自动化测试;功能测试;CPPUnit;回归测试;文件系统

中图分类号:TP309.05文献标识码:A文章编号: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

软件测试是发现软件错误、提高软件可靠性与保证软件质量的重要手段,是软件公司致力于提高软件产品质量的重要手段之一。测试具有一定的重复性,主要体现在回归测试中。任何一个软件测试项目后期都需要进行回归测试,可能是由于修正缺陷,也可能是由于软件不断升级而新加功能、增强功能。回归测试就是要验证已经实现的大部分功能。为了消除代码改动所造成的影响而要进行大量的测试。虽然回归测试找到软件缺陷的可能性小,效率比较低,但又是必要的、不可缺少的。如果由手工完成不断重复的回归测试,会在很大程度上降低测试工作的趣味性。如果由测试工具完成回归测试,将会解放测试人员,会是一件非常有意义的事。所以在测试过程中,测试工具是必需的。

1 文件系统的测试

操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。文件系统是整个操作系统中重要的组成部分,是操作系统正常运行的基本条件。

Windows和Linux是目前使用最多的两种文件系统,Windows可以支持的文件系统有FAT12,FAT16,FAT32和NTFS等;而Linux系统核心可以支持十多种文件系统类型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。

Linux的广泛使用使得其虚拟文件系统机制VFS越来越得到人们的认识和了解,而在Windows下的可安装文件系统IFS机制却不为很多人熟悉。实际上,该机制允许通过编制文件驱动程序来支持新的文件系统。

文件驱动程序是一种高层内核模式驱动程序,其安装过程与其他内核模式驱动程序基本相同,但其属于“File System”或者“Boot File System”驱动程序组。文件驱动程序需要在初始化完成时通过IoRegisterFileSystem例程向I/O管理器登记为文件驱动程序以便能够管理磁盘文件卷,他支持文件系统控制请求,这些文件系统控制请求将由I/O管理器发送给文件驱动程序。主要功能是实现Create/Open,I/O操作以及Close操作等诸多流程的处理。

在实际应用中,在Linux和Windows系统之间会存在数据交换的需要。在Linux下可以支持对Windows常见文件系统的访问,而反之在Windows系统下就有一定的困难。但是,如果借助与结合IFS机制开发支持Linux分区的文件驱动程序,就可以实现在Windows下仍访问Linux下的某些文件系统了。

随着Windows在操作系统届的日益垄断,由于各种商务需要,不同的产品需要在Windows下为其开发独自的文件系统以实现各种功能需求,可安装文件系统IFS以及如何利用IFS机制编制文件驱动程序来使Windows支持新的文件系统的需求日益增加,随之增加的是对Window IFS测试的需求,但是目前尚未有完整的自动化测试框架可用于Windows IFS的测试。

在Linux下可以通过对LTP测试套件的定制对某种文件系统进行具体的功能和性能测试,LTP(Linux Test Project)是 SGI、IBM、OSDL、Bull 和 Wipro Technologies 合作的项目,目的是为开放源代码团体提供测试套件,以测试 Linux 的可靠性、健壮性和稳定性。Linux Test Project 是测试 Linux 内核和相关部件的工具的集合。目的是通过使内核测试工作自动化来帮助改进 Linux 内核。Linux Test Project 团队的成员们分享了他们对 Linux?R内核进行压力所使用的测试的方法、原理以及脚本和工具。

使用来自 Linux Test Project 测试套件可以设计Linux下文件系统的功能测试和压力测试,可对于Windows上的可安装文件系统却并没有一个通用的自动化测试框架。

2 CPPUnit自动测试框架

图1 CPPUnit基本框架类关系图

CppUnit是个基于LGPL的开源项目,最初版本移植自JUnit,是一个非常优秀的开源测试框架,它是xUnit系列中的C++实现版本,第一个移植版本由Michael Feathers完成,是操作系统相关的,是一个已经被多数程序员采用和实证的优秀的测试框架,基本类结构如图1所示。

CppUnit和JUnit一样主要思想来源于极限编程(XProgramming)。主要功能就是对测试进行管理,并可进行自动化测试。

3 Windows文件系统测试框架的设计

3.1 功能概要

本文设计的Windows文件系统自动化测试框架WFSTester是建立在单元测试工具CPPUnit的基础上,他扩展了CPPUnit的功能,实现了功能测试的自动化,以测试驱动开发的新软件理论搭建了Windows文件系统的测试框架。测试框架的流程如图2所示。

图2 WFSTester流程图图3 Windows虚拟文件系统

Linux下的虚拟文件系统Virtual File System(或者被称为Virtual File system Switch或者VFS)为Linux下的各种文件系统提供一个通用的接口,它属于内核软件层,用来处理与标准文件系统有关的所有系统调用。其强壮表现在能为各种文件系统提供一个通用的接口。Windows虽然封装了内核,但是在实现上它也有虚拟文件系统的概念,也可支持多种文件系统,如FAT和NTFS,该文件系统也为Windows下的各种文件系统提供了接口。

3.2 框架设计

对Windows文件系统的调用可以通过组合Windows API实现,从系统角度来看,文件系统的功能主要有文件的创建,存入、读出、修改、转储文件,控制文件的存取,删除文件等。在WFSTester的框架设计中,根据测试所调用的Windows API函数以及其各种可能组合,引用边界值分析法设计测试用例,边界值分析是考虑边界条件而选取测试用例的一种黑盒测试方法,是对等价类划分方法的补充。实践证明,软件在输入、输出域的边界附近容易出现差错,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。

这里主要针对不同功能需求所调用的Windows API函数的输入和输出设计测试用例,并根据测试用例的特点将用例分类,组成一组组的测试套件,在套件的基础上再进行分类,以便于测试更好的执行。

在基于CPPUnit基础上的WFS测试框架设计中,引入了如下几个概念:

1) TestCase:测试用例,是WFSTester中原子级测试单位,是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便核实是否满足某个特定需求,如图4所示。

2) TestSuite:测试套件,由若干个同类的TestCase可以组成一个TestSuite,如图4所示。

3) TestModule:测试模块,可以包含多个TestCase或TestSuite,通过多次反复调用一个或一组测试用例,用于实现系统的性能测试和压力测试,如图4所示。

4) TestIntercurrent:并发测试块,并发调用一个或一组测试用例,用于实现系统的并发性测试。

其中TestCase和TestSuite是CPPUnit中原有的概念。

图4 WFS测试框架

在WFS测试框架下,设计的测试用例包含Windows 文件系统范围内的Windows API函数:

1) 单独调用的每个Windows API函数

如CreateFile()共有七个函数,该函数根据输入参数的不同可以实现创建一个文件并返回创建文件的句柄或打开一个文件并返回该文件句柄等功能,利用等价类划分和边界值分析法,然后将各种可能参数进行组合,作为函数的输入域,根据不同的输入确定返回值,每一种不同的输入和输出作为一个测试用例TestCase,每个TestCase需要一个setup()和teardown()函数为每个TestCase搭建准备环境和处理相应的收尾工作,每个TestSuite中的所有的TestCases共用相同的setup()和teardown()函数。

2) 组合调用的多个Windows API函数组合

分析测试的功能点所可能调用的各种函数的组合,如调用Windows API函数CreateDirectory()创建一个目录,在该目录下调用CreateFile()函数创建一个文件并以可读可写的方式打开该文件的句柄,再调用WriteFile()函数在该文件中写入部分内容,调用CloseFile()函数关闭文件句柄后再调用DeleteFile()函数删除该文件这样一系列的操作,利用等价类划分法,将各种可能组合进行等价类划分,在此基础上再次利用等价类划分和边界值分析法,对各种可能组合的输入参数进行组合,作为函数的输入域,根据不同的输入确定返回值,每一种不同的输入和输出作为一个TestCase,而每种函数的组合作为一个TestSuite,其下层可以再次定义多个子TestSuite,在子TestSuite中的所有的TestCases共用相同的setup()和teardown()函数。

3) 并发调用的单个Windows API函数

列出单个可并发调用的函数,如CreateFile()和CreateFile(),DeleteFile()和DeleteFile()等,即在一个线程创建文件的时候有另一个线程也在创建该文件,或在一个线程删除一个文件的时候另一个线程也在删除该文件,对诸如此类的函数设计测试用例来测试文件系统的并发性。

4) 并发调用的多个Windows API函数组合

这个很容易理解,是单个可并发调用函数的扩展,如WriteFile()和DeleteFile(),CreateDirectory()和RemoveDirectory()等,即在一个线程在写文件的时候有另一个线程想要删除该文件,或在一个线程创建目录的时候有另一个线程想要删除该目录等。

5) 重复调用的单个Windows API函数

对单个API函数进行重复调用,如对一个文件多次读写等操作。

6) 重复调用的多个Windows API函数组合

对多个API函数组合重复调用,如重复调用如下函数的组合:调用CreateFile()函数创建一个文件后,调用WriteFile()函数向该文件写数据,然后调用DeleteFile()函数删除该文件。

对于文件系统的性能测试和压力测试的设计需要根据文件系统的特性分析性能测试和压力测试的指标,如文件读写的性能,并发处理的性能等设计相应的测试用例,例如可通过多个TestCase的多线程并发来设计并发性测试,或反复多次的执行某些指定的TestCases来进行压力测试。

3.3 测试结果记录和导出

对于自动化测试,结果的记录和导出是很重要的。WFSTester可以借助CPPUnit输出纯文本格式,以编译器兼容方式和XML格式的结果。

除此之外,还需要记录性能测试和压力测试的结果。并将结果生成图片以便与查看Bugs的分布和性能测试的结果。

4 结束语

WFSTester的开发平台是VC 6.0 IDE,使用C++语言,参考MSDN的Windows API,分析文件系统通用功能,设计测试用例,不仅可以完成功能测试,而且可以完成部分性能测试和压力测试,利用测试驱动开发的基本思想,在用户在写好测试用例之后进行代码的开发,并针对各功能分别进行第一时间的测试工作,保证开发质量,提高开发效率。

参考文献:

[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] 朱少民. 全程软件测试[M].北京:电子工业出版社,2007.

[5] 邓正宏,高逦,郑玉山. 面向对象自动化测试框架的研究与设计[J].微电子学与计算机,2005,22(2):169-172 .

上一篇:独立学院计算机专业《C++程序设计》教学中的问... 下一篇:基于数据仓库的一种通用ETL工具的设计与实现