1、第八章第八章 系统测试系统测试系统测试的作用和意义系统测试的作用和意义系统测试的作用和意义系统测试的作用和意义 系统测试是保证系统质量与可靠性的最后关口,是对整系统测试是保证系统质量与可靠性的最后关口,是对整个系统开发过程包括系统分析、系统设计和系统实现的最终审个系统开发过程包括系统分析、系统设计和系统实现的最终审查。尽管在系统开发周期的各个阶段均采取了严格的技术审查查。尽管在系统开发周期的各个阶段均采取了严格的技术审查,希望尽早发现问题予以修正,但依然难免遗留下差错,如果,希望尽早发现问题予以修正,但依然难免遗留下差错,如果没有在投入运行前的系统测试阶段被发现并纠正,问题迟早会没有在投入运行
2、前的系统测试阶段被发现并纠正,问题迟早会在运行中暴露出来,到那时要纠正错误将会付出更大的代价,在运行中暴露出来,到那时要纠正错误将会付出更大的代价,甚至会造成不堪设想的后果。因此不要以为程序设计完成后系甚至会造成不堪设想的后果。因此不要以为程序设计完成后系统开发工作就接近尾声了,还有大量重要而艰巨的系统测试工统开发工作就接近尾声了,还有大量重要而艰巨的系统测试工作才刚刚开始。作才刚刚开始。系统测试的对象和目的系统测试的对象和目的(1)(1)系统测试的对象和目的 系统测试的对象不仅仅是源程序,而应是整个软件,它把需求分析、概要设计、详细设计以及程序设计各阶段的开发文档,包括需求规格说明、概要设计
3、说明、详细设计说明以及源程序,都作为测试的对象。由于“程序+文档=软件”,所以系统测试的对象是软件。系统测试的对象和目的系统测试的对象和目的(2)(2)在系统测试中发现的错误可能是各式各样的,按其范围和在系统测试中发现的错误可能是各式各样的,按其范围和性质可划分为以下几类:性质可划分为以下几类:(1 1)功能错误功能错误:由于功能规格说明书不够完整或叙述不够确切:由于功能规格说明书不够完整或叙述不够确切,致使在编码时对功能有误解而产生的错误。,致使在编码时对功能有误解而产生的错误。(2 2)系统错误系统错误:指与外部接口的错误、参数调用错误、子程序:指与外部接口的错误、参数调用错误、子程序调用
4、错误、输入输出地址错误,以及资源管理错误等。调用错误、输入输出地址错误,以及资源管理错误等。系统测试的对象和目的系统测试的对象和目的(3)(3)(3)过程错误:主要指算术运算错误、初始过程错误、逻辑错误等。(4)数据错误:数据结构、内容、属性错误,动态数据与静态数据混淆,参数与控制数据混淆等。(5)编码错误:语法错误、变量名错误、局部变量与全局变量混淆、程序逻辑错误和编码书写错误等。系统测试的基本原则系统测试的基本原则(1)(1)(1 1)测试工作应避免由原开发软件的个人或小组来承担测试工作应避免由原开发软件的个人或小组来承担。测试。测试的目的就是挑剔地找错误,而从心理上来讲,软件开发人员对的
5、目的就是挑剔地找错误,而从心理上来讲,软件开发人员对自己的工作成果有所偏爱,总认为自己开发的软件没有错误或自己的工作成果有所偏爱,总认为自己开发的软件没有错误或错误不大,因而有一种不愿否定自己成果的心理;另一方面,错误不大,因而有一种不愿否定自己成果的心理;另一方面,如果开发人员对软件的功能有理解错误,由本人去找,肯定是如果开发人员对软件的功能有理解错误,由本人去找,肯定是找不出错误的,正所谓找不出错误的,正所谓“当局者当局者 。系统测试的基本原则系统测试的基本原则(2)(2)(2 2)设计测试方案时,不仅要包括确定的输入数据,而且应包设计测试方案时,不仅要包括确定的输入数据,而且应包括从系统
6、功能出发预期的测试结果。括从系统功能出发预期的测试结果。把预期测试结果作为测试方案的组成部分,对于发现错误是把预期测试结果作为测试方案的组成部分,对于发现错误是有帮助的,并且可以提高效率,只要将运行结果与预期测试结有帮助的,并且可以提高效率,只要将运行结果与预期测试结果进行对比即可发现有无错误。否则,由于人们的心理作用或果进行对比即可发现有无错误。否则,由于人们的心理作用或粗心大意,常把一些似是而非的结果当成正确结果,把本该发粗心大意,常把一些似是而非的结果当成正确结果,把本该发现的问题漏掉。现的问题漏掉。系统测试的基本原则系统测试的基本原则(3)(3)(3 3)测试用例不仅要包括合理、有效的
7、输入数据,还要包括无测试用例不仅要包括合理、有效的输入数据,还要包括无效的或不合理的输入数据。效的或不合理的输入数据。在测试中人们常常只注意到从系统功能角度是合理有效的和在测试中人们常常只注意到从系统功能角度是合理有效的和可以预想得到的输入数据,而忽视那些无效的和预想不到的输可以预想得到的输入数据,而忽视那些无效的和预想不到的输入数据。实际上一个软件在投入运行后,一些意想不到的输入入数据。实际上一个软件在投入运行后,一些意想不到的输入是常常会遇到的,如用户输错数、键入非法命令等,如果软件是常常会遇到的,如用户输错数、键入非法命令等,如果软件不能做出适当的反映而失控,就不能说明软件是可靠的。往往
8、不能做出适当的反映而失控,就不能说明软件是可靠的。往往使用预期不合理的数据进行测试比用合理数据收获要大。使用预期不合理的数据进行测试比用合理数据收获要大。系统测试的基本原则系统测试的基本原则(4)(4)(4 4)不仅要检验程序是否做了该做的事,还要检查程序是否同不仅要检验程序是否做了该做的事,还要检查程序是否同时做了不该做的事。时做了不该做的事。多余的副作用即使是无意义的也会影响程序运行效率,甚至多余的副作用即使是无意义的也会影响程序运行效率,甚至有时会带来潜在的危害。有时会带来潜在的危害。系统测试的基本原则系统测试的基本原则(5)(5)(5 5)软件中仍存在错误的概率和已经发现错误的个数是成
9、正比软件中仍存在错误的概率和已经发现错误的个数是成正比的。的。有时软件经测试发现了许多错误后,测试者认为可能错误已有时软件经测试发现了许多错误后,测试者认为可能错误已找得差不多了,因而不必再继续测试了。但经验和统计结果均找得差不多了,因而不必再继续测试了。但经验和统计结果均表明,发现的错误越多,程序中潜在的错误可能会越多。因此表明,发现的错误越多,程序中潜在的错误可能会越多。因此,如软件经测试发现了许多错误,则继续测试发现错误的可能,如软件经测试发现了许多错误,则继续测试发现错误的可能性更大。性更大。系统测试的基本原则系统测试的基本原则(6)(6)(6 6)保留测试用例,作为软件文档的组成部分
10、。保留测试用例,作为软件文档的组成部分。测试用例无论是否发现软件中的错误,都是花费了大量精力测试用例无论是否发现软件中的错误,都是花费了大量精力精心设计出来的,保留这些测试用例将会给重新测试和追加测精心设计出来的,保留这些测试用例将会给重新测试和追加测试带来方便。一旦程序纠错、改进或扩充后,需要重新测试时试带来方便。一旦程序纠错、改进或扩充后,需要重新测试时,将在很大程度上重复以往的测试工作,一方面验证原有错误,将在很大程度上重复以往的测试工作,一方面验证原有错误是否确实正确修改了,另一方面能够发现因修改或扩充而可能是否确实正确修改了,另一方面能够发现因修改或扩充而可能引入的新错误。引入的新错
11、误。传统的软件测试把软件测试过程分成以下几个传统的软件测试把软件测试过程分成以下几个阶段:阶段:单元测试;单元测试;集成测试;集成测试;确认测试;确认测试;系统测试。系统测试。在传统的软件测试中,采用的软件测试技术包在传统的软件测试中,采用的软件测试技术包括:括:人工测试;人工测试;黑盒测试;黑盒测试;白盒测试;白盒测试;动态测试;动态测试;静态测试。静态测试。系统测试的方法系统测试的方法 人工测试:人工测试:个人复查个人复查:指源程序编完以后,直接由程序员自己进:指源程序编完以后,直接由程序员自己进行检查。行检查。走查走查:测试在预先阅读过该软件资料和源程序的前提:测试在预先阅读过该软件资料
12、和源程序的前提下,由测试人员扮演计算机的角色,用人工方法将测试下,由测试人员扮演计算机的角色,用人工方法将测试数据输入被测程序,并在纸上跟踪监视程序的执行情况,数据输入被测程序,并在纸上跟踪监视程序的执行情况,让人代替机器沿着程序的逻辑走一遍,发现程序中的错让人代替机器沿着程序的逻辑走一遍,发现程序中的错误。误。会审会审:测试成员在会审前仔细阅读软件有关资料,根:测试成员在会审前仔细阅读软件有关资料,根据错误类型清单(从以往经验看一般容易发生的错误),据错误类型清单(从以往经验看一般容易发生的错误),填写检测表,列出根据错误类型要提问的问题。会审时,填写检测表,列出根据错误类型要提问的问题。会
13、审时,由程序作者逐个阅读和讲解程序,测试人员逐个审查、由程序作者逐个阅读和讲解程序,测试人员逐个审查、提问、讨论可能产生的错误。提问、讨论可能产生的错误。机器测试:机器测试:黑盒测试黑盒测试:将软件看作黑盒子,在完全不考虑程序的将软件看作黑盒子,在完全不考虑程序的内部结构和特性的情况下,研究软件的外部特性。根据内部结构和特性的情况下,研究软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序的输入和软件的需求规格说明书设计测试用例,从程序的输入和输出特性上测试是否满足设定的功能。输出特性上测试是否满足设定的功能。白盒测试白盒测试:将软件看作一个透明的白盒子,按照程序将软件看作一个透明的白
14、盒子,按照程序的内部结构和处理逻辑来选定测试用例,对的内部结构和处理逻辑来选定测试用例,对软件的逻辑软件的逻辑路径及过程进行测试,检查与设计是否相符。路径及过程进行测试,检查与设计是否相符。黑盒测试黑盒测试如果已经知道了产品应该具有的功能,如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;可以通过测试来检验是否每个功能都能正常使用;白盒测试白盒测试如果知道产品内部工作过程,可以通过如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定测试来检验产品内部动作是否按照规格说明书的规定正常进行,且所有内部部件被充分利用(确保正常进行,且所有内部部
15、件被充分利用(确保“所有所有齿轮吻合齿轮吻合”)。)。系统测试的步骤系统测试的步骤 -单元测试单元测试:程序中的一个模块或一个子程序,是程:程序中的一个模块或一个子程序,是程序设计的最小单元,是程序最小的独立编译单位。序设计的最小单元,是程序最小的独立编译单位。-组装测试组装测试:在每个模块完成了单元测试以后,需要:在每个模块完成了单元测试以后,需要按照设计时作出的层次模块图把它们连接起来,进行组装测按照设计时作出的层次模块图把它们连接起来,进行组装测试。试。-确认测试确认测试:经过组装测试,软件已装配完毕,接下:经过组装测试,软件已装配完毕,接下来进行的确认测试和系统测试将是以整个软件做为测
16、试对象,来进行的确认测试和系统测试将是以整个软件做为测试对象,且采用黑盒测试方法。且采用黑盒测试方法。-系统测试系统测试:将信息系统的所有组成部分包括软件、:将信息系统的所有组成部分包括软件、硬件、用户以及环境等综合在一起进行测试,以保证系统的硬件、用户以及环境等综合在一起进行测试,以保证系统的各组成部分协调运行。各组成部分协调运行。设计信息设计信息可可运运行行系系统统系统其它系统其它元素元素单 元单 元测试测试单 元单 元测试测试单 元单 元测试测试组 装组 装测试测试确 认确 认测试测试系 统系 统测试测试软件需求软件需求信息信息测后软件测后软件测后模块测后模块模块模块模块模块模块模块确认
17、后软件确认后软件 系统测试的步骤系统测试的步骤渐增式测试方法对程序的测试更彻底。渐增式测试需要较多的机器渐增式测试方法对程序的测试更彻底。渐增式测试需要较多的机器时间。时间。非渐增式测试方法可以并行测试所有模块,因此能充分利用人力,非渐增式测试方法可以并行测试所有模块,因此能充分利用人力,加快工程进度。加快工程进度。总的说来,渐增式测试方法比较好。使用渐增方式把模块结合到总的说来,渐增式测试方法比较好。使用渐增方式把模块结合到软件系统中去时,有自顶向下和自底向上两种方法。软件系统中去时,有自顶向下和自底向上两种方法。自顶向下结合自顶向下结合从主控制模块(从主控制模块(“主程序主程序”)开始,沿
18、着软件的控制)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。层次向下移动,从而逐渐把各个模块结合起来。自底向上结合自底向上结合自底向上测试从自底向上测试从“原子原子”模块(即在软件结构最低层模块(即在软件结构最低层的模块)开始组装和测试。的模块)开始组装和测试。不同测试策略的比较不同测试策略的比较自顶向下结合的优点:自顶向下结合的优点:不需要测试驱动程序,能在早期实现并验证系统的主要功能不需要测试驱动程序,能在早期实现并验证系统的主要功能,能较早发现上层模快的接口错误。,能较早发现上层模快的接口错误。自顶向下结合的缺点:自顶向下结合的缺点:需要存根程序,可能遇到与此相联系的测试
19、困难,低层关键需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。力。自底向上测试方法的优缺点刚好相反。自底向上测试方法的优缺点刚好相反。混合策略:混合策略:改进的自顶向下测试方法:改进的自顶向下测试方法:基本上使用自顶向下的测试方法,但是在早期,就使用自基本上使用自顶向下的测试方法,但是在早期,就使用自底向上的方法测试软件中的少数关键模块。底向上的方法测试软件中的少数关键模块。混合法:混合法:对软件结构中较上层,使用的是自顶向下方法;对软件结对软件结构中较上层,使用的是自顶向下方法;对软件结构中较下层,使用的是自底向上方法,两者相结合。构中较下层,使用的是自底向上方法,两者相结合。