十七、自动化化测试技术
通过计算机运行测试工具和测试脚本自动进行测试具有如下优点,缩短测试周期、多次重复运行相同的测试减少测试的单调性等,所以在测试工作中,应尽力实现测试自动化或扩大自动化测试的覆盖范围。但是自动化测试的前期投入大,而且不能完全替代手工测试,因此如下情况往往运行手工测试。
1.7.1自动化测试发展历程
自动化测试的发展历程大概有如下的几个阶段:
机械方式实现人工重复操作------统计分析的自动测试-------面向目标的自动测试技术------智能应用的自动测试技术
第一阶段:很简单的忠实记录人工操作并重复。
这个阶段中,测试员的工作其实没有发生根本行的变化,大家还是在对自动化测试进行探索,希望找到一种方法替代人工测试中的繁琐和机械的重复工作,只是在有限的范围内进行了改进,对整个测试过程没有什么实质性的进步。
第二阶段:统计分析的自动测试。
只有自动测试结果具有可靠性,其使用才具有实际的意义。针对不同的测试准则和测试
策略,指导测试的自动化过程以及对测试的结果进行评估
第三阶段:面向目标的自动测试技术
软件测试并不是机械和随机地发现错误,而是带有很强的目的性,能将进化计算和人工
智能等技术,以及各种高性能的算法引入自动测试技术
第四阶段:智能应用的自动测试技术
将能力成熟度模型引入软件工程,测试业界产生对应的测试成熟度模型。不同的自动测
试等级成为测试好坏的一个衡量依据
17.2测试成熟度模型
测试成熟度模型( Testing Capability Maturity Mode,TMM)受能力成熟度模型( Capability
Maturity Model,,CMM)启发产生,主要关注测试成熟度。由于CMM没有充分的定义测试
没有提及测试成熟度,没有对测试过程的改进进行充分说明,在若干关键过程域( Key Process
Aea,KPA)中没有定义测试问题,与质量相关的测试问题,如可测性、充分测试标准、测
试计划等方面也没有阐述
MM描述了测试过程,使得项目测试部分得到良好计划和控制的基础。TMM分解为如下5
个级别:初始级、定义级、集成级、管理和测量级,以及优化、预防缺陷和质量控制级。
1.初始级
TMM初始级件测试过程的特点是测试过程彩序,有时甚至是混乱的,几乎没有
义,初的级中软件的测试与调试常常被混为一淡,软件开发过程中缺乏测试资源、工具
调练有素的测试人员,初的级的秋件测试过程没有定义成熟度目标
2.定义级
TMM的定义级中,测试已月备基本的测试技术和方法,软件的测试与调试已经明
区分开,这时,测试被定义为软件生命周期中的一个阶段,它紧随在编码阶段之后,
计在编码之后才得以制订,这显然有于软件工程的要求
TMM的定义级中需实现3个成熟度目标:制订测试与调试目标,启动测试计划过程,制度化基本的测试技术和方法
(1)定制测试与调试目标
软件组织必须区分软件开发的测试过程与调试过程,识别各自的目标、任务和活动,正
确区分这两个过程是提高软件组织测试能力的基础,与调试工作不同,测试工作是一种有计划的活动可以进行管理和控制,这种管理和控制活动需要制订相应的策略和政策以确定和协调这两个过程。
测试与调试目标包含5个子成熟度目标:
1)分别形成测试组织和调试组织,并有经费支持
2)规划并记录测试目标
4)将测试和调试目标形成文档,并分发至项目涉及的所有管理人员和开发人员。
3)规划并记录调试目
5)将测试目标反映到测试计划中
测试计划作为过程可重复、可定义和可管理的基础,包括测试目的、风险分析、测试策
(2)启动测试计划过程
略以及测试设计规格说明和测试用例。此外,测试计划还应说明如何分配测试资源,如何划分单元测试、集成测试、系统测试和验收测试。启动测试计划过程包含5个子目标
1)建立组织内的测试计划组织并予以经费支持。
2)建立组织内的测试计划政策框架并予以管理上的支持。
3)开发测试计划模板并分发至项目的管理者和开发者。
4)建立一种机制,使用户需求成为测试计划的依据之一。
5)评价、推荐和获得基本的计划工具并从管理上支持工具的使用。
(3)制度化基本的测试技术和方法
改进测试过程能力,组织中应用基本的测试技术和方法,并说明何时和怎样使用这些技
术、方法和支持工具。基本测试技术和方法制度化有如下两个子目标
1)在组织范围内成立测试技术组,研究、评价和推荐基本的测试技术和测试方法,推荐
支持这些技术与方法的基本工具。
2)制订管理方针以保证在全组织范围内一致使用所推荐的技术和方法。
3.集成级
TMM的集成级中,测试不再是编码阶段之后的阶段,已被扩展成与软件生命周期融为一体的一组活动。测试活动遵循V字模型。测试人员在需求分析阶段便开始着手制订测试计划根据用户需求建立测试目标和设计测试用例。软件测试组织提供测试技术培训,测试工具支持。
关键测试活动。但是,集成级没有正式的评审程序,没有建立质量过程和产品属性的测试度量。
集成级要实现如下4个成熟度目标:建立软件测试组织,制订技术培训计划,软件全生命周期测试,控制和监视测试过程。
(1)建立软件测试组织
软件测试过程对软件产品质量有直接影响。由于测试往往是在时间紧、压力大的情况下完成的一系列复杂活动,测试组完成与测试有关的活动,包括制订测试计划,实施测试执行,记录测试结果,制订与测试有关的标准和测试度量,建立测试数据库,测试重用,测试跟踪以及测试评价等。
建立软件测试组织要实现4个子目标:
1)建立全组织范围内的测试组,并得到上级管理层的领导和各方面的支持,包括经费支持。
2)定义测试组的作用和职责。
3)由训练有素的人员组成测试组。
4)建立与用户或客户的联系,收集他们对测试的需求和建议。
(2)制订技术培训计划
为了高效率地完成测试工作,测试人员必须经过适当的培训
制订技术培训规划有3个子目标:
1)制订组织的培训计划,并在管理上提供包括经费在内的支持。
2)制订培训目标和具体的培训计划
3)成立培训组,配备相应的工具、设备和教材。
(3)软件全生命周期测试
提高测试成熟度和改善软件产品质量都要求将测试工作与软件生命周期中的各个阶段联系起来。该目标有4个子目标:
1)将测试阶段划分为子阶段,并与软件生命周期的各阶段相联系
2)基于已定义的测试子阶段,采用软件生命周期V字模型
3)制订与测试相关的工作产品的标准
4)建立测试人员与开发人员共同工作的机制。这种机制有利于促进将测试活动集成于软件生命周期中。
(4)控制和监视测试过程
软件组织采取如下措施:制订测试产品的标准,制订与测试相关的偶发事件的处理预案,确定测试里程碑,确定评估测试效率的度量,建立测试日志等。控制和监视测试过程有3个子目标:
1)制订控制和监视测试过程的机制和政策
2)定义、记录并分配一组与测试过程相关的基本测量。
3)开发、记录并文档化一组纠偏措施和偶发事件处理预案,以备实际测试严重偏离计划时使用。
在TMM的定义级,测试过程中引入计划能力;在TMM的集成级,测试过程引入控制和监视活动。两者均为测试过程提供了可见性,为测试过程持续进行提供保证
4.管理和测量级
在TMM的管理和测量级中,测试活动包括软件生命周期中各个阶段的评审、审查和追查,使得测试活动覆盖软件验证和确认活动。因为测试是可以量化并度量的过程,根据和测量级要求,与软件测试相关的活动,如测试计划、测试设计和测试步骤都要经过评事为了测量测试过程,建立测试数据库,用于收集和记录测试用例,记录缺陷并按缺陷程度创分等级,此外,所建立的测试规程应能够支持软件组对测试过程的控制和测量。
管理和测量级有3个要实现的成熟度目标:建立组织范围内的评审程序,建立测试量程序和软件质量评价。
(1)建立组织范围内的评审程序
色朋织应在软件生命周期的各阶段实施评审,以便尽早有效地识别、分类和消除软
中的缺陷。建立评审程序有4个子日标:
1)管理层要制订评审政策支持评审过程。
2)测试组和软件质量保证组要确定并文档化整个软件生命周期中的评审目标、评审计划、评审步骤以及评审记录机制
3)评审项由上层组织指定,通过培训参加评审的人员,使他们理解和遵循相关的评审政策、评审步骤。
(2)建立测试过程的测量程序
测试过程的测量程序是评价测试过程质量、改进测试过程的基础,对监视和控制测试过程至关重要,测量包括测试进展、测试费用、软件错误和缺陷数据以及产品测量等。建立测试测量程序有3个子目标:
1)定义组织范围内的测试过程、测量政策和目标。
2)制订测试过程的测量计划。测量计划中应给出收集、分析和应用测量数据的方法。
3)应用测量结果制订测试过程的改进计划。
(3)软件质量评价
软件质量评价的内容包括定义可测量的软件质量属性,定义评价软件工作产品的质量目标等工作。软件质量评价有两个子目标:
1)管理层、测试组和软件质量保证组要制订与质量有关的政策,质量目标和软件产品质量属性。
2)测试过程应是结构化的、已测量和已评价的,以保证达到质量目标。
5.优化、预防缺陷和质量控制级
本级的测试过程是可重复、可定义、可管理的,因此可对软件进行组织优化调整和持续改
进测试。测试过程的管理为持续改进产品质量和过程质量提供指导,并提供必要的基础设施。
优化、预防缺陷和质量控制级有3个要实现的成熟度目标:
1)应用过程数据预防缺陷,此时的软件组织能够记录软件缺陷,分析缺陷模式,识别错误根源,制订防止缺陷再次发生的计划,提供跟踪这种活动的办法,并将这些活动贯穿于全组织的各个项目中。应数据预防缺陷的成熟度子目标:
成立缺陷预防组
识别和记录在软件生命周期各阶段引入的软件缺陷和消除的缺陷。
建立缺陷原因分析机制,确定缺陷原因。
管理、开发和测试人员互相配合制订缺陷预防计划,防止已识别的缺陷再次发生。缺陷预防计划要具有可跟踪性。
2)质量控制在本级,软件组织通过采用统计采样技术,测量组织的自信度,测量用户对组织的信赖度以及设定软件可靠性目标来推进测试过程。为了加强软件质量控制,测试组和质量保证组要有负责质量的人员参加,他们应掌握能减少软件缺陷和改进软件质量的技术和工具。支持统计质量控制的子目标有:
软件测试组和软件质量保证组建立软件产品的质量目标,如产品的缺陷密度、组织的
自信度以及可信赖度等。
测试管理者要将这些质量目标纳入测试计划中。
训测试组学习和使用统计学方法。
集用户需求以建立使用模型。
3)优化测试级依据量化结果来调整测试过程,不断提高测试过程能力,并且软件组织具有支持这种能力持续增长的基础设施。基础设施包括政策、标准、培训、设备、工具以及组织结构等。优化测试过程包含:
识别需要改进的测试活动
实施改进。
跟踪改进进程。
不断评估所采用的与测试相关的新工具和新方法。
支持技术更新。
4)测试过程优化所需子成熟度目标包括:
建立测试过程改进组,监视测试过程并识别其需要改进的部分
建立适当的机制以评估改进测试过程能力和测试成熟度的新工具和新技术。
持续评估测试过程的有效性,确定测试终止准则。终止测试的准则要与质量目标相
联系。
TMM的5个阶段总结如下
第一阶段:测试和调试没有区别,除了支持调试外,测试没有其他目的。
第二阶段:测试的目的是表明软件能够工作
第三阶段:测试的目的是表明软件能够正常工作。
第四阶段:测试的目的不是要证明什么,而是把软件不能正常工作的预知风险降低到能
够接受的程度。
第五阶段:测试已经成为了企业的自觉规范行为。
综上所述,表1-3给出了测试成熟度模型的基本描述。
表1-3测试成熟度模型的基本描述
级别 |
简单描述
|
特征
|
目标 |
初始级
|
测试处于一个混乱的状态,缺乏成熟的测试测试处于可有可无的地位目标 |
还不能把测试同调试分开,编码完成后才进行测试工作,测试的目的是表明开发的代码没有错误,缺乏相应的测试资源
|
|
定义级
|
测试目标是验证软件符合需求,才会采用基本的测试技术和方法
|
试被看做是有计划的活动;测试同调试分开;在编码完成后再开始测试工作 |
启动测试计划过程,将基本的测试技术和方法制度化 |
集成级 |
测试不再是编码后的一个阶段,而且穿在整个软件生命周期中,测试建立在建立在满足用户或客户的需求上
|
有独立的测试部门;根据用户需求设计测试用例,有测试工具辅助测试工作,没有建立起有效的评审制度,没有建立起质量控制和质量度量标准
|
建立软件测试组织,制定技术培训计划,测试在整个生命周期内进行,控制和监视测试过程 |
管理和度量级 |
测试是一个度量和控制质量的过程,在软件生命周期中评审被作为测试和软件质量控制的一部分 |
进行可靠性、可永兴和可维护性等方面的测试,采用数据库来管理测试用例,具有缺陷管理系统冰滑粉缺陷的级别,还没有建立起缺陷预防机制,缺乏对自动测试中产生的数据进行收集和分析的手段 |
实施软件生命周期各个阶段的评审;建立测试数据库并记录,收集有关测试数据,建立组织范围内的评审程序,建立测试过程的度量方法和程序,进行软件质量评价 |
优化级 |
具有缺陷预防和质量控制的能力,已经建立起测试规范和流程,并不断进行测试改进 |
运行缺陷预防和质量控制措施,选择和评估测试工具,测试自动化程度高,有常规的缺陷分析机制 |
应用过程数据预防缺陷,统计质量控制,建立软件产品的质量目标,持续改进、优化测试过程 |
由表1-3总结出的TMM的特征:
1)TMM从CMM延伸到测试,容易脱离测试过程的改进轨迹。例如:许多项目测试是从缺陷开始,将缺陷划分为不同等级,先有测试用例,才有测试计划。
2)关注测试自身活动不够。TMM中包括测试工具和测试数据库,但几乎没有涉及缺陷清除率、自动化测试框架和测试流程等。
3)测试深度不够。测试具有很大风险因素,如何降低测试风险,提高测试用例的质量TMM并没有给出清晰的目标。
4)在过程监控、度量方面的内容较多,但是如何对实际测试能力(测试覆盖率、效率等)进行量化评估,TMM并没有具体的对策,实施性较差。
1.7.3自动测试原理
自动化测试模拟人工对计算机的操作过程和操作行为,采用类似于编译系统对程序代码进行检查。自动化测试的原理:直接对代码进行静态和动态分析、测试过程的捕获和回放、测试脚本技术和虚拟用户技术
1.代码分析
代码分析是白盒测试的自动化方法,类似于高级编译系统,一般针对高级语言构造分析工具,定义类、对象、函数、变量等定义规则、语法规则,对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码质量、生成系统的调用关系图等
2.录制回放
录制回放是黑盒测试的自动化方法,通过捕获用户每一步操作,如用户界面的像素坐标或程序显示对象(窗口、按钮、滚动条等)的位置,以及相应操作、状态变化或属性变化,
用一种脚本语言记录描述,模拟用户操作。回放时,将脚本语言转换为屏幕操作,比较被测
系统的输出记录与预先给定的标准结果
目前的自动化负载测试解决方案几乎都是采用“录制回放”的技术。所谓“录制回放”技术,就是先由手工完成一遍测试流程,由计算机记录下这个流程期间客户端和服务器端之间的通信信息,这些信息通常是一些协议和数据,并形成特定的脚本程序。然后在系统的统管理下同时生成多个虚拟用户,并运行该脚本,监控硬件和软件平台的性能,提供分析报告或相关资料。模拟成百上千的用户,对应用系统进行负载能力的测试。
3.脚本技术
(1)脚本介绍
脚本是一组测试工具执行的指令集合,也是计算机程序的另一种表现形式。脚本语言至少具有如下功能:
1)支持多种常用的变量和数据类型
2)支持各种条件逻辑、循环结构。
3)支持函数的创建和调用
脚本有两种,一种是手动编写或嵌入源代码;另一种是通过测试工具提供的录制功能
运行程序自动录制生成脚本。由于录制生成脚本简单且智能化,容易操作,但仅靠自动录制脚本,无法满足用户的复杂要求,需要手工添加函数进行参数设置,增强脚本的实用性。
手工编写脚本具有如下优点
1)可读性好,流程清晰,检查点截取含义明确。
业务级的代码比协议级代码容易理解,也更容易维护,而录制生成的代码大多没有维护的价值
2)手写脚本比录制脚本更真实地模拟应用。
录制脚本截获了网络包,生成协议级的代码,却往往忽略客户端的处理逻辑,不能真实模拟应用程序的运行。
3)手写脚本比录制脚本更能提高测试人员的技术水平
测试工具提供如Java、VB、C等高级程序设计语言的脚本,允许用户根据不同测试要求定义开发各种语言类型的测试脚本。
总之,使用哪种方式生成脚本,应以脚本模拟程序的真实有效为准。例如,有些程序只
需要执行迭代多次操作,没有特殊要求,选择自动生成的脚本就可以。但有些程序需要参数设置,则应使用手工脚本
2)脚本分类
脚本技术分为以下几种类型
1)线性脚本。录制手工执行的测试用例得到的线性脚本,包含用户键盘和鼠标输入,检查某个窗口是否弹出等操作线性脚本具有如下优点:不需要深入的工作或计划,对实际执行操作可以审计跟踪。线性脚本适用于演示、培训或执行较少且环境变化小的测试、数据转换的操作功能。但是,线性脚本具有以下缺点:过程较烦琐,过多依赖于每次捕获内容,测试输入和比较是“捆绑在脚本中,不能共享或重用脚本,容易受软件变化的影响。另外,线性脚本修改代价大,维护成本高,容易受意外事件影响,导致整个测试失败。
2)结构化脚本。结构化脚本类似于结构化程序设计,包含控制脚本执行指令,具有顺序、
循环和分支等结构。结构化脚本的优点是健壮性好,通过循环和调用减少工作量:但结构化脚本较复杂,而且测试数据仍然与脚本“捆绑”在一起。
3)共享脚本。共享脚本侧重描述脚本中共享的特性,脚本可以被多个测试用例使用
个脚本可以被另一个脚本调用。当重复任务发生变化时,只需修改一个脚本,便可达到脚本共享的目的
共享脚本具有如下优点:以较少的开销实现类似的测试,维护共享脚本的开销低于线性脚本。但是,共享脚本需要跟踪更多的脚本,给配置管理带来一定困难,并且对于每个测试用例仍然需要特定的测试脚本。
4)数据驱动脚本。数据驱动脚本将测试输入到独立的数据文件(数据库)中,而不是绑定在脚本中。执行时是从数据文件中读数据,使得同一个脚本执行不同的测试,只需对数
据进行修改,不必修改执行脚本。通过一个测试脚本指定不同的测试数据文件,实现较多的测试用例,将数据文件单独列出,选择合适的数据格式和形式,达到简化数据、减少出错的目的数据驱动脚本具有如下优点:快速增加类似的测试用例,新增加的测试也不必掌握工具脚本技术,对以后类似的测试无需额外的维护,有利于测试脚本和输入数据分离,减少编程和维护的工作量,有利于测试用例扩充和完善。但是,数据驱动脚本初始建立开销较大、需要专业人员支持。
5)关键字驱动脚本。关键字驱动作为比较复杂的数据驱动技术的逻辑扩展,是将数据文件变成测试用例的描述,用一系列关键字指定要执行的任务。关键字驱动技术假设测试者具有被测系统知识和技术,不必告之如何进行详细动作,以及测试用例如何执行,只说明测试用例即可。关键字驱动脚本多使用说明性方法和描述性方法。
6)虚拟用户技术。虚拟用户技术通过模拟真实用户行为对被测程序施加负载,测量被测程序的性能指标值,如事务的响应时间、服务器吞吐量等。虚拟用户技术以真实用户的“商务处理”(用户为完成一个商业业务而执行的一系列操作)作为负载的基本组成单位,用“虚拟用户”(模拟用户行为的测试脚本)模拟真实用户负载需求(例如并发虚拟用户数、处理的执行频率等)通过人工收集和分析系统使用信息来获得,负载测试工具模拟成千上万个虚拟用户同时访问被测程序,来自不同IP地址、不同测览器类型以及不同网络连接方式的请求,并实时监视系统性能,帮助测试人员分析测试结果。虚拟用户技术具有成熟测试工具支持,但确定负载的信息要依靠人工收集,准确性不高
思考与习题
选择题
1.软件质量管理(QM)应由质量保证(QA和质量控制(QC)组成,下面的选项属于QC的是()
A.测试
B.跟踪
C.监督
D.制定计划
E.需求审查
F.程序代码审查
2.进行软件质量管理的重要性有
A.维护降低成本
B.法律上的要求
C.市场竞争的需要
D.质量标准化的趋势
E.软件工程的需要
F.CMM的一部分
G.方便与客户进一步沟通,为后期的实施打好基础
3.软件测试的目的是
F.CMM过程的一部分
A.避免软件开发中出现的错误
B.发先软件开发中出现的错误
C.尽可能发现并排除软件中潜藏的错误,提高软件的可靠性
D.修改软件中出现的错误
4.统计资料表明,软件测试的工作量占整个软件开发工作量的()。
A.30%
B.70%
C.40%~50%
D,95%
5.下列关于软件质量模型的说法中正确的是
A.外部质量是表征软件产品在规定条件下使用时,决定其满足规定的和隐含的要求
的能力的产品属性的全体
B.容错性、通用性、结构性和通信性不全属于软件的质量特性
C.内部质量是表征软件产品在规定条件下使用时,满足规定的和隐含的要求的程度
D.使用质量是软件产品在规定的使用环境中,规定的用户能实现规定目标的要求
二、简答题
1.软件的质量和软件测试是什么关系?
2.软件测试的目的是什么?
按照测试技术划分,软件测试分哪几类
4.自动化测试相对于手工测试有什么好处?
5.自动测试的发展经过了几个阶段?
6.什么是测试成熟度模型?它包括哪些内容?
7.录制和回放是指什么?
8.脚本技术可以分为几类?分别是什么?
9.自动化测试工具具有哪些特征?