软件测试技术与测试实训教程黎连业王华李龙黎照北京:机械工业出版社2012.05软件测试课程是计算机软件专业、计算机应用专业、计算机信息管理专业高年级学生重要的一门专业课。是计算机软件开发与测试、软件测试专业高年级学生必修的一门专业课。软件测试课程是一门实践性、应用性很强的课程,主要任务是使学生掌握目的是使学生在学习“软件工程”、“程序设计语言”和“软件测试与测试技术”等课程的基础上,通过实训,从而进一步巩固和消化所学的专业知识、熟悉软件测试的岗位工作职责、软件测试的方法和原则、规范以及管理等技能,掌握软件测试工作流程、测试技能。培养学生的实际动手操作能力和专业实践能力,为就业打下扎实的基础。•《软件测试技术与测试实训教程》一书分别从理论、实践的角度介绍了软件测试与测试技术。介绍的是当前软件测试行业所使用的技术,他基于软件测试和测试技术所需要的知识而展开的。本书所叙述的内容是新鲜的,基本上反映了当前软件测试技术,是作者测试的总结。作者认为:•测试人员在掌握软件测试的基本概念、技术基础上,测试大纲、测试计划、测试用例设计、测试文档写作是重要的,是具有独立承担实施测试项目能力的基础。本书分四部分:•第一部分软件测试的基本知识。详细介绍:软件测试的基本知识;软件测试的质量要求;自动化测试技术;软件测试工作概述和测试工作指南。•第二部分软件测试的核心技术。详细介绍:白盒测试的实用技术;黑盒测试技术;测试用例设计方法。•第三部分软件测试的实用技术与测试实训。详细介绍:对本书测试模型的介绍;数值计算程序测试的实训;单元测试和测试实训;功能测试和功能测试实训;性能测试和性能测试实训;集成测试的实用技术;系统测试的实用技术;验收测试的实用技术;回归测试的实用技术;软件的其他测试技术;配置测试的实用技术;软件缺陷测试和测试评估;软件测试管理。•第四部分软件测试文档写作与测试所需的常用模板。详细介绍:测试文档的写作;软件测试所需的常用模板。掌握软件测试的基本概念;掌握软件测试相关技术、工具、方法;掌握关键实施技巧的技术、方法;具有独立承担实施测试项目的能力。软件开发人员可快速加入到测试行业,成为一名合格的软件测试工程师。内容上系统全面、重点突出;叙述由浅入深、循序渐进;概念上清楚易懂;实用性强。测试用例、实训部分、测试文档部分和管理部分的内容,方便读者,直接参考使用。作者认为:这是一本国内外非常好的、实用的教学书籍。第一部分软件测试的基本知识第1讲:第1章软件测试基础知识概述软件测试是信息系统开发中不可缺少的一个重要步骤,随着软件变得日益复杂,软件测试也变得越来越重要。软件的基础知识,软件测试的概念(方法、目标和任务),软件测试的术语定义是软件测试的基础。本章重点讨论以下内容:★软件的基本知识概述;★软件测试的概念、方法和任务;★软件测试的流程;★软件测试的组织结构和人员的要求;★软件测试的前景;★软件测试的术语定义。1.1软件的基本知识概述软件测试的对象就是软件,为了进行软件测试,我们应了解什么是软件?它的基本知识。1.1.1软件的概念、特点和分类1.软件的概念•软件是计算机系统中与硬件相互依存的一部分,它是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。2.软件的特点软件具有8个特点:(1)软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。(2)软件的生产与硬件不同,它没有明显的制造过程。对软件的质量控制,必须着重在软件开发方面下功夫。(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。然而它存在退化问题,必须要对其进行多次的修改与维护。(4)软件的开发和运行常常受到计算机系统的制约,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。(5)软件的开发至今尚未摆脱人工的开发方式。(6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。(7)软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。(8)相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,它直接影响到项目的成败。3.软件的分类方法软件的分类方法有如下4种:(1)按软件的功能分类(2)按软件服务对象的范围分类(3)按软件规模分类(4)按软件工作方式分类1.1.2软件的内容、目标和问题软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术中,主要研究软件工程方法、软件工程过程、软件开发工具和环境。其中:(1)软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法的设计、编码、测试以及维护等。软件工程方法常采用某种特殊的语言或图形的表达方法,及一套质量保证标准。(2)软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料,为保证质量和协调变更所需要的管理。(3)软件开发工具和环境为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经开发出了许多软件工具,已经能够支持上述的软件工程方法。而且已经有人把诸多软件工具集成起来,使得一种工具产生的信息可以为其他的工具所使用,这样建立起一种称之为计算机辅助软件工程(CASE)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。软件工程项目的目标软件工程项目是一门工程性学科,目的是成功地建造一个大型软件系统,所谓成功是要达到以下几个目标:★付出较低的开发成本;★达到要求的软件功能;★取得较好的软件性能;★开发的软件易于移植;★需要较低的维护费用;★能按时完成开发任务,及时交付使用;★开发的软件可靠性高。在实际开发的具体项目中,要想让以上几个目标都达到理想的程度往往是非常困难的,而且上述目标很可能是互相冲突的,若只降低开发成本,很可能同时也降低了软件的可靠性。另一方面,如果过于追求提高软件的性能,可能造成开发出的软件对硬件有较大的依赖,从而直接影响到软件的可移植性。软件工程项目之间的相互关系如图1-1所示。★易于维护和高可靠性之间,低开发成本与按时交付之间为互补关系;★低开发成本和易于维护、低开发成本和高可靠性、低开发成本和高性能、高可靠性和高性能、高性能和按时交付之间为互斥关系。软件工程面临的问题软件工程面临的问题有:软件费用、软件可靠性、软件可维护性、软件生产率和软件重用等。•软件费用软件是知识高度密集的技术的综合产物,软件人力资源不能适应软件迅速增长的社会要求;因此,软件费用上升是必然趋势。•软件可靠性软件可靠性是指软件系统能否在既定的环境条件下运行并实现所期望的结果。在软件开发中,通常要花费40%的代价进行测试和排错,为了提高软件可靠性,就要付出足够的代价。•软件维护软件维护费用占整个软件系统费用的2/3,而软件开发费用只占整个软件系统费用的1/3。这是因为已经运行的软件还需排除隐含的错误,新增加的功能要加入进去,维护工作又是非常困难的,效率较低。因此,如何提高软件的可维护性,减少软件维护的工作量,也是软件工程面临的主要问题之一。•软件生产率计算机的广泛应用使得软件的需求量大幅度上升,而软件的生产又处于手工开发的状态,软件生产率低下,使得软件开发人员严重不足,所以,如何提高软件生产率是软件工程又一重要问题。•软件重用提高软件的重用性,对于提高软件生产率、降低软件成本有重要意义。当前的软件开发存在着大量重复的劳动,耗费了不少的人力资源。软件重用有各种级别,软件规格说明、软件模块、软件代码、软件文档等都可以是软件重用的单位。软件重用是软件工程中一个重要研究课题。1.1.3软件的生存周期•软件的生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期,软件生存周期概念的出现可以帮助我们较为全面地认识软件开发。在1998年制订和公布的国家标准《GB8566-88计算机软件开发规范》中,将软件生存周期划分为八个阶段,即:可行性研究和计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试、使用和维护。该标准为每个阶段规定了任务、实施步骤、实施要求以及完成的标志。•20世纪90年代初提出了软件工程过程的概念。软件工程过程规定了获取、供应、开发、操作和维护软件时,要实施的过程、活动和任务。其目的是为各种人员提供一个公共的框架,以便用相同的语言进行交流。这框架由几个重要的过程组成,这些主要过程含有用来获取、供应、开发、操作和维护软件所用的基本的、一致的要求。该框架还有用来控制和管理软件过程。各种组织和开发机构可以根据具体情况进行选择和剪裁。可在一个机构的内部或外部实施。•1995年国际标准化组织在此基础上对生存期过程作了调整,公布了新的国际标准,即《ISO/IEC12207信息技术----软件生存期过程》。该标准全面、系统地阐述了软件生存期的过程、活动和任务。标准定义的17个过程分别属于:主要过程,支持过程和组织过程。我们可以通过图1-2看出它的结构。软件生存期过程的主要活动和任务描述如表1-1所示。请参见机械工业出版社《软件测试技术与测试实训教程》(2012.01)第1版第1章表1-1的内容在表1-1中给出了17个过程的主要活动和任务的描述。以下对该标准提出的软件生存期过程给予简要说明。主要生存期过程(primaryprocess)•主要生存期包括5个过程,这些过程供各主要当事方(如需方、供方、开发者、运行者和维护者)在参与或完成软件产品开发、运行或维护时使用,它们是:–获取过程:需方获取系统、软件产品或软件服务的活动。–供应过程:供方向需方提供系统、软件产品或软件服务的活动。–开发过程:开发者定义并开发软件产品的活动。–运行过程:运行者在规定的环境中为其用户提供计算机系统服务的活动。–维护过程:维护者提供维护软件产品服务的活动。•支持生存期过程(supportingprocess)支持生存期包括8个过程,其每个过程均有明确的目的支持其他过程,帮助软件项目获得成功及良好的产品质量。它们是:–文档编制过程:记录生存期过程中产生的信息所需的活动。–配置管理过程:实施配置管理活动。–质量保证过程:为确保软件产品和软件过程符合规定的需求并能坚持既定计划所需的活动。联合评审、审核、验证与确认可作为质量保证技术使用。–验证过程:为确保一个活动的产品满足前一活动对它的要求和条件的活动。–确认过程:为确保最终产品满足预期使用要求的活动。–联合评审过程:评审方与被评审方共同对某一活动的状态和产品进行评审的活动。–审核过程:审核项目是否按要求、计划、合同完成的活动。–问题解决过程:分析和解决在开发、运行、维护或其他过程中出现的总是不论其性质和来源如何的活动。•组织生存期过程(organizationalprocess)组织生存期包括4个过程,这些过程被某个机构用来建立和实现与生存期过程相关的基础结构,甚至人事制度,并使其不断得到改进。它们是:–管理过程:规定生存期过程中的基本管理活动,包括项目管理。–基础设施过程:建立生存期过程基础结构的基本活动。–改进过程:某一机构(需用、供方、开发者、运行者、维护者或其他过程的管理者)为建立、测量、控制和改进其生存期过程需开展的基本活动。–培训过程:对人员进行适当培训所需的活动。1.2软件测试的概念、方法和任务1.2.1软件测试的概念•软件测试是软件工程中的一个环节,是开发项目整体的一部分。软件测试是有计划有组织的,是保证软件质量的一种手段,它是软件工程中一个非常重要的环节。因此,可以认为它是伴随软件工程的诞生而诞生的,伴随着软件复杂程度的增加、规模的增大,软件测试作为一种能够保证软件质量的有效手段,越来越受到人们的重视,软件测试最终目的是使产品达到完美。•软件测试