软件测试毕业设计Word下载.docx
- 文档编号:22034488
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:37
- 大小:530.46KB
软件测试毕业设计Word下载.docx
《软件测试毕业设计Word下载.docx》由会员分享,可在线阅读,更多相关《软件测试毕业设计Word下载.docx(37页珍藏版)》请在冰豆网上搜索。
1.2软件测试的目的、原则、基本要求
1。
2.1测试的目的
1.检验开发出来的软件是否符合用户的需求。
2。
尽可能多地发现程序中的错误和缺陷。
1.2。
2基本要求(测试人员)
了解软件的总体设计思路和详细设计过程
2.对整套软件的数据流程要十分清晰
2.3测试用例
由测试数据和相应的预期结果构成。
在测试之前,一定要设计好测试数据和相应的预期结果,这是测试用例的基本原则和进行有效测试的最好途径之一
4测试原则
1.根据测试数据来确定预期的输出结果。
2.彻底检查每个测试结果(正确的、错误的),并对测试结果进行认真和仔细的分析。
3.对非法的和非预期的输入数据也要像合法的和预期的输入数据一样编写测试用例.
4.以挑剔的眼光来看待每个程序模块,不要设想程序中不会出现错误。
程序做了它不该做的事情,即使是正确的,我们也应该把它视为错误。
5.程序模块经测试后,残存的错误数目一般与已发现的错误数目成正比例。
也就是说,一个模块中发现的错误越多,那么它可能残存的错误数目也就越多,对这样的程序模块,一定要进行严格和更彻底的测试。
6.要保存测试用例.
2.软件测试的方法
2.1软件测试的基本方法
软件测试的方法和技术是多种多样的。
对于软件测试技术,可以从不同的角度加以分类:
从是否需要执行被测软件的角度,可分为静态测试和动态测试。
从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。
1.1黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性.黑盒测试方法主要有等价类划分、边界值分析、因—果图、错误推测等,主要用于软件确认测试。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。
“黑盒"
法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
2白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
“白盒"
法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据.贯穿程序的独立路径数是天文数字.但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误.
1.3ALAC(Act—like—a-customer)测试
图
(1)
ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。
ALAC测试是基于复杂的软件产品有许多错误的原则。
最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。
2.2单元测试的基本方法
单元测试的对象是软件设计的最小单位——模块。
单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。
单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。
2.2。
1单元测试任务
单元测试任务包括:
1模块接口测试;
2模块局部数据结构测试;
3模块边界条件测试;
4模块中所有独立执行通路测试;
5模块的各条错误处理通路测试。
模块接口测试是单元测试的基础。
只有在数据能正确流入、流出模块的前提下,其他测试才有意义。
测试接口正确与否应该考虑下列因素:
1.输入的实际参数与形式参数的个数是否相同和属性是否匹配;
2。
输入的实际参数与形式参数的量纲是否一致;
3。
调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
4。
调用其他模块时所给实际参数的属性是否与被调模块的形参的属性是否匹配;
5.调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
6。
调用预定义函数时所用参数的个数、属性和次序是否正确;
7.是否存在与当前入口点无关的参数引用;
8。
是否修改了只读型参数;
9。
对全程变量的定义各模块是否一致;
10。
是否把某些约束作为参数传递.
如果模块内包括外部输入输出,还应该考虑下列因素:
1.文件属性是否正确;
2.OPEN/CLOSE语句是否正确;
3.格式说明与输入输出语句是否匹配;
缓冲区大小与记录长度是否匹配;
5.文件使用前是否已经打开;
6.是否处理了文件尾;
7。
是否处理了输入/输出错误;
8.输出信息中是否有文字性错误;
检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。
局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:
1。
不合适或不相容的类型说明;
2.变量无初值;
3.变量初始化或缺省值有错;
4.不正确的变量名(拼错或不正确地截断);
5。
出现上溢、下溢和地址异常。
除了局部数据结构外,如果可能,单元测试时还应该查清全局数据对模块的影响。
在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。
此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误.此时基本路径测试和循环测试是最常用且最有效的测试技术。
计算中常见的错误包括:
误解或用错了算符优先级;
2.混合类型运算;
3.变量初值错;
4.精度不够;
表达式符号错。
比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:
不同数据类型的对象之间进行比较;
错误地使用逻辑运算符或优先级;
因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
4.比较运算或变量出错;
循环终止条件或不可能出现;
6.迭代发散时不能退出;
错误地修改了循环变量.
一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:
输出的出错信息难以理解;
2.记录的错误与实际遇到的错误不相符;
在程序自定义的出错处理段运行之前,系统已介入;
4.异常处理不当;
5.错误陈述中未能提供足够的定位出错信息。
边界条件测试是单元测试中最后,也是最重要的一项任务。
众所周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。
2单元测试过程
一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试.测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。
在确定测试用例的同时,应给出期望结果.
应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。
驱动模块在大多数场合称为“主程序"
,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。
驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。
若驱动和桩模块比较简单,实际开销相对低些.遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。
提高模块的内聚度可简化单元测试,如果每个模块只能完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。
图
(2)
2.3综合测试的基本方法
时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作.主要原因是,模块相互调用时接口会引入许多新问题.例如,数据经过接口可能丢失;
一个模块对另一模块可能造成不应有的影响;
几个子功能组合起来不能实现主功能;
误差不断积累达到不可接受的程度;
全局数据结构出现错误,等等。
综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。
某设计人员习惯于把所有模块按设计要求一次全部组装起来,然后进行整体测试,这称为非增量式集成。
这种方法容易出现混乱。
因为测试时可能发现一大堆错误,为每个错误定位和纠正非常困难,并且在改正一个错误的同时又可能引入新的错误,新旧错误混杂,更难断定出错的原因和位置。
与之相反的是增量式集成方法,程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面的测试亦可做到完全彻底。
下面讨论两种增量式集成方法。
3.1自顶向下集成
自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。
深度优先策略首先是把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这多少带有随意性,一般根据问题的特性确定。
以图(3)为例,若选择了最左一条路径,首先将模块M1,M2,M5和M8集成在一起,再将M6集成起来,然后考虑中间和右边的路径。
广度优先策略则不然,它沿着控制层次结构水平地向下移动。
仍然以下图为例,它首先把M2、M3和M4与主控模块集成在一起,再将M5和M6和其他模块集成起来。
自顶向下综合测试的具体步骤为:
1.以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代;
2.依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;
3.每集成一个模块立即测试一遍;
4.只有每组测试完成后,才着手替换下一个桩模块;
为避免引入新错误,须不断地进行回归测试(即全部或部分地重复已做过的测试)。
图(3)
从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕.上图(3)中,实线表示已部分完成的结构,若采用深度优先策略,下一步将用模块M7替换桩模块S7,当然M7本身可能又带有桩模块,随后将被对应的实际模块一一替代。
自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因此较早地发现错误。
缺点是在测试较高层次模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分。
解决这个问题有几种办法,第一种是把某些测试推迟到用真实模块替代桩模块之后进行,第二种是开发能模拟真实模块的桩模块;
第三种是自底向上集成模块.第一种方法又回退为非增量式的集成方法,使错误难于定位和纠正,并且失去了在组装模块时进行一些特定测试的可能性;
第二种方法无疑要大大增加开销;
第三种方法比较切实可行,下面专门讨论。
3。
2自底向上集成
自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。
自底向上综合测试的步骤分为:
1。
把低层模块组织成实现某个子功能的模块群(cluster);
2。
开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
对每个模块群进行测试;
删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群。
从第一步开始循环执行上述各步骤,直至整个程序构造完毕.
图(4)说明了上述过程。
首先“原子”模块被分为三个模块群,每个模块群引入一个驱动模块进行测试。
因模块群1、模块群2中的模块均隶属于模块Ma,因此在驱动模块D1、D2去掉后,模块群1与模块群2直接与Ma接口,这时可对Ma、D3被去掉后,M3与模块群3直接接口,可对Mb进行集成测试,最后Ma、Mb和Mc全部集成在一起进行测试。
自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象。
它与自顶向综合测试方法优缺点正好相反。
因此,在测试软件系统时,应根据软件的特点和工程的进度,选用适当的测试策略,有时混和使用两种策略更为有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。
此外,在综合测试中尤其要注意关键模块,所谓关键模块一般都具有下述一或多个特征:
①对应几条需求;
②具有高层控制功能;
③复杂、易出错;
④有特殊的性能要求。
关键模块应尽早测试,并反复进行回归测试。
图(4)
2.4确认测试的基本方法
通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步—-确认测试即可开始.确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准.
4.1确认测试标准
实现软件确认要通过一系列黑盒测试.确认测试同样需要制订测试计划和过程,测试计划应规定测试的种类和测试进度,测试过程则定义一些特殊的测试用例,目的在说明软件与需求是否一致。
无论计划还是过程,都应该着重考虑软件是否满足合同规定的所有功能和性能,文档资料是否完整、准确人机界面和其他方面(例如,可移植性、兼容性、错误恢复能力和可维护性等)是否令用户满意。
确认测试的结果有两种可能,一种是功能和性能指标满足软件需求说明的要求,用户可以接受;
另一种是软件不满足软件需求说明的要求,用户无法接受.项目进行到这个阶段才发现严重错误和偏差一般很难在预定的工期内改正,因此必须与用户协商,寻求一个妥善解决问题的方法。
2.4。
2配置复审
确认测试的另一个重要环节是配置复审。
复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必须的细节.
3α、β测试
事实上,软件开发人员不可能完全预见用户实际使用程序的情况。
例如,用户可能错误的理解命令,或提供一些奇怪的数据组合,亦可能对设计者自认明了的输出信息迷惑不解,等等。
因此,软件是否满足用户要求,应由用户进行一系列“验收测试”。
验收测试既可以是非正式的测试,也可以有计划、有系统的测试。
有时,验收测试长达数周甚至数月,不断暴露错误,导致开发延期.一个软件产品,可能拥有众多用户,不可能由每个用户验收,此时多采用称为α、β测试的过程,以期望发现那些似乎只有最终用户才能发现的问题。
α测试是指软件开发组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正.α测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作并尽最大努力涵盖所有可能的用户操作方式。
经过α测试调整的软件产品称为β版本。
紧随其后的β测试是指软件开发组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。
然后软件开发公司再对β版本进行改错和完善。
5系统测试的基本方法
计算机软件是基于计算机系统的一个重要组成部分,软件开发完毕后应与系统中其它成分集成在一起,此时需要进行一系列系统集成和确认测试.对这些测试的详细讨论已超出软件工程的范围,这些测试也不可能仅由软件开发人员完成。
在系统测试之前,软件工程师应完成下列工作:
(1)为测试软件系统的输入信息设计出错处理通路;
(2)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助;
(3)参与系统测试的规划和设计,保证软件测试的合理性。
系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能够正常工作并完成所赋予的任务.下面简单讨论几类系统测试。
2.5.1恢复测试
恢复测试主要检查系统的容错能力.当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复.对于自动恢复需验证重新初始化(reinitialization)、检查点(checkpointingmechanisms)、数据恢复(datarecovery)和重新启动(restart)等机制的正确性;
对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内.
2.5。
2安全测试
安全测试检查系统对非法侵入的防范能力。
安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。
5.3强度测试
强度测试检查程序对异常情况的抵抗能力。
强度测试总是迫使系统在异常的资源配置下运行。
5.4性能测试
对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一个测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能系统性能测试是为了完成这一任务。
性能测试有时与强度测试相结合,经常需要其他软硬件的配套支持。
3.软件测试的误区
随着软件规模的不断扩大,软件设计的复杂程度不断提高,软件开发中出现错误或缺陷的机会越来越多。
同时,市场对软件质量重要性的认识逐渐增强。
所以,软件测试在软件项目实施过程中的重要性日益突出.但是现实情况是与软件编程比较,软件测试的地位和作用,还没有真正受到重视,对于很多人(甚至是软件项目组的技术人员)还存在对软件测试的认识误区,这进一步影响了软件测试活动的开展和真正提高软件测试质量。
1误区之一:
软件开发完成后进行软件测试
人们一般认为,软件项目要经过以下几个阶段:
需求分析,概要设计,详细设计,软件编码,软件测试,软件发布。
因此,认为软件测试只是软件编码后的一个过程。
这是不了解软件测试周期的错误认识。
软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试。
因此,软件测试贯穿于软件项目的整个生命过程。
在软件项目的每一个阶段都要进行不同目的和内容的测试活动,以保证各个阶段的正确性.软件测试的对象不仅仅是软件代码,还包括软件需求文档和设计文档。
软件开发与软件测试应该是交互进行的,例如,单元编码需要单元测试,模块组合阶段需要集成测试。
如果等到软件编码结束后才进行测试,那么测试的时间将会很短,测试的覆盖面将很不全面,测试的效果也将大打折扣。
更严重的是如果此时发现了软件需求阶段或概要设计阶段的错误,如果要修复该类错误,将会耗费大量的时间和人力。
2误区之二:
软件发布后如果发现质量问题,那是软件测试人员的错
这种认识容易打击软件测试人员的积极性。
软件中的错误可能来自软件项目中的各个过程,软件测试只能确认软件存在错误,不能保证软件没有错误,因为从根本上讲,软件测试不可能发现全部的错误.从软件开发的角度看,软件的高质量不是软件测试人员测出来的,是靠软件生命周期的各个过程中设计出来的。
出现软件错误,不能简单地归结为某一个人的责任,有些错误的产生可能不是技术原因,可能来自于混乱的项目管理。
应该分析软件项目的各个过程,从过程改进方面寻找产生错误的原因和改进的措施。
3.3误区之三:
软件测试要求不高,随便找个人都行
很多人都认为软件测试就是安装和运行程序,点点鼠标,按按键盘的工作。
这是由于不了解软件测试的具体技术和方法造成的。
随之软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业。
软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,需要掌握和学习很多测试知识。
所以,具有编程经验的程序员不一定是一名优秀的测试工程师。
软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和不断学习精神。
3.4
误区之四:
软件测试是测试人员的事情,与程序员无关
开发和测试是相辅相成的过程,需要软件测试人员、程序员和系统分析师等保持密切的联系,需要更多的交流和协调,以便提高测试效率。
另外,对于单元测试主要应该由程序员完成,必要时测试人员可以帮助设计测试用例。
对于测试中发现的软件错误,很多需要程序员通过修改编码才能修复。
程序员可以通过有目的的分析软件错误的类型、数量,找出产生错误的位置和原因,以便在今后的编程中避免同样的错误,积累编程经验,提高编程能力.
3.5误区之五:
项目进度吃紧时少做些测试,时间富裕时多做测试
这是不重视软件测试的表现,也是软件项目过程管理混乱的表现,必然会降低软件测试的质量。
一个软件项目的顺利实现需要有合理的项目进度计划,其中包括合理的测试计划,对项目实施过程中的任何问题,都要有风险分析和相应的对策,不要因为开发进度的延期而简单的缩短测试时间、人力和资源.因为缩短测试时间带来的测试不完整,对项目质
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 毕业设计
![提示](https://static.bdocx.com/images/bang_tan.gif)