资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,实用软件测试技术,第1章 软件测试概述,内容简介,软件测试基础,软件测试发展史和发展前景,软件测试行业标准,软件测试人员的基本素质和需具备的思维方式,本章导读,本章导读,什么是软件测试?为什么要做软件测试?本章试图从软件工程和软件生命周期的角度去解释软件测试的基本概念,软件测试的目的和意义以及对于软件开发和质量保证的重要性,为学习和掌握软件测试技术做好准备。,1.1软件测试基础,1.1软件测试基础,在最早的工业制造和生产中,测试是被定义为“检验产品是否满足预定需求”的生产过程,而软件测试是伴随着软件产生而产生的,一为验证软件的功能,二为发现软件存在的缺陷问题,以尽量减少软件中的错误和不足。随着软件产业的日益发展和软件工程规范化的要求,测试是最有效的消除和预防软件缺陷和软件故障的手段。,1.1软件测试基础,软件,软件工程,软件生命周期,1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,1.软件,软件(Software)是一系列按照特定顺序组织的计算机数据和指令的集合。一般分为系统软件、应用软件和介于这两者之间的中间件。,(1)系统软件,(2)应用软件,(3)介于两者之间的中间件,1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,1.软件,软件(Software)是一系列按照特定顺序组织的计算机数据和指令的集合。一般分为系统软件、应用软件和介于这两者之间的中间件。,(4)通常情况下,软件应包含如下内容:,可以在计算机上运行的程序集合。,程序能够妥善处理信息的数据结构。,与这些程序相关的文档集合。,1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,2.软件工程,从20世界50年代初至今,软件的发展大致经历了四个阶段,软件工程这个概念是1968年在联邦德国召开北大西洋公约组织的计算机科学家国际会议上讨论“软件危机”问题时正式被使用的,标志着软件工程的诞生。伴随着软件产业的发展以及在学术界的推动下,目前,软件工程已经发展成为一门专业的学科了。,目前比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,得到软件生命周期的六个步骤:制订计划、需求分析、设计、编码、测试和运行维护。,1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,3.软件生命周期,软件生命周期(Software Life Cycle,SLC),也叫软件生存期,是软件从孕育、诞生、成长、成熟到衰亡的一个过程,。,软件生命周期的六个步骤:制订计划、需求分析、设计、编码、测试以及运行维护,这个过程是一个自顶向下逐步细化的过程;其中测试是保证软件质量的重要手段,测试的过程恰恰是一个相反的过程,是一个自底向上逐步集成的过程,低一级的测试为上一级测试准备条件。,1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,3.软件生命周期,软件工程中一般用软件生命周期模型来表示和反映软件生命周期内的各个活动,根据不同的开发模式,模型的表示也不一样,常见的模型有:,边做边改模型(BuildandFix Model),瀑布模型(Waterfall Model),快速原型模型(Rapid Prototype Model),增量模型(Incremental Model),螺旋模型(Spiral Model),演化模型(Evolution Model),喷泉模型(Fountain Model),智能模型(四代技术(4GL),混合模型(Hybrid Model),快速应用开发模型(RAD),1.1.1软件、软件工程、软件生命周期的基本概念,1.1软件测试基础,1.软件缺陷,(1)软件缺陷的定义,在软件工程或软件测试中,对于软件存在的问题,都可以称为软件缺陷或软件故障。作为一名测试人员,可能发现的缺陷很多情况下都没有上面所举的案例那么显明,但是其任务就是发现软件中所隐藏的错误,包括常常用到的以下几种术语:,异常(Anomaly)、事件(Incident)、偏差(Variance)、漏洞(Bug),主要是指未按预先设计的运行,并不代表软件失败;,而故障(Fault)、失败(Failure)、缺陷(Defect)则代表比较严重的情况,甚至危险的情况。,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,1.软件缺陷,对于软件缺陷的,至少满足下列五种情况之一,才称为发生了一个软件缺陷(Software Bug):,软件未实现产品规格说明书要求的功能。,软件出现了产品规格说明书中明确不会出现的错误。,软件实现了产品规格说明书中没有提到的功能。,软件未实现产品规格说明书中虽未明确提及但是应该实现的功能。,软件难以理解、不易使用、运行缓慢或者让最终用户认为不好。,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,1.软件缺陷,(2)软件缺陷产生的原因,软件自身因素,软件开发团队因素,开发技术因素,项目管理因素,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,1.软件缺陷,(3)软件缺陷修复的费用,软件缺陷所带来的修复费用是随着时间的推移而呈指数级别递增的,如图所示,即:随着时间的推移,修复费用呈十倍、百倍、千倍甚至万倍的增长。,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,2.软件可靠性,(1)软件可靠性定义,软件可靠性(Software Reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。规定的条件是指直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入条件;规定的时间区间是指软件的实际运行时间区间;规定功能是指为提供给定的服务,软件产品所必须具备的功能。软件可靠性不但与软件存在的缺陷和差错有关,而且与系统输入和系统使用有关。软件可靠性的概率度量称软件可靠度。,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,2.软件可靠性,(2)影响软件可靠性的因素,软件可靠性是关于软件能够满足需求功能的性质,软件不能满足需求是因为软件中的差错引起了软件故障。,软件差错是软件开发各阶段潜入的人为错误,除了软件可靠性外,影响可靠性的另一个重要因素是健壮性,对非法输入的容错能力。所以提高可靠性从原理上看就是要减少错误和提高健壮性。,1983年,美国IEEE计算机学会对“软件可靠性”做出了明确的定义,该定义包含两个方面的内容:,在规定的条件下和时间内,软件不引起系统失效的概率。,在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。,其中,概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。,1.1.2软件缺陷与软件可靠性,1.1软件测试基础,概括地说,软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。,具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准以及所有专业开发的软件都应具有的和隐含特征相一致的程度。,1.1.3软件质量与质量保证,1.1软件测试基础,1.影响软件质量的主要因素,通常情况下,影响软件质量的因素是从管理角度对软件质量进行度量。可划分为三组,分别反映用户在使用软件产品时的三种观点。,正确性、健壮性、效率、完整性、可用性、风险(产品运行)。,可理解性、可维修性、灵活性、可测试性(产品修改)。,可移植性、可再用性、互运行性(产品转移)。,1.1.3软件质量与质量保证,1.1软件测试基础,2.软件质量标准,软件需求是度量软件质量的基础,与需求不一致就是质量不高。,指定的标准定义了一组指导软件开发的准则,如果没有遵守这些准则,肯定会导致质量不高。,通常,有一组没有显式描述的隐含需求(如期望软件是容易维护的)。如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。,1.1.3软件质量与质量保证,1.1软件测试基础,3.软件质量保证,软件质量保证(SQA),是软件质量管理这个庞大、复杂系统中的一个分支,与质量计划、质量控制合称为质量管理的过程域。企业必须借助专业、高效的质量管理方法和测试工具,从管理和技术两方面双管齐下,才能实现软件质量管理这个目标。质量保证是贯穿整个项目生命周期的有计划、有步骤地对整个项目质量计划执行情况进行评估、检查与改进的工作,目的是向管理者、客户提供信任,以此确保项目质量与技术一致。,1.1.3软件质量与质量保证,软件测试是伴随着软件的产生而产生的,,起初软件开发时期,20世纪50年代后期,20世纪70年代末,20世纪90年代,而在软件测试工具平台方面,目前商业化的软件测试工具也很多。由此可见,测试在软件开发过程中,已经不再是基于代码而进行的活动,软件测试是一个基于整个软件生命周期的质量控制活动,并始终贯穿于软件开发的各个阶段。,1.2软件测试发展史和发展前景,1.3.1软件测试的目的,软件测试是指使用人工或者自动化工具来运行或测试某个系统的过程,其目的在于检验被试系统是否满足产品需求规格说明中所规定的要求或者弄清预期结果与实际结果之间的差别,以便及时修正和改进。,软件测试是一个系列过程活动,是帮助识别开发完成计算机软件的正确度、完全度和质量的软件过程,是软件质量保证的重要手段。,1.3软件测试的目的、原则和相关标准,1.3.1软件测试的目的,软件测试的目的应包含如下内容:,测试并不仅仅是找出错误,而是通过分析错误产生的原因和错误发生的趋势,从而帮助项目管理者发现软件当前存在的缺陷,以便及时改进。,测试分析可以有效帮助测试人员设计有效的针对性测试方法,提高测试的有效性。,没有发现错误的测试也是有价值的测试,完整的测试是评价软件质量的方法之一。,1.3软件测试的目的、原则和相关标准,1.3.2软件测试的原则,软件测试的基本原则有助于测试人员进行高效的测试,尽早尽多地发现软件存在的缺陷和错误,通过分析软件存在的问题,从而能够持续改进测试过程,保证软件质量。,(1)测试要尽早介入,(2)测试要能显示缺陷的存在,(3)不存在穷尽测试,(4)测试的群集性,1.3软件测试的目的、原则和相关标准,1.3.2软件测试的原则,软件测试的基本原则有助于测试人员进行高效的测试,尽早尽多地发现软件存在的缺陷和错误,通过分析软件存在的问题,从而能够持续改进测试过程,保证软件质量。,(5)测试用例设计避免“杀虫剂”效应,(6)测试要严格按测试计划执行,(7)测试必须贯穿于软件整个生命周期,(8)测试需要独立的测试团队或使用第三方测试,1.3软件测试的目的、原则和相关标准,1.3.3软件测试的相关标准,1.3软件测试的目的、原则和相关标准,编号,标准代码,标准名称,01,GB/T 17544-1998,信息技术软件包质量要求和测试,02,GB/T 16260-2006,软件工程产品质量,03,GB/T 18905-2002,软件工程产品评价,04,GB/T 15532-2008,计算机软件测试规范,05,GB/T 17544-1998,信息技术软件包质量要求和测试,06,GB/T 8567-2006,计算机软件文档编制规范,07,GB/T 9386-2008,计算机软件测试文档编制规范,08,GB/T 25000.1-2010,软件工程软件产品质量要求与评价(SQuaRE)SQuaRE指南,09,CSTCJSBZ02,应用软件产品测试规范,10,CSTCJSBZ03,软件产品测试评分标准,1.4.1测试人员的基本素质,1.良好的沟通能力,2.掌握全面的技术,3.要具备充分的自信心、足够的耐心和责任感,4.具有怀疑精神,5.超强的洞察力和记忆力,1.4软件测试人员,1.4软件测试人员,1.4软件测试人员,1.4.2软件测试人员需具备的思维方式,1.逆向思维方式,2.组合思维方式,3.全局思维方式,4.两极思维方式,5.简单思维方式,6.比较思维方式,1.4.3软件测试工程师职位简介,初级测试工程师,测试工程师/程序分析师,高级测试工程师/程序分析师,测试组负责人,测试/编程负责人,测试/质量保证/开发(项目)经理,计划经理,1.4软件测试人员,1.4软件测试人员,软件测试概述,1.简述软件测试的目的。,2.软件缺陷的定义和划分。,3.简述软件测试的原则和意义。,4.简述软件测试工程师应具备的基本素质和思维方式。,知识总结与课后思考,THANKS!,本章结束!,实用软件测试技术,第2章 软件测试技术,内容简介,软件测试原理及分类,白盒测试相关技术,黑盒测试相关技术,其他测试技术,本章导读,本章导读,软件测试涉及技术、管理等多个层面的内容,为了更好地实施软件测试,必须了解测试的基本原理、分类和相关测试技术。本章从技术层面系统介绍软件测试过程中用到的测试方法和技术。,2.1软件测试技术概述,软件测试是指使用人工方式或者自动化工具运行测试被测对象(软件系统)的过程,目的在于验证被测对象是否满足需求说明书中规定的内容和功能,尽早发现软件存在的缺陷。,软件测试是软件质量保证的重要手段,其目标就是以最少的时间和人力尽早找出软件潜在的各种错误和缺陷,证明软件的功能和性能与需求说明相符。此外,实施测试收集到的测试结果数据也可为可靠性分析提供依据。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,2.按执行状态分,3.按执行主体分,4.按测试技术分,5.按执行是否需要人工干预分,6.其他测试类型,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,软件测试贯穿于软件开发的整个生命周期,按照软件开发的阶段,软件测试分为单元测试、集成测试、确认测试、系统测试、验收测试等。,(1)单元测试,(2)集成测试,(3)确认测试,(4)系统测试,(5)验收测试,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,(1)单元测试,单元测试(Unit Testing)又称为模块测试(Module Testing),是软件测试对象中的最小可测单元,目的是检查每个单元是否正确实现了详细设计文档中定义的功能、性能、接口等要求,以便发现各个模块内部可能出现的各种错误和缺陷,保证了最小单元的代码准确,会令设计更好,大大减少花在调试上的时间。,单元测试通常是在软件开发人员编码后进行的,一般是开发人员互换模块进行交叉测试,但是实际上在不正规的软件开发团队中,单元测试都由开发人员自己来完成。大部分软件测试方法都适用于单元测试。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,(2)集成测试,集成测试(Integration Testing)又称为组装测试。基于单元测试后的单元模块,依据概要设计文档,对通过单元测试的模块组装为系统或子系统进行测试,其目的是检验不同模块单元之间的接口是否符合概要设计的要求,能否正常运行。与单元测试相比,集成测试则关注的是单元模块的外部接口。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,(3)确认测试,确认测试(Conformation Testing)是通过检验和提供客观证据,证实软件是否满足特定预期用途的需求。确认测试检测以证实软件是否满足软件需求说明书中规定的要求。,(4)系统测试,系统测试(System Testing)是为了验证和确认系统是否达到了预期的功能和目标,主要由测试工程师进行测试,分为功能测试和性能测试。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,(5)验收测试,验收测试(Acceptance Testing)又称为接受测试,是在系统测试后期,以用户为主,测试人员和质量保证人员共同辅助进行测试,验证测试是软件正式交付上线前的最后一个测试环节。,验收测试依据软件需求规格说明文档和软件验收标准。验收测试又分为测试和测试。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,2.按执行状态分,按照被测软件是否需要执行,可将软件测试分为静态测试和动态测试。,(1)静态测试,又称为静态分析(Static Analysis),指不运行被测程序,而是分析和检查程序的形式与结构,查找缺陷,进行需求确认。主要包括对源代码、程序界面、各类文档等进行测试,相当于是对被测程序进行特性分析。,(2)动态测试,又称为动态分析(Dynamic Analysis),是需要实际运行被测软件程序的,通过运行时表现出的状态、行为发现程序的错误与缺陷。运行时依据测试用例,对实际测试结果与预期结果进行对比分析,发现程序与客户需求不一致的问题。,2.1软件测试技术概述,2.1.1软件测试分类,1.按照软件开发阶段分,2.按执行状态,动态测试贯穿在测试的各个阶段中,是一种非常有效的测试方法,,比较,内容,测试,方法,是否运行软件,是否需要测试用例,是否可以直接定位缺陷,测试实现难易度,精准性,独立性,静态测试,否,否,是,容易,否,否,动态测试,是,是,否,困难,是,是,表2-1 静态测试与动态测试比较,2.1软件测试技术概述,2.1.1软件测试分类,3.按执行主体分,按照测试组织方划分,软件测试分为开发方测试、用户测试和第三方测试。,开发方测试又称为验收测试或测试,在软件开发环境下,测试软件是否实现了需求规格说明中的功能,是否达到了要求的性能。,用户测试又称为测试,在用户的实际环境下,让用户使用、评价和检查软件,发现软件存在的问题和缺陷,并做出相应的评价。,第三方测试指由第三方测试机构执行测试,也称为独立测试。在测试组织、技术、管理上与开发方和用户方都是独立的,通常都是在模拟用户实际使用环境下对软件进行确认测试。,2.1软件测试技术概述,2.1.1软件测试分类,4.按测试技术分,按照对被测对象的了解程度和是否查看代码,测试又分为:,黑盒测试,白盒测试,灰盒测试,2.1软件测试技术概述,2.1.1软件测试分类,4.按测试技术分,(1)黑盒测试,黑盒测试是将被测对象看作一个黑盒子,不考虑程序内部的结构和逻辑结构,提供输入,检查输出,主要检查软件的每个功能是否正常使用,属于功能性测试。,优点:能从产品功能角度进行测试,确保从用户角度出发,测试用例不因程序内部逻辑变化而变化,测试人员容易上手。,缺点:无法测试程序内部,若规格说明有误,错误无法发现,产品得不到充分性测试。,应用范围:等价类划分法、边界值分析法以及决策表测试。,2.1软件测试技术概述,2.1.1软件测试分类,4.按测试技术分,(2)白盒测试,与黑盒测试相反,白盒测试则要了解程序内部和逻辑结构,检测内部是否按照规格说明书的规定正常进行。基于代码测试的白盒测试,需要了解程序内部的架构、具体需求以及程序的编写技巧,属于验证性结构测试。,优点:可以针对程序内部进行覆盖测试,程序内部可以得到充分性测试,有很多工具可以支持完成。,缺点:不易生成测试数据,无法测试程序外部特性,工作量大,一般用于单元测试。,应用范围:语句覆盖、条件覆盖、判定覆盖、路径覆盖等。,2.1软件测试技术概述,2.1.1软件测试分类,4.按测试技术分,(3)灰盒测试,灰盒测试是介于白盒测试和黑盒测试之间的测试,相对于白盒测试,不需要关注详细、完整的内部结构,只需要测试各个组件间的逻辑关系是否正确。灰盒测试的重点在于测试程序的处理能力和健壮性,与白盒测试和黑盒测试相比,投入的时间和维护工作量较小。,2.1软件测试技术概述,2.1.1软件测试分类,5.按执行是否需要人工干预分划分,按照执行测试时是否需要人工参与,可以将测试分为手工测试和自动化测试。,(1)手工测试,手工测试是指测试完全由人工完成,包括测试计划制订、测试用例编写、执行、测试结果分析等,传统的测试工作都由人工来完成。,(2)自动化测试,与手工测试相比,自动化测试则是指测试所涉及的任何活动都由测试工具完成,包括测试脚本编写、开发、执行和管理,不需要人工干预,目前主要用于功能测试、性能测试和回归测试活动中。,2.1软件测试技术概述,2.1.1软件测试分类,6.其他测试类型,除上面介绍的测试分类外,还有一些重要的测试,比如冒烟测试、回归测试和随机测试等。,(1)冒烟测试,冒烟测试(Smoking Testing)源自硬件行业,因为当电路板做好以后,加电测试,如果板子没有冒烟再进行其他测试,否则就必须重新来过。如果类似的冒烟测试没有通过,那么仍旧会返回给开发人员进行修正,测试人员测试的版本必须首先通过冒烟测试的考验。多用于回归测试中,优点是节省测试时间,防止创建失败,缺点则是覆盖率偏低。,2.1软件测试技术概述,2.1.1软件测试分类,6.其他测试类型,(1)冒烟测试,(2)回归测试,回归测试(Regression Testing)是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。,(3)随机测试,软件测试中除了根据测试用例和测试说明书进行测试外,还需要进行随机测试(Adhoctesting),主要是根据测试者的经验对软件进行功能和性能抽查。重点对一些特殊情况点、特殊环境并发性进行检查。,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,1.V模型,2.W模型,3.X模型,4.H模型,5.前置模型,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,1.V模型,V,模型示意图,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,2.W模型,W,模型示意图,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,3.X模型,X,模型示意图,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,4.H模型,H,模型示意图,2.1软件测试技术概述,2.1.2软件测试模型,软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理。,5.前置模型,前置测试模型是由Robin F Goldsmith等人提出的,是一个将测试和开发紧密结合的模型,该模型提供了轻松的方式,可以使项目加快速度。有以下特点:,(1)开发和测试相结合,(2)对每一个交付内容进行测试,(3)在设计阶段进行计划和测试设计,(4)测试和开发结合在一起,(5)让验收测试和技术测试保持相互独立,(6)反复交替的开发和测试,(7)发现内在的价值,2.2 测试环境,2.2.1测试环境定义,简单地说,测试环境就是软件运行的平台,即进行软件测试所必需的平台和前提条件,可用如下公式来表示:,测试环境=硬件+软件+网络+历史数据,2.2 测试环境,2.2.2测试环境的重要性,测试环境的重要性主要体现在以下几个方面:,1.加快测试速度,稳定、可控的测试环境,可以使测试人员花费较少的时间就能完成测试用例的执行,也无须花费额外的时间在维护测试用例和测试过程上。,2.准确重现缺陷,稳定、可控的测试环境可以让被提交的缺陷在任何时刻都能准确地重现。,3.提高测试效率和保证软件质量,经过良好规划和管理的测试环境,可以尽可能地减少环境变动对测试工作的不利影响,并积极推动测试工作效率和质量的提高。,2.2 测试环境,2.2.3良好测试环境的要素,具备良好的测试环境三要素:,1.良好的测试模型,2.多样化的系统配置,3.熟练使用各种工具的测试人员,2.2 测试环境,2.2.3良好测试环境的要素,具备良好的测试环境三要素:,1.良好的测试模型,2.多样化的系统配置,3.熟练使用各种工具的测试人员,2.2 测试环境,2.2.5测试环境的维护和管理,测试环境搭建好后,为减少被测应用的每次版本发布对测试环境产生的影响。为此,需考虑如下问题:,1.设置专门的测试环境管理员角色,2.明确测试环境管理所需的各种文档,3.测试环境访问权限的管理,4.测试环境的变更管理,5.测试环境的备份和恢复,2.3 白盒测试,白盒测试(WhiteBox Testing),又称为结构测试、逻辑测试或基于程序的测试,是软件测试技术中最为有效和实用的测试方法之一。,白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。,白盒测试的测试方法总体上分为:,静态方法,动态方法,2.3 白盒测试,采用白盒测试方法必须遵循以下几条原则,才能达到测试目的。,保证一个模块中的所有独立路径至少被测一次。,所有逻辑值均需测试真(True)和假(False)两个分支。,检查程序的内部数据结构,保证其结构的有效性。,在上下边界及可操作范围内运行所有循环。,在白盒测试中,一般会用覆盖率来度量测试的完整性。测试覆盖率是程序被一组测试用例执行的百分比。,覆盖率=(至少被执行一次的被测项)/被测项总数,2.3 白盒测试,2.3.1逻辑覆盖测试,逻辑覆盖测试法是白盒测试中以程序内部的逻辑结构为基础的设计测试用例的技术方法,目的是测试程序中的判定和条件。测试程序逻辑结果通常需要通过使用控制流覆盖准则来度量测试的进行程度。,根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可以分为:,语句覆盖,判定覆盖,条件覆盖,条件/判定覆盖,条件组合覆盖,修正条件/判定覆盖,2.3 白盒测试,2.3.1逻辑覆盖测试,1.语句覆盖(Statement Coverage,SC),语句覆盖就是设计若干测试用例运行被测程序,使得程序中每一可执行语句至少被执行一次。其中“若干”的意思,就是说使用的测试用例越少越好。语句覆盖在测试中主要发现缺陷或错误语句。,语句覆盖率的公式:,语句覆盖率(SCP)=被评价到的语句数量/可执行的语句总数100%,缺点:对程序执行逻辑的覆盖很低。,2.3 白盒测试,2.3.1逻辑覆盖测试,2.判定覆盖(Decision Coverage,DC),判定覆盖也称为分支覆盖,设计若干测试用例,运行被测程序,使得每个判定分支的取真(True)和取假(False)至少被执行一次。,判定路径覆盖率的公式:,判定路径覆盖率(DCP)=被判定到的路径数/判定路径总数100%,优点:判定覆盖比语句覆盖至少多出一倍的测试路径,自然比语句覆盖的测试能力强大一些。,缺点:判定覆盖虽然把程序所有分支都覆盖了,但主要对整个表达式进行取值,忽略了表达式内部取值。,2.3 白盒测试,2.3.1逻辑覆盖测试,3.条件覆盖(Condition Coverage,CC),条件覆盖要求能够保证程序中每个复合判定表达式的每个简单判定条件的取真(True)和取假(False)至少被执行一次。与判定覆盖相比较,条件覆盖增加了对符合判定情况的测试,增加了测试路径。要达到条件覆盖就得有足够多的测试用例,满足了条件覆盖不一定能保证满足判定覆盖和语句覆盖。,2.3 白盒测试,2.3.1逻辑覆盖测试,4.条件/判定覆盖(Condition/Decision Coverage,C/DC),条件/判定覆盖是指设计足够的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。,条件/判定覆盖公式:,条件/判定覆盖率(C/DCP)=被判定到的条件取值和判定分支的数量/(条件取值总数+判定分支总数)100%,缺点:没有考虑到单个判定对整体结果的影响,无法发现逻辑错误。,2.3 白盒测试,2.3.1逻辑覆盖测试,5.条件组合覆盖(Condition Combination Coverage,CCC),条件组合覆盖也称为多条件覆盖,是指设计足够多的测试用例,使得每个判定中条件的各自可能组合至少出现一次。满足条件组合覆盖一定满足判定覆盖、条件覆盖和条件/判定覆盖。,条件组合覆盖公式:,条件组合覆盖率(CCCP)=被判定到的条件取值组合的数量/条件取值组合的总数100%,缺点:当判定语句较多时,条件组合值比较多。,2.3 白盒测试,2.3.1逻辑覆盖测试,6.修正条件/判定覆盖(Modified Condition/Decision Coverage,MD/CC),修正条件/判定覆盖要求判定(由条件和零个或多个布尔操作符组成的布尔表达式)中的每一个条件(不含布尔操作符的布尔表达式)的所有可能结果至少出现一次。每个判断的所有结果至少出现一次,每个程序模块的入口点和出口点都至少被调用一次,且每个条件都能单独影响判定的结果。,2.3 白盒测试,2.3.2基本路径测试,基本路径测试法就是在程序控制流图的基础上,通过分析控制构造的环路复杂度,导出基本可以执行路径集合,从而设计测试用例的方法。,设计的测试用例要保证在测试程序中的每个可执行语句至少被执行一次。,基本路径测试方法包括以下四个步骤:,根据程序设计画出程序的控制流图(控制流图是描述程序控制流的一种图示方法)。,计算程序的环路复杂度。通过环路复杂度可以导出程序基本路径集合中的独立路径条数,由此可以确定每个可执行语句至少执行一次所必需的测试用例数目的上限。,导出基本路径集,确定程序的独立路径。,设计测试用例,确保基本路径集中每一条路径的执行。,2.3 白盒测试,2.3.2基本路径测试,控制流图是描述程序控制流的一种图示方法。只用两种符号即可描述。圆圈用来描述节点,代表一条或者多条无分支的语句;箭头代表控制流,称为边或连接。,2.3 白盒测试,2.3.2基本路径测试,在将程序流程图简化为控制流图时,应重点注意以下问题:,在选择或多分支结构中,分支的汇聚处应有一个汇聚点。,边和节点围成的圈称为区域,当对区域计数时,图形外的区域也应记为一个区域。,如果判断中的条件表达式是由一个或多个逻辑运算符(OR、AND、NAND、NOR)连接的复合条件表达式时,则需要改为一系列只有单条件的嵌套的判断。,2.3 白盒测试,2.3.3白盒测试策略,在软件开发过程的不同阶段,研发组可能都需要进行白盒测试。使用白盒测试技术进行测试的策略如下:,在测试中,应尽量先用测试工具进行静态结构分析。,在测试中,可以采用先静态后动态的组合方式,先进行静态结构分析、代码检查和静态质量度量,再进行覆盖率测试。,利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果进一步确认,使测试工作更为有效。,覆盖率测试是白盒测试的重点,一般可以使用独立路径测试法达到语句覆盖标准;对于软件重点模块,应使用多种覆盖率标准衡量代码的覆盖率。,在不同的测试阶段,测试的侧重点会有所不同。在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析、静态质量度量;在系统测试阶段,应根据黑盒测试的结果,采取相应的白盒测试。,2.3 白盒测试,2.3.3白盒测试策略,在软件开发过程的不同阶段,研发组可能都需要进行白盒测试。使用白盒测试技术进行测试的策略如下:,在测试中,应尽量先用测试工具进行静态结构分析。,在测试中,可以采用先静态后动态的组合方式,先进行静态结构分析、代码检查和静态质量度量,再进行覆盖率测试。,利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果进一步确认,使测试工作更为有效。,覆盖率测试是白盒测试的重点,一般可以使用独立路径测试法达到语句覆盖标准;对于软件重点模块,应使用多种覆盖率标准衡量代码的覆盖率。,在不同的测试阶段,测试的侧重点会有所不同。在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析、静态质量度量;在系统测试阶段,应根据黑盒测试的结果,采取相应的白盒测试。,2.3 白盒测试,2.3.3白盒测试策略,下面是策略的一种:,(1)自我检查,简述:程序员实现制定功能后,在进行单元测试之前,对源代码进行初步检查。,重点:语句的使用等是否符合编码规范,并根据编码规范调整自己的代码以符合编码规范的要求。,参与人员:开发人员。,2.3 白盒测试,2.3.3白盒测试策略,下面是策略的一种:,(2)单元测试,简述:又称模块测试。在传统结构化编程中,以一个函数、过程为一个单元;在面向对象的编程中,一般把类作为单元进行测试。,重点:采用白盒测试和黑盒测试相结合的方法。,参与人员:专门的白盒测试人员。,方法:大家共同阅读代码或由程序编写者讲解代码,同其他同行边听边分析问题。,参与人员:全体开发小组。,2.3 白盒测试,2.3.3白盒测试策略,下面是策略的一种:,(3)代码评审,简述:在编码初期或编写过程中采用一种有同行参与的评审活动。,重点:通过组织或同其他程序员共同查看程序,可以找出问题,使大家的代码风格一致或遵守编码规范。,方法:大家共同阅读代码或由程序编写者讲解代码,同其他同行边听边分析问题。,参与人员:全体开发小组。,2.3 白盒测试,2.3.3白盒测试策略,下面是策略的一种:,(4)同行评审,简述:引用CMM(能力成熟度模型)中的术语,如用在评审源代码上,就是代码评审;在同行评审中,由软件工作产品创建者的同行们检查该工作的产品,识别产品的缺陷,改进产品的不足。,目的:检验工作产品是否满足了以往的工作产品中建立的规范,如需求或设计文档;识别工作产品相对于标准的偏差,包括可能影响软件可维护性的问题;向创建者提出改进建议;促进参与者之间的技术交流和学习。,参与人员:程序员、设计师、单元测试工程师、维护者、需求分析师、编码标准专家(此为CMM标准中提出的参与角色,可根据实际情况调整,至少需要开发人员、测试人员、设计师参与)。,2.3 白盒测试,2.3.3白盒测试策略,下面是策略的一种:,(5)代码走查,简述:由测试小组组织或者专门的代码走查小组进行代码走查,这时需要开发人员提交有关的资料文档和源代码给走查人员,并进行必要的讲解。代码走查往往根据代码检查单来进行,代码检查单常常是根据编码规范总结出来的一些条目。,目的:检查代码是否是按照编码规范来编写的。当然,代码走查的最终目的还是为了发现代码中潜在的错误和缺陷。,重点:把材料(需求描述文档、程序设计文档、程序的源代码清单、代码编码标准、代码缺陷检查表等)发给走查小组每个成员,让他们认真研究程序。,参与人员:测试人员(一般不让代码的创建者参与)。,代码检查速度建议:C代码 150行/小时,C+/Java 200300行/小时。,2.4黑盒测试,2.4黑盒测试,黑盒测试(BlackBox Testing),也称为功能测试、行为测试或数据驱动测试,是软件测试中最为重要的基本测试方法之一。在软件测试的过程中占有非常重要的地位。黑盒测试的基本方法有等价类划分法、边界值分析法、决策表法和因果图法等。,黑盒测试属于功能测试,是从用户角度出发,依据规格说明书,重点测试软件的功能需求,对程序功能和接口进行测试,发现以下错误:,功能不正确或有遗漏。,界面不符合规格说明书要求。,数据结构错误或访问数据库错误。,性能是否满足需求。,初始化和终止错误。,2.3黑盒测试,2.4黑盒测试,黑盒测试以规格说明书为依据,关注的是程序的功能是否都已经实现,每个功能是否都能正常使用,满足用户的需求。,黑盒测试的步骤如下:,1.测试计划,根据需求说明书中描述的功能和性能指标的规格说明书定义测试计划,后续的测试工作都依据该计划执行,计划包括测试内容、选择的方法、人员安排、测试时间以及相关资源配置等。,2.测试设计,依据测试计划,分解、细化测试执行过程,结合测试方法
展开阅读全文