免费智能真题库 > 历年试卷 > 信息系统项目管理师 > 2008年下半年 信息系统项目管理师 上午试卷 综合知识
  第18题      
  知识点:   V模型   测试计划   单元测试
  关键词:   V模型   单元测试计划   软件开发   测试   测试计划   单元测试   开发        章/节:   信息系统项目的生命周期       

 
在软件开发的V模型中,应该在(18)阶段制定单元测试计划
 
 
  A.  需求分析
 
  B.  概要设计
 
  C.  详细设计
 
  D.  代码编写
 
 
 

  相关试题:V模型          更多>  
 
  第9题    2013年下半年  
   38%
软件测试不再是一种仅在编码阶段完成后才开始的活动,现在的软件测试被认为是一种应该包括在整个开发和维护过程中的活动,测试工..
  第1题    2013年上半年  
   38%
根据软件生命周期的V模型,系统测试主要针对(1),检查系统作为一个整体是否有效地得到运行。
  第32题    2018年上半年  
   33%
()不是v模型的特点。
   知识点讲解    
   · V模型    · 测试计划    · 单元测试
 
       V模型
        V模型是最具有代表意义的测试模型,如下图所示。V模型最早是由Paul Rook在20世纪80年代后期提出的,V模型在英国国家计算中心文献中发布,旨在改进软件开发的效率和效果。
        在传统的开发模型中,比如瀑布模型,人们通常把测试过程作为在需求分析、概要设计、详细设计和编码全部完成之后的一个阶段,尽管有时测试工作会占用整个项目周期一半的时间,但是有人仍然认为测试只是一个收尾工作,而不是主要的过程。V模型的推出就是对此种认识的改进。V模型是软件开发瀑布模型的变种,它反映了测试活动与分析和设计的关系,从左到右,描述了基本的开发过程和测试行为,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系,如模型图(下图)中所示,图中的箭头代表了时间方向,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即各测试过程的各个阶段。
        
        软件测试V模型
        V模型的软件测试策略既包括低层测试又包括了高层测试,低层测试是为了源代码的正确性,高层测试是为了使整个系统满足用户的需求。
        V模型指出,单元和集成测试是验证的程序设计,开发人员和测试组应检测程序的执行是否满足软件设计的要求;系统测试应当验证系统设计,检测系统功能、性能的质量特性是否达到系统设计的指标;由测试人员和用户进行软件的确认测试和验收测试,追溯软件需求说明书进行测试,以确定软件的实现是否满足用户需求或合同的要求。
        V模型存在一定的局限性,它仅仅把测试过程作为在需求分析、概要设计、详细设计及编码之后的一个阶段。容易使人理解为测试是软件开发的最后的一个阶段,主要是针对程序进行测试寻找错误,而需求分析阶段隐藏的问题一直到后期的验收测试才被发现。
 
       测试计划
        制定一个全面的测试计划是负载测试成功的关键。定义明确的测试计划将确保制定的方案能完成负载测试目标。这部分内容描述负载测试计划过程,包括分析应用程序、定义测试目标、计划方案实施、检查测试目标。在任何类型的系统测试中,制定完善的测试计划是成功完成测试的基础。负载压力测试计划有助于:
        ①构建能够精确地模拟工作环境的测试方案。负载测试指在典型的工作条件下测试应用程序,并检测系统的性能、可靠性和容量等。
        ②了解测试需要的资源。应用程序测试需要硬件、软件和人力资源。开始测试之前,应了解哪些资源可用并确定如何有效地使用这些资源。
        ③以可度量的指标定义测试成功条件。明确的测试目标和标准有助于确保测试成功。仅定义模糊的目标(如检测重负载情况下的服务器响应时间)是不够的。明确的成功条件应类似于“50个客户能够同时查看他们的账户余额,并且服务器响应时间不超过1分钟”。
        下面详细论述负载压力测试计划过程的4个步骤。
               分析应用程序
               负载测试计划的第一步是分析应用程序。应该对硬件和软件组件、系统配置以及典型的使用模型有一个透彻的了解。应用程序分析可以确保使用的测试环境能够在测试中精确地反映应用程序的环境和配置。
                      确定系统组件
                      绘制一份应用程序结构示意图。如果可能,从现有文档中提取一份示意图。如果要测试的应用程序是一个较大的网络系统的一部分,应该确定要测试的系统组件。确保该示意图包括了所有的系统组件,例如客户机、网络、中间件和服务器等。
                      如下图所示说明了一个由许多Web用户访问的联机银行系统。各Web用户连接到同一数据库以转移现金和支票余额。客户使用不同的浏览器,通过Web方式连接到数据库服务器。
                      
                      联机银行系统应用布署
                      描述系统配置
                      增加更多详细信息以完善示意图。描述各系统组件的配置。应当掌握以下信息:
                      . 连接到系统的用户数;
                      . 应用程序客户端计算机的配置情况(硬件、内存、操作系统、软件、开发工具等);
                      . 使用的数据库和Web服务器的类型(硬件、数据库类型、操作系统、文件服务器等);
                      . 服务器与应用程序客户端之间的通信方式;
                      . 前端客户端与后端服务器之间的中间件配置和应用程序服务器;
                      . 可能影响响应时间的其他网络组件(调制解调器等);
                      . 通信设备的吞吐量以及每个设备可以处理的并发用户数。
                      例如,在如上图所示的示意图中,多个应用程序客户端在访问系统。客户端的配置如下表所示。
                      
                      客户端配置内容
                      分析使用模型
                      定义系统的典型使用方式,并确定需要重点测试的功能。考虑哪些用户使用系统、每种类型用户的数量,以及每个用户的典型任务。此外,还应考虑任何可能影响系统响应时间的后台负载。
                      例如,假设每天上午有200名员工登录记账系统,并且该办公室网络有固定的后台负载:50名用户执行各种字处理和打印任务。可以创建一个200个虚拟用户登录访问记账数据库的方案,并检测服务器的响应时间。要了解后台负载对响应时间的影响,可以在运行方案的网络中再模拟员工执行字处理和打印活动的负载。
                      任务分布
                      除定义常规用户任务外,还应该查看这些任务的分布情况。例如,假设银行用户使用一个中央数据库为跨越多个州和时区的客户提供服务。250个应用程序客户端分布在两个不同的时区,全都连接到同一个Web服务器中。其中150个在芝加哥,另外100个在底特律。每个客户端从上午9点开始工作,但由于处于不同的时区,因此在任何特定时间内都不会有超过150个的用户同时登录。可以分析任务分布,以确定数据库活动峰值期的发生时间,以及负载峰值期间的典型活动。
               定义测试目标
               开始测试之前,应精确地定义想要实现的目标。
                      以可度量的指标制定目标
                      确定了负载测试的一般性目标后,应该以可度量指标制定更具针对性的目标。为了提供评估基准,应精确地确定、区分可接受和不可接受测试结果的标准。
                      例如:
                      . 一般性目标产品评估:选择Web服务器的硬件。
                      . 明确目标产品评估:在一台HP服务器和一台NEC服务器上运行同一个包含300个虚拟用户的组。当300个用户同时浏览Web应用程序页面时,确定哪一种硬件提供更短的响应时间。
                      . 测试目标
                      ①度量最终用户的响应时间,完成一个业务流程需要多长时间;
                      ②定义最优的硬件配置,哪一种硬件配置可以提供最佳性能;
                      ③检查可靠性,系统无错误或无故障运行的时间长度或难度;
                      ④查看硬件或软件升级对性能或可靠性有何影响;
                      ⑤评估新产品,应选择哪些服务器硬件或软件;
                      ⑥度量系统容量,在没有显著性能下降的前提下,系统能够处理多大的负载;
                      ⑦确定瓶颈,哪些因素会延长响应时间。
                      确定测试的时间
                      负载测试应贯穿于产品的整个生命周期。如下表说明了在产品生命周期的各个阶段有哪些类型的测试与之相关。
                      
                      产品生命周期与测试类型
               计划方案实施
               下一步是确定如何实现测试目标。
                      定义性能度量的范围
                      可以度量应用程序中不同点的响应时间。根据测试目标确定在哪里运行Vuser(虚拟用户)以及运行哪些Vuser。
                      . 度量端到端的响应时间。
                      可以在前端运行GUI Vuser(图形用户界面用户)或RTE Vuser(终端用户)来度量典型用户的响应时间。GUI Vuser可以将输入提交给客户端应用程序并从该应用程序接收输出,以模拟实际用户;RTE Vuser则向基于字符的应用程序提交输入,并从该应用程序接收输出,以模拟实际用户。
                      可以在前端运行GUI或RTE Vuser来度量跨越整个网络(包括终端仿真器或GUI前端、网络和服务器)的响应时间。如下图所示为端到端的响应时间。
                      
                      端到端的响应时间
                      . 度量网络和服务器响应时间。
                      可以通过在客户机运行Vuser(非GUI或RTE Vuser)来度量网络和服务器的响应时间(不包括GUI前端的响应时间)。Vuser模拟客户端对服务器的进程调用,但不包括用户界面部分。在客户机运行大量Vuser时,可以度量负载对网络和服务器响应时间的影响。如下图所示为网络和服务器的响应时间。
                      
                      网络和服务器的响应时间
                      . 度量GUI响应时间。
                      可以通过减去前两个度量值,来确定客户端应用程序界面对响应时间的影响。GUI响应时间=端到端响应时间-网络和服务器响应时间。如下图所示为GUI响应时间。
                      
                      GUI响应时间
                      . 度量服务器响应时间。
                      可以度量服务器响应请求(不跨越整个网络)所花费的时间。通过在与服务器直接相连的计算机上运行Vuser,可以度量服务器性能。如下图所示为服务器响应时间。
                      
                      服务器响应时间
                      . 度量中间件到服务器的响应时间。
                      如果可以访问中间件及其API,便可以度量服务器到中间件的响应时间。可以使用中间件API创建Vuser,来度量中间件到服务器的性能。如下图所示为中间件到服务器响应时间。
                      定义Vuser活动
                      根据对Vuser类型的分析以及它们的典型任务和测试目标来创建Vuser脚本。由于Vuser模拟典型最终用户的操作,因此Vuser脚本应包括典型的最终用户任务。例如,要模拟联机银行客户端,应该创建一个执行典型银行任务的Vuser脚本。需要浏览经常访问的页面,以转移现金或支票余额。
                      
                      中间件到服务器响应时间
                      根据测试目标确定要衡量的任务,并定义这些任务的事务。这些事务度量服务器响应Vuser提交的任务所花费的时间(端到端时间)。例如,要查看提供账户余额查询的银行Web服务器的响应时间,则应在Vuser脚本中为该任务定义一个事务。
                      此外,可以通过在脚本中使用集合点来模拟峰值期活动。集合点指示多个Vuser在同一时刻执行任务。例如,可以定义一个集合点,以模拟70个用户同时更新账户信息的情况。
                      选择Vuser
                      确定用于测试的硬件配置之前,应该先确定需要的Vuser的数量和类型。要确定运行多少个Vuser和哪些类型的Vuser,请综合考虑测试目标来查看典型的使用模型。以下是一些一般性规则:
                      . 使用一个或几个GUI用户来模拟每一种类型的典型用户连接;
                      . 使用RTE Vuser来模拟终端用户;
                      . 运行多个非GUI或非RTE Vuser来生成每个用户类型的其余负载。
                      例如,假设有五种类型的用户,每种用户执行一个不同的业务流程,如下表所示。
                      
                      Vuser的数量和类型
                      选择测试硬件和软件
                      硬件和软件应该具有强大的性能和足够快的运行速度,以模拟所需数量的虚拟用户。
                      在确定计算机的数量和正确的配置时,请考虑以下事项。
                      . 建议在一台单独的计算机上运行测试工具主控台。
                      . 在一台Windows计算机只能运行一个GUI Vuser;而在一台UNIX计算机上则可以运行几个GUI Vuser。
                      . GUI Vuser测试计算机的配置应该尽量与实际用户的计算机配置相同。
                      关于每个测试组件的硬件要求,请参考下表一和下表二。要获得最佳性能,应满足表中所列要求。
                      
                      测试机硬件与软件要求(Windows配置要求)
                      注意:对于一个要运行许多事务的长方案,结果文件需要几个MB的磁盘空间。负载生成器计算机还需要几个MB的磁盘空间来存储临时文件(如果没有NFS)。有关运行时文件存储的详细信息,请参阅第10章“配置方案”。
                      有关最新的安装要求,请访问
                      http://www.mercuryinteractive.com/products/loadrunner/technical/
                      
                      测试机硬件与软件要求(UNIX配置要求)
                      注意:对于一个要运行许多事务的长方案,结果文件需要几个MB的磁盘空间。负载生成器计算机还需要几个MB的磁盘空间来存储临时文件(如果没有NFS)。有关运行时文件存储的详细信息,请参阅第10章“配置方案”。
               检查测试目标
               测试计划应该基于明确定义的测试目标。下面概述了常规的测试目标。
               ①度量最终用户响应时间。
               ②定义最优的硬件配置。
               ③检查可靠性。
               ④查看硬件或软件升级。
               ⑤评估新产品。
               ⑥确定瓶颈。
               ⑦度量系统容量。
                      度量最终用户响应时间
                      查看用户执行业务流程以及从服务器得到响应所花费的时间。例如,假设想要检测:系统在正常的负载情况下运行时,最终用户能否在20秒内得到所有请求的响应。如下图显示了一个银行应用程序的负载和响应时间度量之间的关系。
                      
                      负载和响应时间度量关系
                      定义最优的硬件配置
                      检测各项系统配置(内存、CPU速度、缓存、适配器、调制解调器)对性能的影响。了解系统体系结构并测试了应用程序响应时间后,可以度量不同系统配置下的应用程序响应时间,从而确定哪一种设置能够提供理想的性能级别。
                      例如,可以设置三种不同的服务器配置,并针对各个配置运行相同的测试,以确定性能上的差异。
                      . 配置1:200MHz、64MB RAM。
                      . 配置2:200MHz、128MB RAM。
                      . 配置3:266MHz、128MB RAM。
                      检查可靠性
                      确定系统在连续的高工作负载下的稳定性级别。可以创建系统负载:强制系统在短时间内处理大量任务,来模拟系统在数周或数月的时间内通常会遇到的活动类型。
                      查看硬件或软件升级
                      执行回归测试,以便对新旧版本的硬件或软件进行比较。可以查看软件或硬件升级对响应时间(基准)和可靠性的影响。应用程序回归测试需要查看新版本的效率和可靠性是否与旧版本相同。
                      评估新产品
                      可以运行测试,以评估单个产品和子系统在产品生命周期中的计划阶段和设计阶段的表现。例如,可以根据评估测试来选择服务器的硬件或数据库套件。
                      确定瓶颈
                      可以运行测试以确定系统的瓶颈,并确定哪些因素导致性能下降,例如,文件锁定、资源争用和网络过载。使用负载压力测试工具,以及网络和计算机监视工具以生成负载,并度量系统中不同点的性能。如下图所示为系统不同点的性能。
                      
                      系统不同点的性能
                      度量系统容量
                      度量系统容量,并确定系统在不降低性能的前提下能提供多少额外容量。要查看容量,可以查看现有系统中性能与负载间的关系,并确定出现响应时间显著延长的位置。该处通常称为响应时间曲线的“拐点”。确定了当前容量后,便可以确定是否需要增加资源以支持额外的用户。如下图所示为响应时间与负载关系。
                      
                      响应时间与负载关系
 
       单元测试
        单元测试是通过对每个最小的软件模块进行测试,对源代码的每一个程序单元实行测试,检查各个程序模块是否正确地实现了规定的功能,确保其能正常工作。
        单元测试由开发人员执行,一般由模块单元开发者设计测试用例并修改缺陷。单元测试具有如下三种行为:
        (1)单元测试是一种验证行为。验证程序中的每项功能的正确性为代码的重构提供了保障。
        (2)单元测试是一种设计行为。软件设计阶段考虑如何实现软件的功能、性能和用户界面等,而不考虑实现的代码。单元测试关注于软件的具体功能实现是否符合需求设计,而不仅仅定位于代码的实现。
        (3)单元测试是一种文档的行为。单元测试是函数或类等软件模块如何设计、实现和使用的最佳文档。
               单元测试的特性
               单元测试具有如下特性:
               (1)单入测试是覆盖代码区间的最小单元。
               (2)单元测试支持组包测试。
               (3)单元测试的执行率为100%。
               (4)单元测试确定变动后的代码对原代码的功能未做修改。
               (5)单元测试提升了软件系统整体的可信赖度。
               (6)单元测试包含对可能出现问题的代码进行排查。
               (7)单元测试支持开发人员先测试后编码的行为。
               (8)单元测试支持变化,任何变化导致的失败情况均会被反映出来。
               (9)单元测试准确地反映了代码设计,便于后期维护。
               单元测试的认识误区
               (1)单元测试是全部规范。单元测试本质上是种特定的测试方式,是系统的实现方法规范的补充,而不是整个规范。
               (2)单元测试浪费时间。单元测试不会浪费太多的时间,反而会节省项目时间。
               (3)单元测试只需使用测试工具就可完成。单元测试工具生成的测试用例往往无法对被测试的程序进行有效覆盖,必须进行人工检查。
               (4)单元测试是针对代码进行的测试。单元测试依据详细设计报告设计测试用例,不仅仅只是对代码的测试。
               单元测试的原则
               单元测试需要遵守如下原则。
               (1)单元测试遵循《软件单元测试计划》和《软件单元测试说明》文档,根据详细设计编写单元测试用例,而不能根据代码编写单元测试用例。
               (2)单元测试执行前先检查单元测试入口条件是否全部满足。
               (3)单元测试必须满足一定的覆盖率,重要的接口函数必须做单元测试。
               (4)单元测试在修改代码后修改测试用例,将全部单元测试用例进行回归测试。
               (5)单元测试必须满足预定的出口条件才能结束。
               (6)在单元测试完成后,记录《单元测试报告》,分析问题的种类和原因。
               (7)单元测试始终在配置管理控制下进行,软件问题的修改必须符合变动规程的要求。
               (8)单元测试文档、测试用例、测试记录和被测程序等齐全,符合规范。
               单元测试的主要任务
               单元测试主要针对程序模块进行测试,主要有5个任务:模块接口、局部数据结构、执行路径、出错处理和边界条件。
                      模块接口测试
                      通过对被测模块的数据流进行测试,检查进出模块的数据是否正确。因此,必须对模块接口,包括参数表、调用子模块的参数、全局变量、文件I/O操作进行测试。具体涉及以下内容:
                      .模块接受输入的实际参数个数与模块的形式参数个数是否一致。
                      .输入的实际参数与模块的形式参数的类型是否匹配。
                      .输入的实际参数与模块的形式参数所使用的单位是否一致。
                      .调用其他模块时,所传送的实际参数个数与被调用模块的形式参数的个数是否相同。
                      .调用其他模块时,所传送的实际参数与被调用模块的形式参数的类型是否匹配。
                      .调用其他模块时,所传送的实际参数与被调用模块的形式参数的单位是否一致。
                      .调用内部函数时,参数的个数、属性和次序是否正确。
                      .在模块有多个入口的情况下,是否引用有与当前入口无关的参数。
                      .是否修改了只读型参数。
                      .全局变量是否在所有引用它们的模块中都有相同的定义。
                      局部数据结构测试
                      测试用例检查局部数据结构的完整性,如数据类型说明、初始化、默认值等方面的问题,并测试全局数据对模块的影响。
                      在模块的工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。
                      局部数据结构应注意以下几类错误:不正确或不一致的类型说明;错误的初始化或默认值;错误的变量名,如拼写错误或书写错误;下溢、上溢或者地址错误。
                      执行路径测试
                      测试用例对模块中重要的执行路径进行测试,其中对基本执行路径和循环进行测试往往可以发现大量的路径错误。测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。
                      常见的错误有误解或不正确的算术优先级;混合模式的运算;错误的初始化;精确度不够精确;表达式的不正确符号表示。
                      针对判定和条件覆盖,测试用例能够发现的错误有:不同数据类型的比较;不正确的逻辑操作或优先级;应当相等的地方由于精确度的错误而不能相等;不正确的判定或不正确的变量;不正确的或不存在的循环终止;当遇到分支循环时不能退出;不适当地修改循环变量。
                      出错处理测试
                      测试出错处理的重点是模块在工作中发生了错误,其中的出错处理设施是否有效。
                      检验程序中的出错处理可能面对的情况有以下几种:
                      .对运行发生的错误描述难以理解。
                      .所报告的错误与实际遇到的错误不一致。
                      .出错后,在错误处理之前就引起系统的干预。
                      .例外条件的处理不正确。
                      .提供的错误信息不足,以致无法找到错误的原因。
                      边界条件测试
                      边界条件测试是单元测试的最后一步,必须采用边界值分析方法来设计测试用例。在为限制数据处理而设置的边界处,测试模块是否能够正常工作。
                      一些与边界有关的数据类型,如数值、字符、位置、数量、尺寸等,以及边界的第一个、最后一个、最大值、最小值、最长、最短、最高和最低等特征。
                      在边界条件测试中,应设计测试用例检查一下情况。
                      .在n次循环的第0次、第1次、第n次是否有错误。
                      .运算或判断中取最大值、最小值时是否有错误。
                      .数据流、控制流中刚好等于、大于、小于确定的比较值是否出现错误。
               单元测试的执行过程
               通常,单元测试在编码阶段进行,在源程序代码编制完成,经过评审和验证,确认没有语法错误之后,开始设计单元测试用例。
               由于模块并不是一个独立的程序,在考虑测试模块时,同时要考虑与其有关的外界联系,因此使用一些辅助模块去模拟与被测模块相关的其他模块。辅助模块分为以下两种:
               (1)驱动(Drive)模块。用于模拟被测试模块的上一级模块,相当于被测模块的主程序,用于接收测试数据,并把这些数据传送给被测模块,启动被测模块,最后输出实测结果。
               (2)桩(Stub)模块。用于模拟被测模块工作过程中所调用的模块。桩模块一般只进行很少的数据处理,不需要把子模块的所有功能都带进来,但不允许什么事情也不做。
               单元测试停止的条件
               单元测试停止的条件如下。
               (1)单元测试用例设计已经通过评审。
               (2)按照单元测试计划完成了所有规定单元的测试。
               (3)达到了测试计划中关于单元测试所规定的覆盖率的要求。
               (4)被测试的单元每千行代码必须发现至少3个错误。
               (5)软件单元功能与设计相一致。
               (6)在单元测试中发现的错误已经得到修改,各级缺陷修复率达到标准。
   题号导航      2008年下半年 信息系统项目管理师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第18题    在手机中做本题