免费智能真题库 > 历年试卷 > 信息系统管理工程师 > 2022年下半年 信息系统管理工程师 上午试卷 综合知识
  第52题      
  知识点:   测试过程   单元测试   系统测试   系统测试过程   集成测试
  关键词:   测试过程   测试顺序   单元测试   集成测试   系统测试   测试        章/节:   系统实施基础知识       

 
测试过程中,正确的测试顺序应该是_(52)。
单元测试②)集成测试系统测试
 
 
  A.  ①②③
 
  B.  ③①②
 
  C.  ②③①
 
  D.  ③②①
 
 
 

  相关试题:系统实施基础知识          更多>  
 
  第10题    2024年上半年  
   0%
从测试所暴露的错误出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而..
  第2题    2025年下半年  
   0%
某公司要用一套新的订单管理系统替换旧的系统,为实现平稳转换,公司决定先上线新系统的订单统计报表摸块,再逐步上线其它模块。..
  第9题    2015年上半年  
   33%
在面向对象程序设计语言中(9)是利用可重用成分来构造软件系统的最有效特性。
   知识点讲解    
   · 测试过程    · 单元测试    · 系统测试    · 系统测试过程    · 集成测试
 
       测试过程
        测试是开发过程中一个独立且非常重要的阶段,也是保证开发质量的重要手段之一。测试过程基本上与开发过程平行进行。在测试过程中,需要对整个测试过程进行有效的管理,以保证测试质量和测试效率。一个规范化的测试过程通常包括以下基本的测试活动。
        .拟定测试计划。
        .编制测试大纲。
        .设计和生成测试用例。
        .实施测试。
        .生成测试报告。
        要使测试有计划且有条不紊地进行,需要编写测试文档。测试文档主要有测试计划和测试分析报告。测试文档的格式和要求参见本书的第10章。
        (1)拟定测试计划。
        在拟定测试计划时,要充分考虑整个项目的开发时间和开发进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有:测试的内容、进度安排、测试所需的环境和条件(包括设备、被测项目、人员等)、测试培训安排等。
        (2)编制测试大纲。
        测试大纲是测试的依据。它明确详尽地规定了在测试中计对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。无论是自动测试还是手动测试,都必须满足测试大纲的要求。
        (3)设计和生成测试用例。
        根据测试大纲,设计和生成测试用例。在设计测试用例时,可综合利用前面介绍的测试用例设计技术,产生测试设计说明文档,其内容主要有:被测项目、输入数据、测试过程、预期输出结果,等等。
        (4)实施测试。
        测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。
        (5)生成测试报告。
        测试完成后要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误。另外,给出一些建议,如:可采用的修改方法,各项修改预计的工作量及修改的负责人等。
        通常,测试与纠错是反复交替进行的。如果使用专业测试人员,测试与纠错可以平行进行,从而节约了总的开发时间。另外,由于专业测试人员有丰富的测试经验,采用系统化的测试方法并能全时地投入,而且独立于开发人员的思维,使得他们能够更有效地发现许多单靠开发人员很难发现的错误和问题。
 
       单元测试
        单元测试也被称为被模块测试。在模块编写完成且无编译错误后就可以进行。可以选用人工测试或机器测试,当用机器测试时,一般采用白盒测试法,多个模块可以同时进行。
        (1)单元测试的内容。
        在单元测试中,主要从模块的5个特征进行检查:模块接口、局部数据结构、重要的执行路径、出错处理和边界条件。
        ①模块接口,如果所测模块的数据流不能正确地输入、输出,则根本就无法进行其他的测试。所以在单元测试中要考察模块的接口。Myers提出了接口测试要点如下。
        .调用被测模块的输入参数和形式参数在个数、属性、单位上是否一致
        .调用其他模块时所给的实际参数和被调模块的形式参数在个数、属性、单位上是否一致
        .调用标准函数时所用的参数在属性、数目和顺序上是否正确
        .全局变量在各模块中的定义和用法是否一致
        .输入是否仅改变了形式参数
        如果模块完成了外部的输入或输出,还应该再检查以下要点:
        .开/关的语句是否正确
        .规定的I/0格式是否与输入输出语句一致
        .在使用文件之前是否已经打开文件或使用文件完毕后是否已关闭文件
        .输入输出的错误是否被检查并处理
        .输出的提示信息是否有误
        ②局部数据结构,在单元测试中,局部数据结构出错是比较常见的错误,在测试时应重点考虑以下因素。
        .变量的说明是否合适
        .是否使用了尚未赋值或尚未初始化的变量
        .变量的初始值或默认值是否正确
        .变量名是否有错,例如拼写错误
        .是否出现上溢。下溢或地址异常的错误
        如果有可能,还应确定全局变量对模块的影响。
        ③重要的执行路径,在单元测试中,对路径的测试是最基本的任务。由于不能进行穷举测试,需要精心设计测试用例来发现是否有计算、比较或控制流等方面的错误。
        计算方面的错误主要有:算术运算的优先次序不正确或理解错误;精度不够;运算对象的类型彼此不匹配;算法不正确;表达式的符号表示不正确等。
        比较和控制流是紧密结合的,一般是通过比较来决定控制流的改变。关于这方面的错误主要有:本应相等的量由于精度问题造成不相等;不同类型进行比较;逻辑运算符不正确或优先次序错误;循环终止不正确(如多循环一次或少循环一次)、死循环;不恰当地修改循环变量;当遇到分支循环时,发生出口错误等。
        ④出错处理,好的设计应该能预测到出错的条件并且有对出错处理的路径。虽然计算机可以显示出错信息的内容,但仍需要程序员对出错进行处理,保证其逻辑的正确性,便于用户维护。对出错的测试应该着重考虑这些常见错误:错误的描述难于理解;错误提示与实际错误不相符;出错的提示信息不足以确定错误或确定造成错误的原因;在对错误进行处理之前,系统已经对错误条件进行了干预等。
        ⑤边界条件,边界条件的测试是单元测试的最后工作,也是非常重要的工作。软件容易在边界出现错误,如一个n维数组,在处理数组第n个下标时常常发生错误。要仔细选择测试用例,重点考察数据流、控制流在刚好等于、大于或小于最大值或最小值的情况。
        模块测试通常由程序员本人来完成。但项目负责人应该注意测试结果,将这些些测试资料妥善保存,为后续的测试工作打下良好的基础。
        (2)单元测试的方法。
        由于模块不是独立运行的程序,各模块之间存在联系,即存在调用与被调用的关系,在对每个模块进行测试时,需要开发两种模块:
        ①驱动模块(driver),相当于一个主程序,用于接收测试用例的数据,将这些数据送到被测模块,输出测试结果。
        ②桩模块(stub),也被称为存根模块,桩模块用来代替被测模块中所调用的子模块,其内可进行少量的数据处理,目的是为了检验入口,输出调用和返回信息。
        驱动模块和桩模块是测试用的软件,不是要交给用户的软件组成部分,但需要占用一定的开发费用。为了降低成本,对于一些不能用简单的测试软件进行充分测试的模块,可以用下节介绍的增量式测试方法,在组装测试的同时完成对模块的详细测试。
        提高模块的内聚度可以简化单元测试。如果每个模块只完成一种功能,对于具体模块来讲,所需的测试方案数目就会显著减少,而且更容易发现和预测模块中的错误。
 
       系统测试
        系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方。系统测试是根据系统分析说明书来设计测试用例的,常见的系统测试主要有以下内容:
        (1)恢复测试(Recovery Testing)。
        恢复测试将检测系统的容错能力。检测方法是采用各种方法让系统出现故障,检验系统是否能按照要求从故障中恢复过来,并在预定的时间内开始处理事务,而且不对系统造成任何损害。如果系统的恢复是自动的(由系统自动完成),则需要验证重新初始化、检查点、数据恢复等是否正确。如果恢复需要人工干预,就要对恢复的平均时间进行评估并判断它是否在允许的范围内。
        (2)安全性测试(Security Testing)。
        系统的安全性测试用于检测系统的安全机制、保密措施是否完善且没有漏洞。主要是为了验证系统的防范能力。测试的方法是测试人员模拟非法入侵者,采用各种方法冲破防线。例如,以系统的输入作为突破口,利用输入的容错性进行正面攻击;故意使系统出错,利用系统恢复的过程,窃取密码或其他有用的信息;想方设法截取或破译密码;利用浏览非保密数据,获取所需信息,等等。从理论上说,只要时间和资源允许,没有进入不了的系统。所以,系统安全性设计准则是使非法入侵者所花费的代价比进入系统后所得到的好处要大,此时非法入侵已无利可图。
        (3)强度测试(Stress Testing)。
        强度测试是对系统在异常情况下的承受能力的测试,是检查系统在极限状态下运行的情况下,性能下降的幅度是否在被允许的范围内。因此,强度测试要求系统在非正常数量、频率或容量的情况下运行,例如,运行使系统处理超过设计能力的最大允许值的测试用例;设计测试用例使系统传输超过设计最大能力的数据,包括内存的写入和读出,外部设备等;对磁盘保留的数据,设计产生过度搜索的测试用例;等等。强度测试主要是为了发现,在有效的输入数据中可能引起的不稳定或不正确的数据组合。
        (4)性能测试(Performance Test)。
        性能测试用于检查系统是否满足系统分析说明书对性能的要求。特别是实时系统或嵌入式系统,即使软件的功能满足需求,但性能达不到要求也是不行的。性能测试覆盖了软件测试的各阶段,而不是等到系统的各部分所有都组装之后,才确定系统的真正性能。通常与强度测试结合起来进行,并同时对软件、硬件进行测试。软件方面主要从响应时间、处理速度、吞吐量、处理精度等方面来检测。
        (5)可靠性测试(Reliability Testing)。
        对于系统分析说明书中提出了可靠性要求时,要对系统的可靠性进行测试。通常使用以下几个指标来衡量系统的可靠性:
        .平均失效间隔时间(Mean Time Between Failures MTBF)是否超过了规定的时限。
        .因故障而停机时间(Mean Time To Repairs MTTR)在一年中应不超过多少时间。
        (6)安装测试(Installation Testing)。
        在安装软件系统时,会有多种选择。安装测试就是为了检测在安装过程中是否有误、是否易操作等。主要检测:系统的每一个部分是否齐全;硬件的配置是否合理;安装中需要产生的文件和数据库是否已产生,其内容是否正确等。
        最后再强调一下,信息系统的开发过程通常为系统分析、设计、编码实现等阶段。而每个阶段都有可能出现错误,测试过程正好与开发过程相反,其开发和测试的关系如下图所示,单元测试主要是发现编码阶段的错误。组装测试主要用于发现设计阶段产生的错误,如果在确认测试中发现系统分析有错误,这就需要重新修改系统分析、设计和编码。这说明越早犯的错误要到最后才能被发现,因此要重视开发的前期工作。
        
        测试与开发的各阶段的关系
 
       系统测试过程
        由于信息系统的构成可能比较复杂,所涉及的问题比较多,为了保证整个开发任务的按期完成,测试工作不一定只在测试阶段才进行,能提前的应尽量提前。而且可按功能分别进行。例如,硬件、网络等设备在到货后应进行初验,安装后再进行详细的测试,最后结合应用软件等对整个信息系统进行测试。本节将针对信息系统中的硬件系统、网络系统和软件系统中的测试步骤和测试内容进行介绍,重点为软件测试。
               测试过程
               测试是开发过程中一个独立且非常重要的阶段,也是保证开发质量的重要手段之一。测试过程基本上与开发过程平行进行。在测试过程中,需要对整个测试过程进行有效的管理,以保证测试质量和测试效率。一个规范化的测试过程通常包括以下基本的测试活动。
               .拟定测试计划。
               .编制测试大纲。
               .设计和生成测试用例。
               .实施测试。
               .生成测试报告。
               要使测试有计划且有条不紊地进行,需要编写测试文档。测试文档主要有测试计划和测试分析报告。测试文档的格式和要求参见本书的第10章。
               (1)拟定测试计划。
               在拟定测试计划时,要充分考虑整个项目的开发时间和开发进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有:测试的内容、进度安排、测试所需的环境和条件(包括设备、被测项目、人员等)、测试培训安排等。
               (2)编制测试大纲。
               测试大纲是测试的依据。它明确详尽地规定了在测试中计对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。无论是自动测试还是手动测试,都必须满足测试大纲的要求。
               (3)设计和生成测试用例。
               根据测试大纲,设计和生成测试用例。在设计测试用例时,可综合利用前面介绍的测试用例设计技术,产生测试设计说明文档,其内容主要有:被测项目、输入数据、测试过程、预期输出结果,等等。
               (4)实施测试。
               测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。
               (5)生成测试报告。
               测试完成后要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误。另外,给出一些建议,如:可采用的修改方法,各项修改预计的工作量及修改的负责人等。
               通常,测试与纠错是反复交替进行的。如果使用专业测试人员,测试与纠错可以平行进行,从而节约了总的开发时间。另外,由于专业测试人员有丰富的测试经验,采用系统化的测试方法并能全时地投入,而且独立于开发人员的思维,使得他们能够更有效地发现许多单靠开发人员很难发现的错误和问题。
               测试内容
               由于每种测试所花费的成本不同,如果测试步骤安排得不合理,将会造成为了寻找错误原因而浪费大量的时间以及重复测试的情况。因此,合理安排测试步骤对于提高测试效率和降低测试成本有很大的作用,信息系统测试分别按硬件系统、网络系统和软件系统进行测试,最后对整个系统进行总的综合测试。
               (1)硬件测试。
               在进行信息系统开发中,通常需要根据项目的情况选购硬件设备。在设备到货后,应在各个相关厂商配合下进行初验测试,初验通过后将硬件与软件、网络等一起进行系统测试。初验测试所做的工作主要如下。
               .配置检测,检测是否按合同提供了相应的配置,如系统软件、硬盘、内存、CPU等的配置情况。
               .硬件设备的外观检查,所有设备及配件开箱后,外观有无明显划痕和损伤。这些包括计算机主机、工作站、磁带库、磁盘机柜和存储设备等。
               .硬件测试,首先进行加电检测,观看运行状态是否正常,有无报警、屏幕有无乱码提示和死机现象,是否能进入正常提示状态。然后进行操作检测,用一些常用的命令来检测机器是否能执行命令,结果是否正常。例如,文件复制、显示文件内容、建立目录等。最后检查是否提供了相关的工具,如帮助系统、系统管理工具等。
               通过以上测试,要求形成相应的硬件测试报告,在测试报告中包含测试步骤、测试过程和测试的结论等。
               (2)网络测试。
               如果信息系统不是单机,需要在局域网或广域网运行,按合同会选购网络设备。在网络设备到货后,应在各个相关厂商配合下进行初验测试。初验通过后网络将与软件、硬件等一起进行系统测试。初验测试所做的工作主要如下。
               .网络设备的外观检查,所有设备及配件开箱后,外观有无明显划痕和损伤,这些包括交换机、路由器等。
               .硬件测试,进行加电检测,观看交换机、路由器等工作状态是否正常,有无错误和报警。
               .网络连通测试,检测网络是否连通,可以用ping、 telnet、 ftp等命令来检查。
               通过以上测试,要求形成相应的网络测试报告,在测试报告中包含测试步骤、测试过程和测试的结论等。
               (3)软件测试。
               软件测试实际上分成4步:单元测试、组装测试、确认测试和系统测试,它们将按顺序进行。首先是单元测试(Unit Testing),对源程序中的每一个程序单元进行测试,验证每个模块是否满足系统设计说明书的要求。组装测试(Integration Testing)是将已测试过的模块组合成子系统,重点测试各模块之间的接口和联系。确认测试(Validation Testing)是对整个软件进行验收,根据系统分析说明书来考察软件是否满足要求。系统测试(System Testing)是将软件、硬件、网络等系统的各个部分连接起来,对整个系统进行总的功能、性能等方面的测试。
               下面将分别对单元测试、组装测试、确认测试和系统测试的内容和要求加以说明。
               单元测试
               单元测试也被称为被模块测试。在模块编写完成且无编译错误后就可以进行。可以选用人工测试或机器测试,当用机器测试时,一般采用白盒测试法,多个模块可以同时进行。
               (1)单元测试的内容。
               在单元测试中,主要从模块的5个特征进行检查:模块接口、局部数据结构、重要的执行路径、出错处理和边界条件。
               ①模块接口,如果所测模块的数据流不能正确地输入、输出,则根本就无法进行其他的测试。所以在单元测试中要考察模块的接口。Myers提出了接口测试要点如下。
               .调用被测模块的输入参数和形式参数在个数、属性、单位上是否一致
               .调用其他模块时所给的实际参数和被调模块的形式参数在个数、属性、单位上是否一致
               .调用标准函数时所用的参数在属性、数目和顺序上是否正确
               .全局变量在各模块中的定义和用法是否一致
               .输入是否仅改变了形式参数
               如果模块完成了外部的输入或输出,还应该再检查以下要点:
               .开/关的语句是否正确
               .规定的I/0格式是否与输入输出语句一致
               .在使用文件之前是否已经打开文件或使用文件完毕后是否已关闭文件
               .输入输出的错误是否被检查并处理
               .输出的提示信息是否有误
               ②局部数据结构,在单元测试中,局部数据结构出错是比较常见的错误,在测试时应重点考虑以下因素。
               .变量的说明是否合适
               .是否使用了尚未赋值或尚未初始化的变量
               .变量的初始值或默认值是否正确
               .变量名是否有错,例如拼写错误
               .是否出现上溢。下溢或地址异常的错误
               如果有可能,还应确定全局变量对模块的影响。
               ③重要的执行路径,在单元测试中,对路径的测试是最基本的任务。由于不能进行穷举测试,需要精心设计测试用例来发现是否有计算、比较或控制流等方面的错误。
               计算方面的错误主要有:算术运算的优先次序不正确或理解错误;精度不够;运算对象的类型彼此不匹配;算法不正确;表达式的符号表示不正确等。
               比较和控制流是紧密结合的,一般是通过比较来决定控制流的改变。关于这方面的错误主要有:本应相等的量由于精度问题造成不相等;不同类型进行比较;逻辑运算符不正确或优先次序错误;循环终止不正确(如多循环一次或少循环一次)、死循环;不恰当地修改循环变量;当遇到分支循环时,发生出口错误等。
               ④出错处理,好的设计应该能预测到出错的条件并且有对出错处理的路径。虽然计算机可以显示出错信息的内容,但仍需要程序员对出错进行处理,保证其逻辑的正确性,便于用户维护。对出错的测试应该着重考虑这些常见错误:错误的描述难于理解;错误提示与实际错误不相符;出错的提示信息不足以确定错误或确定造成错误的原因;在对错误进行处理之前,系统已经对错误条件进行了干预等。
               ⑤边界条件,边界条件的测试是单元测试的最后工作,也是非常重要的工作。软件容易在边界出现错误,如一个n维数组,在处理数组第n个下标时常常发生错误。要仔细选择测试用例,重点考察数据流、控制流在刚好等于、大于或小于最大值或最小值的情况。
               模块测试通常由程序员本人来完成。但项目负责人应该注意测试结果,将这些些测试资料妥善保存,为后续的测试工作打下良好的基础。
               (2)单元测试的方法。
               由于模块不是独立运行的程序,各模块之间存在联系,即存在调用与被调用的关系,在对每个模块进行测试时,需要开发两种模块:
               ①驱动模块(driver),相当于一个主程序,用于接收测试用例的数据,将这些数据送到被测模块,输出测试结果。
               ②桩模块(stub),也被称为存根模块,桩模块用来代替被测模块中所调用的子模块,其内可进行少量的数据处理,目的是为了检验入口,输出调用和返回信息。
               驱动模块和桩模块是测试用的软件,不是要交给用户的软件组成部分,但需要占用一定的开发费用。为了降低成本,对于一些不能用简单的测试软件进行充分测试的模块,可以用下节介绍的增量式测试方法,在组装测试的同时完成对模块的详细测试。
               提高模块的内聚度可以简化单元测试。如果每个模块只完成一种功能,对于具体模块来讲,所需的测试方案数目就会显著减少,而且更容易发现和预测模块中的错误。
               组装测试
               组装测试也被称为集成测试。即使所有模块都通过了测试,但在组装之后,仍可能会出现问题:通过模块的数据被丢失;一个模块的功能对其他模块造成有害的影响;各个模块被组合起来后没有达到预期功能;全局数据结构出现问题;另外单个模块的误差可以接受,但模块组合后,可能会出现误差累积,最后达到不能接受的程度,所以需要组装测试。
               通常,组装测试有两种方法:一种是分别测试各个模块,再把这些模块组合起来进行整体测试,这种方法被称为非增量式集成。另一种是把下一个要测试的模块组合到已测试好的模块中,测试完后再将下一个需测试的模块组合进来进行测试,逐步把所有模块组合在一起,并完成测试。该方法被称为增量式集成。非增量式集成可以对模块进行并行测试,能充分利用人力,以加快工程进度。但这种方法容易混乱,出现的错误不容易被查找和定位。增量式测试的范围是一步步扩大的,所以错误容易被定位,而且已测试的模块可在新的条件下进行测试,程序测试得更彻底。
               增量式测试技术有自顶向下的增量方式和自底向上的增量方式两种测试方法。
               (1)自顶向下的增量方式。
               自顶向下的增量方式是模块按程序的控制结构,从上到下的组合方式。再增加测试模块时有先深度后宽度和先宽度后深度两种次序。如下图所示的自顶向下组合示例中,先深度后宽度的方法是把程序结构中的一条主路径上的模块相组合,测试顺序可以是M1→M2→M5→M6→M3→M7→M4。先宽度后深度的方法是把模块按层进行组合,测试顺序是M1→M2→M3→M4→M5→M6→M7。组装过程可分成以下步骤:
               
               自顶向下的组合示例
               .用主模块作为驱动模块,与之直接相连的模块用桩模块代替。
               .根据所选的测试次序,用下一个模块替换所用的桩模块;而新引入模块的直接下属模块用桩模块代替,构成新的测试对象。
               .结合一个模块测试一个模块。为了避免引入新模块产生新问题,需要进行回归测试,即重复部分或全部已经进行过的测试。
               .所有模块是否已经被组合到系统中,并完成测试。如果没有完成测试,则返回到第二步,重复进行;如果完成测试,则停止测试。
               自顶向下的增量方式可以较早地验证控制和判断点,如果出现问题可及时进行纠正。在测试时不需要编写驱动模块,但需要桩模块。另外,如果高层模块对下层模块依赖性很大,需要返回大量信息,在用桩模块代替时,桩模块的编写就相对复杂,必然会增加开销。这时可以用下面介绍的自底向上的增量方式。
               (2)自底向上的增量方式。
               自底向上的增量方式是从最底层的功能模块开始,边组合边测试,从下向上地完成整个程序结构的测试。其步骤可以概括为:
               .将最底层的模块组合成能完成某种特定功能的模块簇,为每个模块簇设计驱动程序,用驱动程序来控制并进行测试。
               .按从下向上的方向,用实际模块替换相对应的驱动程序,组成新的模块簇,再为该模块簇设计驱动程序,用新的驱动程序进行控制和测试。
               .所有模块是否已经被组合到系统中,并完成测试。如果没有完成测试,则返回到第二步,重复进行;如果完成测试,则停止测试。
               自底向上的增量方式可以较早地发现底层关键性模块出现的错误。在测试时不需要缩写桩模块,但需要驱动模块。另外,这种方式对程序中的主要控制错误的发现相对较晚。
               组装测试的方法选择取决于软件的特点和进度安排。在工程中,通常将这两种方法结合起来使用,即对位于软件结构中较上层的使用自顶向下的方法,而对于较底层的使用自底向上的方法。
               确认测试
               经过组装测试之后,软件就被集成起来,接口方面的问题已被排除,就可以进入软件测试的最后一个环节——确认测试。确认测试的任务是进一步验证软件的有效性,也就是说,检查软件的功能和性能是否与用户的要求一样。系统分析说明书描述了用户对软件的要求,所以是软件有效性验证的标准,也是确认测试的基础。
               确认测试的步骤如下图所示。首先要进行有效性测试以及软件配置审查,然后进行验收测试和安装测试,经过管理部门的认可和专家的鉴定后,软件即可交给用户使用。
               
               确认测试的步骤
               (1)有效性测试。
               有效性测试就是在模拟环境下,通过黑盒测试检验所开发的软件是否与需求规格说明书一致。为此,需要制定测试计划,规定要做的测试类型,设计测试用例,组织测试人员对已集成的软件进行测试。在设计测试用例时,除了检测软件的功能和性能之外,还需要对软件的容错性、维护性等其他方面进行检测。测试人员可由开发商的内部人员组成,但最好是没有参加该项目的有经验的软件设计人员。在所有测试用例完成之后,测试结果有两种情况:
               .功能和性能等都满足需求,可以接受。
               .发现测试结果与预期的不符,这时要列出缺陷清单。在这个阶段才发现的严重错误一般很难在预定的时间内纠正,需要与用户协商,寻找妥善解决问题的办法。
               (2)软件配置审查。
               确认测试的另一个环节是软件配置的审查,主要是检查软件(源程序、目标程序)和文档(包括面向开发和用户)是否齐全以及分类是否有序。确保文档、资料的正确和完善,以便维护阶段使用。
               (3)验收测试。
               在经过软件的有效性测试和软件配置复查后,就应该开始软件系统的验收测试。验收测试是以用户为主的测试。软件开发人员和质量保证人员也应参加。在验收测试之前,需要对用户进行培训,以便熟悉该系统。验收测试的测试用例由用户参与设计,主要验证软件的功能、性能、可移植性、兼容性、容错性等,测试时一般采用实际数据。
               系统测试
               系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方。系统测试是根据系统分析说明书来设计测试用例的,常见的系统测试主要有以下内容:
               (1)恢复测试(Recovery Testing)。
               恢复测试将检测系统的容错能力。检测方法是采用各种方法让系统出现故障,检验系统是否能按照要求从故障中恢复过来,并在预定的时间内开始处理事务,而且不对系统造成任何损害。如果系统的恢复是自动的(由系统自动完成),则需要验证重新初始化、检查点、数据恢复等是否正确。如果恢复需要人工干预,就要对恢复的平均时间进行评估并判断它是否在允许的范围内。
               (2)安全性测试(Security Testing)。
               系统的安全性测试用于检测系统的安全机制、保密措施是否完善且没有漏洞。主要是为了验证系统的防范能力。测试的方法是测试人员模拟非法入侵者,采用各种方法冲破防线。例如,以系统的输入作为突破口,利用输入的容错性进行正面攻击;故意使系统出错,利用系统恢复的过程,窃取密码或其他有用的信息;想方设法截取或破译密码;利用浏览非保密数据,获取所需信息,等等。从理论上说,只要时间和资源允许,没有进入不了的系统。所以,系统安全性设计准则是使非法入侵者所花费的代价比进入系统后所得到的好处要大,此时非法入侵已无利可图。
               (3)强度测试(Stress Testing)。
               强度测试是对系统在异常情况下的承受能力的测试,是检查系统在极限状态下运行的情况下,性能下降的幅度是否在被允许的范围内。因此,强度测试要求系统在非正常数量、频率或容量的情况下运行,例如,运行使系统处理超过设计能力的最大允许值的测试用例;设计测试用例使系统传输超过设计最大能力的数据,包括内存的写入和读出,外部设备等;对磁盘保留的数据,设计产生过度搜索的测试用例;等等。强度测试主要是为了发现,在有效的输入数据中可能引起的不稳定或不正确的数据组合。
               (4)性能测试(Performance Test)。
               性能测试用于检查系统是否满足系统分析说明书对性能的要求。特别是实时系统或嵌入式系统,即使软件的功能满足需求,但性能达不到要求也是不行的。性能测试覆盖了软件测试的各阶段,而不是等到系统的各部分所有都组装之后,才确定系统的真正性能。通常与强度测试结合起来进行,并同时对软件、硬件进行测试。软件方面主要从响应时间、处理速度、吞吐量、处理精度等方面来检测。
               (5)可靠性测试(Reliability Testing)。
               对于系统分析说明书中提出了可靠性要求时,要对系统的可靠性进行测试。通常使用以下几个指标来衡量系统的可靠性:
               .平均失效间隔时间(Mean Time Between Failures MTBF)是否超过了规定的时限。
               .因故障而停机时间(Mean Time To Repairs MTTR)在一年中应不超过多少时间。
               (6)安装测试(Installation Testing)。
               在安装软件系统时,会有多种选择。安装测试就是为了检测在安装过程中是否有误、是否易操作等。主要检测:系统的每一个部分是否齐全;硬件的配置是否合理;安装中需要产生的文件和数据库是否已产生,其内容是否正确等。
               最后再强调一下,信息系统的开发过程通常为系统分析、设计、编码实现等阶段。而每个阶段都有可能出现错误,测试过程正好与开发过程相反,其开发和测试的关系如下图所示,单元测试主要是发现编码阶段的错误。组装测试主要用于发现设计阶段产生的错误,如果在确认测试中发现系统分析有错误,这就需要重新修改系统分析、设计和编码。这说明越早犯的错误要到最后才能被发现,因此要重视开发的前期工作。
               
               测试与开发的各阶段的关系
 
       集成测试
        集成测试也叫做组装测试或联合测试。通常,在单元测试的基础上,需要将所有模块按照概要设计说明书和详细设计说明书的要求进行组装。
        . 组装时需要考虑的问题。
        ①在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
        ②一个模块的功能是否会对另一个模块的功能产生不利的影响;
        ③各个子功能组合起来,能否达到预期要求的父功能;
        ④全局数据结构是否有问题;
        ⑤单个模块的误差累积起来,是否会放大,以至达到不能接受的程度。
        因此,在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。
        子系统的集成测试称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。
        选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号的次序和测试的次序以及生成测试用例的费用和调试的费用。
        . 模块组装成为系统的方式。
        模块组装成为系统的方式有两种:一次性组装方式和增殖式组装方式。
        ①一次性组装方式(big bang)。
        它是一种非增殖式组装方式,也叫做整体拼装。使用这种方式,首先对每个模块分别进行模块测试,再把所有模块组装在一起进行测试,最终得到要求的软件系统。例如,有一个模块系统结构,如下图(a)所示。其单元测试和组装顺序如下图(b)所示。
        
        一次性组装方式
        在如上图(b)中,模块d1,d2,d3,d4,d5是对各个模块做单元测试时建立的驱动模块,s1,s2,s3,s4,s5是为单元测试而建立的桩模块。这种一次性组装方式试图在辅助模块的协助下,在分别完成模块单元测试的基础上,将所测模块连接起来进行测试。但是由于程序中不可避免地存在涉及模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性并不很大。其结果是,发现有错误,却茫然找不到原因。查错和改错都会遇到困难。
        ②增殖式组装方式。
        这种组装方式又称渐增式组装,是首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题。最后通过增殖逐步组装成为要求的软件系统。
        . 自顶向下的增殖方式。这种组装方式是将模块按系统程序结构,沿控制层次自顶向下进行组装。其步骤如下:首先以主模块作为所测模块兼驱动模块,所有直属于主模块的下属模块全部用桩模块代替,对主模块进行测试。再采用深度优先(如下图所示为自顶向下的增殖方式)或广度优先的策略,用实际模块替换相应的桩模块,再用桩模块代替它们的直接下属模块,与已测试的模块或子系统组装成新的子系统。然后,进行回归测试(即重新执行以前做过的全部测试或部分测试),排除组装过程中引入新的错误的可能。最后,判断是否所有的模块都已组装到系统中。是,则结束测试;否则,转到B去执行。
        
        自顶向下的增殖方式
        自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。在一个功能划分合理的程序模块结构中,判断常常出现在较高的层次里,因而,能够较早地遇到这种问题。如果主要控制有问题,尽早发现它能够减少以后的返工,这是十分必要的。如果选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能,可先对逻辑输入的分支进行组装和测试,检查和克服潜藏的错误和缺陷,验证其功能的正确性,就为其后对主要加工分支的组装和测试提供了保证。此外,功能可行性较早地得到证实,还能够增强开发者和用户成功的信心。
        . 自底向上的增殖方式。这种组装方式是从程序模块结构的最底层模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以通过直接运行子模块得到。自底向上增殖的步骤如下:首先由驱动模块控制最底层模块的并行测试;也可以把最底层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。再用实际模块代替驱动模块,与它已测试的直属子模块组装成为子系统。然后,为子系统配备驱动模块,进行新的测试。最后判断是否已组装到达主模块。是,则结束测试;否则,执行B。
        以如下图一(a)所示的一次性组装方式系统结构为例,可以用如下图二说明自底向上组装和测试的顺序。
        
        一次性组装方式
        
        自底向上的增殖方式
        . 混合增殖式测试。自顶向下增殖的方式和自底向上增殖的方式各有优缺点。一般来讲,一种方式的优点是另一种方式的缺点。
        自顶向下增殖方式的缺点是需要建立桩模块。要使桩模块能够模拟实际子模块的功能十分困难,因为,桩模块在接收了所测模块发送的信息后,需要按照它所代替的实际子模块功能返回应该回送的信息,这必将增加建立桩模块的复杂度,而且导致增加一些附加的测试。同时,涉及复杂算法和真正输入/输出的模块一般在底层,它们是最容易出问题的模块,到组装和测试的后期才遇到这些模块,一旦发现问题,就会导致过多的回归测试。而自顶向下增殖方式的优点是能够较早地发现主要控制方面的问题。
        自底向上增殖方式的缺点是“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。就是说,在自底向上组装和测试的过程中,对主要的控制直到最后才接触到。这种方式的优点是不需要桩模块,而建立驱动模块一般比建立桩模块容易,同时由于涉及到复杂算法和真正输入/输出的模块最先得到组装和测试,可以把最容易出问题的部分在早期解决。此外自底向上增殖的方式可以实施多个模块的并行测试,提高测试效率。因此,通常是把以上两种方式结合起来进行组装和测试。
        在进行集成测试时,测试者应当确定关键模块,对这些关键模块及早进行测试。关键模块至少应具有以下几种特征之一:
        . 满足某些软件需求;
        . 在程序的模块结构中位于较高的层次(高层控制模块);
        . 较复杂、较易发生错误;
        . 有明确定义的性能要求。
        在做回归测试时,也应该集中测试关键模块的功能。
        . 集成测试的组织和实施。
        集成测试是一种正规测试过程,必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:
        ①采用何种系统组装方法来进行集成测试。
        ②集成测试过程中连接各个模块的顺序。
        ③模块代码编制和测试进度是否与集成测试的顺序一致。
        ④测试过程中是否需要专门的硬件设备。
        解决了上述问题之后,就可以列出各个模块的编制、测试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。
        在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。例如,若测试需要数字化仪和绘图仪,则相应的测试应安排在这些设备能够投入使用之时,并要为硬件的安装和交付使用保留一段时间,以留下时间余量。此外,在测试计划中需要考虑测试所需软件(驱动模块、桩模块、测试用例生成程序等)的准备情况。
        . 集成测试完成的标志。
        集成测试完成的标志主要有以下几项。
        ①成功地执行了测试计划中规定的所有集成测试。
        ②修正了所发现的错误。
        ③测试结果通过了专门小组的评审。
        集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。
        在完成预定的集成测试工作之后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告中要记录实际的测试结果在测试中发现的问题、解决这些问题的方法以及解决之后再次测试的结果。此外还应提出目前不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。
        集成测试需要提交的文档有集成测试计划、集成测试规格说明和集成测试分析报告。
   题号导航      2022年下半年 信息系统管理工程师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第52题    在手机中做本题