Vol.33 No.7 Computer Engineering ・软件技术与数据库・
文章编号:1000—3428(2007)07—0050—03
2007年4月
April 2007
文献标识码:A 中图分类号:TP311
Linux桌面操作系统稳定性测试
吴俊峰
1,3,齐伟民2,戴桂兰1,白晓颖3,张志强3
(1. 清华大学信息技术研究院,北京 100084;2. 漯河职业技术学院机电工程系,漯河 462000;
3. 清华大学计算机科学与技术系,北京 100084)
摘 要:稳定性测试是可信性测试中一个重要的部分,传统的稳定性测试方法不适用于桌面和交互式系统。提出了一个新的基于Linux桌面操作系统的稳定性测试框架,探讨了测试过程中存在的一些技术难点和相应解决问题的关键技术。以这个测试框架为基础开发了一个集成测试平台,结合测试实例揭露了当前Linux桌面操作系统存在的稳定性问题。 关键词:稳定性;捕捉/回放;GUI测试;桌面操作系统
Stability Test Based on Linux Desktop OS
WU Junfeng1,3, QI Weimin2, DAI Guilan1, BAI Xiaoying3, ZHANG Zhiqiang3
(1. Research Institute of Information Technology, Tsinghua University, Beijing 100084; 2. Dept. of Electric-mechanical Engineering, Luohe Occupation Technical College, Luohe 462000; 3. Dept. of Computer Science and Technology, Tsinghua University, Beijing 100084) 【Abstract】Stability test is crucial for dependability test. The traditional test methodology is not available for desktop or interactive system. The paper shows a new stability test framework based on Linux desktop operation system and focuses on some key technique difficulties and corresponding solutions. A test tool is developed by this framework and showed the problems of stability of current desktop operation systems by a test instance.
【Key words】Stability; Record/replay; GUI Test; Desktop operation system
软件稳定性的定义是一个软件系统或其元件在无效输入或压力环境的条件下运行正常的程度。在软件质量指标体系中,稳定性有其重要的固有特性,是衡量软件质量的重要指标。稳定性测试是可信性测试中一个重要的部分,它的目标是显示程序在不正当输入条件下继续正常执行的能力,即揭露软件在错误发生时处理能力的不足。 操作系统作为所有应用程序和服务运行的平台对稳定性的要求更高。操作系统的稳定性是指在有异常输入或压力条件下,系统能够继续正确运行的程度,可以看作是当从其上运行的应用、硬件层或设备驱动器引入错误时,操作系统的拒绝或反应能力的指标。操作系统稳定性测试的研究具有相当长的历史,进行了一些在理论和实践上均有重要价值的研究。Fuzz[1]针对Unix软件可靠性,使用了随机输入测试的原理。Ballista[2]通过有效和无效输入结合的方法生成测试集,提出了把错误分成5级。RIDDLE[3]是测试NT视窗系统稳定性的环境,通过随机输入、恶意输入和边界值条件的组合作为程序合法的文法进行测试。这些研究的缺点都不适用于图形介面。Linux Test Project是SGI、IBM和OSDL等合作的测试Linux健壮性的项目,但仅局限于内核部分。 本文提出了一个基于桌面Linux的稳定性测试框架,并根据这个框架实现了一个测试平台,通过进行实例研究揭示了当前桌面Linux存在的稳定性问题。 对时间t的导数;(3)平均故障时间MTTF(t),两个故障间的平均间隔时间,MTTF(t)=1/Fi(t)。 为了评测稳定性,通常采集两类失效数据:失效计数数据和失效间隔时间数据。前者是单位时间内检测到的失效次数,后者通过检测失效并记录失效次数而直接得到。 在实际测试中,需要考察如下3个参数:(1)成功率:指在特定的测试场景的前提下,通过测试的测试用例的比率,即测试用例通过数/测试用例总数。(2)压力指标:描述设定的压力环境,如希望考察系统在CPU和内存高使用率的情况下的表现,就需要设计相应的测试用例达到指定的利用率。常用的参数有:CPU处理数据的时间;内存读写数据的时间;I/O读写数据的时间;网络读写数据的时间。(3)软硬件平台参数:描述测试环境中的软硬件平台。 2 操作系统稳定性测试 在传统的稳定性测试中一个测试用例往往包含了一个输入集合和一个期望的输出集合,通过对比输入和输出即可判断测试结果,而针对于桌面操作系统的测试更多要在GUI软件上进行,输入不再是一个简单的输入数据集,而是一系列的事件序列。而且每个事件的效果有可能关系到下一个,软件运行也没有明显的输出,每个事件都影响软件的当前状态,对比期望的状态与实际的状态不能等到软件运行完毕才进基金项目:国家自然科学基金资助项目(60403022)
作者简介:吴俊峰(1982-),男,硕士生,主研方向:软件工程; 齐伟民,讲师;戴桂兰,副研究员;白晓颖、张志强,副教授
1 操作系统稳定性度量 在测试中用于描述系统稳定性的参数有以下3种:(1)平均总故障数AF(t),在一个给定的时间段内观察到的平均总故障数;(2)故障密度Fi(t),即单位时间内的故障数,Fi(t)是AF(t) —50—
收稿日期:2006-05-17 E-mail:ncfong@gmail.com
万方数据行。所以单纯的黑盒测试方法不能评估软件可靠性。 另外,GUI对象识别是GUI测试中最重要的一个步骤。由于操作系统图形界面的种类复杂,如MS Windows和Linux,它们的实现机制是完全不一样。而对于同一种操作系统(如Linux),图形界面的实现也有多种的实现方式。因此需要设计一种通用的方式进行GUI对象的识别。 在测试过程中,需要进行不同程度的系统监控和错误检测。传统的检测错误方式是记录每一个回放过程的反馈信息,并在事后通过分析日志文件发现错误。但这种事后分析的方法不适用于操作系统,所以在这里使用了连续监控技术和划分错误等级。 2.1 基于GUI的测试 GUI自动测试要能模拟桌面Linux环境下应用的各种操作的执行对系统的稳定性的影响。基本测试方式是模拟一个真实的用户情景,例如打开一个浏览器输入URL,同时打开一个文本编辑器进行输入操作等。 在GUI测试前,首先要进行建模。Atif提出了一个测试模型[4]。针对每个被测的GUI界面进行建模,将GUI当作是一组对象,包括菜单、按钮等,以及对象的属性,例如字体、可见性等。设GUI包含的对象为O={O1,O2,…,Om},这些对象的属性为P={P1,P2,…,Pl},那么GUI在某一时刻t的状态可以被视为一个集合,集合的每个元素为一个三元组(对象Oi,对象Oj的属性Pj,属性Pj的值k)。对事件定义:Sj=[si,a],表示当GUI软件处于状态si时,如果发生事件a,那么软件的状态将变为Sj。把测试用例定义为: 万方数据错误定义的分级考虑到稳定性测试的特殊性,并且结合了桌面操作系统的特点,把错误等级分成4种:(1)当待测系统主机、待测系统副机和服务器间两两失去了联系时,整个系统没有响应;(2)当待测系统主机与另外两台电脑失去联系,但副机和服务器之间依然保持通信,只有待测的系统没有响应;(3)进程发生错误而非正常中断;(4)进程出现了系统资源竞争的情况。 所有测试都是同连续监控进行,其中内核和关键域的测试更需要捕获系统资源。因此待测系统副机会每秒截取一次系统资源利用率的快照。在测试结束后,通过处理这些利用率的快照,分析连续监控和测试用例的输出,得到最终结果。 3 测试框架 为了方便地进行桌面操作系统的稳定性测试,利用文 献[1,3]中提到的研究原理和思想,并结合Linux的特性,设计了一个基于桌面Linux的稳定性测试框架,并根据此框架实现了一个测试平台进行实例研究。 传统的稳定性测试的实践方法是根据用户实际使用软件的方式,剖面生成测试数据,利用测试数据驱动软件运行,获得失效数据。然而这种方法对于桌面操作系统是不可行的,因此需要一种专用的测试框架和方法。 由于Linux采用微内核的多层结构,其稳定性主要由其各个主要组成部分的稳定性来具体体现,为了能够明确Linux各个部分的稳定性和定位缺陷可能出现的层次和位置,对Linux进行了横纵两个方向的划分,横向划分为内核、关键域和应用3个层次(图1),每个层次又纵向划分了各个测试关键点。采用由里向外的测试顺序,全面覆盖、测试关键点的测试策略。从内核开始,依次进行到应用层,这样可以保证将出现的缺陷确定在相应的层次。 邮件系统上网文件系统应用NFS办公系列进程调度内存管理核心组件网络接口虚拟文RAS…进程间件系统通信开发网络内核…防病毒系列输入/输出图1 稳定性测试框架 平台主要实现了对内核和关键域的稳定性测试,利用随机黑盒测试原理对Linux上的工具进行随机输入的稳定性测试,通过对Linux上的应用软件打开和关闭的连续组合测试其在系统资源使用率很高时的稳定性,最后针对Linux桌面操作系统中常用的应用进行GUI回放测试。 3.1 内核层和关键域 内核层测试的目的是用来验证Linux内核中的各个主要部分的稳定性,主要包括:进程调度;内存管理;虚拟文件系统;网络接口和进程间通信。 关键域着重考虑对用户关键的部分,为此相关的测试将会集中在对这些领域的测试上。这些领域涉及到Linux内核和OS的其他核心组件,主要包括:文件系统;网络文件系统(NFS);网络;远程连接服务(RAS);设备驱动程序;库(Library)和I/O。 Linux的内核和关键域需要验证操作系统中每个元件在不同的输入条件和系统资源利用率下的正确性和稳定性。测—51— 试脚本会串行地运行若干组成包的测试,并报告全部结果,也会选择同时并行地运行几个实例。主要包括:I/O测试;调试器测试;命令功能的验证测试和系统调用功能的验证测试等。这些测试都需要应用系统监控技术。 对于系统资源利用率,需要设计测试脚本并行地运行多个相似的测试用例,串行地运行不同的测试用例,这是为了避免由于同时访问同一资源或互相干扰而引起的间歇性故障。测试应包括:NFS压力测试;内存管理压力测试;文件系统压力测试;浮点数测试;多线程压力测试;硬盘I/O测试;IPC测试;系统调用功能的验证测试;网络压力测试和终端命令调用测试。 3.2 应用层 应用层是考察各种应用在Linux上的运行效果和其对操作系统的稳定性影响。根据实际情况选择特定的一些应用作为测试的重点,通过模拟用户实际应用中可能的各种操作进行测试。 操作系统软件功能的测试是软件稳定性测试的核心内容。对于非图形界面的黑盒测试,将采用文献[1]的思想,对Linux上的标准应用进行随机黑盒输入测试,检测它们在特殊的输入下对操作系统稳定性的影响。对于GUI部分,既需要模拟用户的一般行为,同时还需要考虑各种不可预知的行为,模拟用户非正常的操作。 在进行黑盒测试前,首先要确定每个软件所具有的功能。任一个软件系统,都是由若干个功能组成,这些功能之间可能存在着依赖关系,也可能互相独立的。因此,在对软件功能进行功能划分时,要确定功能之间的独立关系和依赖关系。 把软件系统定义为一个函数,则软件的输入域即为函数定义域,软件系统的输出即为函数的值域,软件功能的正确与否,可以通过运行过程中输入域与值域之间的映射关系来验证。因此,对系统中的每一个功能确定其输入域,进行基于功能对象的黑盒测试,这里使用到前面介绍的GUI测试技术和系统监控技术。 应用层在高系统资源使用率下的能力可通过测试操作系统在短时间内承受大量应用程序同时打开和关闭考察。需要着重考虑两种情况:(1)短时间内的连续开关组合;(2)打开足够多应用程序时系统的处理能力。这两种情况分别对应于操作系统短时间内收到大量任务请求和系统在紧张资源下的稳定性。 和共创2003,在统一的硬件环境上进行。 实验内容包括了内核、关键域、应用、压力和GUI测试。结果如表1所示,每组结果内的数字表示的是通过用例数/总测试用例数,只有当执行结果不在4个错误级别的范围内时,才定义为通过。 表1 4种Linux稳定性测试结果列表 内核测试 关键域测试 应用测试 压力测试 GUI测试 FC 4.0 142/153 107/117 31/31 40/40 91/102 SUSE 9.3 139/153 108/117 31/31 39/40 90/102 红旗4.0 137/153 111/117 31/31 37/40 84/102 共创2003 138/153 108/117 31/31 36/40 81/102 5 结束语 通过稳定性测试,可以发现操作系统的缺陷,并且确定出错误问题的所在。从实例研究的结果中可看出,这些系统的稳定性问题分别体现在内核或关键域等微内核部分的测试和针对于桌面应用的GUI测试上,其中内核等的测试失败主要原因是由于网络环境的限制引起,而GUI部分由于Linux厂商对桌面应用和界面的重新设计和加工而造成了不同程序的错误。 稳定性的测试结果对改善并提高桌面操作系统起到重大作用。然而,当前测试框架还存在不足:在GUI测试中只考虑了基于GNOME的接口,因此当前这部分测试的应用范围仅局限于这个环境,不能应用到Linux所有的桌面应用服务。下一步要做的工作是研究一个完善的基于Accessibility技术测试GUI的模型,这样可以提高整个测试框架的应用范围和测试效率。 参考文献 1 Miller B P, Fredriksen L, So B. An Empirical Study of the Reliability of Unix Utilities[J]. Communications of the Association for Computing Machinery, 1990, 33(12): 32. 2 Koopman P, Sung J, Dingman C, et al. Comparing Operating Systems Using Robustness Benchmarks[C]//Proceedings of the 16th IEEE Symposium on Reliable Distributed Systems. 1997: 72-79. 3 Ghosh A, Shah V, Schmid M. An Approach for Analyzing the Robustness of Windows NT Software[C]//Proc. of the 21st National Information Systems Security Conference. 1998. 4 Memon A M, Pollack M E, Soffa M L. Automated Test Oracles for GUIs[C]//Proceedings of the 8th ACM SIGSOFT International Symposium on the Foundations of Software Engineering, New York. 2000. 4 实例研究 利用上述的测试平台进行稳定性测试,在这里选用了4款常见的Linux桌面操作系统:FC 4.0,SUSE 9.3,红旗4.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (上接第46页) 参考文献 1 OGC. OpenGIS Geography Markup Language Implementation Specification[Z]. 2003. 2 OGC. OpenGIS Web Map Service Implementation Specification[Z]. 2001. 3 Peng Z R, Tsou M S. Internet GIS: Distributed Geographic Information Services for the Internet and Wireless Networks[M]. New York: John Wiley & Sons, 2003. 4 OGC. OpenGIS Web Feature Service Implementation Specification[Z]. 2005. 5 Zhang Chuanrong. The Roles of Web Feature Service and Web Map Service in Real Time Geospatial Data Sharing for Time-Critical[J]. Applications Cartography and Geographic Information Science, 2005, 32(4). 6 刘旭军, 关佶红. WebGIS应用中GML文档到SVG的转换[J]. 计算机应用, 2004, 24(2): 157-160. —52— 万方数据 因篇幅问题不能全部显示,请点此查看更多更全内容