已阅读5页,还剩47页未读, 继续免费阅读
(计算机应用技术专业论文)软件测试技术及软件构件验证的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 本文对软件质量保证的重要手段一软件测试进行了论述,首先给 出一些基本理论,随着软件测试研究的进展,软件测试提出了一些比 较前沿的理论。如测试驱动开发,探索性测试,基于模型的测试,自 动化测试和基于构件的软件测试等。 本文重点研究构件测试问题。构件和基于构件的软件开发是目前 软件工程领域研究的热点,构件测试类似于传统的单元测试,基于构 件的软件测试则类似于传统的集成测试方法。 软件采用构件是一种为实现可扩展和可靠应用的现代化方式,为 确保高可靠性,构件应用一定要经过验证,如模型检查,来证明它具 有一定的特性。由于应用的执行常常过于复杂而难以直接证明,因此, 一个抽象执行的模型被使用。行为协议是一个为软件构件的行为建模 的平台。使用详尽的模型状态空间来评价复合构件间的横向依从和纵 向依从关系是相当费时的,目前协议检查机版本的限制状态空间在1 0 8 的大小内,在某些情况下是不够的,相比较而言,s p i n 是目前最先进 的模型检测机。 在这篇文章中,提出了一种方法,将行为协议转变成p r o m e l a ( 过 程元语言p r o c e s sm e t al a n g u a g e 的缩写) 作为s p i n 模型检测机的输 入,采用s p i n 来对构件进行验证。由于使用了代码来描述构件行为, 就可以有效地检查协作构件之间的行为兼容性和l 1 工( 线性状态逻辑) 性能。通过上述方法对由复合构件组成的软件进行测试,并说明所提 出的转换规则的有效性。 关键词:软件测试,构件验证,探索性测试,自动化测试,s p i n 模 型检测札 a b s t r a c t t h is p a p e r d is c u s s e sa n i m p o r t a n tt e c h n i q u e 。s o f t w a r e t e s ti n g ,w h i c hi su s e dt oa s s u r es o f t w a r eq u a li t y a tf i r s t , t h i sp a p e rd e s c r i b e st h eb a s i cc o n c e p t sa b o u ts o f t w a r et e s t i n g w i t ht h ep r o g r e s so fs t u d y i n gw i t hs o f t w a r et e s t i n g ,p e o p l e s h a v ep u tf o r w a r ds o m en e wt h e o r i e s ,f o re x a m p l e ,t e s td r i v e n d e v e l o p m e n t ,e x p l o r a t o r yt e s ti n g , m o d e l 一一b a s e dt e s ti n g , a u t o m a t i o no ft e s t i n g ,c o m p o n e n t b a s e d t e s t i n ga n ds oo n t h ee m p h a s e so ft h is p a p e risc o m p o n e n t b a s e dt e s ti n g c o m p o n e n t sa n dc o m p o n e n t b a s e ds o f t w a r ed e v e l o p m e n ti sa h o t s p o to fs o f t w a r ee n g i n e e r i n g c o m p o n e n tt e s t i n gi ss i m i l a rt o t h et r a d i t i o n a lu n i tt e s t i n g :c o m p o n e n t b a s e ds o f t w a r et e s t i n g i ss i m i l a rt ot h et r a d i t i o n a lm e t h o do f i n t e g r a t i o n t e s ti n g u si n gs o f t w a r ec o m p o n e n t sisam o d e r na p p r o a c hf o r b u i l d i n ge x t e n s i b l ea n dr e l i a b l ea p p l i c a t i o n s t oe n s u r eh i g h d e p e n d a b ilit y , a c o m p o n e n ta p p lic a ti o n s h o u ld u n d e r g o v e r i f i c a t i o n ,e g m o d e lc h e c k i n g ,t op r o v ei th a sc e r t a i n p r o p e r t i e s t h ei m p l e m e n t a t i o no fa na p p l i c a t i o ni su s u a l l yt o o c o m p l e xt ob ev e r i f i e da taf o r m a ll e v e l :t h e r e f o r e ,am o d e l b e i n ga na b s t r a c ti o n o ft h ei m p l e m e n t a ti o ni st ob eu s e d b e h a v i o rp r o t o c o l sa r eap l a t f o r mf o rm o d e l i n go fs o f t w a r e c o m p o n e n tb e h a v i o r b e h a v i o rp r o t o c o lc h e c k e ri sat o o lf o r e v a l u a t i o no fh o r i z o n t a la n dv e r t i c a l c o m p l i a n c e o nm o d e l s d e s c r i b e db yb e h a v i o rp r o t o c o l s e v a l u a t i o no ft h e s er e l a t i o n s e m p l o y se x h a u s t i v et r a v e r s a lo ft h em o d e ls t a t es p a c ea n dt h u s i sq u i t et i m e c o n s u m i n g t h ec u r r e n tv e r s i o no ft h eb e h a v i o r p r o t o c o lc h e c k e ri s1 i m i t e dt os t a t es p a c e so ft h es i z ei nt h e o r d e ro fm a g n i t u d eo f1 0 8s t a t e s ,w h i c hi sn o ts u f f i c i e n ti ns o m e c a s e s w h i1 et h es p i nm o d e lc h e c k e ri st h em o s ta d v a n c e dm o d e l c h e c k e r i nt h i sp a p e r ,w ep r o p o s eam e t h o df o rt r a n s l a t i o nb e h a v i o r p r o t o c o l st op r o m e l a ,w h i c hi sc o n s e q u e n t l yu s e da st h ei n p u t f o rt h es p i nm o d e lc h e c k e r h a v i n gt h ep r o m e l ac o d ed e s c r i b i n g i i t h ec o m p o n e n tb e h a v i o r ,o n e c a ne f f i c i e n t l yc h e c kf o r t h e b e h a v i o rc o m p a ti b ilit y a n dl t l ( l i n e a rt e m p o r a ll o g i c ) p r o p e r t i e s o fc o o p e r a ti n gs o f t w a r ec o m p o n e n t s t e s t t h e s o f t w a r ec o n s i s t e do fc o o p e r a t i n gc o m p o n e n t sb y t h ep r o p o s e d m e t h o d ,a n dg i v et h ev a l i d i t yo ft h et r a n s l a t i o nr u l e k e yw o r d s :s o f t w a r e t e s ti n g ,c o m p o n e n t v e r i f ic a ti o n , e x p l o r a t o r yt e s ti n g ,a u t o m a t e dt e s t i n g ,s p i nm o d e lc h e c k e r m 湖南师范大学学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独 立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论 文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的 研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人 完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 衰撤 如o g 年月仁日 湖南师范大学学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定, 研究生在校攻读学位期间论文工作的知识产权单位属湖南师范大学。 同意学校保留并向国家有关部门或机构送交论文的复印件和电子版, 允许论文被查阅和借阅。本人授权湖南师范大学可以将本学位论文的 全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫 描等复制手段保存和汇编本学位论文。 本学位论文属于 1 、保密口,在年解密后适用本授权书。 2 、不保密口。 ( 请在以上相应方框内打“ ) 作者签名: 导师签名: 日期:硼譬年石月乒日 日期:如鲜f 月户日 触矿 软件测试技术及软件构件验证的研究 1 1 选题的意义 第一章绪论 随着计算机应用日益普及和深化,软件系统已经深入到生活的各 个方面,从普通的个人常用计算机软件,到金融、通讯、邮电、水利、 航天等等重要领域的应用系统,软件已经深入到人们生活工作的各个 方面。由于软件在金融、军事、电力、交通、航天、通讯等重要领域 的应用越来越深入广泛,软件系统的规模也在持续扩大,软件复杂程 度也越来越高。在软件开发过程中,可能出现许多意想不到的严重问 题。如果设计方法不当或编程习惯不良,轻则可能造成费用失控,进 度延迟,执行代码臃肿,低效,重则可能导致项目开发完全失败。因 此如何提高软件质量,保证软件安全性是一个涉及面广,难度大的课 题。高质量软件开发技术将是打开二十一世纪高技术市场的钥匙,而 软件测试则是软件质量保证中的关键技术。 软件必须通过测试才能保证其在应用环境中工作正常,软件测试 是使用为发现错误所选择的输入和状态的组合而执行代码的过程。具 体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结 构而精心设计一批测试用例( 即输入数据及其预期的输出结果) ,并利 用这些测试用例去运行程序,以发现错误的过程。 软件系统的规模日益增大,复杂性不断提高。为了提高软件开发 的效率,提高软件重用的力度,降低软件的复杂度。出现了一种新的 基于构件的软件开发方法c b s d ( c o m p o n e n tb a s e d s o f t w a r e d e v e l o p m e n t ) 。除了软件的功能性要求之外,软件的非功能性要求,如 软件的性能、可靠性得到越来越多的重视。在基于构件的软件中,许 多都是安全攸关系统,系统的可靠性的要求更加苛刻。在基于构件的 软件中,软件通过组装第三方构件而成,构件的可靠性决定了基于构 硕士学位论文 件的软件的可靠性。 本课题的基本任务是研究构件软件系统的测试技术,提出一种转 换规则应用到构件验证中。本课题的研究对提高构件软件测试的效率 具有积极作用,有助于减少构件测试的成本。 1 2 软件测试的国内外研究动态 在国内,测试行业属于一个新兴行业,与国外测试行业相比,国 内也只是近几年才开始重视软件测试的。之所以被关注,原因也许是 多方面的,但最根本一点就是中国软件业近年来的飞速发展。 当前软件测试的问题主要体现在以下几个方面【l 】: 1 ) 测试工作的定位问题 当前软件开发流程中仍存在着“重开发、轻测试 的现象。 2 ) 测试的盲目性 软件测试至今被广大的软件从业人员认为仅仅是一个“事后措 施,在系统编码阶段结束后才开始,且没有很强的目的性。 3 ) 测试的实施者 软件系统研发没有专职测试人员参与,系统的测试完全由软件开 发人员兼任的做法是不可取的。 4 ) 组织与管理 随着软件开发规模的增大、复杂程度的增加,组织和管理日益成 为提高效率和可靠性的保证。但实际中很多公司对软件测试的管理还 处于混乱无序的状态。 5 ) 缺乏系统的能适应实际开发情况的测试理论 软件测试技术与理论之所以发展相对缓慢,其实质原因是做实际 开发工作的人和做理论研究的人脱节。 而针对基于构件的软件,目前国内外用于构件测试的主要方法有以 下几种【2 】: 1 ) 构件验i 正( c o m p o n e n tv e r i f i c a t i o n ) 软件测试技术及软件构件验证的研究 该方法由构件的开发者提供一个测试行为协议,并且制定了一系 列步骤的测试操作。测试行为协议以标准x m l 的方式来描述构件中的 实现、接口和相应的测试集等信息。用户可以在实际系统中根据该测 试行为协议进行测试,测试行为协议不受操作系统的限制,把x m l 形 式的规范转化为c 或c + + 以及j a v a 来编译执行。最后对得到的测试结果 进行分析。 这种方法可以三种方式生成测试,手工的、计算机辅助的和自动 化的,比较灵活;而且使用x m l 语言来描述测试行为协议,可移植性 比较好;支持符号执行,可以通过符号执行得到测试输出而无需实际 运行测试;允许不同的测试环境,并且有版本管理机制,但是符号的 执行速度比较慢。 在文章中会重点研究软件构件验证方法:提出将行为协议翻译成 p r o m e l a 语言的规则,采用s p i n 模型检测机作为验证复合构件有效性的 工具。 2 ) 构件确认( c e r t i f i c a t i o no fc o m p o n e n t s ) 该方法首先对构件进行基于系统剖面的黑盒测试,以确定构件具 有其声称的功能,在设计测试用例时不考虑构件的内部逻辑结构;然 后对经过黑盒测试的构件进行系统级的植错测试,通过接口植错分析 的方法来测试构件运行失败时可能出现的后果,如果构件具有良好的 健壮性和错误处理机制,在运行失败时不会造成系统崩溃,则可以使 用该构件,否则需要选择新的构件,如果必须采用当前构件的话,则 需要对构件进行包装,为构件添加一层包装( w r a p p e r ) ,以限制某些有 风险的及不必要的功能,提高构件的健壮性。 3 ) 内置测试( b u i l ti nt e s t ) 内置测试方法通过在构件的源代码中添加了用于内置测试的函 数,事实上成为一种特殊的构件,这种构件运行时具有两种模式:正 常模式及维护模式。 4 ) 回溯测试方法( r e t r o s p e c t o r s ) 硕士学位论文 该方法利用r e t r o s p e c t o r s 来记录构件执行的历史信息,以便测试者 可以利用这些测试信息。 5 ) 构件包装方法( w r a p p e r ) 该方法通过为构件添加一层保护的包装层,以探测构件执行时的 错误及异常行为,并提供异常处理机制。 1 3 主要研究内容与论文结构 软件测试经过多年的研究和实践已经形成一些软件测试公认的理 论和规范,同时c e mk a n e r ,j a m e sb a c h 等人通过不断的进行尝试,提 出新的测试理论。本文正是尝试对已有的规范和理论进行归纳总结, 并介绍一些当前软件测试的前沿理论,在此基础上对软件测试技术的 发展趋势做出预测,并且对软件测试中的一个分支构件测试中的构件 验证做了较为深入的研究。本文主要分为以下五部分: 1 ) 引言。介绍了软件测试的国内外现状,分析软件测试的重要性。 2 ) 概述。从各个方面详细阐述了软件测试:软件测试的分类按照 不同的角度有不同的分法。前沿测试技术介绍。当前,软件测试的理 论研究有了一些比较新的理论,对当今比较前沿的软件测试理论:面 向对象软件测试技术,测试驱动开发,探索性测试,基于模型的测试, 自动化测试,基于构件的软件测试等等进行探索研究。 3 ) 介绍构件的基本概念,基于构件的软件开发方法;回顾了传统 的软件测试方法,并介绍了构件测试方法存在的难点及目前国内外的 构件测试相关问题的研究进展。 4 ) 本文重点研究了构件测试方法中的构件验证技术,指定使用行 为协议,设计一个方法验证在实际应用中协作构件之间行为的相容性, 同时证明特殊构件的l 1 几( 线性状态逻辑) 性能。 在s o f a 3 1 和f r a c t a l 4 1 构件模型中,行为协议是种软件构件行为说 明书。通过行为协议对整个构件应用进行说明,可随时查阅应用构件 的行为兼容性。 软件测试技术及软件构件验证的研究 本文提出怎样使得写在行为协议中的构件行为兼容性能在 s p i n ( s i m p l ep r o m e l ai n t e r p r e t e r 的缩写) 模型检测机中被检测到;由于 s p i n 使用p r o m e l a t 5 1 作为它的输入语言,提出一个方法将行为协议转换 成p r o m e l a 语言,来测试复合构件,并讨论这种方法的好处。 5 ) 对软件测试技术的发展方向进行一些分析和展望。 软件测试技术及软件构件验证的研究 第二章软件测试研究基础 2 1 软件测试技术 2 。1 1 软件测试的定义和内容 软件测试的概念有早期定义和标准定义之分。在1 9 7 9 年出版的 软件测试艺术中的定义为:软件测试就是为了发现错误而执行程 序或系统的过程。这个定义实际上是把软件测试的目的和手段混淆了, 发现错误仅仅是软件测试的手段,软件测试的最终目的是检验实际的 软件系统是否符合用户的需求,所以不能为了发现错误而发现错误。 1 9 8 3 年i e e e 软件工程标准术语:使用人工或者自动手段,来运 行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或 弄清预期结果与实际结果之间的差别【6 】。 在g j m y e r s 的经典著作软件测试之艺术中,给出了测试的 定义:程序测试是为了发现错误而执行程序的过程。除此之外, g j m y e r s 还给出了与测试相关的三个重要观点,那就是: 测试是为了证明程序有错,而不是证明程序无错误; 一个好的测试用例是在于它能发现至今未发现的错误; 一个成功的测试是发现了至今未发现的错误的测试。 2 1 2 软件测试的目的和基本过程 1 ) 软件测试的目的 软件测试是程序的一种执行过程,目的是尽可能发现并改正被测 试软件中的错误,提高软件的可靠性。它是软件生命周期中一项非常 重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义过度 测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而 付出了过高的代价。测试是为了使软件中蕴涵的缺陷低于某一特定值, 使产出、投入比达到最大。 7 硕士学位论文 2 ) 软件测试的基本过程 软件测试是一个极为复杂的过程。一个规范化的软件测试过程通 常包括以下基本的测试活动:拟定软件测试计划;编制软件测试大纲; 确定软件测试环境;设计和生成测试用例;实施测试;生成软件测试 报告1 6 】。 2 1 3 软件测试的分类 按照不同的划分方法,软件测试可以分为以下几种类型阴。 1 ) 按照开发阶段划分 按照开发阶段划分,软件测试可以分为单元测试,集成测试,系 统测试和验收测试。 ( 1 ) 单元测试。又称模块测试,是针对软件测试的最小单位,即 程序模块进行正确性检验的测试工作。 ( 2 ) 集成测试。又称组装测试。通常在单元测试的基础上,将所 有的程序模块进行有序,递增的测试。 ( 3 ) 系统测试。是在真实或模拟系统运行的环境下,检查完整的 程序系统能否和系统正确配置,连接,并满足用户的需求。 ( 4 ) 验收测试。按照项目任务书或合同,供需双方约定的验收依 据文档,进行对整个系统的测试与评审,决定是否接受或拒绝系统。 2 ) 按照测试实施组织划分 按照测试实施组织划分,软件测试可以分为开发方测试( a 测试) , 用户测试( d 测试) 和第三方测试。 ( 1 ) 开发方测试。通常也叫做“验证测试 或“0 【测试 。开发 方通过检测和提供客观证据,证实软件是否满足规定的需求。 ( 2 ) 用户测试。在用户的应用环境下,用户通过运行和使用软件, 检测与核实软件实现是否满足自己预期的要求。 d 测试通常被看成是一种用户测试。 ( 3 ) 第三方测试。介于软件开发方和用户方之间的测试组织的测 试。第三方测试也称为独立测试。 软件测试技术及软件构件验证的研究 3 ) 按照测试技术划分 按照测试技术划分,软件测试可以分为白盒测试和黑盒测试,也 可分为静态测试和动态测试。白盒测试和黑盒测试,在实现测试方法 上既包括静态测试也包括动态测试。 软件测试方法和技术的分类与软件开发过程相关联,贯穿整个软 件生命周期。 2 2 软件测试的方法 2 2 1 静态测试 静态测试是指不实际运行被测软件,通过对需求文件,设计文件 及源程序的阅读和分析找出其中的错误或可疑之处。实践表明,大约 3 0 7 0 的逻辑设计错误和编码错误可以通过静态测试分析得出【8 l o 1 ) 桌面检查 桌面检查一般用人工方式脱机完成,由测试人员通过反复阅读源 程序和流程图,对照模块功能说明,算法和语法规则来检测程序的语 法及逻辑错误。 2 ) 代码会审 代码会审是由一组人员通过阅读,讨论和评议程序进行静态分析 的过程。会审小组通常由组长,2 3 名设计和测试专家及程序编制者 组成。会审小组在充分阅读程序文本,流程图及有关需求文档的基础 上,召开程序评审会,开展测试工作 代码会审避免了程序编制者的盲目自信和对功能需求误解的延续 性,检查实效比桌面检查要好。 3 ) 步行检查 步行检查是一种不太正式的评审过程。程序编制者引导评审小组 成员通读源程序,其他成员提出问题并对有关技术,风格,可能出现 的错误以及其他问题进行评论。 步行检查让小组成员扮演计算机的角色,通过选择一批测试用例, 硕士学位论文 作为怀疑程序逻辑与计算错误的出发点,人工进行逻辑分析以发现错 误。 使用人工静态测试可以发现大量的逻辑设计和编码错误,但代码 中仍会有隐藏的故障无法通过静态测试发现,因此除了静态测试方法, 还必须通过动态测试进行详细分析。 2 2 2 动态测试 动态测试,是指实际运行被测程序,输入相应的测试数据,检查 实际输出结果和预期结果是否相符的过程。一般意义上的测试大多是 指动态测试。我们判断一个测试属于动态测试还是属于静态测试,唯 一的标准就是看是否运行程序。 动态测试的基本思想是【9 】:将程序看作一个函数,此函数描述输 入和输出之间的关系,输入的全体称为程序的定义域,输出的全体称 为程序的值域。将定义域中的每个数值作为输入,实际运行程序,判 定执行结果是否全部包含在函数的值域中,用以检验程序的正确性, 可靠性和有效性。 一般说来,一个动态测试可以分为五个步骤: 1 ) 选取在定义域中的有效值,或定义域外的无效值; 2 ) 对已选的值确定预期的结果; 3 ) 用选取的值作为输入,执行程序; 4 ) 观察程序的执行过程,并得到其结果; 5 ) 将结果与预期的结果进行比较,如果不吻合,则证明程序存在 错误。 穷举测试方法,即将定义域中的每个值执行上述过程,以证实程 序中不存在错误,是保证软件质量的唯一方法,但不切实际,因此应 选择尽可能覆盖定义域的具有代表性的子集进行测试。 在动态测试中,如某段程序中发现了较多的错误,则应对该段程 序重点测试,因为程序中的错误往往是成堆出现的,程序的某个部分 的错误可能比其他部分要多得多。 软件测试技术及软件构件验证的研究 2 2 3 白盒测试及主要测试方法 白盒测试。又称为结构测试【1 0 1 。通过对程序内部结构的分析,检 测来寻找问题。白盒测试可以把程序看成装在一个透明的盒子里,也 就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是 正确的,检查软件内部动作是否按照设计说明的规定正常进行。 白盒测试法的覆盖标准有:逻辑覆盖,循环覆盖和基本路径测试。 其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、 条件组合覆盖和路径覆盖。 语句覆盖:为了暴露程序中的错误,程序中的每条语句至少应该 执行一次。 判定覆盖:设计足够多的测试用例,使得程序中的每个判定至少 都获得一次“真值 或“假值”,或者说使得程序中的每一个取“真” 分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖。 条件覆盖:条件覆盖的含义是构造一组测试用例,使得每一判定 语句中每个逻辑条件的可能值至少满足一次。 判定条件覆盖:同时满足判定覆盖条件覆盖。 条件组合覆盖:每个判定中各条件的每一种组合至少出现一次。 路径覆盖:使程序中每一条可能的路径至少执行一次。 2 2 4 黑盒测试及主要测试方法 黑盒测试:通过软件的外部表现来发现其缺陷和错误【1 1 1 。黑盒测 试法把测试对象看成一个不透明的盒子,完全不考虑程序内部结构和 处理过程,只是检查程序是否按照需求规格说明书的规定正常实现。 黑盒测试的测试用例设计方法包括: 1 ) 等价类划分方法:是把所有可能的输入数据,即程序的输入域 划分成若干部分( 子集) ,然后从每一个子集中选取少数具有代表性的 数据作为测试用例。 2 ) 边界值分析方法:边界值分析方法是对等价类划分方法的补充。 长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围 1 1 硕士学位论文 的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情 况设计测试用例,可以查出更多的错误。 3 ) 错误推测方法:基于经验和直觉推测程序中所有可能存在的各 种错误,从而有针对性的设计测试用例的方法。 4 ) 因果图方法:因果图方法最终生成的就是判定表,适合于检查 程序输入条件的各种组合情况。 黑盒测试的测试用例设计方法还包括有判定表驱动分析方法,正 交实验设计方法,功能图分析方法,流程图法等。 2 2 5 回归测试 回归测试可以就一套已经安装好并且在运行的服务器进行测试, 也可以就制作树里面临时安装的服务器进行测试【1 2 】。详细些说,有“并 行”和“串行”运行测试之分。串行模式顺序运行每个测试,而并行 模式激活多个服务器进程,并行j 运行一组测试。并行测试使我们对 进程内部通讯和锁的正确工作有足够的信心。 每当一个新的模块被当作集成测试的一部分加进来的时候,软件 就发生了改变。新的数据流路径建立起来,新的i l o 操作可能也会出 现,还有可能激活了新的控制逻辑。这些改变可能会使原本工作得很 正常的功能产生错误。在集成测试策略的环境中,回归测试是对某些 已经进行过的测试的某些子集再重新进行一遍,以保证上述改变不会 传播无法预料的副作用【1 3 】。 2 3 当今软件测试的前沿理论 2 3 1 面向对象的软件测试 面向对象技术是一种全新的软件开发技术,正逐渐代替被广泛使 用的面向过程开发方法,被看成是解决软件危机的新兴技术。但是尽 管面向对象技术的基本思想保证软件应该有更高的质量,但实际情况 却并非如此,因为无论采用什么样的编程技术,编程人员的错误都是 不可避免的,而且由于面向对象技术开发的软件代码重用率高,更需 软件测试技术及软件构件验证的研究 要严格的测试,避免错误的繁衍【1 4 1 。 每次复用是一个新的使用语境,要谨慎的重新测试。为了获得面 向对象系统的高可靠性,可能将需要更多的而不是更少的测试【1 5 】。因 此,软件测试并没有因面向对象技术的兴起而丧失掉它的重要性。 面向对象技术所独有的多态,继承,封装等新的特点,产生了传 统语言设计所不存在的错误可能性,或者使得传统软件测试中的重点 不再显得突出,或者使得原来测试经验认为和实践证明的次要方面成 为了主要问题【1 6 1 。 由于面向对象软件的封装性导致其没有传统结构化程序的层次式 控制结构,单元测试失去了本身的多数意义,传统的自顶向下和白底 向上的集成测试策略也有了较大的改变【1 7 1 。 因此,面向对象软件测试的策略和战术有了很大不同,测试的焦 点也从过程构建移向类。 2 3 2 测试驱动开发n 阳 测试驱动开发( t e s t - d r i v e nd e v e l o p m e n t ) 是极限编程的重要特点, 它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。 测试驱动开发是以测试作为开发过程的中心,它要求在编写任何 产品代码之前首先编写用于定义产品代码行为的测试,而编写的代码 又要以使测试通过为目标,测试驱动开发要求测试可以完全自动化地 进行,这是一种前所未有地开发方式,测试驱动开发是一种在极限编 程( ) 中处于核心地位的技术。测试驱动开发强调程序员除了编写代 码,还应该编写单元测试代码。在开发的顺序上,它改变了以往先编 写代码,再编写测试的过程,而采用先编写测试,再编写代码来满足 测试的方法。这种方法使得测试工作不仅仅是单纯的测试,而成为设 计的一部分。 硕士学位论文 传统的开发流程 测试驱动开发 图2 - 1 测试驱动开发 测试驱动开发的基本思想就是在开发功能代码之前,先编写测试 代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能 进行测试,并完成测试代矿:j 勺编写,然后编写相关的代码满足这些测 试用例。然后进行添加其他功能, 动开发大体上经历以下几个阶段: 直到完成全部功能的开发。测试驱 不可运行写一个不能工作的测试 程序,一开始这个测试程序甚至不能编译。可运行一尽快让这个测试 程序工作,为此可以在程序中使少一些不合情理的方法。重构一消除 在让测试程序工作的过程中产生的重复设计,优化设计结构。 2 3 3 探索性测试n 鲫 在敏捷测试( a g i l et e s t i n g ) 中,探索性测试是作为一个重要组成 部分而出现的,把“对系统的探索”和“对系统进行测试 结合在一 起,敏捷测试可以利用探索性测试达成“敏捷 的目标【2 1 1 。 一般来说,探索性测试具有这样的一些特点: 1 ) 探索性测试强调测试设计和测试执行的同时性一这个“同时” 是相对于传统软件测试过程中严格的“先设计,后执行”来说的; 2 ) 测试工程师通过测试来不断学习被测系统; 3 ) 探索性测试的重点是创造。 探索性测试只是一种方法和思路,并不是一个确定的过程。因此, 在使用探索性测试时,在认为合适的时候进行探索性测试更加有效。 软件测试技术及软件构件验证的研究 2 3 4 基于模型的软件测试 软件模型是对软件行为和软件结构的抽象描述。一般对软件不同 行为要用不同模型进行描述。基于模型的软件测试可以根据软件行为 模型和结构模型生成测试用例。当前软件规模庞大,基于模型的软件 测试方法不仅可以有效地提高测试效率,提高测试例生成的自动化程 度,进行测试失效辨识,也有利于评价测试结果。 软件测试中使用的典型模型有:有限状态机、u m l 模型和马尔可 夫链等模型【2 0 1 。 基于模型的软件测试存在以下缺点: 测试人员需要具备一定的理论基础,如状态机理论和随机过程的 知识还要掌握相关工具使用方法。需要一定的前期投入,如模型的选 择、软件功能划分、模型构造等。 有时无法克服模型的固有缺陷,如状态爆炸,这对检验、评审和 维护模型都提出了要求,也直接影响了测试自动化。状态爆炸问题一 般通过抽象和排除方法减小测试规模,降低测试难度来解决。 现有的基于马尔可夫链的统计测试多数应用于通用商业软件开 发,很少用于超高可靠性软件测试。如何把统计测试应用于超高可靠 性软件是统计测试得到进一步应用的关键。 2 3 5 自动化测试1 2 1 】 所谓自动化测试就是希望能够通过自动化测试工具或其他手段, 按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的 劳动量,从而达到提高软件质量的目的【2 3 1 。测试自动化的引入有一定 的标准,要经过综合的评估,绝对不能理解成测试工具简单的录制与 回放过程。 自动化测试能提高测试效率,但对于周期短、时间紧迫的项目不 宜采用自动化测试。推行自动化测试的前期工作相当庞大,将企业级 自动化测试框架应用到一个项目中也要评估其合适性,因此决不能盲 目的应用到任何一个测试项目中,尤其不适合周期短的项目,因为很 1 s 硕士学位论文 可能需要大量的测试框架的准备和实施而会被拖跨。 引入自动化测试工具,并不意味着就能成功地实施自动化测试。 而且,大量的实践证明,基于只使用一种捕获工具来录制并且回放测 试用例而得出自动化测试工作量是有缺陷的。只使用一种捕获工具来 运行复杂而且巨大的测试是非常耗费时间和昂贵的。因为这些测试是 随机创建的,他们的功能性是很难追踪和重现,而且维护成本也是非 常昂贵的。 2 3 6 基于构件的软件测试 构件和基于构件的软件测试具有很重要的现实意义,将在本文下 一章做深入研究。 软件测试技术及软件构件验证的研究 第三章构件和基于构件的软件测试 3 1 构件概述 3 1 1 构件的概念 构件的概念最早出现在1 9 6 8 年软件工程会议上,有人提出了“软 件组装生产线 的想法,明确了软件构件化的发展趋势。采用软件构 件技术的主要目的是实现软件的重复使用。软件复用是指重复使用“为 了复用目的而设计的软件”的过程,具体包括:早期的函数复用、面向 对象言语中类的复用,以及互联网时代完整软件体系的构件复用【2 2 】。 九十年代中后期,面向对象技术的出现和互联网时代的到来,为 软件构件技术的研究和应用提供了良好的技术支持和实践平台,构件 的概念得到了更大的扩充,由当初的子程序到现在的系统级抽象,构 件技术正在走向成熟。面向对象技术对一组类的组合进行封装,隐藏 了具体的实现细节,只是通过接口向外提供服务和请求环境的服务。 互联网的出现,大大增加了应用软件的复杂性,软件开发人员采用分 层的思想,通过将一个大的系统分割成不同层次的模块,并采用构件 的方式来实现这些模块,然后将这些构件组装成为一个大的系统软件, 不仅达到了合理分工,提高工作效率的目的,而且这样做出来的系统 还具有很高的质量【2 3 1 。 随着构件技术的不断发展,构件技术已经与分布式计算、嵌入式 计算以及移动计算等紧密结合,构件技术已广泛运用到软件基础架构 的设计与开发中。使用软件构件技术可以很方便地进行构件的替换和 升级,降低了系统的系统复杂度,从而可以对系统进行分而治之,并 且易于实现可重用【2 4 1 。 采用高质量的构件可以提高软件系统的可靠性,降低软件维护的 代价。反之,则会带来灾难性的后果。因此,当工程人员决定采用第 硕士学位论文 三方的软件构件产品时,必须首先确定所选择的构件具有他需要的功 能,其次,还要确定可复用的构件可以工作在新的程序环境下。基于 构件的软件,是由一些自包含的、松耦合的、允许“即插即用 的构 件遵循一定的原则组装而成。这些构件可能是采用不同的程序语言来 实现、在不同的平台上运行或者分布在不同的主机上。基于构件的系 统的开发由三个要素组成:构件、构件模型以及基于构件的软件工程 过程【2 5 1 。 构件技术的发展促进了软件生产效率的提高。因为应用系统的开 发不再一切“从头开始 ,而是充分利用已经存在的构件族,减少了包 括分析、设计、编码、测试在内的许多重复劳动,从而提高了软件开 发效率,同时避免了可能引入的新错误。 可是,当前的构件技术还是存在许多需要进一步改善的地方,譬 如传统的构件描述与检索方式,由于缺乏丰富的构件语义信息描述, 面临着用户难以精确检索到与需求匹配的构件资源,无法满足网络计 算的移动特性,不能很好地实现资源共享和复用的目的。同时,伴随 复杂业务流程和构件重用的日益增多,出现越来越多的功能丰富、内 部逻辑复杂的大粒度构件。大粒度构件增加了表现形式、内部逻辑和 交互过程的复杂度,同时为构件等价性判断、构件检索和复合验证带 来困难【2 6 】。 基于构件的软件的目标是在系统内创建工作良好的高聚合的模 块,通过不同任务模块的分离,降低构件之间的耦合度。这就要求系 统设计人员从一个对象规范向显式定义对象依赖的表达进行相应的转 变,并通过为依赖定义接口来实现面向对象原理的扩展。有人把构件 定义为“软件构件是一个仅带特定契约接口和显示语境依赖关系的组 合单元,软件构件可以独立部署,易于第三方组装。根据这个观点, 可以认为构件由一方定义其规格说明,被另一方实现,然后提供给第 三方使用。接口是用户与构件发生交互的连接渠道,第三方只能通过 构件接口的规范理解和复用构件,接口规范也是一种“契约,它能够 软件测试技术及软件构件验证的研究 精确的描述构件实现的功能,同时又不限定构件具体的实现方法,这 种不确定性带来实现的灵活性。另一方面,虽然构件可以独立部署, 但是一个构件可以用到其他构件或平台提供的服务,或者说基于构件 的软件系统中通常是多个构件协作完成一定的功能,因此构件依赖于 组装环境2 刀。 3 1 2 构件的特点 构件是定义了良好接口的物理实现单元,它是系统中可替换的部 分。每个构件体现了系统设计中特定类的实现。良好定义的构件不直 接依赖于其他构件而依赖于构件所支持的接口。在这种情况下,系统 中的一个构件可以被支持正确接口的其他构件所替代。 构件具有它们支持的接口和需要从其他构件得到的接口。接口是 被软件或硬件所支持的一个操作集。通过使用命名的接口,可以避免 在系统中各个构件之间直接发生依赖关系,有利于新构件的替换【2 羽。 构件视图展示了构件间相互依赖的网络结构。构件视图可以表示成两 种形式,一种是含有依赖关系的可用构件( 构件库) 的集合,它是构 造系统的物理组织单元。它也可以表示为一个配置好的系统,用来建 造它的构件已被选出。在这种形式中,每个构件与给它提供服务的其 他构件连接,这些连接必须与构件的接口要求相符合。 每个构件实现( 支持) 一些接口,并使用另一些接口。如果构件 间的依赖关系与接口有关,那么构件可以被具有同样接口的其他构件 替代。 由于使用者所处的背景、对构件的理解、抽象层面以及具体实现 的技术的不同,所以对构件的理解有所差别,但也有共性,即都强调 软件构件的独立性、互换性和可操作性。综合上述定义,构件应具备 以下几个特征【2 9 l : 1 ) 构件是可独立配置的单元,因此构件必须自包容; 2 ) 构件通过接口输出其功能,外界仅能通过接口访问构件; 3 ) 构件是一些对象类组成的物理意义上的包,支持对象意义上的 硕士学位论文 封装性、多态性; 4 ) 构件是具有特定功能,支持互操作的对象,它可以在跨越地址 空间、网络、语言、应用程序、开发工具和操作系统的异构环境下被 调用,或者同其它构件协同工作,实现“即插即用”; 5 ) 构件遵循二进制标准,其实现不依赖于某种高级语言,可以用 面向对象和非面向对象语言实现; 6 ) 构件可以在适当的环境中被复合使用,因此构件需要提供清楚 的接口规范,可以与环境交互; 7 ) 构件不应当是持续的,即构件没有个体特有的属性,即构件不 应当与自身副本区别; 8 ) 构件是可配置和共享的,这是基于构件开发的基石,且构件之 间能相互提供服务。 构件的特征是构件开发的指南。构件一般是在设计和实现阶段由 一些类或者模块组成的群组,其强调功能的相对独立和良好的接口, 每个构件提供一个特定的功能。多个构件组装起来共同实现软件的功 能就形成软件系统。在建立一个构件时应该考虑:构件是完整的;构件 是一些类的群组,它们共同解决一个问题【3 0 】。 在具体应用框架中,我们对软件构件的一般意义进行了扩展,在 继承了面向对象的特征的同时,强化了它的领域内的功能特征,构件 的粒度也比一般意义的大。 3 2 构件组装技术 近年来,对于构件组装技术的研究和应用正朝着多角度、全方位 的方向发展。有的人主张从软件体系结构的角度来研究构件组装技术, 有的人则从基于a g e n t 的角度来研究构件组装技术,还有的人希望能 够开发出一种构件组装自动机,从而达到构件组装自动化的目标,等 等。构件组装技术己经在图形用户界面设计、第四代语言和编译器构 造等成熟领域中取得了一定程度的成功。 软件测试技术及软件构件验证的研究 目前,围绕构件组装技术:,学术界和商业界在如下几个方面进行 了研究和实践【3 1 1 。 1 ) 构件规范的研究,如前面谈到的三种标准规范。按照公认的构 件规范来生产构件,是实现构件生产商业化的前提 2 ) 构件组装描述语言,这是实现构件组装自动化的重要技术。 3 ) 构件的封装,即将不能直接连接组装的构件进行封装,使其达 到组装的要求,如:a g e n t ( 代理) 技术。 4 ) 构件组装机制,即采用什么样的机制将构件组装在一起。 5 ) 构件组装框架,即按照什么样的结构将构件集成为一个大的系 统或者更高一级的构件。 6 ) 构件组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全国检验类之临床医学检验技术(师)考试黑金考题附答案
- 2026学年广东省揭阳市六年级数学期末自测历年考试题附答案详细答案和解析
- 2026年病区氧气防火警示标牌测验试题及答案
- 2026年全国理财规划师之二级理财规划师考试黑金试题附答案
- 2026学年浙江省绍兴市一年级数学期末高分全真模拟题详细参考解析详细答案和解析
- 2026年全国劳务员之劳务员基础知识考试黑金提分题附答案
- 2026年福建省南平市住房和城乡建设局人员招聘笔试备考试题及答案详解
- 2026年随州市曾都区住房和城乡建设局人员招聘笔试参考试题及答案详解
- 2026秋季福建省石狮市第八中学招聘编外合同教师(二)考试模拟试题及答案详解
- 2026年南阳市宛城区住房和城乡建设局人员招聘笔试备考试题及答案详解
- GB/T 28029.13-2025轨道交通电子设备列车通信网络(TCN)第4-1部分:基于绞线式列车总线(WTB)的列车通信网络试验方法
- 幼儿园卫生保健会议记录20篇
- 《小狗钱钱》完整版
- 旅行社安全生产例会制度模版(3篇)
- DB31∕T 1019-2016 儿童验光配镜技术服务规范
- 工地试验室建设专项方案
- DL∕T 5344-2018 电力光纤通信工程验收规范
- T-CCIIA 0004-2024 精细化工产品分类
- SL+303-2017水利水电工程施工组织设计规范
- 洪涝灾害灾区预防性消毒技术指南
- 管道热损失的计算方法
评论
0/150
提交评论