总第228期 计算机与数字工程 Computer&Digital Engineering Vo1.36 No.10 78 2008年第1O期 软件测试研究综述 张靖贲可荣罗云锋 武汉430033) (海军工程大学计算机系摘要软件测试是一个涉及开发周期各阶段的活动,不同阶段的测试目标各异。软件测试研究面临一系列的挑战。 论文介绍了由已有成就、需要解决的关键技术和四个最终愿景三部分构成的软件测试研究技术框架。综述了已有的技术途 径并指出软件测试需要深入研究的关键技术。 关键词软件测试挑战研究方向 中图分类号TP311 Overview on Software Testing Research Zhang Jing Ben Kerong Luo Yunfeng (Department of Computer Science,Naval University of Engineering,Wuhan 430033) Abstract Software testing is a broad term encompassing a variety of activities along the development cycle and be・ yond,aimed at different goals.Hence,software testing research faces a collection of challenges.A consistent roadmap of the most relevant challenges to be addressed is here proposed.In it,the starting point is constituted by some important past achievements,while the destination consists of four identified goals to which research ultimately tends,but which re— main as unreachable as dreams. Key words software testing,challenges,research tends Class Number TP31 1 1 引言 当今社会的发展已经越来越离不开计算机的 应用,在经济生活的各个方面,包括交通、通信、社 阶段,针对不同目标设计相关的测试用例,例如:揭 示与用户需求不一致、评估与标准规范的一致性、 评估负载状态或恶意输入时的适应性、度量性能、 可用性和使用可靠性等等。软件测试由观察测试 会保障等各行各业,信息处理、信息交换都以计算 机系统的应用为基础。在军用方面,现代信息技术 也使得军事对抗更加信息化、电子化,军用软件更 是成为武器装备的重要组成部分。对那些涉及安 用例执行,和提供测试报告两部分构成。通过以下 六方面刻画测试: Why(理由):为什么进行测试?这个问题由测 试目的决定,如:寻找故障,研究产品是否可发布, 评价用户界面的可用性等。 How(方法):需要测试哪些项,如何进行选择? 这是测试选择问题,可以随机选择,也可以应用算 全和保密方面的关键系统,军用软件的质量越发显 得重要[1 。因此,在软件生存周期过程中应用先进 的质量管理技术是提高军用软件的开发水平,获得 高质量软件产品的重要保证。 从开发人员进行的单元测试到客户对大型信 法或统计技术选取。测试用例、测试策略对测试效 果有重要影响。 息系统的确认测试都属于软件测试活动。在不同 How much(程度):应该如何挑选被观测的样 收稿日期:2008年4月17日,修回日期:2008年6月18日 基金项目:海军工程大学自然科学基金项目(编号:HGDJJ060202)资助。 作者简介:张靖,女,讲师,研究方向:软件测试。贲可荣,男,博士,教授,博士生导师,研究方向:软件测试,软件质量 保证,人工智能等。罗云锋,男,博士生,研究方向:软件质量保证,软件工程。 第36卷(2008)第1O期 计算机与数字工程 本(测试选择),选取多少作为用例(测试充分性或 终止准则)?覆盖率分析和可靠性度量可以解决这 个问题。 线; ・中间是当前和未来的测试研究面临的关键 技术。这些关键技术是实现愿景的方向,是路线图 中最重要的部分。 图1给出了软件测试技术框架l_2]。成熟的研 究主题在左侧,关键技术处于中间位置,最终目标 What(要素):执行什么?可以把被测系统作 为一个整体,或仅侧重于它的一部分观测其执行情 况(单元测试,部件/子系统测试,集成测试),这引 出测试的不同级别,并说明测试大型系统时桩程序 的必要性。 愿景在右侧。四条水平的区域确定了实现愿景 的研究路线,它们是:1)通用的测试理论;2)基于测 试建模;3)100 自动测试;4)效率最大化的测试工 Where(何处):在哪里执行测试?这个问题与 执行内容紧密相关,可以在净室、模拟环境或者最 终的目标环境里进行测试。测试嵌入式系统时这 个问题是最关键的。 程。该路线是自底向上有序排列:理论是该模型的 基础,理论需要自动化,自动化有助于降低测试工 程的成本。关键技术横跨6个垂直带,原因、方法、 程度、要素、何处、何时描述了软件测试的特征(没 有特定的顺序)。图1中横向依赖于愿景,纵向是 软件测试问题描述。下面将讨论该框架中的现状 和愿景。 When(何时):在产品生命周期中什么时刻执行 测试?传统的观点是,越早越好,因为故障排除的成 本随着生命周期不断增加。还有些研究针对那些依 赖周围环境,在实验室里往往不可预料的系统,只有 系统被配置和使用后才可能做有意义的测试。 以上问题提供了一个简单且直观的软件测试 活动的特征模式,为今后的关键技术研究建立了路 线图。 3软件测试技术概述 测试是一个贯穿整个开发过程的持续活动。 它的目标是度量和评估软件的属性和性能。图1 的左侧描述了软件测试已获得的研究成果。 3.1测试过程模型 2软件测试研究技术框架 软件测试研究技术框架为实现最终的愿景提 供了方向。组织如下: ・软件测试过程模型用于定义软件测试的流程 和方法,测试过程的质量将直接影响测试结果的准 已有研究中最显著的成就构成现状(有些工 四个梦想构成了愿景:用梦想这个词是因为 确性和有效性。测试过程模型研究使“测试设计思 想”更系统化。已经有一些测试过程模型被工业部 门采用,其中V模型清晰地展示了动态测试的全 部过程,并定义了动态测试与开发之间的关系;W 模型是 模型的 发展,它强调测试 作仍在进行中); ・这些都是渐近目标,四个梦想确定了研究进展路 原因 l I方法 l l程度 I l要素 l I何地 I I何时 应伴随着整个软 件开发周期,并指 出测试的对象不 仅仅是程序,需 圈 基于模型的测试 ====工]=二二 网圈 求、设计等文档同 样需要测试;H模 型将测试活动视 基于反模型的测试 为一个完全 的活动,具有完全 测试效率 的流程。在 测试实验 实际测试中,可根 愿景 关键技术 据不同的测试任 务要求,综合利用 图1技术框架 各模型[ 。 80 张靖等:软件测试研究综述 第36卷 3.2面向对象的测试 面向对象软件最初希望对象可以无需额外测 试地重用,但人们很快意识到,不仅已有的测试方 法要应用于O0代码,由于()()的发展还引入了新的 风险,S ̄Dl:i了测试难度。尤其是由于()()开发的核 心机制,封装使得许多错误被隐藏,使得测试更加 困难;继承需要对继承的代码进行重测;多态性和 动态绑定需要新的覆盖模型。此外,在处理复杂领 域的类问静态和动态依赖关系时,还需要适当的策 略来有效地增加集成测试。 3.3基于构件的测试 基于构件的开发是一种使用较少资源进行快 速软件开发的方法。构件的开发者和复用者必须 对构件进行充分的测试,以确保它在新的环境中工 作正常。构件测试有着自身的固有特点:不能对构 件的执行环境和用户的使用模式进行完全准确的 预测,因此构件开发者不能完全、彻底地对构件进 行测试,并且很难确定何时结束测试;构件复用者 和第三方测试人员通常无法得到构件的源代码及 详细的设计信息,通常只能对构件进行黑盒钡0试, 无法检查执行过程中的构件的内部状态,使得构件 执行过程中的一些故障被隐藏。这些困难对构件 测试提出了严峻的挑战。 3.4可靠性测试 随着软件应用日益广泛,软件可靠性变得越来 越重要。尽管可靠性测试不能根除故障但它为系 统可靠性提供了依据。可靠性测试需从用户角度 出发,模拟用户实际使用系统的情况,设计系统的 可操作视图,在此基础上,根据输入空间的属性及 依赖关系导出测试用例,然后在仿真或真实环境下 执行测试用例并记录测试数据。根据测试数据,应 用可靠性模型,可以得到系统的失效率及可靠性增 长趋势。业界流行的可靠性模型有很多种。黑盒 方面的Musa基本执行模型,Jelinski—Moranda的 故障分离模型,NHPP模型,贝叶斯判定模型等;白 盒方面Mathur的基于路径的模型和Gokhale基 于状态的模型等。文献[3]主张在净室的发展过程 中,应用统计测试方法生成可靠性度量。 3.5协议测试 协议是管理分布式系统各部件通信的规则。这 些规则需要准确地说明以促进互操作性。协议测试 目的是验证协议的执行与它们的规格说明之间的一 致性。规格说明由标准化组织或公司团体发布。在 负载推动下协议测试的研究在软件测试领域沿着单 独的或者说特殊的轨迹发展。由于存在精确的基于 状态的规格说明,可以尽早开发用于一致性测试的 高级形式化方法和工具。协议测试的结论受到严格 定义的应用领域的,它们不易应用于通用软件 测试。在远程构件或服务之间的正确交互方面也存 在相同问题。因此软件测试研究可以学习协议测试 的做法,采用标准的形式化规约,这也是当前面向服 务的应用系统的发展趋势。从概念上区分协议测试 与一般性测试正在逐渐被淡化。 4软件测试研究方向 本节讨论软件测试的研究方向,并指出每个方 向的关键技术。 4.1方向一:通用测试理论 长久以来测试研究的一个梦想是:构建可靠且 全面的理论来支持和丰富测试技术。基于“通用” 测试理论即一致且严格的框架,测试人员可以了解 已有测试技术的相对优势和局限性,在给定条件 下,选出最合适的一种或几种技术。软件测试理论 开创性工作要追溯到上世纪七十年代晚期首次提 出可靠的或理想的测试套件的概念。这些工作告 诉我们:测试永远不够精确。通用测试理论需要关 注下面的关键技术。 4.1.1 明确测试假设 考虑到测试基于近似法,即测试等同于对执行 采样,因而通用测试理论应该清楚地描述各种测试 技术的前提假设,这就是测试假设。测试假设判断 通用和直观的测试活动,比如判断有限测试集的选 择方法。除少数形式化的测试方法,测试假设通常 是不明确的,因此明确测试假设至关重要。如果依 据选定的测试准则(test criterion)进行穷举测试, 若测试活动成功完成,可以得出结论:系统在给定 假设下是正确的。此概念类似于协议测试中的“故 障模型”,测试套件保证对给定故障模型的覆盖率。 多数通用测试方法的假设是均匀性假设(假设软件 在每一个测试域里均匀地运行)和正则性(规律性) 假设。测试假设应根据测试目的模块化,如进行可 靠性测试和调试等情况应使用不同的理论/假设。 4.1.2测试效率 为了建立有用的测试理论,需要评价已有测试 准则和新的测试准则的有效性。为了了解准则在 不同故障分类中的有效性,需要通过额外的研究提 供解析的、统计的和实验的证据,以判断其在揭示 故障方面的有效性。当前普遍认为组合使用多种 第36卷(2008)第1O期 计算机与数字工程 81 技术比单一技术更为有效,即使这种技术被认为最 有效的。因为每种技术可能针对不同类型的错误, 还可能受到饱和效应的影响。 4.1.3组合测试 4.2.1基于模型的测试 不断增加的软件系统复杂性和高质量需求,使 传统的测试在技术上难以进行,开销上难以接受。 随着面向对象软件开发技术的广泛应用和软件测 试自动化的要求,基于模型的软件测试逐渐得到重 软件复杂性不断增加使得测试更加困难。传 统上,测试复杂性已经被等价类划分策略所解决。 过去有很多研究关注组织和执行组件聚合方面的 测试策略的技术和工具。例如已提出一些策略来 视。其特点是:产生测试用例和评价测试结果都是 根据被测试软件的模型及其派生模型(测试模型) 进行。基于模型的软件测试方法可以有效地提高 生成测试顺序,使得测试过程中需要的驱动模块和 桩模块最少。基于组件的开发方法以及动态系统 组合方法使得此问题越来越明显。 Blundell提出将假设一检验(assume—guaran— tee)推理验证技术应用于测试。这种技术通过检 查单个构件推理全局系统属性。既然可以验证单 个构件,则需要对其上下文做出假设,假设一检验验 证检查构件在假设上下文中的行为属性是否正确, 然后在假定组件正确的前提下检查系统上下文是 否正确。 我们需要了解如何重用在测试部件时获 得的测试结果(单元或部件或子系统),特别是对于 由组件构成的系统可以得到什么样的结论,在集成 系统上还需要运行哪些附加的测试用例。 4.1.4测试实验 近期的测试技术实验得出一个悲观的结论,有 超过半数现有(测试技术)知识是基于印象和感觉 的,毫无任何形式化基础。通过实验为测试提出一 个基于构造和进化的知识经验体,需要研究各种因 素,尽早估计故障位置及原因,合理分配测试资源。 因此要在规模、主题和环境方面进行有意义的实 验。但是实验很昂贵,可能的解决方法是联合几个 研究组织的力量,做分布式和大范围的实验。也就 是开放式实验的思想,这种想法已在推广,并已经 建立起了一些共享数据库和分布式实验环境。 4.2方向二:基于测试的建模 基于模型测试是利用软件设计时定义的模型 驱动测试过程,特别是自动生成测试用例。使用符 号语言如UML或Z进行建模。从测试人员的角 度出发,理想情况应是将顺序颠倒过来:不是利用 模型进行测试,而是构造模型有效地测试软件,将 当前“基于模型的测试”改为“基于测试的建模”。 已有的工作或多或少已包含了这种基于测试 的建模思想。“可测试性设计”就是其中一种,通过 设计提高软件的可控性和可观察性。还有基于断 言的测试和基于合约(Contract)的测试。 测试效率,提高测试用例生成的自动化程度,进行 测试失效辨识,也有利于评价测试结果。典型模型 包括:有限状态机、UML模型和马尔可夫链等[4]。 基于反模型测试是一种新型的测试形式。与 基于模型的测试方法不同,它直接分析程序执行结 果,从程序的主动或被动执行中搜集信息,并将一 些相关的属性数据或行为进行组合。 4.2.2测试谕示 测试谕示与测试计划紧密相关。明确如何生 成测试用例,对每个测试用例给出明确的期望输 出,通过观察测试输出给出软件合格/不合格的判 断。测试谕示问题在实践中没有给与充分的关注, 谕示的精度和有效性严重影响了测试成本和效果。 需要研究实现和自动化测试谕示的方法,整合所有 可获得的信息。 4.3方向三:100 自动测试 随着软件数量和复杂性的增加,自动化成为一 种保证软件质量的方法。大部分现有测试研究针 对提高自动化程度,通过研究先进的技术来产生测 试输入,或自动化测试过程。100 自动测试是一 个强大的集成测试环境,作为软件的一部分被完善 和配置,可以自动地产生或恢复所需的桩代码(驱 动、桩程序和模拟器)生成最合适的测试用例,执行 并最终发布测试报告。 4.3.1测试输入生成 自动生成测试输入的研究所产生的影响有限, 工业领域很大程度上仍然依靠手工生成测试输入。 随着符号执行、模型检验、定理证明、静态和动态分 析等理论的成熟,工业强制标准的推行和计算能力 的进步,离自动生成测试输入的目标越来越近了。 基于模型的方法、随机生成方法和多种多样的基于 搜索的技术已经广泛应用于白盒和黑盒测试生成。 4.3.2领域相关的测试方法 领域相关语言作为一种有效的解决方案有助 于满足领域专家表达抽象规格说明的苛刻需求,并 且可以被自动转换成最优的实现方案。这种严格 82 张靖等:软件测试研究综述 第36卷 定义的领域相关的需求也使测试受益。研究应该 着眼于如何让领域知识改进测试过程。需要将领 域相关方法扩展到测试阶段,并且找到领域相关方 法和工具推进测试自动化。领域相关测试可以使 用专门的方法、过程和工具。这些方法反过来要用 到可定制的建模和转换T具,这与基于测试的建模 关键技术有重叠之处。已有的领域相关测试技术 包括:数据库、图形用户界面的可用性、网络应用程 序、航空电子和通信系统等。 4.3.3在线测试 传统测试方法是检验系统是否按照预期方式 运行,一种新的测试概念是使用动态分析和自测试 技术监控系统实际运行时行为。运行时监控已经 存在了超过30年,软件系统不断增加的复杂性和 普遍存在的特点使得运行时监控重新受到关注。 这个术语并不统一,监控运行时测试和联机测试都 在使用。这些方法都关注软件在领域内的行为,目 标是检验它们是否按照设定的行为执行,检测故障 或性能问题。有些研究尝试联机恢复,还有一些研 究分析脱机行为来产生剖面或获取可靠性指标。 在线测试的一个特点是不需要为被测系统设计测 试套件来激励系统,只需要被动的观察发生了什 么。通信协议测试中的监测方法被称作被动测试。 追踪报文在实际通道中的交换,将观察到的模式与 设定模式相比较。原则上,在线测试方法内在的被 动性使得它们没有主动方法有效。 4.4方向四:测试效率最大化 软件测试研究的最终目标是应用测试方法、工 具和过程开发高质量的软件。测试效率最大化面临 的最大障碍是现代系统不断增加的复杂性。这种复 杂性不仅影响了系统本身,也影响系统配置环境。 可测试性是比系统怎样建模更广泛的一个概念,它 还涉及到实现特征,测试技术本身以及其支持环境。 4.4.1 演化控制 工业领域常使用回归测试确保程序或环境变 化不会影响系统的正常功能。但由于回归测试高 额的成本,需要采取有效的技术减少回归测试的数 量,将回归测试用例进行分类并且自动地执行测试 用例。兼顾效率和有效性,常用的回归测试方法包 括重测全部用例、基于风险选择测试、基于操作剖面 选择测试和再测试修改部分等。回归测试中也可以 综合运用多种测试技术提高测试结果的可信性。 4.4.2 平衡用户总数与资源 当传统的脱机测试技术无效时,可以通过在线 测试方法对系统进行连续的测试。由于软件密集 型系统在不同环境和配置中运行差别巨大,需要相 应增加在线测试以覆盖所有可能的行为。一种新 兴的方法是从领域中动态搜集数据,增加内部质量 保证活动。这种方法能帮助展现系统实际的应用 范同,揭示实际问题,使测试活动关注这些实际问 题,并了解测试的不足。例如:通过给每个用户不 同的缺省配置,用户可以更快地揭示配置冲突问 题;领域剖面可以用来改进给定的测试套件。此领 域还有一些亟待解决的问题,如何利用少量的系统 开销从正在运行的程序中搜集运行时数据?如何 存储和处理搜集到的原始数据从而有效的提取相 关信息?如何有效的利用收集到的数据来增强和 改进内部测试和维护活动? 4.4.3测试成本问题 由于测试的风险、安全性及成本的,我们 希望将测试费用与测试过程和技术相结合。软件 测试相关文章都强调测试是一个高成本的活动,却 缺乏最新且可靠的参考依据。为了有效地进行研 究需要量化软件测试技术的直接和间接费用。但 大多数软件测试研究都采取价值中立的立场,假设 每一个被发现的故障同样重要或需要相同的费用, 这个假设显然是不正确的,因此需要把经济价值融 入测试过程,以帮助测试人员选择最适当的测试方 法。Boehm提出了基于价值的软件工程(VBSE) 方法,其中包括以价值为基础基于风险的测试。测 试中需要将估算的功能成本/现有的测试技术的效 率比相结合。关键的问题是:应如何最高效的使用 有限的测试预算? 4.4.4软件测试人员的培训 除了有效的先进技术和工具以及高效的流程 外,测试人员的技能、决心和动机是导致测试成功 与否的关键。测试人员应当通过培训了解测试的 基本概念、局限性和现有技术的可行性。通过建立 技术培训流程提高团队的测试成熟度[5]。 4.5方向五:新范型和新环境下的软件测试 4.5.1新范型测试 面向服务的体系架构(S(_)A,Service—Oriented Architecture)已成为基于Web的分布式系统(如 电子商务、电子政务等)的主要发展趋势。S()A提 出了一种松散耦合的、基于标准的、面向服务的体 系架构,以有效解决分布式、异构环境下,应用系统 的集成问题。传统的软件测试技术难以适应Web (下转第93页) 第36卷(2008)第1O期 计算机与数字工程 6)确定空问数据挖掘的目标 法的不足,提出了基于Agent的分布式空间数据挖 根据用户的要求,确定空间数据挖掘发现知识 的类型。 掘系统结构图,并介绍了其挖掘过程。这种模式尤 其是用于移动用户、移动数据库和移动计算环境, 具有广阔的应用前景。 参考文献 7)确定知识发现算法 选择合适的知识发现算法,包括选取合适的模 型和参数,并使得知识发现算法和整个空间数据挖 掘的评判标准相一致。 [1]Han J,Koperski K,Stefanovic N.GeoMiner:A system prototype for spatial data mining[M].In:Proc. ACM SIGMOD Int.Conf.on Management of Data,Tuc son.Arizona,l997:560 ̄563 8)数据挖掘 运用选定的知识发现算法,从数据库中提取用 户需要的知识,这些知识可以用一种特定的方式表 示,如产生式规则。 9)知识融合 [2]庄艳,陈继明,等.基于Multi—agents系统的分布式 数据挖掘I-j].计算机科学,2007,34:163~167 [3]Kotz D,Gray R S.Mobile Agents and the Future of the Internet[J].ACM Operating Systems Review,1999, 33(3):7~13 将各相关站点服务器上所获得的局部知识,用某 种策略对其评价并将其整理、融合,形成整体知识。 10)知识表示 将分布式SDM后所获得的整体知识的图形、 [4]Lange D B。Oshima M.Seven.Good Reasons for Mobile AgentsEJ].Communications of the ACM,1999,42 (3):88--89 数据、列表等形式表达给用户。 6 结语 分布式空问数据挖掘目前已经成为一个备受 关注的热点问题。本文针对现有空问数据挖掘算 矫 ’ 芾 不 矫 不 矫 [5]Sharma L K,Vyas O P,Tiwary U S,eta1.A No— vel Approach of Multilevel Positive and Negative Associa— tion Rule Mining for Spatial Databases[C].MI DM,2005: 620~629 铞 矫 不 . 铞 . 不 不 (上接第82页) 服务的技术发展。服务的测试通常涉及到服务提供 者、发布者和使用者三种角色,其分布式合作的特征 J 多士{五 当日 口 使得测试的组织、缺陷管理、结果评估等活动都更加 困难。除服务的发布者外,其余角色由于缺乏设计 随着软件应用范围的不断扩大和人们对软件 质量要求的不断提高,软件测试越来越受到重视。 和实现的信息,需要使用黑盒技术进行测试。目前 主要采用基于模型的技术实现web服务相关协议 和描述的验证。通过、veb服务的XM[ 说明转化成 由已有成就、最终愿景和需要解决的关键技术三部 分构成的软件测试研究技术框架让我们了解现有 技术和亟待解决的难题,为进一步研究指明了方 向。 参考文献 形式化的模型(如有限状态机模型,Petri网模型等), 借助模型检测器(Model Checker)等自动化工具,验 证协议和服务描述的完整性和一致性L6J。 4.5.2功能和非功能属性的一致性测试 [1]6JB 2434A.军用软件产品评价[sj.2004 [2]Antonia Bertolino.Software Testing Research:A— ehievements,Challenges,Dreams,Future of Software En— 大部分软件测试致力于功能测试,即检查所观 察到的行为是否与规格说明相一致。但是,这还不 足以保证被测软件真正的有效性和充分性,最重要 gineering(FOSE 07)[C_.IEEE Computer Society,2007 的是,优秀的软件一定要满足非功能特性,这些非 功能特性由具体的应用领域决定。值得注意的是, 传统的功能测试不能提供时问的概念,软件展现的 许多行为特征什么时候产生结果或者产生此结果 需要多久。与此问题相似,功能测试不能解决资源 [3]贲可荣,张志祥,张秀山,译.净室软件工程一技术 与过程[M].北京:电子工业出版社,2001 [4]颜炯,王戟,陈火旺.基于模型的软件测试综述[j]. 计算机科学,2004,31(2):184 ̄187 [5]张靖,赵种,贲可荣.测试成熟度模型及其评估算法 lJ].舰船电子工程,2007,27(1):81~83 使用情况和负荷问题,在如电信这样的具体领域, 性能问题是主要的故障类型。 [6]白晓颖,赵冲冲,戴桂兰.Web服务测试研究[J]. 计算机科学,2006,33(2):252 ̄256