技术与市场 第18 ̄g2期2011年 掳 醵凌 软件测试技术浅析 张云岗,刘舂茂 (河南工业职业技术学院,河南南阳摘473009) 要:描述了软件测试的基本概念及其重要性和必要性,阐述了软件测试的静态测试、动态测试等测试方法,vA及软件 -测试的一般过程和步骤:并且探讨了软件测试的发展趋势及其新的研究动向,最后总结了软件测试中应该注意的一些实 际问题。 关键词:软件测试;黑盒测试;白盒测试;集成测试;回归测试 doi:10.39696.issn.1006—8554.201 1.02.O13 0引言 随着社会的不断进步和计算机科学技术的飞速发展,计算 机在人类生活中的作用越来越重要了,而软件作为计算机的灵 魂,起着举足轻重的作用。软件的失效有可能造成巨大的经济 损失,甚至危及人的生命财产安全。由于软件开发的各个阶段 都需要人的参与,因为人的工作和通信都不可能完美无缺,出 现错误是在所难免的。而软件测试则能够发现软件中隐藏的许 多错误和缺陷,因此软件测试是保证软件质量和可靠性的重要 手段。 1 软件测试 软件测试是为了发现错误而执行程序的过程。或者说, 软件测试是根据软件开发各阶段的规格说明和程序的内部结 构而精心设计的一批测试用例f即输入数据及其预期的输出 结果),并利用这些测试用例去运行程序,以发现错误的过 程。 另外,需要指出的是软件测试是提高软件产品质量的必要 条件而非充分条件,软件测试是提高产品质量最直接、最快捷 的手段,但绝不是一个根本手段。 2软件测试的方法 软件测试的方法原则上可以分为两大类,即静态测试和动 态测试。静态测试是对被测软件进行特性分析的方法的总称, 主要特点是:不利用计算机运行被测试的软件,而针对需求说 明、设计文件等文档和源程序进行人工检查和静态分析,以保 证软件质量。静态测试能够有效地发现软件中30%到70%的逻 辑设计错误和编码错误。动态测试是在计算机上实际运行被测 试的软件,通过选择适当的测试用例,判定执行结果是否符合要 求,从而测试软件的正确性、可靠性和有效性。动态测试的两种 主要方法是白盒测试和黑盒测试。 白盒测试是对软件内部工作过程的细致检查,它允许测试 人员利用程序内部的逻辑结构及有关信息,设计或选择测试用 例,对程序所有逻辑路径进行测试。通过在不同测试点检查程 序的状态,确定实际的状态是否与预期的状态一样,因此,白盒 测试又称为结构测试或逻辑驱动测试。白盒测试一般选用可以 有效揭露隐藏错误的路径进行测试,所以如何设计软件测试用 例是这种方法的关键。 黑盒测试则着眼于软件的外部结构,不考虑程序的逻辑结 构和内部特性,仅依据软件的需求规格说明书,在软件界面上检 查程序的功能是否符合要求,因此黑盒测试又叫做功能测试或 数据驱动测试。用黑盒测试发现程序中的错误,必须在所有可 能的输入条件和输出条件中确定测试数据,来检查程序是否都 能产生正确的输出。 白盒、黑盒测试不能相互替代,而应互为补充,在测试的不 同阶段为发现不同类型的错误而灵活选用。 3软件测试过程 软件测试过程一般按五个步骤进行,即单元测试、集成测 试、系统测试、验收测试和回归测试,如图l所示: 模块 \测 系 用 综 统 尸 合 竺 冗- 兀 需 信 素 求 息 模块 \测试 0~ ^ ~ ~ 系统 验收 同归 测试 测试 测试 已组装 使}}】 町堂付 的软件 的软件 的软件 模块 \测试 图1 软件测试过程图 3.1单元测试 单元测试是指依据详细的设计描述,对每一个功能相对独 立的程序模块进行测试,检查各个单元是否正确地实现规定的 功能。单元测试一般在完成某一程序模块的编程后由程序员 立即进行,主要对程序内部结构进行检验,着重发现和解决代码 编写过程中的差错,多采用白盒测试法。 3.2集成测试 集成测试,也叫组装测试或联合测试。是指一个应用系统 的各个部件的联合测试,也就是在将单元测试无误的程序模块 组装成软件系统的过程中,对程序模块间的接口和通讯方面的 正确性的检查,以决定他们能否在一起共同工作并没有冲突。 其中的部件可以是代码块、独立的应用程序、网络上的客户端 或服务器端程序。这种类型的测试尤其与客户服务器和分布式 系统有关。集成测试一般在完成了软件的所有或大部分编码工 作后,由不同开发人员共同完成,是在单元测试完成之后进行 的。 21 攮孝:哥发 TECHNoLoGY AND MARKET Vo1.1 8,No.2,201 1 3.3 系统测试 巧的 工作,稍有不慎就会顾此失彼,出现疏漏。不论是黑盒测试 方法还是白盒测试方法,由于测试内容数量巨大,都不可能进 系统测试是将通过集成测试的软件作为一个元素,在实际 运行环境中,与计算机硬件、外设、某些支持软件、数据和人员 等元素结合在一起,对整个软件系统进行的测试。与前两种测 试不同,实施系统测试的人员应是最终用户代表。其目的是通 过与系统的需求相比较,发现所开发的系统与用户需求不符或 矛盾的地方,从而提出更加完善的方案。 3.4验收测试 行彻底的测试。所谓彻底测试,就是让被测程序在一切可能的 输入情况下全部执行一遍。通常也称这种测试为“穷举测试”。 在实际测试中,穷举测试工作量太大,实践上行不通,这就 注定了一切实际测试都是不彻底的。当然就不能够保证被测试 程序中不存在遗留的错误。软件测试的总目标是充分利用有限 的人力和物力资源,高效率、高质量地完成测试。要认真研究测 试策略,以便能使用尽可能少的测试用例,发现尽可能多的程 序错误。 6软件测试过程中应注意的问题 验收测试是向未来的用户表明系统能够像预定要求那样 工作。经系统测试后,已经按照设计把所有的模块组装成一个 完整的软件系统,接口错误也已经基本排除了,接着就应该进 一步验证软件的有效性,这就是验收测试的任务,即软件的功 能和性能如同用户所合理期待的那样。其目的是确保软件准备 就绪,并且可以让最终用户将其用于执行软件的既定功能和任 务。 3.5 回归测试 回归测试是指修改了旧代码后,重新进行测试以确认修改 没有引入新的错误或导致其他代码产生错误。回归测试作为软 件生命周期的一个组成部分,在整个软件测试过程中占有很大 的工作量比重,软件开发的各个阶段都会进行多次回归测试。 在渐进和快速迭代开发中,新版本的连续发布使回归测试进行 得更加频繁,而在极端编程方法中,更是要求每天都进行若干 次回归测试。因此,通过选择正确的回归测试策略来改进回归 测试的效率和有效性是非常有意义的。 4软件测试技术的发展趋势 随着IT彳亍业和软件的发展,软件趋向大型化、高复杂度,一 些软件测试的基础理论和实用技术开始形成,并且人们开始为 软件开发设计了各种流程和管理方法,软件开发的方式也逐渐 由混乱无序的开发过程过渡到结构化的开发过程,以结构化分 析与设计、结构化评审、结构化程序设计以及结构化测试为特 征。这时,软件测试定义发生了改变,测试不单纯是一个发现错 误的过程,而且将测试作为软件质量保证(SQA)的主要职能,软 件开发人员和测试人员开始一起来探讨软件开发与测试问题 了。从软件开发及测试的发展过程来看,软件测试的发展趋势 向软件开发的前期发展与软件开发的设计和编码阶段相融合。 即在软件开发和设计阶段考虑软件的后期测试问题,从而设计 出便于后期测试的软件,这样软件本身包含的缺陷就会相应减 少,将会给后期的软件测试带来诸多便利。 于是就出现了软件易测试性设计,软件易测试性设计将有 效地提高软件测试的效率和质量,提高软件设计和编程的质 量,进而提高软件产品的质量。软件的易测试性设计方法包括 合约式设计、内建式测试和内建式自测试等几种方法。 5软件测试技术新的研究动向 软件测试是一项费时、费力并且单调乏味的活动,测试人 员需要设计、执行、分析大量的测试用例。软件测试的自动化将 有效地减轻测试人员的劳动强度,提高测试的效率和质量,从 而节省软件开发的成本,提高软件的质量。 大多数人以为,开发一个程序是困难的,测试一个程序则 比较容易,其实不然。设计测试用例是一项细致并需要高度技 要想成为好的测试人员,首先要了解被测试软件的相关知 识;了解软件产品的架构是什么样的;了解软件的市场需求,在 接触软件之初可以多看看用户的反馈信息,这些才是用户最关 心的,也是在测试中需要注意的问题,满足客户是最大的需要。 了解软件需求之后还应学会多读些软件系统的技术文档,软件 设计文档,这些文档可以帮助我们了解产品是如何被开发出来 的,以及投入使用后是如何工作的。还要多了解公EBus ̄中 的问题,这些存在的问题可以帮助我们了解软件产品哪些地方 存在缺陷,软件系统哪些地方会出现错误。 软件的运行离不开操作系统,如果对操作系统不熟悉,那 么有些问题我们就不能从一个更广阔的层面去考虑。学习操 作系统的知识,有助于发现缺陷,定位问题更加准确。我们还 要学习和软件系统相关的知识,比如编程,网络,数据库等。不 一定要学到非常精通,只是通过这些扩展的知识面使我们在发 现问题、解决问题上不局限在狭小的圈子里。 另外,和一切相关的人员交流,不同的交流渠道,获取的信 息是不同的,角度也不相同。因此,在测试过程中我们要多与相 关人员交流以达到测试最佳效果。 7结束语 软件测试目前呈现向软件开发的前期发展、与软件开发的 设计阶段和编码阶段相融合的趋势。软件易测试性设计技术将 帮助软件开发者在软件中嵌入测试信息,开发具有自测试能 力,并且能够向外界提供相应测试信息的软件实体(如构件), 为解决基于构件、Web Services等新技术的软件开发方法所带 来的新问题提供有前途的解决办法。 参考文献: 【l】刘瑞挺,等.软件开发的创新思维[M】.北京:电子工业出版 社.2003. 【2】朱少民.软件测试方法和技术[M1.北京:清华大学出版社, 2o05. f31徐芳.软件测试技术fM1.北京:机械工业出版社,2006. 【4】张小松,王钰,等.软件测/E[MI.北京:机械工业出版社, 2006. 【5]张克东.软件工程与软件测试自动化教程【M】.北京:电子工 业出版社.2002.