中南林业科技大学计算机与信息工程学院《软件工程》论文题目学生姓名指导教师学院专业班级完成时间软件测试技术的研究现状肖思博(20072101)辛动军计算机与信息工程学院2007级通信工程*班2010年11月5日软件测试技术的研究现状摘要人们总是喜欢定过高目标,而恰当的定目标是非常重要的。如果我们的目标是证明程序没错,那我们肯定会选择出错率极低的数据来测试;相反,如果我们是要证明程序有错,那我们就会去找出错率高的数据来测试。后者会比前者搜集更多的数据来测试。目录第一章引言第二章软件测试的概述2.1软件测试的定义2.2软件测试的发展史2.3软件测试的国内外现状2.4软件测试的发展趋势第三章软件测试的流程3.1流程概述3.2测试流程第四章软件测试的分类和方法4.1软件测试的分类4.2黑盒测试方法列举第一章引言开始论文之前,我们先来探讨下测试的定义。程序测试很糟糕的一个主要原因是程序员最初就下错了定义。他们也许说:“测试就是证明错误不存在。”或者“测试目的就是标明程序功能实现正确。”或者“测试就是证明程序可以做它应该做的事”。这些定义实在是与实际的南辕北辙。测试应该是试图证明程序中存在错误,测试出越多错误越好。正确理解测试的定义可以帮助你提高测试的工作效率。人们总是喜欢定过高目标,而恰当的定目标是非常重要的。如果我们的目标是证明程序没错,那我们肯定会选择出错率极低的数据来测试;相反,如果我们是要证明程序有错,那我们就会去找出错率高的数据来测试。后者会比前者搜集更多的数据来测试。测试的定义有很多暗示性的东西。比如说,它暗示了测试是一个破环性的程序,甚至是个残酷的程序,这正解释了为什么许多人觉得测试很难。我们多数人都希望事情圆满,而不是撕裂它,让它支离破碎。这也可以区分出,哪些人适合做测试,哪些人不适合。测试定义的另一种补充解释是分析“成功的”和“不成功的”的用法——实际上,项目经理们经常把没发现错误的测试程序称作“成功的”,那些发现错误的测试程序反而被称为“不成功的”。这当然又是完全搞反了。尽管如此,人们的思维仍然难以令找到错误的测试程序作为“成功的”。想象一个病人去看医生,检查的结果的完全健康,事实上病人却病着,那这个医生当然会被责“无能”。我们应该把程序当作一个病人,把测试人员当作医生,那样,找出的问题越多,就越“成功”。第三个关于测试定义的问题是诸如“测试就是证明程序可以做它应该做的事”类的想法。难道“程序可以做它应该做的事”就没错误了么?那如果程序不但做了应该做的事情,还做了不该做的事情呢?作为总结,测试是一个破坏性的程序,以找错误为目的。当然,你最终还是希望通过测试来建立信心,证明程序做它该做的,绝不做它不该做的,但是这个目标最好建立在勤勤恳恳找错误的基础上面。假如程序员十分肯定自己的代码是“完美无缺的”,那你应该尽量找出问题,证明它并非完美,而不是盲目的听从。可见测试就是生活的一种写照,生活中的测试就是不断段纠错,完善人生的过程。第二章软件测试的概述2.1软件测试的定义上面我们讨论了软件测试的定义问题,现在给出软件测试的准确定义。软件测试是为了发现错误而执行程序甚至不用执行程序的过程。它不仅是软件开发阶段的有机组成部分,而且在整个软件工程(即软件定义、设计和开发过程)中占据相当大的比重。软件测试是软件质量保证的关键环节,直接影响着软件的质量评估。软件测试不仅要讲究策略,更要讲究时效性。验收测试作为软件测试过程的最后一个环节,对软件质量、软件的可交付性和软件项目的实施周期起到一锤定音的作用。可见软件测试的目的是(1)为了寻找错误,并尽可能地为修正错误提供更多的信息(2)为了证明软件有错误,而不证明软件没有错误(3)通过软件测试来检查系统是否满足需求,这也是测试的期望目标。那么为了能够成功的实施测试,发现软件中的错误,软件测试应该遵循一些原则:1.)测试应该基于用户需求2.)测试设计是关键。测试时间和资源是有限的,要避免冗余的测试和考虑到尽可能全面的情况。3.)应该尽早和不断的测试。4.)序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成。5.)对测试错误结果要有一个确认的过程6.)要有合理的测试计划,不要希望在极短的时间内完成一个高水平的测试。7.)要注意回归测试的关联性,尽可能避免引入新的错误。8.)妥善保存测试过程文档,测试的重现性往往要靠测试文档。2.2软件测试的发展史软件测试是伴随着软件的产生而产生的。早期的软件测试较为狭隘,测试相当于“调试”,由开发人员自己完成这部分工作。通常是形成代码、产品基本完成时才进行测试,对测试的投入非常的少。直到1957年,软件测试才成为一种发现软件缺陷的活动。由于缺乏软件工程的概念,测试仍旧是开发之后的事情。1972年在北卡罗来纳大学举行了首次软件测试正式会议,1975年JohnGoodEnough和SusanGerhart在IEEE上发表了“TowardaTheoryofTestDataSelection”(测试数据选择原理)的文章,软件测试才被确定为一种研究方向。1979年,GlenfordMyers的《TheArtofSoftwareTesting》(软件测试艺术)是测试领域的第一本重要专著。在这本书中,Myers以及其同事们将软件测试定义为“测试是为发现错误而执行的一个程序或者系统的过程”。到了20世纪80年代,软件测试不再单纯是发现错误的过程,而且包含了软件质量评价的内容。包含IEEE(InstituteofElectricalandElectronicEngineers)标准、美国ANSI(AmericanNationalStandardInstitute)标准以及ISO(InternationalStandardOrganization)国际标准在内的各类标准相继被制定。1983年,BillHetzel在《CompleteGuideofSoftwareTesting》(《软件测试完全指南》)中指出“测试是以评价一个程序或系统属性为目标的任何一种活动,测试是对软件质量的度量”。20世纪90年代,测试工具开始盛行。2002年,Rick何和Stefan在《SystematicSoftwareTesting》(《系统的软件测试》)一书中将测试定义为“测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程”。最近20年来,软件测试技术随着计算机和软件技术的飞速发展取得了很大突破,包括V模型、W模型在内的测试模型被相继总结出来。同时,TMM(TestingMaturityModel)概念的出现标志着测试过程的改进。在单元测试、自动化测试、负载压力测试以及测试管理方面涌现了大量优秀的软件测试工具。然而软件测试技术仍旧是落后于软件开发技术的发展速度,这使得软件测试面临着很大的挑战,主要体现在以下几方面:1.软件测试在国防现代化、社会信息化和国民经济化领域中的作用越来越重要,由此产生的测试任务越来越繁重。2.软件规模越来越大,功能越来越复杂,如何进行充分有效的测试成为难题。3.面向对象的开发技术越来越普及,而面向对象的测试技术却刚刚起步。4.对于分布式系统整体性能还不能进行很好的测试。5.实时系统来说,缺乏有效的测试手段。6.随着安全问题的日益突出,信息系统的安全性如何进行安全有效的测试与评估,成为世界性的难题。2.3软件测试的国内外现状软件测试在软件较发达的国家(比如美国),已经发展成为一个独立的产业,主要体现在以下几个方面:1.软件测试在软件公司占有重要地位。在微软,一个项目组中测试工程师要远比编码工程师多,同样花在测试的时间也比花在编码的时间多。2.软件测试理论研究蓬勃发展。每年举办各种各样的测试技术年会,发表了大量的软件测试研究论文,引领软件测试理论研究的国际潮流。3.软件测试市场繁荣。美国有一些专业公司开发软件测试标准与测试工具,MICompuware、MaCabe、Rational等都是著名的软件测试工具提供商,它们出品的测试工具已经占领了国际市场。我国的测试技术起步于“六五”,随着软件工程的研究而逐步发展起来。1990年国家级的中国软件评测中心成立,测试服务逐步开展起来。由于起步晚,因此无论在软件测试理论研究还是测试实践上,都和发达国家有较大的差距。主要体现在对软件产品化测试的技术研究还较为贫乏,从业人员少,测试服务没有形成足够的规模等方面。但是,随着我国软件产业的蓬勃发展及对软件质量的重视,软件测试也越来越被人们所看重,软件测试正逐步成为一个新兴的产业。我国正迈入测试时代,主要体现在以下几个方面:1.我国著名软件公司都已经或着手建立独立的专职软件测试队伍。当然人员规模及比例无法和国外大公司相比,但毕竟在公司内部贯彻了独立的测试的意识。2.国家人事部和信产部2003关于职业资格认证第一次在我国有了“软件评测师”的称号,这是国家对软件测试职业的高度重视与认可。3.在信产部关于计算机系统集成资质以及信息工程系统工程监理资质的认证中,软件测试能力已经被定为评价公司技术能力的一项重要指标。4.2001年,信产部发布的部长5号令,实行了软件产品登记认证制度,规定凡是在我国境内销售的产品必须到信产部备案登记,且要经过登记测试。5.自2001年起,国家质检总局和信产部都通过测试对软件产品进行质量监督抽查。6.国家各部委、各行业正在通过测试规范行业的健康发展,通过测试把不符合行业标准要求的软件拒之门外,对行业信息化的健康发展起了促进作用。7.用户对软件质量要求越来越高,信息系统验收不再走过场,而要通过第三方测试机构的严格测试来判定。8.“以测代评”正在成为我国科技心爱你灌木则有支持的一项重要举措,如国家“863”计划对数据库管理系统、操作系统、办公软件、ERP等项目的经费支持,都是通过第三方测试机构科学客观的测试结果来决定的。9.软件测试正成为部分软件学院的一门独立课程,对我国软件测试人才的培养起到作用。10.第三方测试机构得到了蓬勃发展。近两年全国各地新成立的软件测试机构有十多家,测试服务体系已经基本确立。由上可见,我国的软件测试行业正处在一个快速成长的阶段。随着时间推移,我们与发达国家的差距必然会逐步缩小。2.4软件测试的发展趋势分析现今国内外的测试发展,可以看出有以下趋势:测试工作将近一步前移,不仅仅是单元测试、集成测试、系统测试和验收测试,对需求的精确性和完整性的测试技术、对系统设计的测试技术将成为新的研究热点。软件架构师、开发工程师、QA人员和测试工程师将进行更好的融合,他们之间是伙伴而非对立的关系,因为他们的工作相互促进相互借鉴。同时测试工程师也会尽早的介入整个工程,在软件定义阶段就要开发相应的测试方法,是的每一个需求定义都是可以测试的。测试职业将得到充分的尊重。开发与测试人员既是矛盾体也是统一体。以前“没能力做开发就去测试”的观点已经被现在“只有高水平的开发者才能胜任测试工作”的观点所替代。设置独立的软件测试部门将成为越来越多的软件公司的共识。测试部门将和开发、QA一样作为一个重要的独立部门存在。测试外包服务将快速增长。软件测试外包将会和软件开发外包一样,成为全球化的一种趋势,可以利用职业测试专家队伍与机构为自己的产品进行测试,节省测试费用。第三章软件测试的流程3.1流程概述一般而言,软件测试从项目确立时就开始了,前后要经过以下一些主要环节:需求分析→测试计划→测试设计→测试环境搭建→测试执行→测试记录→缺陷管理→软件评估→RTM.在进行有关问题阐述前,我们先明确下分工,一般而言,需求分析、测试用例编写、测试环境搭建、测试执行等属于测试开发人员工作范畴,而测试执行以及缺陷提交等属于普通测试人员的工作范畴,测试负责人负责整个测试各个环节的跟踪、实施、管理等。说明:1.以上流程各环节并未包含软件测试过程的全部,如根据实际情况还可以实施一些测试计划评审、用例评审,测试培训等。在软件正式发行后,当遇到一些严重问题时,还需要进行一些后续维护测试等。2.以上各环节并不是独立没联系的,实际工作千变万化,各环节一些交织、重叠