软件工程第六章-测试ppt课件.ppt
《软件工程第六章-测试ppt课件.ppt》由会员分享,可在线阅读,更多相关《软件工程第六章-测试ppt课件.ppt(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软软 件件 工工 程程第六章第六章 测试测试通常把编码和测试统称为实现。通常把编码和测试统称为实现。所谓编码就是把软件设计结果翻译成用某种所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。程序设计语言书写的程序。所选用的程序设计语言的特点及编码风格将所选用的程序设计语言的特点及编码风格将对程序的可靠性、可读性、可测试性和可维对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。护性产生深远的影响。无论怎样强调软件测试的重要性和它对软件无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。可靠性的影响都不过分。在软件生命周期的每个阶段都不可避免地会在软件生命周期的每个阶段都
2、不可避免地会产生差错。产生差错。在每个阶段结束之前通过严格的技术审查,在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错尽可能早地发现并纠正差错.经验表明审查并不能发现所有差错,此外在经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。编码过程中还不可避免地会引入新的错误。 Error: : 人的错误人的错误 Fault: : 人错误的结果,体现在开发和人错误的结果,体现在开发和维护的产品中维护的产品中 Failure: (: (系统系统故障故障) ) 错误错误( (fault)(内在内在) )、故障、故障(failure)(外在外在) )人的错误如何产生故
3、障人的错误如何产生故障?!human errorfaultfailurecan lead tocan lead to测试的目的就是在软件投入生产性运行之前,测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。尽可能多地发现软件中的错误。软件测试仍然是保证软件质量的关键步骤,软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复它是对软件规格说明、设计和编码的最后复审。审。软件测试在软件生命周期中横跨两个阶段。编码和测试阶段在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这
4、个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。大量统计资料表明,软件测试的工作量往往大量统计资料表明,软件测试的工作量往往占软件开发总工作量的占软件开发总工作量的40%40%以上,在极端情以上,在极端情况,测试那种关系人的生命安全的软件所花况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步费的成本,可能相当于软件工程其他开发步骤总成本的骤总成本的3 3倍到倍到5 5倍。倍。必须高度重视软件测试工作,绝不要以为写必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实出程序之
5、后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完际上,大约还有同样多的开发工作量需要完成。成。通过测试发现错误之后还必须诊断并改正错通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最误,这就是调试的目的。调试是测试阶段最困难的工作。困难的工作。在对测试结果进行收集和评价的时候,软件在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。软件可靠性所达到的可靠性也开始明朗了。软件可靠性模型使用故障率数据,估计软件将来出现故模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。障的情况并预测软件的可靠性。1、定义:测试是为了、定义
6、:测试是为了发现程序中的错误发现程序中的错误而执而执行程序的过程。行程序的过程。注意:注意: 只能尽可能查错,不能证明程序中只能尽可能查错,不能证明程序中 没有错;没有错; 测试员与程序员不应是同一个人。测试员与程序员不应是同一个人。测测 试基础试基础G.MyersG.Myers给出了关于测试的一些规则,这些给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。规则也可以看作是测试的目标或定义。(1) (1) 测试是为了发现程序中的错误而执行程测试是为了发现程序中的错误而执行程序的过程;序的过程;(2) (2) 好的测试方案是极可能发现迄今为止尚好的测试方案是极可能发现迄今为止尚未发
7、现的错误的测试方案;未发现的错误的测试方案;(3) (3) 成功的测试是发现了至今为止尚未发现成功的测试是发现了至今为止尚未发现的错误的测试。的错误的测试。软件测试的目标软件测试的目标由于测试的目标是暴露程序中的错误,从心由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。其他人员组成测试小组来完成测试工作。应该认识到测试决不能证明程序是正确的。应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还即
8、使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有查找出程序中的错误,不能证明程序中没有错误。错误。为了能设计出有效的测试方案,软件工程师为了能设计出有效的测试方案,软件工程师必须深入理解并正确运用指导软件测试的基必须深入理解并正确运用指导软件测试的基本准则。下面讲述主要的测试准则。本准则。下面讲述主要的测试准则。(1 1) 所有测试都应该能追溯到用户需求。所有测试都应该能追溯到用户需求。软件测试的目标是发现错误。从用户的角度软件测试的目标是发现错误。从用户的角度看,最严重的错误是导致程序不能满
9、足用户看,最严重的错误是导致程序不能满足用户需求的那些错误。需求的那些错误。软件测试准则软件测试准则(2 2) 应该远在测试开始之前就制定出测试应该远在测试开始之前就制定出测试计划。实际上,一旦完成了需求模型就可以计划。实际上,一旦完成了需求模型就可以着手制定测试计划,在建立了设计模型之后着手制定测试计划,在建立了设计模型之后就可以立即开始设计详细的测试方案。因此,就可以立即开始设计详细的测试方案。因此,在编码之前就可以对所有测试工作进行计划在编码之前就可以对所有测试工作进行计划和设计。和设计。(3 3) 把把ParetoPareto原理应用到软件测试中。原理应用到软件测试中。ParetoPa
10、reto原理说明,测试发现的错误中的原理说明,测试发现的错误中的80%80%很可能是由程序中很可能是由程序中20%20%的模块造成的。当然,的模块造成的。当然,问题是怎样找出这些可疑的模块并彻底地测问题是怎样找出这些可疑的模块并彻底地测试它们。试它们。(4 4) 应该从应该从“小规模小规模”测试开始,并逐步测试开始,并逐步进行进行“大规模大规模”测试。通常,首先重点测试测试。通常,首先重点测试单个程序模块,然后把测试重点转向在集成单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻的模块簇中寻找错误,最后在整个系统中寻找错误。找错误。(5 5) 穷举测试是不可能的。所谓
11、穷举测试穷举测试是不可能的。所谓穷举测试就是把程序所有可能的执行路径都检查一遍就是把程序所有可能的执行路径都检查一遍的测试。测试只能证明程序中有错误,不能的测试。测试只能证明程序中有错误,不能证明程序中没有错误。但是,精心地设计测证明程序中没有错误。但是,精心地设计测试方案,有可能试方案,有可能充分覆盖程序逻辑充分覆盖程序逻辑并使程序并使程序达到所要求的可靠性。达到所要求的可靠性。(6 6) 为了达到最佳的测试效果,应该由独为了达到最佳的测试效果,应该由独立的第三方从事测试工作。所谓立的第三方从事测试工作。所谓“最佳效果最佳效果”是指有最大可能性发现错误的测试。开发软是指有最大可能性发现错误的
12、测试。开发软件的软件工程师并不是完成全部测试工作的件的软件工程师并不是完成全部测试工作的最佳人选(通常他们主要承担模块测试工最佳人选(通常他们主要承担模块测试工作)。作)。 黑盒测试黑盒测试(black-box , or closed-box testing): 确信对每个输入,观察到输出与期望的输确信对每个输入,观察到输出与期望的输入出是否匹配入出是否匹配. 对功能测试对功能测试2、测试方法、测试方法 白盒测试白盒测试(white-box , or open-box, clear-box testing): 利用程序的结构进行测试利用程序的结构进行测试. 结构测试结构测试1414161616
13、16161610103 32 22 22 2若程序执行需若程序执行需10-3秒,则对于所有合法输入秒,则对于所有合法输入的测试大约需用一万年,而且还应测试输入非法的测试大约需用一万年,而且还应测试输入非法数据的情况。数据的情况。主要问题:穷尽测试主要问题:穷尽测试(complete test)通常通常是不可能的。是不可能的。例:例:(Black-box) 程序要求输入程序要求输入3个整型数据。若字长个整型数据。若字长16位,则各种可能输入的排列组合共有位,则各种可能输入的排列组合共有 (种)(种)例:例:(White-box) 下图所示的程序中共有下图所示的程序中共有 520 1014条可能的
14、执行通路,显然,每条通路都执行条可能的执行通路,显然,每条通路都执行一遍是不现实的。一遍是不现实的。1. 基本概念基本概念循环循环2020次次3、测试步骤:测试步骤:(1) 单元测试单元测试 程序设计和代码错误(程序设计和代码错误( bugsbugs)(2) (2) 子系统测试子系统测试 模块之间的连接模块之间的连接(3) (3) 系统测试系统测试 需求和系统设计需求和系统设计(4) (4) 验收测试验收测试 顾客参与顾客参与(5) (5) 平行运行平行运行 新系统、老系统同时运行并比较新系统、老系统同时运行并比较. .集成测试集成测试测试阶段的信息流:测试阶段的信息流:测试测试评价评价调试调
15、试可靠性可靠性模型模型软件配置软件配置测试配置测试配置测试结果测试结果可靠性预测可靠性预测错错 误误正正 确确错误率数据错误率数据预期结果预期结果单元测试(白盒单元测试(白盒)主要测试以下五个方面:主要测试以下五个方面:1、模块接口:、模块接口: 内部检查:传输参数的数目、属性、单位、次内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做序是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改,等等。输入的变元有无被修改,等等。 外部检查:打开、结束、关闭文件的操作;文外部检查:打开、结束、关闭文件的操作;文件和属性;件和属性;IO错误处理;输出拼写,等等。错误
16、处理;输出拼写,等等。2、局部数据结构:、局部数据结构: 数据说明数据说明(declaration);初始化与缺省值的设置;初始化与缺省值的设置;变量名拼写;数据类型的相容性;上变量名拼写;数据类型的相容性;上下溢出及下溢出及地址异常,等等。地址异常,等等。3.单元测试单元测试3、重要的执行通路:、重要的执行通路: 由于穷尽测试不可能,故通常针对最常见的由于穷尽测试不可能,故通常针对最常见的错误设计测试方案。较常见的错误有:错误设计测试方案。较常见的错误有: 计算次序问题(例:运算的优先级)计算次序问题(例:运算的优先级) 不同类型混合运算(例:比较类型不同的量)不同类型混合运算(例:比较类型
17、不同的量) 初值设置错误初值设置错误 精度问题(例:精度不够导致两变量不可能相精度问题(例:精度不够导致两变量不可能相等,而程序中等待相等条件的出现)等,而程序中等待相等条件的出现) 表达式错误表达式错误 循环终止条件错误(例:次数差循环终止条件错误(例:次数差1,或陷入死,或陷入死循环)循环)4、出错处理通路:、出错处理通路:预见出现错误的条件,设置处理。较常见的问题有:预见出现错误的条件,设置处理。较常见的问题有: 输出的错误信息难以理解,不能确定错误位置输出的错误信息难以理解,不能确定错误位置 描述的错误与实际错误不符描述的错误与实际错误不符 处理之前系统已经干预处理之前系统已经干预 处
18、理不正确处理不正确3.单元测试单元测试5、边界条件、边界条件 单元测试中最后,也可能是最重单元测试中最后,也可能是最重要的任务,因为软件常在其边界失效。要的任务,因为软件常在其边界失效。1、代码审查、代码审查(code inspection) 代码会审代码会审 以小组会的方式进行,会审小组一般以小组会的方式进行,会审小组一般由由3-43-4人组成,包括组长人组成,包括组长1 1人,程序作者人,程序作者1 1人,其他人,其他程序员(或测试人员)程序员(或测试人员)1-21-2人。人。 作者讲解程序,作者讲解程序,其他人员,捕捉程序结构、功能与编码风格等方其他人员,捕捉程序结构、功能与编码风格等方
19、面存在问题,发现的错误会后交由作者修改面存在问题,发现的错误会后交由作者修改。 预排预排:由人扮演由人扮演computer,模拟执行情况。模拟执行情况。3.单元测试单元测试优点优点: 一次审查可发现多个错误,不必改一个测一个。一次审查可发现多个错误,不必改一个测一个。单元测试的主要手段单元测试的主要手段 :模块不是独立的程序,不易单独测试,为了解决这模块不是独立的程序,不易单独测试,为了解决这个问题,可以在单元测试时为被测试模块编一些测个问题,可以在单元测试时为被测试模块编一些测试模块,作为它上级模块或下级模块的替身。代替试模块,作为它上级模块或下级模块的替身。代替上级模块的称为驱动模块,代替
20、下级模块的称为桩上级模块的称为驱动模块,代替下级模块的称为桩模块模块。2、制做测试软件:、制做测试软件:Stub (存根,桩)和存根,桩)和 Driver(驱动)驱动)2.单元测试单元测试替身模块是真实模块的简化,只需要模拟与被测模块替身模块是真实模块的简化,只需要模拟与被测模块直接有关的一部分功能,测试结束完后完成历史使命。直接有关的一部分功能,测试结束完后完成历史使命。满足被测模块需要的前提下,驱动模块和桩模块的内满足被测模块需要的前提下,驱动模块和桩模块的内容应尽量简单。容应尽量简单。模块不是独立的程序,不易单独测试,为了解决这模块不是独立的程序,不易单独测试,为了解决这个问题,可以在单
21、元测试时为被测试模块编一些测个问题,可以在单元测试时为被测试模块编一些测试模块,作为它上级模块或下级模块的替身。代替试模块,作为它上级模块或下级模块的替身。代替上级模块的称为驱动模块,代替下级模块的称为桩上级模块的称为驱动模块,代替下级模块的称为桩模块模块。2.单元测试单元测试替身模块是真实模块的简化,只需要模拟与被测模块替身模块是真实模块的简化,只需要模拟与被测模块直接有关的一部分功能,测试结束完后完成历史使命。直接有关的一部分功能,测试结束完后完成历史使命。满足被测模块需要的前提下,驱动模块和桩模块的内满足被测模块需要的前提下,驱动模块和桩模块的内容应尽量简单。容应尽量简单。2、计算机测试
22、、计算机测试制做测试软件:制做测试软件:Stub (存根,桩)和存根,桩)和 Driver(驱动驱动) 驱动 X 桩1 桩2软件的编写,属额外开支。模块高内聚可简化软件的编写,属额外开支。模块高内聚可简化这一过程。这一过程。2.单元测试单元测试模块通过单元测试后,要组装为程序,在组装中进行模块通过单元测试后,要组装为程序,在组装中进行的测试,就称为集成测试。的测试,就称为集成测试。 即使所有模块通过了单元测试,组装中仍不免出现即使所有模块通过了单元测试,组装中仍不免出现新问题,根源在于模块接口和全局数据协调不好。新问题,根源在于模块接口和全局数据协调不好。例如:例如:数据会在穿过接口时丢失;数
23、据会在穿过接口时丢失;一个模块可能会对另一模块造成有害的影响;一个模块可能会对另一模块造成有害的影响;把子功能组合起来可能不产生所要求的主功能;把子功能组合起来可能不产生所要求的主功能;有些单独看来可以允许的误差,组装后可能达到不能有些单独看来可以允许的误差,组装后可能达到不能容忍的地方。容忍的地方。集成测试集成测试 (Integration Testing)又称为综合测试又称为综合测试1、非渐增式测试、非渐增式测试 Test A,B, C, DTestATestBTestCTestD先测试每个模块,再把先测试每个模块,再把模块组合程序模块组合程序1、非渐增式测试、非渐增式测试 2、渐增式测试
24、、渐增式测试 4.集成测试集成测试渐增式:从一个模块开始,测一次添渐增式:从一个模块开始,测一次添一个新模块,滚雪球一样越滚越大,一个新模块,滚雪球一样越滚越大,直到把所有模块组装完毕直到把所有模块组装完毕。2、渐增式测试、渐增式测试 4.集成测试集成测试4.集成测试集成测试两种方式的比较:两种方式的比较: 渐增式测试渐增式测试可以较早发现模块间的接口错误;可以较早发现模块间的接口错误;非渐非渐增式测试增式测试最后才组装,因此错误发现得晚。最后才组装,因此错误发现得晚。 非渐增式测试中发现错误后难以诊断定位;渐增式非渐增式测试中发现错误后难以诊断定位;渐增式测试中,出现的错误往往跟最新加入的模
25、块有关。测试中,出现的错误往往跟最新加入的模块有关。 渐增式测试在不断集成的过程中使模块不断在新的渐增式测试在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底。条件下受到新的检测,测试更彻底。 渐增式测试较非渐增式测试费时。非渐增式测试可渐增式测试较非渐增式测试费时。非渐增式测试可以同时并行测试所有模块,能充分利用人力。以同时并行测试所有模块,能充分利用人力。 自顶向下测试自顶向下测试第第1步:测试顶端模块,用桩程序步:测试顶端模块,用桩程序(stub)代替直代替直接附属的下层模块接附属的下层模块4.集成测试集成测试3、渐增式测试渐增式测试 的几种策略的几种策略MS1S2第第2步
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 第六 测试 ppt 课件
限制150内