《软件工程第七章软件测试》由会员分享,可在线阅读,更多相关《软件工程第七章软件测试(69页珍藏版)》请在金锄头文库上搜索。
1、软件工程第七章软件工程第七章软件测试软件测试Contents 7.1 软件测试概述软件测试概述软件危机软件危机 (1.2) 7.2 软件测试方法与技术软件测试方法与技术 7.3 软件测试过程软件测试过程 2Contents 7.1 软件测试概述软件测试概述3软件测试概述软件测试概述 软件测试的目的软件测试的目的 统统计计资资料料表表明明,测测试试的的工工作作量量约约占占整整个个项项目目开开发发工工作作量量的的40%40%左左右右,对对于于关关系系到到人人的的生生命命安安全全的的软软件件(如如飞飞机机飞飞行行自自动动控控制制系系统统),测测试试的的工工作作量量还还要要成成倍增加。倍增加。 那那么
2、么,为为什什么么要要花花这这么么多多代代价价进进行行测测试试? ? 其其目目的的何何在在? 它它是是“说说明明程程序序能能正正确确地地执执行行它它应应有有的的功功能能”,还还是是“表表明明程程序序没没有有错错误误”。如如果果是是这这样样一一个个目目的的,就就要要朝朝着着“证证明明程程序序正正确确”这这个个目目标标靠靠拢拢,无无意意识识地地选选择择一一些些不不易易暴暴露露错错误误的的例例子子。因因此此对对软软件件测测试试的目的提出了以下观点:的目的提出了以下观点: 4(1) (1) 软软件件测测试试是是为为了了发发现现错错误误而而执执行行程程序序的的过过程程。 (2) (2) 好好的的测测试试用
3、用例例能能够够发发现现至至今今尚尚未未发发现现的的错错误误。 (3) (3) 成成功功的的测测试试是是发发现现至至今今尚尚未未发发现现的的错错误误的的测测试试。 因因此此,测测试试阶阶段段的的基基本本任任务务应应该该是是根根据据软软件件开开发发各各阶阶段段的的文文档档资资料料和和程程序序的的内内部部结结构构,精精心心设设计计一一组组“高高产产”的的测测试试用用例例,利利用用这这些些用用例例执执行行程程序序,找找出出软件中潜在的各种错误和缺陷。软件中潜在的各种错误和缺陷。 5软件测试的目的软件测试的目的v基于不同的立场,存在着两种完全不同基于不同的立场,存在着两种完全不同的测试目的。的测试目的。
4、v从从用户的角度用户的角度出发,普遍希望通过软件出发,普遍希望通过软件测试测试暴露软件中隐藏的错误和缺陷暴露软件中隐藏的错误和缺陷,以,以考虑是否可接受该产品。考虑是否可接受该产品。v从从软件开发者的角度软件开发者的角度出发,则希望测试出发,则希望测试成为成为表明软件产品中不存在错误表明软件产品中不存在错误的过程,的过程,验证该软件已正确地实现了用户的要求,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。确立人们对软件质量的信心。6v换言之,测试的目的是换言之,测试的目的是换言之,测试的目的是换言之,测试的目的是 想以最少的时间和人力,想以最少的时间和人力,系统地找系统地找出软件
5、中潜在的各种错误和缺陷出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们如果我们成功地实施了测试,我们就能够发现软件中的错误。就能够发现软件中的错误。 测试的附带收获是,它测试的附带收获是,它能够证明软能够证明软件的功能和性能与需求说明相符合件的功能和性能与需求说明相符合。 实施测试收集到的测试结果数据为实施测试收集到的测试结果数据为可靠性分析提供了依据。可靠性分析提供了依据。 测试不能表明软件中不存在错误,测试不能表明软件中不存在错误,它只能说明软件中存在错误。它只能说明软件中存在错误。7软件测试的原则软件测试的原则1. 应当把应当把“尽早地和不断地进行软件测尽早地和不断地进行软件
6、测试试”作为软件开发者的座右铭。作为软件开发者的座右铭。2. 测试用例应由测试用例应由测试输入数据测试输入数据和对应的和对应的预期输出结果预期输出结果这两部分组成。这两部分组成。3. 程序员应避免检查自己的程序。程序员应避免检查自己的程序。4. 在设计测试用例时,应包括在设计测试用例时,应包括合理的输合理的输入条件和不合理的输入条件入条件和不合理的输入条件。85. 充分注意测试中的群集现象。充分注意测试中的群集现象。经验表明,经验表明,测试后测试后程序中残存的错误数程序中残存的错误数目与该程序中已发现的错误数目成正比目与该程序中已发现的错误数目成正比。6. 严格执行测试计划,严格执行测试计划,
7、排除测试的随意性排除测试的随意性。7. 应当对每一个测试结果做全面检查。应当对每一个测试结果做全面检查。8. 妥善保存测试计划,测试用例,出错统妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。计和最终分析报告,为维护提供方便。9软件测试的对象软件测试的对象v软件测试并不等于程序测试。软件测试并不等于程序测试。软件测试软件测试应贯穿于软件定义与开发的整个期间应贯穿于软件定义与开发的整个期间。v需求分析、概要设计、详细设计以及程需求分析、概要设计、详细设计以及程序编码序编码等各阶段所得到的等各阶段所得到的文档文档,包括需,包括需求规格说明、概要设计规格说明、详细求规格说明、概要
8、设计规格说明、详细设计规格说明以及源程序,设计规格说明以及源程序,都应成为软都应成为软件测试的对象件测试的对象。10v为把握软件开发各个环节的正确性,需为把握软件开发各个环节的正确性,需要进行各种要进行各种确认确认和和验证验证工作。工作。v确认确认(Validation),是一系列的活动和过,是一系列的活动和过程,目的是想证实在一个给定的外部环程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。境中软件的逻辑正确性。 需求规格说明确认需求规格说明确认 程序确认程序确认 (静态确认、动态确认静态确认、动态确认) v验证验证(Verification),试图证明在软件生,试图证明在软件生存期各
9、个阶段,以及阶段间的逻辑协调存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。性、完备性和正确性。1112测试信息流测试信息流13测试信息流测试信息流v软件配置软件配置:软件需求规格说明、软件:软件需求规格说明、软件设计规格说明、源代码等;设计规格说明、源代码等;v测试配置测试配置:测试计划、测试用例、测:测试计划、测试用例、测试程序等;试程序等;v测试工具测试工具:测试数据自动生成程序、:测试数据自动生成程序、静态分析程序、动态分析程序、测试静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试结果分析程序、以及驱动测试的测试数据库等等。数据库等等。14v测试结果分析测试结果分
10、析:比较实测结果与预期:比较实测结果与预期结果,评价错误是否发生。结果,评价错误是否发生。v排错排错(调试调试):对已经发现的错误进行:对已经发现的错误进行错误定位和确定出错性质,并改正这错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。些错误,同时修改相关的文档。v修正后的文档再测试修正后的文档再测试:直到通过测试:直到通过测试为止。为止。15v通过收集和分析测试结果数据,对软件通过收集和分析测试结果数据,对软件建立可靠性模型建立可靠性模型v利用可靠性分析,评价软件质量:利用可靠性分析,评价软件质量: 软件的质量和可靠性达到可以接软件的质量和可靠性达到可以接受的程度;受的程度; 所
11、做的测试不足以发现严重的错所做的测试不足以发现严重的错误;误;v如果测试发现不了错误,可以肯定,测如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然试配置考虑得不够细致充分,错误仍然潜伏在软件中。潜伏在软件中。16测试与软件开发各阶段的关系测试与软件开发各阶段的关系v软件开发过程是一个自顶向下,逐步细软件开发过程是一个自顶向下,逐步细化的过程化的过程v软件计划阶段定义软件作用域软件计划阶段定义软件作用域v软件需求分析建立软件信息域、功能和软件需求分析建立软件信息域、功能和性能需求、约束等性能需求、约束等v软件设计软件设计v把设计用某种程序设计语言转换成程序把设计用某种程序设计
12、语言转换成程序代码代码17v测试过程是依相反顺序安排的自底向上,测试过程是依相反顺序安排的自底向上,逐步集成的过程。逐步集成的过程。18Contents 软件危机软件危机 (1.2) 7.2 软件测试方法与技术软件测试方法与技术 19 7.2.1 静态测试与动态测试静态测试与动态测试 1. 静态测试静态测试 静静态态测测试试是是指指被被测测试试程程序序不不在在机机器器上上运运行行,而而是是采采用用人人工工检检测测和和计计算算机机辅辅助助静静态态分分析析的的手手段段对对程程序序进进行检测,方法如下:行检测,方法如下: (1) (1) 人人工工测测试试:是是指指不不依依靠靠计计算算机机而而靠靠人人
13、工工审审查查程程序序或或评评审审软软件件。人人工工审审查查程程序序偏偏重重于于编编码码质质量量的的检检验验,而而软软件件审审查查除除了了审审查查编编码码还还要要对对各各阶阶段段的的软软件件产产品进行检验。品进行检验。20 (2) (2) 计计算算机机辅辅助助静静态态分分析析: 指指利利用用静静态态分分析析工工具具对对被被测测试试程程序序进进行行特特性性分分析析,从从程程序序中中提提取取一一些些信信息息,以以便便检检查查程程序序逻逻辑辑的的各各种种缺缺陷陷和和可可疑疑的的程程序序构构造造。如如用用错错的的局局部部量量和和全全程程量量、不不匹匹配配参参数数、不不适适当当的的循循环环嵌嵌套套和和分分
14、支支嵌嵌套套、 潜潜在在的的死死循循环环及及不不会会执执行行到到的的代代码码等等。还还可可能能提提供供一一些些间间接接涉涉及及程程序序欠欠缺缺的的信信息息、 各各种种类类型型的的语语句句出出现现的的次次数数、变变量量和和常常量量的的引引用用表表、标标识识符符的的使使用用方方式式、过过程程的的调调用用层层次次及及违违背背编编码码规规则则等等。静静态态分分析析中中还还可可以以用用符符号号代代替替数数值值求求得得程程序序结结果果, 以便对程序进行运算规律的检验。以便对程序进行运算规律的检验。 21 2. 动态测试动态测试 动动态态测测试试指指通通过过运运行行程程序序发发现现错错误误。一一般般意意义义
15、上上的的测测试试大大多多是是指指动动态态测测试试。为为使使测测试试发发现现更更多多的的错错误误,需需要要运运用用一一些些有有效效的的方方法法。 测测试试任任何何产产品品,一一般般有有两两种种方方法法:一一是是测测试试产产品品的的功功能能,二二是是测测试试产产品品内内部部结结构构及及处处理理过过程程。对对软软件件产产品品进进行行动动态态测测试试时时, 也也用用这这两两种种方方法法,分分别别称称为为黑黑盒盒测测试试法法和和白白盒盒测测试试法法。 22 7.2.2 黑盒测试法与白盒测试法黑盒测试法与白盒测试法 1. 黑盒法黑盒法 该该方方法法把把被被测测试试对对象象看看成成一一个个黑黑盒盒子子,测测
16、试试人人员员完完全全不不考考虑虑程程序序的的内内部部结结构构和和处处理理过过程程,只只在在软软件件的的接接口口处处进进行行测测试试, 依依据据需需求求说说明明书书,检检查查程程序序是是否否满满足足功功能能要要求求。因因此此, 黑黑盒盒测测试试又又称称为为功功能能测测试试或或数据驱动测试数据驱动测试。 23 通过黑盒测试主要发现以下错误:通过黑盒测试主要发现以下错误: (1) (1) 是否有不正确或遗漏了的功能。是否有不正确或遗漏了的功能。 (2) (2) 在在接接口口上上,能能否否正正确确地地接接受受输输入入数数据据, 能否产生正确的输出信息。能否产生正确的输出信息。 (3) (3) 访问外部
17、信息是否有错。访问外部信息是否有错。 (4) (4) 性能上是否满足要求等。性能上是否满足要求等。 24 用用黑黑盒盒法法测测试试时时,必必须须在在所所有有可可能能的的输输入入条条件件和和输输出出条条件件中中确确定定测测试试数数据据。是是否否要要对对每每个个数数据据都都进进行行穷举测试呢?穷举测试呢?例例如如测测试试一一个个程程序序,需需输输入入 3 3 个个整整数数值值。微微机机上上,每每个个整整数数可可能能取取值值有有2 21616个个,3 3个个整整数数值值的的排排列列组组合合数数为为2 21616221616221616=2=248483103101414。假假设设此此程程序序执执行行
18、一一次次为为一一毫毫秒秒, 用用这这些些所所有有的的数数据据去去测测试试要要用用1 1万万年年!但但这这还还不不能能算算穷穷举举测测试试, 还还要要输输入入一一切切不不合合法法的的数数据据。可可见见,穷举地输入测试数据进行黑盒测试是不可能的。穷举地输入测试数据进行黑盒测试是不可能的。 25 2. 白盒法白盒法 该该方方法法把把测测试试对对象象看看作作一一个个打打开开的的盒盒子子, 测测试试人人员员须须了了解解程程序序的的内内部部结结构构和和处处理理过过程程,以以检检查查处处理理过过程程的的细细节节为为基基础础, 对对程程序序中中尽尽可可能能多多的的逻逻辑辑路路径径进进行行测测试试,检检验验内内
19、部部控控制制结结构构和和数数据据结结构构是是否否有有错错, 实实际际的运行状态与预期的状态是否一致。的运行状态与预期的状态是否一致。 26 白白盒盒法法也也不不可可能能进进行行穷穷举举测测试试,企企图图遍遍历历所所有有的的路路径径, 往往往往是是做做不不到到的的。如如测测试试一一个个循循环环2020次次的的嵌嵌套套的的IFIF语语句句, 循循环环体体中中有有5 5条条路路径径。测测试试这这个个程程序序的的执执行行路路径径为为5 52020, 约约为为10101414, 如如果果每每毫毫秒秒完完成成一一个个路路径的测试,径的测试, 测试此程序需测试此程序需31703170年!年! 对对于于白白盒
20、盒测测试试,即即使使每每条条路路径径都都测测试试了了,程程序序仍仍可可能能有有错错。 例例如如要要求求编编写写一一个个升升序序的的程程序序,错错编编成成降降序序程程序序(功功能能错错), 就就是是穷穷举举路路径径测测试试也也无无法法发发现现。再再如如由由于于疏疏忽忽漏漏写写了了路路径径, 白白盒盒测测试试也也发发现现不了。不了。 27 所所以以,黑黑盒盒法法和和白白盒盒法法都都不不能能使使测测试试达达到到彻彻底底。为为了了用用有有限限的的测测试试发发现现更更多多的的错错误误,需需精精心心设设计计测测试试用用例例。黑黑盒盒法法、 白白盒盒法法是是设设计计测测试试用用例例的的基基本本策策略略,每每
21、一一种种方方法法对对应应着着多多种种设设计计测测试试用用例例的的技技术术,每每种种技技术可达到一定的软件质量标准要求。术可达到一定的软件质量标准要求。 28Contents 软件危机软件危机 (1.2) 7.3 软件测试过程软件测试过程 2930v集成测试集成测试把已测试过的模块组装起来,把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构主要对与设计相关的软件体系结构的构造进行测试。造进行测试。v验收测试(确认测试)验收测试(确认测试)则是要检查已实则是要检查已实现的软件是否满足了需求规格说明中确现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完定了的各种需求,以及
22、软件配置是否完全、正确。全、正确。v系统测试系统测试把已经经过确认的软件纳入实把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在际运行环境中,与其它系统成份组合在一起进行测试。一起进行测试。31单元测试单元测试 (Unit Testing)(Unit Testing)v单元测试又称模块测试,单元测试又称模块测试,是针对软件设是针对软件设计的最小单位计的最小单位 程序模块,进行正确性程序模块,进行正确性检验检验的测试工作。其目的在于发现各模的测试工作。其目的在于发现各模块内部可能存在的各种差错。块内部可能存在的各种差错。v单元测试需要单元测试需要从程序的内部结构出发设从程序的内部结构出
23、发设计测试用例计测试用例。多个模块可以平行地独立。多个模块可以平行地独立进行单元测试。进行单元测试。321. 1. 单元测试的内容单元测试的内容v在单元测试时,测试者需要依据详细在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模设计说明书和源程序清单,了解该模块的块的I/O条件和模块的逻辑结构,主要条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和的输入和不合理的输入,都能鉴别和响应。响应。3334(1) (1) 模块接口测试模块接口测试v在单元
24、测试的开始,应对在单元测试的开始,应对通过被测模块通过被测模块的数据流的数据流进行测试。测试项目包括:进行测试。测试项目包括: 调用本模块的输入参数是否正确;调用本模块的输入参数是否正确; 本模块调用子模块时输入给子模块的本模块调用子模块时输入给子模块的参数是否正确;参数是否正确; 全局量的定义在各模块中是否一致;全局量的定义在各模块中是否一致; 35v在做在做内外存交换内外存交换时要考虑:时要考虑: 文件属性是否正确;文件属性是否正确; OPEN与与CLOSE语句是否正确;语句是否正确; 缓冲区容量与记录长度是否匹配;缓冲区容量与记录长度是否匹配; 在进行读写操作之前是否打开了文件;在进行读
25、写操作之前是否打开了文件; 在结束文件处理时是否关闭了文件;在结束文件处理时是否关闭了文件; 正文书写输入错误,正文书写输入错误, IO错误是否检查并做了处理。错误是否检查并做了处理。36(2) (2) 局部数据结构测试局部数据结构测试v不正确或不一致的数据类型说明不正确或不一致的数据类型说明v使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量v错误的初始值或错误的缺省值错误的初始值或错误的缺省值v变量名拼写错或书写错变量名拼写错或书写错v不一致的数据类型不一致的数据类型v全局数据对模块的影响全局数据对模块的影响 37(3) (3) 路径测试路径测试v选择适当的测试用例,对模块中选择
26、适当的测试用例,对模块中重要的重要的执行路径执行路径进行测试。进行测试。v应当设计测试用例查找由于应当设计测试用例查找由于错误的计算、错误的计算、不正确的比较或不正常的控制流不正确的比较或不正常的控制流而导致而导致的错误。的错误。v对基本执行路径和循环进行测试可以发对基本执行路径和循环进行测试可以发现大量的路径错误。现大量的路径错误。38(4) (4) 错误处理测试错误处理测试v出错的描述是否难以理解出错的描述是否难以理解v出错的描述是否能够对错误定位出错的描述是否能够对错误定位v显示的错误与实际的错误是否相符显示的错误与实际的错误是否相符v对错误条件的处理正确与否对错误条件的处理正确与否v在
27、对错误进行处理之前,错误条件是否在对错误进行处理之前,错误条件是否已经引起系统的干预等已经引起系统的干预等39(5) (5) 边界测试边界测试v注意数据流、控制流中刚好等于、大于注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认对这些地方要仔细地选择测试用例,认真加以测试。真加以测试。v如果对模块运行时间有要求的话,还要如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的况下和平均意义下影响模块运行时间的因素。因素。402.
28、2. 单元测试的步骤单元测试的步骤v模块并不是一个独立的程序,在考虑模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测联系,用一些辅助模块去模拟与被测模块相联系的其它模块。模块相联系的其它模块。 驱动模块驱动模块 (driver) 存根模块存根模块 (stub) 存根模块存根模块4142v如果一个模块要完成多种功能,可以将如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性
29、能测试。做的工作,对关键模块还要做性能测试。v对支持某些标准规程的程序,更要着手对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。为模块测试,以区别单元测试。43集成测试(集成测试(Integrated TestingIntegrated Testing)v集成测试集成测试 (集成测试、联合测试)集成测试、联合测试)v通常,在单元测试的基础上,需要将所通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这有模块按照设计要求组装成为系统。这时需要考虑的问题是:时需要考虑的问题是: 在把各个模块连接起来的
30、时侯,在把各个模块连接起来的时侯,穿越穿越模块接口的数据模块接口的数据是否会丢失;是否会丢失; 一个模块的功能是否会对另一个模块一个模块的功能是否会对另一个模块的功能产生不利的影响的功能产生不利的影响;44 各个子功能组合起来,能否达到预期各个子功能组合起来,能否达到预期要求的父功能;要求的父功能; 全局数据结构是否有问题;全局数据结构是否有问题; 单个模块的误差累积起来,是否会放单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。大,从而达到不能接受的程度。在单元测试的同时可进行集成测试在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现发现并排除在模块连接中可能出现的问题
31、,最终构成要求的软件系统。的问题,最终构成要求的软件系统。 45v子系统的集成测试特别称为子系统的集成测试特别称为部件测试部件测试,它所做的工作是要找出组装后的它所做的工作是要找出组装后的子系统子系统与系统需求规格说明之间与系统需求规格说明之间的不一致。的不一致。v通常,把模块组装成为系统的方式有两通常,把模块组装成为系统的方式有两种种 一次性组装方式一次性组装方式 增殖式组装方式增殖式组装方式461. 1. 一次性组装方式一次性组装方式v它是一种它是一种非增殖式组装方式非增殖式组装方式。也叫做整。也叫做整体拼装。体拼装。v使用这种方式,首先对每个模块分别进使用这种方式,首先对每个模块分别进行
32、模块测试,然后再把所有模块组装在行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系一起进行测试,最终得到要求的软件系统。统。47482. 2. 增殖式组装方式增殖式组装方式v这种组装方式又称这种组装方式又称渐增式组装渐增式组装v首先对一个个模块进行模块测试,然后首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统将这些模块逐步组装成较大的系统v在组装的过程中边连接边测试,以发现在组装的过程中边连接边测试,以发现连接过程中产生的问题连接过程中产生的问题v通过增殖逐步组装成为要求的软件系统。通过增殖逐步组装成为要求的软件系统。49(1) (1) 自顶向下的增殖方式自顶
33、向下的增殖方式v这种组装方式将模块这种组装方式将模块按系统程序结构,按系统程序结构,沿控制层次自顶向下进行组装沿控制层次自顶向下进行组装。v自顶向下的增殖方式在测试过程中较自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。早地验证了主要的控制和判断点。v选用按深度方向组装的方式,可以首选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。先实现和验证一个完整的软件功能。5051(2) (2) 自底向上的增殖方式自底向上的增殖方式v这种组装的方式是从这种组装的方式是从程序模块结构的最程序模块结构的最底层的模块开始组装和测试底层的模块开始组装和测试。v因为模块是自底向上进行组
34、装,对于一因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测子模块的所有下属模块)已经组装并测试完成,所以试完成,所以不再需要存根模块不再需要存根模块。在模。在模块的测试过程中需要从子模块得到的信块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。息可以直接运行子模块得到。52v自顶向下增殖的方式和自底向上增殖的方自顶向下增殖的方式和自底向上增殖的方式各有优缺点。式各有优缺点。v一般来讲,一种方式的优点是另一种方式一般来讲,一种方式的优点是另一种方式的缺点。的缺点。53(3) (3) 混合增殖式测试混
35、合增殖式测试v衍变的自顶向下的增殖测试衍变的自顶向下的增殖测试 首先对输入输出模块和引入新算首先对输入输出模块和引入新算法模块进行测试法模块进行测试; 再自底向上组装成为功能相当完整再自底向上组装成为功能相当完整且相对独立的子系统且相对独立的子系统; 然后由主模块开始自顶向下进行增然后由主模块开始自顶向下进行增殖测试。殖测试。54v自底向上自底向上 自顶向下的增殖测试自顶向下的增殖测试 首先对含读操作的子系统自底向上直首先对含读操作的子系统自底向上直至根结点模块进行组装和测试至根结点模块进行组装和测试; 然后对含写操作的子系统做自顶向下然后对含写操作的子系统做自顶向下的组装与测试。的组装与测试
36、。55关键模块问题关键模块问题v在集成测试时,应当确定关键模块,对在集成测试时,应当确定关键模块,对这些关键模块及早进行测试。这些关键模块及早进行测试。v关键模块的特征:关键模块的特征: 满足某些软件需求;满足某些软件需求; 在程序的模块结构中位于较高的层在程序的模块结构中位于较高的层次(高层控制模块);次(高层控制模块); 较复杂、较易发生错误;较复杂、较易发生错误; 有明确定义的性能要求。有明确定义的性能要求。56验收测试(验收测试(Validation TestingValidation Testing)v验收测试又称验收测试又称有效性测试有效性测试。任务是验证。任务是验证软件的功能和性
37、能及其它特性是否与用软件的功能和性能及其它特性是否与用户的要求一致。户的要求一致。v对软件的功能和性能要求在软件需求规对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信格说明书中已经明确规定。它包含的信息就是软件验收测试的基础。息就是软件验收测试的基础。57581. 1. 进行有效性测试(黑盒测试)进行有效性测试(黑盒测试)v有效性测试是在模拟的环境有效性测试是在模拟的环境 (可能就是可能就是开发的环境开发的环境) 下,运用黑盒测试的方法,下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书验证被测软件是否满足需求规格说明书列出的需求。列出的需求。v首先制定测试计划,规
38、定要做测试的种首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具类。还需要制定一组测试步骤,描述具体的测试用例。体的测试用例。59v通过实施预定的测试计划和测试步骤,通过实施预定的测试计划和测试步骤,确定确定 软件的特性是否与需求相符;软件的特性是否与需求相符; 所有的文档都是正确且便于使用;所有的文档都是正确且便于使用; 同时,对其它软件需求,例如可移植同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性、兼容性、出错自动恢复、可维护性等,也都要进行测试性等,也都要进行测试60v在全部软件测试的测试用例运行完后,在全部软件测试的测试用例运行完后,所有的测试结果
39、可以分为两类:所有的测试结果可以分为两类: 测试结果与预期的结果相符测试结果与预期的结果相符。这说明。这说明软件的这部分功能或性能特征与需求软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序规格说明书相符合,从而这部分程序被接受。被接受。 测试结果与预期的结果不符测试结果与预期的结果不符。这说明。这说明软件的这部分功能或性能特征与需求软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一规格说明不一致,因此要为它提交一份问题报告。份问题报告。612. 2. 软件配置复查软件配置复查n n 软件配置复查的目的是保证软件配置复查的目的是保证uu 软件配置的所有成分都齐全;软
40、件配置的所有成分都齐全;uu 各方面的质量都符合要求;各方面的质量都符合要求; uu 具有维护阶段所必需的细节;具有维护阶段所必需的细节;uu 而且已经编排好分类的目录。而且已经编排好分类的目录。n n应当严格遵守用户手册和操作手册中规应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料定的使用步骤,以便检查这些文档资料的完整性和正确性。的完整性和正确性。62验收测试(验收测试(Acceptance TestingAcceptance Testing)v在通过了系统的有效性测试及软件配置在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。审查之后,就应开始系统的
41、验收测试。v验收测试是以用户为主的测试。软件开验收测试是以用户为主的测试。软件开发人员和发人员和QA(质量保证)人员也应参(质量保证)人员也应参加。加。v由用户参加设计测试用例,使用生产中由用户参加设计测试用例,使用生产中的实际数据进行测试。的实际数据进行测试。63v在测试过程中,除了考虑软件的功能和在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行性、可维护性、错误的恢复功能等进行确认。确认。v验收测试应交付的文档有:验收测试应交付的文档有: 验收测试分析报告验收测试分析报告 最终的用户手册和操作手册最终的
42、用户手册和操作手册 项目开发总结报告。项目开发总结报告。64系统测试(系统测试(System TestingSystem Testing)v系统测试,是将通过验收测试的软件,作系统测试,是将通过验收测试的软件,作为整个基于计算机系统的一个元素,为整个基于计算机系统的一个元素,与计与计算机硬件、外设、某些支持软件、数据和算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合人员等其它系统元素结合在一起,在实际在一起,在实际运行环境下,对计算机系统进行一系列的运行环境下,对计算机系统进行一系列的集成测试和验收测试。集成测试和验收测试。v系统测试的目的在于通过与系统的需求定系统测试的目的在于通过
43、与系统的需求定义作比较义作比较, 发现软件与系统的定义不符合发现软件与系统的定义不符合或与之矛盾的地方。或与之矛盾的地方。65测试和测试和测试测试v在软件交付使用之后,用户将如何实际在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是无法预测使用程序,对于开发者来说是无法预测的。的。v测试是测试是由一个用户在开发环境下进行由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。拟实际操作环境下进行的测试。66v测试测试的目的是评价软件产品的的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、(即功能、局域化、可
44、使用性、可靠性、性能和支持)。尤其注重产品可靠性、性能和支持)。尤其注重产品的界面和特色。的界面和特色。v测试测试可以从软件产品编码结束之时开可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后始,或在模块(子系统)测试完成之后开始,也可以在验收测试过程中产品达开始,也可以在验收测试过程中产品达到一定的稳定和可靠程度之后再开始。到一定的稳定和可靠程度之后再开始。67v测试测试是由软件的多个用户在实际使用是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关环境下进行的测试。这些用户返回有关错误信息给开发者。错误信息给开发者。v测试时,开发者通常不在测试现场。因测试时,开发者通
45、常不在测试现场。因而,而,测试测试是在开发者无法控制的环境是在开发者无法控制的环境下进行的软件现场应用。下进行的软件现场应用。v在在测试中,由用户记下遇到的所有问测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期题,包括真实的以及主观认定的,定期向开发者报告。向开发者报告。68v测试测试主要衡量产品的主要衡量产品的FLURPS。着重于。着重于产品的支持性,包括文档、客户培训和产品的支持性,包括文档、客户培训和支持产品生产能力。支持产品生产能力。v只有当只有当测试测试达到一定的可靠程度时,才达到一定的可靠程度时,才能开始能开始测试测试。它处在整个测试的最后阶。它处在整个测试的最后阶段。同时,产品的所有手册文本也应该段。同时,产品的所有手册文本也应该在此阶段完全定稿。在此阶段完全定稿。69