版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件测试技术与测试实训教程黎连业 王华 李龙 黎照北京:机械工业出版社 2012.05 软件测试课程是计算机软件专业、计算机应用专业、计算机信息管理专业高年级学生重要的一门专业课。是计算机软件开发与测试、软件测试专业高年级学生必修的一门专业课。软件测试课程是一门实践性、应用性很强的课程,主要任务是使学生掌握目的是使学生在学习“软件工程”、“程序设计语言”和“软件测试与测试技术”等课程的基础上,通过实训,从而进一步巩固和消化所学的专业知识、熟悉软件测试的岗位工作职责、软件测试的方法和原则、规范以及管理等技能,掌握软件测试工作流程、测试技能。培养学生的实际动手操作能力和专业实践能力,为就业打下扎实
2、的基础。 软件测试技术与测试实训教程一书分别从理论、实践的角度介绍了软件测试与测试技术。介绍的是当前软件测试行业所使用的技术,他基于软件测试和测试技术所需要的知识而展开的。本书所叙述的内容是新鲜的,基本上反映了当前软件测试技术,是作者测试的总结。作者认为:测试人员在掌握软件测试的基本概念、技术基础上,测试大纲、测试计划、测试用例设计、测试文档写作是重要的,是具有独立承担实施测试项目能力的基础。本书分四部分:第一部分 软件测试的基本知识。详细介绍:软件测试的基本知识; 软件测试的质量要求;自动化测试技术;软件测试工作概述和测试工作指南。第二部分 软件测试的核心技术。详细介绍:白盒测试的实用技术;
3、黑盒测试技术;测试用例设计方法。第三部分 软件测试的实用技术与测试实训。详细介绍: 对本书测试模型的介绍;数值计算程序测试的实训;单元测试和测试实训;功能测试和功能测试实训;性能测试和性能测试实训;集成测试的实用技术;系统测试的实用技术;验收测试的实用技术;回归测试的实用技术;软件的其他测试技术;配置测试的实用技术;软件缺陷测试和测试评估;软件测试管理。第四部分 软件测试文档写作与测试所需的常用模板。详细介绍:测试文档的写作;软件测试所需的常用模板。 掌握软件测试的基本概念;掌握软件测试相关技术、工具、方法;掌握关键实施技巧的技术、方法;具有独立承担实施测试项目的能力。软件开发人员可快速加入到
4、测试行业, 成为一名合格的软件测试工程师。 内容上系统全面、重点突出;叙述由浅入深、循序渐进;概念上清楚易懂;实用性强。测试用例、实训部分、测试文档部分和管理部分的内容,方便读者,直接参考使用。作者认为:这是一本国内外非常好的、实用的教学书籍。 第一部分 软件测试的基本知识 第1讲:第1章 软件测试基础知识概述 软件测试是信息系统开发中不可缺少的一个重要步骤,随着软件变得日益复杂,软件测试也变得越来越重要。 软件的基础知识,软件测试的概念(方法、目标和任务),软件测试的术语定义是软件测试的基础。本章重点讨论以下内容: 软件的基本知识概述; 软件测试的概念、方法和任务; 软件测试的流程; 软件测
5、试的组织结构和人员的要求; 软件测试的前景; 软件测试的术语定义。 11 软件的基本知识概述 软件测试的对象就是软件,为了进行软件测试,我们应了解什么是软件?它的基本知识。111 软件的概念、特点和分类1 软件的概念软件是计算机系统中与硬件相互依存的一部分,它是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。 2 软件的特点 软件具有8个特点:(1) 软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。(2) 软件的生产与硬件不同,它没有明显的制造过程。对软件的
6、质量控制,必须着重在软件开发方面下功夫。(3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。然而它存在退化问题,必须要对其进行多次的修改与维护。(4) 软件的开发和运行常常受到计算机系统的制约,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。(5) 软件的开发至今尚未摆脱人工的开发方式。(6) 软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。(7) 软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。(8) 相当多的软件工作涉及到社会因素。许多软件的
7、开发和运行涉及机构、体制及管理方式等问题,它直接影响到项目的成败。 3软件的分类方法 软件的分类方法有如下 4种:(1)按软件的功能分类(2)按软件服务对象的范围分类(3)按软件规模分类(4)按软件工作方式分类112 软件的内容、目标和问题 软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术中,主要研究软件工程方法、软件工程过程、软件开发工具和环境。其中:(1)软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法的设计、编码、测试以及维护等。软件工程方法常采用某种特殊的语言或图形的表达
8、方法,及一套质量保证标准。 (2)软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料,为保证质量和协调变更所需要的管理。(3)软件开发工具和环境为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经开发出了许多软件工具,已经能够支持上述的软件工程方法。而且已经有人把诸多软件工具集成起来,使得一种工具产生的信息可以为其他的工具所使用,这样建立起一种称之为计算机辅助软件工程(CASE)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。 软件工程项
9、目的目标 软件工程项目是一门工程性学科,目的是成功地建造一个大型软件系统,所谓成功是要达到以下几个目标: 付出较低的开发成本; 达到要求的软件功能; 取得较好的软件性能; 开发的软件易于移植; 需要较低的维护费用; 能按时完成开发任务,及时交付使用; 开发的软件可靠性高。 在实际开发的具体项目中,要想让以上几个目标都达到理想的程度往往是非常困难的,而且上述目标很可能是互相冲突的,若只降低开发成本,很可能同时也降低了软件的可靠性。另一方面,如果过于追求提高软件的性能,可能造成开发出的软件对硬件有较大的依赖,从而直接影响到软件的可移植性。 软件工程项目之间的相互关系如图1-1 所示。 易于维护和高
10、可靠性之间,低开发成本与按时交付之间为互补关系; 低开发成本和易于维护、低开发成本和高可靠性、低开发成本和高性能、高可靠性和高性能、高性能和按时交付之间为互斥关系。 软件工程面临的问题 软件工程面临的问题有:软件费用、软件可靠性、软件可维护性、软件生产率和软件重用等。软件费用 软件是知识高度密集的技术的综合产物,软件人力资源不能适应软件迅速增长的社会要求;因此,软件费用上升是必然趋势。软件可靠性 软件可靠性是指软件系统能否在既定的环境条件下运行并实现所期望的结果。在软件开发中,通常要花费40%的代价进行测试和排错,为了提高软件可靠性,就要付出足够的代价。软件维护 软件维护费用占整个软件系统费用
11、的2/3,而软件开发费用只占整个软件系统费用的1/3。这是因为已经运行的软件还需排除隐含的错误,新增加的功能要加入进去,维护工作又是非常困难的,效率较低。因此,如何提高软件的可维护性,减少软件维护的工作量,也是软件工程面临的主要问题之一。软件生产率 计算机的广泛应用使得软件的需求量大幅度上升,而软件的生产又处于手工开发的状态,软件生产率低下,使得软件开发人员严重不足,所以,如何提高软件生产率是软件工程又一重要问题。软件重用 提高软件的重用性,对于提高软件生产率、降低软件成本有重要意义。当前的软件开发存在着大量重复的劳动,耗费了不少的人力资源。软件重用有各种级别,软件规格说明、软件模块、软件代码
12、、软件文档等都可以是软件重用的单位。软件重用是软件工程中一个重要研究课题。 113 软件的生存周期软件的生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期,软件生存周期概念的出现可以帮助我们较为全面地认识软件开发。在1998年制订和公布的国家标准GB8566-88计算机软件开发规范中,将软件生存周期划分为八个阶段,即:可行性研究和计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试、使用和维护。该标准为每个阶段规定了任务、实施步骤、实施要求以及完成的标志。 20世纪90年代初提出了软件工程过程的概念。软件工程过程规定了获取、供应、开发、操作和维护软件时,要实施的过程、活
13、动和任务。其目的是为各种人员提供一个公共的框架,以便用相同的语言进行交流。这框架由几个重要的过程组成,这些主要过程含有用来获取、供应、开发、操作和维护软件所用的基本的、一致的要求。该框架还有用来控制和管理软件过程。各种组织和开发机构可以根据具体情况进行选择和剪裁。可在一个机构的内部或外部实施。 1995年国际标准化组织在此基础上对生存期过程作了调整,公布了新的国际标准,即ISO/IEC 12207信息技术-软件生存期过程。该标准全面、系统地阐述了软件生存期的过程、活动和任务。标准定义的17个过程分别属于:主要过程,支持过程和组织过程。我们可以通过图1-2 看出它的结构。 软件生存期过程的主要活
14、动和任务描述如表1-1所示。 请参见机械工业出版社软件测试技术与测试实训教程( 2012.01)第1版第1 章表1-1的内容 在表1-1中给出了17个过程的主要活动和任务的描述。以下对该标准提出的软件生存期过程给予简要说明。 主要生存期过程(primary process)主要生存期包括5个过程,这些过程供各主要当事方(如需方、供方、开发者、运行者和维护者)在参与或完成软件产品开发、运行或维护时使用,它们是:获取过程:需方获取系统、软件产品或软件服务的活动。供应过程:供方向需方提供系统、软件产品或软件服务的活动。开发过程:开发者定义并开发软件产品的活动。运行过程:运行者在规定的环境中为其用户提
15、供计算机系统服务的活动。维护过程:维护者提供维护软件产品服务的活动。 支持生存期过程(supporting process) 支持生存期包括8个过程,其每个过程均有明确的目的支持其他过程,帮助软件项目获得成功及良好的产品质量。它们是:文档编制过程:记录生存期过程中产生的信息所需的活动。配置管理过程:实施配置管理活动。质量保证过程:为确保软件产品和软件过程符合规定的需求并能坚持既定计划所需的活动。联合评审、审核、验证与确认可作为质量保证技术使用。验证过程:为确保一个活动的产品满足前一活动对它的要求和条件的活动。确认过程:为确保最终产品满足预期使用要求的活动。联合评审过程:评审方与被评审方共同对某
16、一活动的状态和产品进行评审的活动。审核过程:审核项目是否按要求、计划、合同完成的活动。问题解决过程:分析和解决在开发、运行、维护或其他过程中出现的总是不论其性质和来源如何的活动。 组织生存期过程(organizational process) 组织生存期包括4个过程,这些过程被某个机构用来建立和实现与生存期过程相关的基础结构,甚至人事制度,并使其不断得到改进。它们是:管理过程:规定生存期过程中的基本管理活动,包括项目管理。基础设施过程:建立生存期过程基础结构的基本活动。改进过程:某一机构(需用、供方、开发者、运行者、维护者或其他过程的管理者)为建立、测量、控制和改进其生存期过程需开展的基本活动
17、。培训过程:对人员进行适当培训所需的活动。12 软件测试的概念、方法和任务121 软件测试的概念软件测试是软件工程中的一个环节,是开发项目整体的一部分。软件测试是有计划有组织的,是保证软件质量的一种手段,它是软件工程中一个非常重要的环节。因此,可以认为它是伴随软件工程的诞生而诞生的,伴随着软件复杂程度的增加、规模的增大,软件测试作为一种能够保证软件质量的有效手段,越来越受到人们的重视,软件测试最终目的是使产品达到完美。软件测试方法没有完全标准化和统一化,因为软件产业的产品到软件测试有各式各样的软件,这里介绍的软件测试方法可用于多数应用软件的测试。软件测试可分人工测试和自动化测试工具测试。软件测
18、试不是万能的,不可能发现全部的软件缺陷,而且软件的功能和性能不是由测试决定的,软件测试是有局限性的。软件测试是在完成程序设计阶段工作后,经程序编码员测试已初步奠定了基础,进一步完成的测试工作。我们都知道软件要投入运行是否正确无误,这一点极其重要,所以软件要在投入运行前施行测试。未经周密测试的软件贸然投入运行,将会造成难以想象的后果。尽管各个程序在设计完毕以后都一一作过调试,但能否发挥整个系统的功能尚不清楚。例如:某一程序运行与后续的程序运行是否矛盾?能否顺利连续?整个系统的总测试要等全部程序设计结束且能连续测试时才可进行。 由于软件错误的复杂性,长期以来,人们对软件测试的认识一直是模糊的。许多
19、科学家从不同的角度给出了软件测试的不同定义,但总体来看,都是不全面的。给软件带来错误的原因很多,具体地说,主要有如下几点: 交流不够、交流上有误解或者根本不进行交流; 应用需求不清晰的情况下进行开发; 软件复杂性 软件复杂性(图形用户界面,客户/服务器结构,分布式应用,数据通信,关系型数据库使得软件及系统的复杂性呈指数增长); 程序设计错误 ; 需求变化 ; 代码文档贫乏等 。 软件测试可认为: 软件测试是为了发现错误而执行程序的过程; 使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别; 测试是为了证明程序有错,而不是证明程
20、序无错误; 一个好的测试用例是在于它能发现至今未发现的错误; 一个成功的测试是发现了至今未发现的错误的测试; 测试是以查找错误为中心,而不是演示软件的正确功能; 测试并不仅仅是为了要找出错误,而是通过错误分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。 测试为软件工程师提供了一个既兴奋又担心的问题,兴奋的是将软件工程师们的抽象概念提出的构造软件,现在得以实现,并且到了测试阶段。担心的是,软件在测试过程会出现哪些问题?尤其是自己编制的那一部份会不会给整个系统带来影响?如果别人编的程序都没有问题,就是“我”编的程序出了问题,那又是多么的难看等等。其实
21、系统测试不是针对哪一个人的,而是从整个系统出发,考查设计是否合理,任何一个人都不能把所有问题考虑得面面俱到,总是或多或少地发生差错。对系统而言,就不能有差错。所以测试是非常重要的。测试可以说就是“寻找错误”,特点是寻找不经常出现的错误。尽量把系统中隐藏着的错误消灭在调试期间,测试还要对系统的容错能力、操作错误进行测试。通过测试要达到这样的一个目的,寻找问题,发现问题,纠正错误,提高系统技术能力,使系统早日投入运行。122 软件测试的目的 软件测试的不同机构会有不同的测试目的,相同的机构也可能有不同测试目的。软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应
22、该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。 测试可视为分析、设计和编码3个阶段的最终复审,在软件质量保证中具有重要地位。为了确保软件的质量,较理想的做法应该是对软件的开发过程,按软件工程各阶段形成的结果,分别进行严格的审查。 软件测试的目的可认为: 帮助开发人员、测试工程师,发现问题、分析问题; 减少软件的缺陷数目或者降低软件的缺陷密度; 提高软件的可靠性; 评估软件的性能指标; 增加用户对软件的信心; 测试的最终目的是为了避免错误的发生,确保应用程序能够正常高效的运行
23、。 对于软件测试目的,Grenford JMyers提出以下观点:1) 软件测试是为了发现错误而执行程序的过程; 2) 测试是为了证明程序有错,而不是证明程序无错误。 3) 一个好的测试用例是在于它能发现至今未发现的错误; 4) 一个成功的测试是发现了至今未发现的错误的测试。这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,
24、以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的可靠性增长模型可以证明这一点。例如 Bev Littlewood发现一个经过测试而正常运行了n小时的系统有继续正常运行n小时的概率。1.2.3 软件测试过程V模型 V模型是在快速应用开发 (RAD,Rap Application Development)模型基础上演变而来,由于将整个开发过程构造成一个V字形而得名,如图1-3 所示。V模型强调软件开发的协作和速度,主要反映测试活动与分析设计关系,将软件实现和验证有机地结合起来,在保
25、证较高的软件质量情况下缩短开发周期。 图13从水平对应关系看:左边是策划测试活动;右边是对左边的测试结果。需求分析对应验收测试:说明在做需求分析的同时,测试人员就可以阅读、审查需求分析的结果,从而了解产品的设计特性、用户的真正需求,确定测试目标,准备测试用例并策划测试活动;系统设计对应系统测试,说明在做系统设计的同时,测试人员可以了解系统是如何实现的,设计系统的测试方案和测试计划,并事先准备系统的测试环境;详细设计对应集成测试,说明在做详细设计的同时,测试人员可以参与设计,对详细设计进行评审,设计测试用例;编码对应单元测试,说明在编码的同时,设计测试用例,进行单元测试,尽快找出程序中的错误。
26、V模型的价值在于他很明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和研发过程期间各阶段的对应关系。V模型适合企业级的软件开发,它清楚地揭示了软件开发过程的特性及其本质: 单元和集成测试应检测程序的执行是否满足软件设计的要求; 系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标; 验收测试确定软件的实现是否满足用户需要或合同的要求。但V模型存在一定的局限性,它仅仅把测试作为在编码之后的一个阶段,是针对程序进行的寻找错误的活动,而忽视了测试活动对需求分析、系统设计等活动的验证和确认的功能。软件测试过程V模型特点:非常明确地表明测试的不同过程要写作的文档,清晰地展示了软
27、件测试与开发之间的关系。1.2.4 软件测试的基本原则为了提高测试的质量,软件测试需要遵循下面的原则: (1) 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。由于原始问题的复杂性,软件的复杂性和抽象性,软件开发各个阶段工作的多样性,以及参加开发各种层次人员之间工作的配合关系等因素,使得开发的每个环节都可能产生错误。所以不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段中。坚持在软件开发的各个阶段的技术评审,这样才能在开发过程中尽早发现和预防错误,把出现的错误克服在早期,杜绝某些隐患,提高软件质量。 (2) 测试用例应由测试输入数据和与之对应的预期输
28、出结果这两部分组成。测试以前应当根据测试的要求选择在测试过程中使用的测试用例(Test case)。测试用例主要用来检验程序员编制的程序,因此不但需要测试的输入数据,而且需要针对这些输入数据的预期输出结果。如果对测试输入数据没有给出预期的程序输出结果,那么就缺少了检验实测结果的基准,就有可能把一个似是而非的错误结果当成正确结果。 (3) 程序员应避免测试自己的程序。测试工作需要严格的作风,客观的态度和冷静的情绪。人们常由于各种原因具有一种不愿否定自己工作的心理,认为揭露自己程序中的问题总不是一件愉快的事。这一心理状态就成为测试自己程序的障碍。另外,程序员对软件规格说明理解错误而引入的错误则更难
29、发现。如果由别人来测试程序员编写的程序,可能会更客观,更有效,并更容易取得成功。要注意的是,测试不能与程序的调试相混淆。调试由程序员自己来做。 (4) 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。合理的输入条件是指能验证程序正确的输入条件,而不合理的输入条件是指异常的,临界的,可能引起问题异变的输入条件。在测试程序时,人们常常倾向于过多地考虑合法的和期望的输入条件,以检查程序是否做了它应该做的事情,而忽视了不合法的和预想不到的输入条件。事实上,软件在投入运行以后,用户的使用往往不遵循事先的约定,使用了一些意外的输入,如用户在键盘上按错了键或打入了非法的命令。如果开发的软件遇到这
30、种情况时不能做出适当的反应,给出相应的信息,那么就容易产生故障,轻则给出错误的结果,重则导致软件失效。因此,软件系统处理非法命令的能力也必须在测试时受到检验。用不合理的输入条件测试程序时,往往比用合理的输入条件进行测试能发现更多的错误。 (5) 制定严格的测试计划 制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。测试计划应包括:测试软件的功能、输入和输出,各项测试的进度安排,资源要求,测试资料,测试工具,测试用例的选择等。 (6) 严格执行测试计划,排除测试的随意性测试计划应包括:所测软件的功能,输入和输出,测试内容,各项测试的进度安排,资源要求,测
31、试资料,测试工具,测试用例的选择,测试的控制方式和过程,系统组装方式,跟踪规程,调试规程,以及回归测试的规定等以及评价标准。对于测试计划,要明确规定,不要随意解释。 (7) 应当对每一个测试结果做全面检查这是一条最明显的原则,但常常被忽视。有些错误的征兆在输出实测结果时已经明显地出现了,但是如果不仔细地全面地检查测试结果,就会使这些错误被遗漏掉。所以必须对预期的输出结果明确定义,对实测的结果仔细分析检查,抓住征候,暴露错误。(8) 妥善保存测试计划,测试用例,测试过程文档,出错统计和最终分析报告,为维护提供方便。(9) 应尽可能早地开始测试在软件生命周期中,1个错误发现的越晚,修复错误的费用越
32、高。如表1-2所示。 (10) 测试应从“小规模”开始,逐步转向“大规模”。最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。(11) 测试用例应由测试输入数据、测试执行步骤和与之对应的预期输出结果三部分组成。(12) 按照组件和功能特征的优先级从高到低的顺序进行测试 (13) 重点放在处理多语言字符串的直接或间接的输入/输出(I/O) (14) 对测试错误结果一定要有一个确认的过程(15) 回归测试的关联性回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。(16) 在设计测试用例时,应当包括合理
33、的输入条件和不合理的输入条件。合理的输入条件是指能验证程序正确的输入条件,不合理的输入条件是指异常的,临界的,可能引起问题异变的输入条件。软件系统处理非法命令的能力必须在测试时受到检验。用不合理的输入条件测试程序时,往往比用合理的输入条件进行测试能发现更多的错误。 1.2.5 软件测试步骤区分软件测试步骤,并明确定义其资源(人/物/时间)的安排,是保障软件测试工作有序开展、有效管理的关键。软件测试步骤一般可按表1-3方式进行。 1.2.6软件错误的分类软件错误存在于软件生存期的各个阶段,凡是和预期的状态或行为不相符合的统称为软件错误。例如,制定的计划和实际不相符合的、需求说明书有问题的、设计说
34、明书有问题的、程序编码有问题的、测试有问题的、运行结果不正确的、维护有问题的等等,都是软件错误。软件的错误是非常复杂的,凡是人们能够想到的软件错误都是可能发生的。到目前为止,人们对软件错误的认识尚停留在表面上,其内在规律有待进一步研究。这也是目前软件测试技术发展比较缓慢的原因之一。 (1) 软件的错误按性质分类 软件的错误按性质可分为: 功能错误 系统错误 加工错误 数据错误 代码错误 (2) 软件的错误按生存期阶段分类软件在生存期的每个阶段都可能存在错误,即计划错误、需求分析错误、设计错误、编码错误、测试错误、运行与维护错误。由于生存期的每一个阶段又是下一个阶段的先导,也就是说,前一个阶段正
35、确的设计是保证下一个阶段设计正确的必要条件。因此,要求一旦发现某个阶段存在错误,就要尽快将其排除。软件的错误按软件生存期阶段可分为:需求分析错误,规格说明错误,设计错误,编码错误等。1)需求分析错误2) 规格说明错误 3)设计错误4) 编码错误 软件的错误百分比如表1-4所示。 127 软件测试的任务软件测试阶段有几方面的任务: (1) 制定测试大纲; (2) 制作测试数据; (3) 单元测试(程序测试);(4)功能测试;(5)性能测试;(6)集成测试(子系统测试);(7)系统测试;(8)验收测试;(9)写出测试报告书;(10)向下阶段工作提交系统运行、维护手册的草案。 制定测试大纲测试大纲是
36、测试工作的依据,主要有:检查每个模块在程序设计中是否已测试过,测试的数据和输出结果是否正确?检查每个子系统和功能在程序设计中是否已测试过,测试的数据和输出结果是否正确?检查上一阶段交来的工作文档是否齐全?确定本阶段测试目标。制定本阶段测试内容。编写向下阶段工作提交的文档资料。 制作测试数据数据制作好坏,直接影响系统测试的结果,制作测试数据时应注意:由用户和程序管理组的人员制作,程序编码人员不应介入。要尽可能多的提供数据,供检测。尤其是交接口数据。提供的数据应分三类: 没有错误的数据,以检查功能实现。 各种各机关报错误数据,以检查程序对错误数据处理能力。 提供程序与程序交接口数据(正确的、不正确
37、的),以检查交接口情况。128软件测试的方法软件的测试方法分为人工测试和软件测试自动化工具测试,人工测试即用试题测试、用新旧两个系统作平行处理测试、人工测试。用试题检查法此方法是先建立输入数据的模型,并事先用人工求得其预计输出,然后送入模型,与新系统所得结果进行核对,进行测试。用新旧两个系统作平行处理检查通过旧系统的处理结果与新系统的结果相比较进行检查。3软件自动化测试工具测试1.2.9 软件测试工具软件测试工具是提高软件测试效率的重要手段,是软件理论和技术发展的重要标志。目前,应用比较广泛的软件测试工具有下列几种类型:(1)测试设计工具测试设计工具有助于准备测试输入或测试数据。测试设计工具包
38、括逻辑设计工具和物理设计工具。逻辑设计工具涉及到说明、接口或代码逻辑,有时也叫做测试用例生成器。物理设计工具操作已有的数据或产生测试数据。如可以随机从数据库中抽取记录的工具就是物理设计工具。从说明中获取测试数据的工具就是逻辑设计工具。(2)测试管理工具测试管理工具是指帮助完成测试计划,跟踪测试运行结果等的工具。这类工具还包括有助于需求、设计、编码测试及缺陷跟踪的工具。(3)静态分析工具静态分析工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。静态分析工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。(4
39、)动态分析工具动态分析工具与静态分析工具不同,动态测试工具的一般采用“插桩”的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。其与静态分析工具最大的不同就是动态分析工具要求被测系统实际运行。(5)覆盖测试工具覆盖工具评估通过一系列的测试,测试软件被测试执行的程度。覆盖工具大量的用于单元测试中。例如,对于安全性要求高或与安全有关的系统,则要求的覆盖程度也较高。覆盖工具还可以度量设计层次结构,如调用树结构的覆盖率。(6)负载和性能测试工具性能测试工具检测每个事件所需要的时间。例如,性能测试工具可以测定典型或负载条件下的响应时间。负载测试可以产生系统流量。例如产生许多代表典
40、型情况或最大情况下的事物。这种类型的测试工具用于容量和压力测试。(7)GUI测试驱动和捕获/回放工具这类测试工具可使测试自动执行,然后将测试输出结果与期望输出进行比较。此类测试工具可在任何层次中执行测试:单元测试、集成测试、系统测试或验收测试。捕获回放工具是目前使用的测试工具中最流行的一种。 (8)基于故障的测试工具首先给出软件的故障模型,在此故障模型下,给出基于该故障模型的软件测试工具。这是目前一种有很好发展前景的软件测试工具。随着人们对软件故障认识的不断深入,软件的故障模型也会越来越完备,并更加符合实际。基于故障的软件测试工具有三个需要研究的问题:一是故障模型的准确程度,二是测试的准确程度
41、,三是测试的自动化程度。1.3 软件测试的流程1.3.1 软件测试 软件测试实际是由确认、验证、测试三个方面组成。确认:是评估将要开发的软件产品是否是正确无误、可行和有价值的。验证:是检测软件开发的每个阶段、每个步骤的结果是否正确无误,是否与软件开发各阶段的要求或期望的结果相一致。验证意味着确保软件是会正确无误的实现软件的需求,开发过程是沿着正确的方向在进行。 测试:通常是经过单元测试、集成测试、系统测试等。软件测试的流程分为测试流程和测试阶段流程。 1. 3.2 软件测试流程软件测试流程是组织领导软件测试的管理方案。软件测试流程分测试项目整体流程、测试项目确认流程、测试执行流程、测试策划流程
42、、问题跟踪与测试关闭流程、嵌入式软件测试流程、软件整体测试流程。 1. 测试项目整体流程测试项目整体流程如图1-5示。 测试项目确认流程测试项目确认流程如图1-6所示。 测试执行流程测试执行流程如图1-7所示。 测试策划流程测试策划流程如图1-8所示。 问题跟踪与测试关闭流程问题跟踪与测试关闭流程如图1-9所示。 嵌入式软件测试流程嵌入式软件测试流程如图1-10所示。 软件整体测试流程软件整体测试流程图如图1-11所示。 1.3.3 测试阶段流程测试阶段流程是针对软件在实际测试时的阶段执行方案。软件测试阶段流程分为软件测试阶段总体流程图、需求阶段测试流程、设计与编码阶段测试流程、集成测试和系统
43、测试阶段流程图。如图1-12,图1-13,图1-14,图1-15所示。 集成测试是将已经分别通过测试的单元按设计要求组合起来再进行测试,以检查这些单元接口是否存在问题。系统测试一般由若干个不同测试组成,目的是充分运行系统,验证系统各部件能否正常工作并完成所赋予的任务。 软件测试的各个阶段有着密切的联系, 如图1-16所示。 14 软件测试的组织结构和人员的要求软件测试是在有关测试组织领导下进行的具体工作,对组织结构和人员有具体的要求。 141 软件测试的组织结构软件测试的具体组织结构如图1-17所示。 142 系统测试组的人员结构组成软件测试的时候人员分配如图1-18所示。图1-18软件测试的
44、时候人员分配图 软件测试人员最好具有软件开发经验,理解软件工程的知识。软件测试过程中,必须要合理地组织人员。将软件测试的人员分成三部分。一部分上机测试人员(测试执行者),一部分测试结果检查核对人员(测试工具软件开发工程师),还有一部分是制作测试数据制作人员(高级软件测试工程师)。这三方面人员应该紧密配合,互相协调,保证软件测试工作的顺利进行。 上机测试人员 负责理解产品的功能要求,然后根据测试规范和测试案例对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,属于最低级的执行角色。 测试结果检查核对人员 负责写测试工具代码,并利用测试工具对软件进行测试;或者开发测试工具为软件测试工程师服务
45、。 制作测试数据制作人员 要具备写程序的技术。“因为不同产品的特性不一样,对测试工具要求也是不同的,就像Windows的测试工具不能用于Office,office的也不能用于SQLserver,微软很多测试工程师就是负责专门为某个产品写测试程序的。测试经理测试经理主要负责测试内部管理以及与其他外部人员,客户的交流等,测试经理需要具有项目经理的知识和技能。同时测试工作开始前项目经理需要书写测试计划书,测试结束需要书写测试总结报告。 测试文档审核师测试文档审核师主要负责前置测试,包括在需求期与设计期间产生的文档进行审核,如需求规格说明书,概要设计书,详细设计书等等。审核需要进行书写审核报告。当文档
46、确定后,需要整理文档报告,并且反映介绍给测试工程师。测试工程师测试工程师主要根据需求期与设计期间产生的文档设计制作测试数据和各个测试阶段的测试用例。(测试文档审核师,测试工程师可以有一人相同的一组人来完成)按照测试用例,来完成测试工作。 操作人员143 软件测试需要的知识结构 软件测试不是很快入门的职业,门槛高,需要的知识多,具有编程经验的程序员不一定是一名优秀的测试工程师。软件测试已经形成了一个独立的技术学科,软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,没有一个合格的测试人员,测试是不可能实现高质高效的。软件测试人员需要的知识结构: 需要具有懂得计算机的基本理论,
47、又有一定开发经验的人员; 需要具有了解软件开发的基本过程和特征,对软件有良好的理解能力,掌握软件测试相关理论及技术的人员; 需要具有软件业务经验的人员; 需要根据测试计划和方案进行软件测试;针对软件需求开发测试模型,制定测试方案,安排测试计划,搭建测试环境, 进行基本测试,设计简单的测试用例。 需要具有规划设计环境;编制测试大纲并设计测试用例;对软件进行全面测试工作的人员 需要具有编制测试计划;评审测试方案,规范测试流程及测试文档;分析测试结果,管理测试项目。 需要会操作软件测试工具的人员。144 软件测试人员需要的能力素质1. 沟通能力 2. 技术能力 3. 自信心 4. 洞察力5做测试时要
48、细心,6测试人员测试的时间分配应该是, 30%读程序,20%写测试程序,50%写Test Cases和运行Test Cases. 好的测试员的工作重点应该放在理解要求,理解客户需要,思考在什么条件下程序会出错,而不是思考如何去自动化。 7. 探索精神8. 不懈努力9. 创造性10. 追求完美11. 判断准确12. 老练稳重和说服力15 软件测试的前景1软件测试学科 软件测试一门非常崭新的学科,目前仍然还处在研究探索阶段,还没有上升到理论层次。软件测试需要什么样的专业基础还没有定论,而且目前还没有一种很好的标准来衡量测试人员。但无可置疑,软件测试越来越受到软件公司的重视,软件测试工程师的作用也逐
49、渐被人们所认可。 2. 软件测试业的动向“软件测试企业调研数据显示,软件测试企业所属的行业分布比较集中,主要分布在应用软件行业、电信/互联网行业和软件外包行业。从人才需求来看,企业招聘计划相对坚挺,其中手工功能测试人员需求最大,其次为测试用例设计、功能自动化测试、性能测试人员。”“调研数据显示,软件测试所在企业的单位性质主要是私营或集体所有制企业,其比例为41%;其次是外资企业(含合资)和股份制企业,其比例分别为28%和21%。在中国的软件测试企业中,私营或集体所有制企业已经成为主力。所以软件测试从业人员在选择公司时,将目光转向私营或集体所有制企业,可能会得到更多的机会。”“51%的公司没有专
50、门的测试部门;38%的公司有专门的测试部门;仅11%的公司有专门的测试工具开发部门。在这些有专门软件测试技术部门的公司中,46%的公司独立设置了测试部门,而剩余的均隶属于开发部或质量管理部,比例分别为35%和19%。”“人工功能测试人员需求较大”。“调研数据显示,专职测试人员的规模主要是1-10人,其比例为49%,接近半数;其次是规模在10-50人的,比例为24%;专职测试人员规模在50-100人的占总数的10%。而相反,公司测试人员与开发人员的比例集中在1:3-1:5左右,19%的公司该比例达到甚至超过1:7,这与国外软件业1:1的比例相差甚远。这些数据表明国内软件测试人才的需求和职业发展的
51、潜力依然很大”。“在调查中,“公司最需要从事哪类测试工作的人员”一项的数据结果表明,目前公司比较需要的是手工功能测试人员,所占比例为63%;其次为测试用例设计、功能自动化测试、性能测试人员,比例分别为53%、50%、46%;测试管理和测试分析人员占38%、33%” 。 3. 软件测试人员的流动比率较低“据了解,造成公司人才流动的各因素中,薪酬在同行业没有竞争力和测试人员职业发展受限这两个因素所占比例较多,分别为48%和44%;测试人员感觉技能提升比较慢和工作内容相对简单、以人工测试为主两个因素位居其后,所占比例均为38%;而工作强度比较大,太辛苦仅占到20%;测试在公司不受重视这一因素所占比例
52、最少,仅为16%。”“调研数据显示,公司的软件测试人才流动比率基本保持不变的占11%,流动比率10%的占多数,其比例达到了55%;大于10%的仅占34%。不难看出大部分公司软件测试人员趋于稳定,人员流动比率较低。” 4. 公司仍有招聘计划测试队伍不断扩大“据调研数据显示,在所有调查对象中,74%的公司有软件测试人员招聘计划,26%的公司无招聘计划。计划招聘人数比例如下:计划招聘1-5人的公司占68%;计划招聘5-10人的占15%;计划招聘10-15人的占11%;而计划招聘50人以上的也占到了6%。”“同时,在对“公司软件测试人员队伍在扩大还是缩小”一项调查中获得的数据显示,83%的公司软件测试
53、队伍在不断扩大。专家表示,软件测试人员规模在不断发展和壮大,并且,从长远来看,随着人们对软件产品质量的重视和追求越来越高,软件测试职位将拥有美好的前景”。 5. 本科从业者占半数“目前,公司招聘软件测试人员主要有三大渠道:通过人才招聘网,在各渠道中所占比例为75%,位居第一;其次是社会招聘会,占56%;企业内部员工推荐的比例为45%。”“软件测试业对学历的要求虽然并不严格,但一般来说,软件测试从业人员的学历集中在本科,其比例为52%;大专学历次之,其比例为34%;高学历者(包括硕士、博士)占7%;大专以下和无学历要求的占7%。学历的分布说明软件测试不是一份简单和低层次的工作,需要有一定的教育背
54、景和文化程度才能胜任。”“调研数据显示,软件测试从业人员的专业要求多为计算机相关专业,其比例为55% ;计算机专业次之,其比例为25%;无专业要求占有13%;理工科专业占有7%。这说明大部分公司均要求软件测试人员有一定的计算机或计算机相关的基础知识。”“据调研数据显示,影响工资的各种因素中,技术能力所占比例最大,为82%;其次是资历,占有比例为60%;工作态度位居第三,所占比例为42%。 6. 业务知识、外语水平高更吃香据调研数据显示,公司要求测试人员掌握的行业业务知识中,应用软件行业业务知识所占比例最大,为59%;电信/互联网服务行业业务知识所占比例次之,占33%;软件外包行业业务知识占20
55、%。一般来说,公司要求测试人员掌握的外语语种,以英语为主,所占比例为85%;日语所占比例为7%;韩语和其他语种各占4%。在外语的熟练程度的要求上,一般熟练所占较大比例,为61%;要求熟练的所占比例为34%;要求精通的仅占5%。因此,如果在技术熟练的基础上,有良好的业务知识和外语沟通能力,无疑是最吃香的。”微软、惠普这样的IT巨头,招聘的软件测试岗位都属于中高端人才,一般参加现场招聘会的求职者无法满足其需求,所以这些IT巨头基本不会考虑参加。” 7软件测试工程师需求(1)企业的需求几乎每个大中型IT企业的软件产品在发布前都需要大量的质量控制、测试和文档工作,而这些工作必须依靠拥有娴熟技术的专业软件人才来完成。软件测试工程师就是这样的一个企业重头角色(2)许多企业没有专职的测试机制软件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年深圳中考物理电功的计算试卷(附答案可下载)
- 2026年大学大二(康复治疗学)物理治疗技术阶段测试试题及答案
- 2026年大学大二(计算机应用技术)数据库应用技术阶段测试试题及答案
- 老年人护理与护理人才
- 炊事专业教材题库及答案
- 税务执法资格题库及答案
- 2026年深圳中考地理答题规范特训试卷(附答案可下载)
- 水晶科普内容
- 2026年英语六级备考阅读理解题
- 轨道运营管理职业指南
- 洁净室风机过滤单元(FFU)施工规范
- 肿瘤坏死因子受体相关周期性综合征诊疗指南
- 中医协定处方管理制度
- 高一数学第一学期必修一、四全册导学案
- 2025年开封大学单招职业技能测试题库完整
- 中建给排水施工方案EPC项目
- 电气工程及自动化基于PLC的皮带集中控制系统设计
- 医学教材 常见输液反应的处理(急性肺水肿)
- FURUNO 电子海图 完整题库
- 企业年会摄影拍摄合同协议范本
- 焊接质量控制规范培训课件
评论
0/150
提交评论