1、完整版)开题报告:常用软件测试技术与工具 河南财经政法大学成功学院 毕 业 论 文 (设 计) 开 题 报 告 所在系部: 信息工程系 专业: 计算机科学与技术 学 号: 2008341118 姓名: 汪建 毕业设计(论文)题目:常用软件测试技术及工具 一、研究的背景和意义; 随着社会的进步、计算机技术的飞速发展 ,计算机正在逐步应用到国民经济的一些重要领域,人们对软件可靠性的要求也越来越高。对于大中型企业来说,利用计算机支持企业高效率完成日常事务
2、是适应现代企业制度要求、推动企业管理走向科学化、规范化的必要条件;对于银行管理,经济决策部门的信息收集,空中交通管理或核反应堆的控制等,软件系统的任何一个错误,都可能是财产或生命遭受惨重损失;所以伴随着软件的开发,必须在技术上,管理上采取措施对软件进行严格的检验,如果在软件运行之前,并没有发现并纠正软件中的大部分错误,则这些错误迟早会在生产运行中暴露出来,那时不仅改正这些错误的代价更高,而且往往造成严重的后果。大量统计资料表明,软件检验的工作量往往占据软件开发总工作量的40%以上,在极端的情况下,检验的是关系到人生命安全的软件,必须高度重视软件的检验工作,决不能以为写出程序之后软件的开发工作
3、就接近完成了,实际上,大约还有同样的开发工作量需要完成. 熟练的掌握常用的软件检测技术及工具是提高软件检测效率,提升软件检测质量的必要途径,一款优秀软件的诞生需要完善的软件检测技术和工具为依托。细心仔细的发现软件中存在的错误,并及时给与改正或重写,能避免很多在软件运行过程中因为软件错误而造成的损失,提高软件的运行效率,为生活和生产创造更多的价值。 二、文献综述; 1。引言 软件检测是软件开发过程中不可或缺的阶段,常用软件测试技术及工具是进行软件检测必不可少的工具,完善的软件测试技术和优秀的软件测试工具是提高软件开发效率的必要条件。目前在软件开发过程中常用的检验手段有静态检查﹑动态检
4、查﹑正确性证明。 2.软件测试的概念 软件测试是程序的一种执行过程,目的是尽可能的发现并改正被测试软件中的错误,提高软件的可靠性。他是软件生命周期中一项非常重要并且非常复杂的工作,对软件可靠性的保重具有极其重要的意义。 3.软件测试的特点 随着工程技术的发展,软件规模的扩大,软件测试在其中的作用尤为重要。目前的软件测试技术虽然取得了一些成就,但在具体的情况下执行全面、完整的测试仍然没有可以依赖的行业标准。 在国外,软件测试技术的发展非常迅速,西方发达国家都极其重视软件测试技术的研究和开发。特别是在美国,有一些很有权威的研究机构专门研究,如卡内基梅隆大学的软件工程研究所、美国马里兰软件
5、可靠性实验室等在面向过程的软件测试和面向对象的软件测试方面有重大的研究. 在国内,我们软件测试技术的研究发展较西方起步晚,在人力和物力的方面的投入有很大的差别,它属于一个新兴的行业。在借鉴外国的经验上不断进行探索,对软件测试的重要性认识不足,软件测试在整个软件产品开发中的经济比率不足10%,远远达不到国外的30%~50%。但是在国内也有一些研究机构重视对软件测试的研究,如北京大学在黑盒测试方面的研究以及西北工业大学在Client/Server系统的测试方面的研究.在公司里开发人员和测试人员的比率和国外相比存在着巨大的反差,而且,培训专业的测试工程师的机构也很少,还有软件测试的水平比较低,对测
6、试工具的认识不够,主要的测试是手工测试,所以培养专业的测试人员的任务任重道远.基于软件测试的现状,我们有必要对软件测试及自动化技术做进一步深入的研究,对软件自动化测试生命周期方法论以及软件自动化测试成熟度做更加深入的研究,对软件测试新技术和新工具做进一步的研究,在企业内,也需要对完整的测试方案做细致的研究,使其在软件产品的开发中发挥应有的、更重要的作用。 4.软件测试的步骤 一套完整的测试应该由五个阶段组成: 1.测试计划 首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行
7、符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。 2.测试设计 将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。 3.测试开发 建立可重复使用的自动测试过程. 4.测试执行 执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理.测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测
8、试. 5.测试评估 结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。 然而,传统的测试技术和方法,对面向对象技术开发的的软件多少显得有些力不从心。鉴于此,提出了面向对象的测试技术!面向软件测试技术是新兴的软件测试技术,是专门针对使用面向对象技术开发的软件而提出的一种测试技术。面向对象软件测试是根据面向对象的软件开发过程结合面向对象的特点提出的.它包括分析与设计模型测试技术、类测试技术、对象交互测试技术、类层次结构测试技术、面向对象系统测试技术等. 当然给软件带来错误的原因很多,具体地说,主要有如下几点:①交流不够、交流上
9、有误解或者根本不进行交流 ②软件复杂性 ③程序设计错误 ④需求变化 ⑤时间压力等等。要解决这些错误就应该做好测试工作, 尽早的开始测试工作,并且测试工作贯穿于软件开发的整个生命周期。必须认真地做好每一步测试工作。当需要运行的测试多于现有资源所能运行的测试用例的测试时,一定要考虑分层增量测试.要学会采用软件测试工程化的思想,要求建立正式的测试组织、明确测试的目标和流程、确定测试的活动、对测试的过程和活动进行监控,从而保证软件测试的质量。 论文主要在探讨软件测试技术的基础上,介绍各种软件测试工具及方法的应用。为软件测试清理测试思路,详细划分软件测试的种类.最后对软件的安全问题进行详细阐述。
10、 5.常用软件测试工具 [LR] LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。 LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题.此外,LoadRunner能支持广泛的协议和技术,
11、为您的特殊环境提供特殊的解决方案。 [QTP] QuickTest Professional,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本.因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等. 目前已经被惠普收购,正式名字为HP QuickTest Professional software 。HP QuickTest Professional 提供符合所有主要应用软件环境的功能测试和回归测试的自动化。采用关键字驱动的理念已简化测试用例的创建和维护。它让用户可以直接录
12、制屏幕上的操作流程,自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。 QTP进行功能测试的测试流程 [制定测试计划]—-〉[创建测试脚本]-->[增强测试脚本功能]——〉[运行测试]——>[分析测试结果] 大致五个步骤。 [QC] Quality Center是一个基于Web的测试管理工具,可以组织和管理应用程序测试流程的所有阶段,包括指定测试需求、计划测试、执行测试和跟踪缺陷,如下图所示。此外,通过Quality Center还可以创建报告和图来监控测试流程. Quality Center是一个强大的测试管理
13、工具,合理的使用Quality Center可以提高测试的工作效率,节省时间,起到事半功倍的效果.利用 HP-Mercury Quality Center,您可以:1.制定可靠的部署决策.2.管理整个质量流程并使其标准化。 3。降低应用程序部署风险. 4。提高应用程序质量和可用性. 5。通过手动和自动化功能测试管理应用程序变更影响。 6。确保战略采购方案中的质量。 7.存储重要应用程序质量项目数据。 8。针对功能和性能测试面向服务的基础架构服务. 9.确保支持所有环境,包括 J2EE、。NET、Oracle 和 SAP。 [TD] TestDirector是全球最大的软件测试工具提供
14、商Mercury Interactive公司生产的企业级测试管理工具,也是业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球范围内测试的管理。通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能,TestDirector极大地加速了测试过程。 TestDirector能消除组织机构间、地域间的障碍.它能让测试人员、开发人员或其它的IT人员通过一个中央数据仓库,在不同地方就能交互测试信息。TestDirector将测试过程流水化—-从测试需求管理,到测试计划,测试日程安排,测试执行到出错后的错误跟踪——仅在一个基于浏览器的应
15、用中便可完成,而不需要每个客户端都安装一套客户端程序. 程序的需求驱动整个测试过程。TestDirector 的Web 界面简化了这些需求管理过程,以此您可以验证应用软件的每一个特性或功能是否正常.通过提供一个比较直观的机制将需求和测试用例、测试结果和报告的错误联系起来,从而确保能达到最高的测试覆盖率。 [BugFree] BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统。简单实用、免费并且开放源代码(遵循GNU GPL). 命名BugFree 有两层意思:一是希望软件中的缺陷越来越少直到没有,Free嘛;二是表 示它是免费且
16、开放源代码的,大家可以自由使用传播. [QALoad] QALoad(1).测试接口多;(2)可预测系统性能;(3)通过重复测试寻找瓶颈问题;(4)从控制中心管理全局负载测试;(5)可验证应用的扩展性;(6)快速创建仿真的负载测试;(7)性能价格比较高。此外,QALoad不单单测试Web应用,还可以测试一些后台的东西,比如SQL Server等。只要它支持的协议,都可以测试。 [JMeter] JMeter是一个专门为运行和服务器负载测试而设计、100%的纯Java桌面运行程序。原先它是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。它和HTTP和
17、SQL(使用JDBC)的模块一起运行。它可以用来测试静止或活动资料库中的服务器运行情况,可以用来模拟服务器或网络系统在重负载下的运行情况.它也提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行. [WAS] WAS是Microsoft提供的免费的Web负载压力测试工具,应用广泛。WAS可以通过一台或者多台客户机模拟大量用户的活动。WAS支持身份验证、加密和Cookies,也能够模拟各种浏览器和Modem速度,它的功能和性能可以与数万美元的产品媲美. [ACR] ACT或称MSACT,它是微软的Visual Studio和Visual S带的一套进行程序
18、压力测试的工具。ACT不但可以记录程序运行的详细数据参数,用图表显示程序运行情况,而且安装和使用都比较简单,结果阅读叶很方便,是一套较理想的测试工具。 [OpenSTA] OpenSTA它的全称是Open System Testing Architecture。OpenST的特点是可以模拟很多用户来访问需要测试的网站,它是一个功能强大、自定义设置功能完备的软件.但是,这些设置大部分需要通过scrīpt来完成,因此在真正使用这个软件之前,必须学习好它的scrīpt编写。如果需要完成很复杂的功能,script的要求还比较高。当然这也是它的优点,一些程序员不会在意编写script的。
19、 [PureLoad] PureLoad一个完全基于Java的测试工具,它的script代码完全使用XML。所以,编写script很简单。它的测试包含文字和图形并可以输出为HTML文件。由于是基于Java的软件,因此PureLoad可以通过Java Beans API来增强软件功能。 [WinRunner] WinRunner企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行,自动执行重复任务并优化测试工作,从而缩短测试时间。通过自动录制、检测和回防用户的应用操作,从而提高测试效率。 [Rational Robot] Rational Ro
20、bot我经常使用的测试工具,属于Rational TestSuite中的一员,对于Visual studio 6编写的程序支持的非常好,同时还支持Java Applet、HTML、Oracle Forms、People Tools应用程序的支持.要支持Delphi程序的测试还必须下载插件。Rational Robot的语法使用Basic语法,它的语言使用SQABasic。 [Functional Tester] Functional Tester它是Robot的Java实现版本,在Rational被IBM收购后发布的.在Java的浪潮下,Robot被移植到了Eclipse平台,并完
21、全支持Java和.net。可以使用VB.net和Java进行脚本的编写,当然了录下脚本让后做做修改是最爽的事情了。由于支持Java,那么对测试脚本进行测试也变成了可能。 [JUnit] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。 JUnit是一个开放源代码的Java测试框架
22、用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:1、用于测试期望结果的断言(Assertion);2、用于共享共同测试数据的测试工具;3、用于方便的组织和运行测试的测试套件;4、图形和文本的测试运行器. 三、研究的主要内容和方法; 本论文主要研究常用的软件测试技术及工具,不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等.“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试. 1 正确
23、性测试 正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。 基本的方法是构造一些合理输入,检查是否得到期望的输出.这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下: 记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。 如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错. 如果f (x1) 正确,那么f (
24、x) 在整个(A, B)区间都将正确。 上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。 还有一种有效的测试方法是边界值测试.即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢"在边界值处出错。 例如测试 的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0。5以及x=2。0进行等价测试。再取 x=0以及x=1进行边界值测试。 有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。 在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修
25、改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”. 2 容错性测试 容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。 比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如: (1)输入错误的数据类型,如“猴"年“马”月. (2)输入定义域之外的数值,上海人常说的“十三点”也算一种。 粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。 3 性能与效率测
26、试 性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特.有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。 在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行. 在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是
27、比较几个算法的性能,就要求编程语言和编译器也完全一致。 性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃.例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。 4 易用性测试 易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995] 一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。 5 文档测试
28、 文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分. 正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。 完备性是指文档不可以“虎头蛇尾”,更不许漏掉关键内容。有些学生在证明数学题时,喜欢用“显然”两字蒙混过关。文档中很多内容对开发者可能是“显然”的,但对用户而言不见得都是“显然"的。 软件测试,从不同的角度出发会派生出两种不同的测试原则。从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷;从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求。中国软件评测中心的测试原则,就是从用户和
29、开发者的角度出发进行软件产品测试的。 为了达到上述的原则,需要注意以下几点: 1。应当把“尽早和不断地测试”作为开发者的座右铭. 2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成. 3。设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。 4。一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。 5。对测试错误结果一定要有一个确认的过程.一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。 6。制定严格的测试计划,并把测
30、试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。 7。回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见. 8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。 四、主要参考文献; 1 贺平 编著,《软件测试技术》,机械工业出版社,2004年 2 Ron Patton著,《软件测试》Software Testing Second Edition(英文版 第2版)(美),机械工业出版社,2006年 3 陈少英 等著,《Web性能测试实战》, 电子工业出版社, 2006年 4 朱少民 编著,《软件测试方法和技术
31、》, 清华大学出版社, 2005年 5 [美] Mark Fewster & Dorothy Graham 著,《软件测试自动化技术与实例详解》, 电子工业出版社, 2000年 6 飞思科技产品研发中心 编著,《实用软件测试方法与应用》, 电子工业出版社, 2003年 7 Glenford J.Myers & Tom Badgett & Todd M. Thomas & Corey Sandler 著,《软件测试的艺术》, 机械工业出版社, 2005年 五、研究进度。 12月10日-—1月25日 搜集相关材料,查阅有关文献,在充分理解工作目的和意义的基础上,制定研究方案、制定进度计划、撰写出开题报告。 1月25日-—3月2日 按照预定的进度计划,阅读资料、考虑方案等毕业设计工作。 3月2日——4月1日 撰写毕业论文,并为论文答辩做前期准备. 指导教师意见: 指导教师签名: 年 月 日 12






