软件测试1/7课程教学内容:软件测试基本知识静态测试技术动态测试技术:这一章我们将学习白盒测试和黑盒测试方法单元测试集成测试系统测试验收测试面向对象软件测试:这一章我们将学习到面向对象测试的基本方法和策略专用应用系统测试:将主要学习GUI测试,WEB应用系统测试以及数据库测试;测试管理第一章软件测试基础知识教学内容:软件测试的必要性软件测试和软件质量的基本概念软件测试现状与发展软件测试的目的和原则软件测试分类测试完成标准软件测试过程课型:新授课教时:4课时教学重点:1.软件测试的定义2.软件测试的原则3.软件测试的分类4.黑盒测试的定义5.白盒测试的定义第一节软件测试的必要性1案例说明:1.1迪斯尼的软件问题1.21994年Intel芯片的浮点除法问题1.31999年发生的火星探测飞船的坠毁1.4Therac-25(特瓦克-25)事件1.5爱国者导弹防御系统软件故障2导致软件缺陷的原因2.1有许多因素会导致软件缺陷,主观原因是人类在从事软件开发过程中容易犯错误2.2开发过程管理规范性、开发技术、软件的复杂性、开发的周期长短及个人能力等因素也会导致软件缺陷的产生说明:软件测试是发现并纠正软件缺陷极其重要的活动,作为一名软件工程专业的学生,非常有必要掌握基本的测试理论和技术。3软件测试在软件开发、维护和使用中的角色软件测试2/73.1在软件开发过程中,软件测试是质量保证的一个环节,有助于发现各阶段的缺陷,避免缺陷进入下一阶段,对软件的质量起到关键作用3.2在维护阶段,软件测试主要发现由于修改或功能增强而导致的软件缺陷3.3在使用过程中,可能由于硬件升级、运行环境变化及软件退役等原因出现各种问题,软件测试主要用于找到这些问题所在,或者通过软件测试模拟或再现可能出现的问题第二节软件测试和软件质量的基本概念1.软件测试的定义1.1在规定条件下对软件进行操作,以发现错误,对软件质量进行评估1.2软件测试有两个基本职责,即验证和确认。2软件质量的定义2.1在规定条件下使用时,软件产品满足明确或隐含要求的能力,分为内部质量、外部质量和使用质量2.2内部质量指软件产品本身的质量2.3外部质量指软件产品作为计算机系统的一个组成部分,使得系统的行为能满足明确和隐含需要的能力2.4使用质量(qualityinuse)是基于用户观点的软件产品用于指定的环境和使用周境(context)时的质量3错误error,缺陷defect,故障fault,失效failure,bug3.1错误、缺陷、故障:计算机程序中不正确的步骤、过程或数据定义3.2失效:产品执行所要求功能的能力的终止或它在先前规定的限度内无力执行所要求的功能3.3错误和缺陷是客观存在的东西,故障是执行错误和缺陷的结果,故障的出现将导致失效,Bug是错误的口语化表示3.4BUG:(小错误,缺陷,不足,过失…)一个计算机bug指在计算机程序中存在的一个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序无法正确的运行。Bug产生于程序的源代码或者程序设计阶段的疏忽或者错误。4确认与验证4.1确认validation:通过检查和提供客观证据来证实针对某一特定预期用途的需求已经得到满足——在设计和开发中,确认涉及到检查某个产品以确定是否符合用户需要的过程确认:我们在构造正确的产品吗?Validation:Arewebuildingtherightproduct?4.2验证verification:通过检查和提供客观证据来证实规定需求已经得到满足——在设计和开发中,验证是指对某项规定活动的结果进行检查的过程,以确定该活动对规定需求的符合情况验证:我们在正确地构造产品吗?Verification:Arewebuildingtheproductright?5软件测试和软件质量保证的区别5.1软件测试只是软件质量保证工作中的一个环节5.2软件质量保证和软件测试是软件质量工程的两个不同层面的工作软件测试3/75.3软件质量保证主要着眼于软件开发活动中的过程、步骤和产物(工作产品),而不是对软件本身进行剖析、找出缺陷和评估例如:食品的质量保证是构建食品安全体系,从食品原料到企业内部生产、产品流通到最终消费者所有环节都要建立严格的质量控制体系,严把质量关,才能确保食品安全,关注的是食品从原材料生产到最终销售的一个过程。5.4软件测试虽然也与开发过程紧密相关,但关心的不是过程的活动,而是对过程的产物或开发出的软件工作产品进行剖析例如:在食品的质量保证中,软件测试类似企业内部对每个生产批次的食品的抽查检验,关注的是食品本身的质量问题。第三节软件测试现状与发展1.现状:1.120世纪50年代,软件测试与调试加以区分,成为发现软件缺陷的重要活动1.220世纪80年代初期,“软件质量”被广大业者重视,软件测试不单纯是发现错误的过程,而且包含对软件质量的评价1.320世纪90年代,由于软件的复杂性提高、对软件质量的要求越来越严格、软件测试技术的发展,出现各种测试工具1.4近20年来,测试专家总结出了一些测试模型,例如,V模型、W模型等,在测试过程改进方面提出了TMM(TestingMaturityModel测试成熟度模型)的概念2发展趋势2.1软件测试不仅是软件开发的一个活动,而且应贯穿整个软件开发的全过程2.2在软件开发过程中软件架构师、开发工程师、QA人员、测试工程师将进行更好的融合,测试与软件的分析、设计、编码等工作的集成度越来越高2.3软件测试工程师在软件开发过程中的地位越来越重要,测试职业得到了充分的尊重2.4软件测试工具在软件测试中起到重要的作用,测试工具能与其他开发工具做到很好的集成,达到不同工具间的信息数据共享2.5软件测试外包服务将快速增长,将成为全球化的一种趋势第四节软件测试的目的和原则1.目的1.1软件测试的目的是通过软件测试而发现软件缺陷,并通过软件测试来确保软件产品的质量1.2测试并不仅仅是为了要找出缺陷,还可用于对软件质量进行评估1.3通过分析缺陷产生的原因和缺陷的分布特征,可以帮助项目管理者或测试人员改进其工作1.4服务于测试目标的规则1.4.1软件测试是为了发现错误而执行程序的过程1.4.2测试是为了证明程序有错,而不是证明程序无错1.4.3一个好的测试用例在于它能发现至今未发现的错误1.4.4一个成功的测试是发现了至今未发现的错误的测试2原则2.1所有的软件测试都应追溯到用户需求软件测试4/7必须满足用户需求2.2尽早地和不断地进行软件测试问题发现越早,解决问题的代价就越小,这是软件开发过程中的黄金法则2.3不可能完全地测试主要原因:测试所有可能输入是不可能的、系统或程序的所有路径不可能全部执行、无法发现需求规格说明书本身的错误、不可能穷尽所有输出2.4增量测试,由小到大由小到大的测试策略指的是软件测试对象的粒度,先测试子程序、类、构件,再逐步将其组合成较大的模块(或子系统)进行测试2.5避免测试自己的程序主要原因:由程序员承认自己写的程序有缺陷往往比较困难等原因2.6设计完善的测试用例测试用例的设计是测试工作的核心内容,应该尽可能地设计得周密细致。测试用例设计完成后需要进行评审2.7注意测试中的群集现象测试中发现的80%的错误可能来自20%的程序代码2.8确认缺陷的有效性缺陷A可能导致缺陷B的产生,缺陷A修复后,缺陷B可能自然消失2.9合理安排测试计划测试计划给出什么时间地点由谁来怎样完成什么任务2.10进行回归测试回归测试是对修正缺陷后的应用程序进行测试,以确保缺陷被修复,并且没有引入新的软件缺陷2.11测试结果的统计和分析只有对测试的输出信息进行深入的统计、分析和比较,才能给出清晰的错误原因分析报告2.12及时更新测试在测试过程中,出现需求变更、设计变更等情况时,都要及时更新测试第五节软件测试分类可以从不同的角度进行分类1.按测试阶段或层次1.1单元测试1.2集成测试1.3系统测试1.4验收测试2按测试目标或特性2.1功能性测试2.2非功能性测试2.2.1性能测试2.2.2压力测试2.2.3安全保密性测试2.2.4可靠性测试2.2.5安装测试软件测试5/73按测试方法3.1静态测试3.1.1人工测试3.1.2自动测试3.2动态测试3.2.1白盒测试3.2.2黑盒测试3.2.3灰盒测试4单元测试4.1单元测试的对象是程序系统中的最小单元---模块或组件4.2通常在编码阶段进行单元测试,主要采用白盒测试方法,根据程序的内部结构设计测试用例,检查程序模块或组件的已实现的功能与定义的功能是否一致、以及编码中是否存在错误4.3多个模块可以平行地、独立地测试4.4单元测试一般由编程人员和测试人员共同完成,而以开发人员为主4.5单元测试包括代码审查,代码审查可以发现程序50%~70%的代码缺陷5集成测试5.1集成测试,也称组装测试、联合测试、子系统测试,在单元测试的基础上,将模块按照设计要求组装在一起进行测试,主要目标是发现与接口有关的模块之间的问题5.2两种集成方式5.2.1一次性(非增量)集成方式5.2.2增殖(增量)式集成方式6系统测试6.1系统测试是将软件放在整个计算机环境下,包括软硬件平台、某些支持软件、数据和人员等,在实际运行环境下进行一系列的测试6.2主要针对系统的非功能性特征,如性能测试、压力测试、容量测试、安全保密性测试、恢复测试、健壮性测试、可靠性测试、可安装性测试等7验收测试7.1目的是向未来的用户表明系统能够像预定要求那样工作,验证软件的功能和性能如同用户所合理期待的那样8功能性测试8.1功能性测试一般须在完成集成测试后进行,而且是针对应用系统进行测试8.2功能测试是基于产品功能说明书,已知产品应具有的功能,从用户角度来进行功能验证,以确认每个功能是否都能正常使用9静态测试和动态测试9.1静态测试是指不通过执行实际代码(被测程序)而对软件开发的产品进行分析的测试活动9.1.1人工方法:由测试人员手工逐步执行所有的活动,并观察每一步是否成功完成(测试对象:开发过程中的中间产品,程序)9.1.2自动方法:使用一组测试工具对被测软件进行分析和验证(测试对象:程序)9.2动态测试是指运行被测程序,通过输入测试用例,分析运行结果,从而发现软件的错误和缺陷的测试活动10白盒测试与黑盒测试软件测试6/710.1白盒测试(又称为结构测试)把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作10.2黑盒测试(又称功能测试)把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求11灰盒测试11.1灰盒测试介于白盒测试与黑盒测试之间,关注的是输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态11.2灰盒是一种程序或系统的工作过程被局部认知的装置,是基于对程序内部细节有限认知的方法11.3测试者可能知道系统组件之间是如何互相作用的,但缺乏对内部程序功能和运作的详细了解11.4对于内部过程,灰盒测试把程序看作一个必须从外面进行分析的黑盒第六节测试完成标准1.可以从以下几个方面考虑:1.1测试的时间用尽时1.2继续测试没有产生新失效时1.3继续测试没有发现新的缺陷时1.4无法设计出新的测试用例时1.5继续测试回报很小时1.6达到所要求的测试覆盖时1.7所有已发现的错误或缺陷都已经被清除时2观察测试阶段中单位时间内发现错误数目的曲线第七节软件测试过程1.GB/T15532《软件测试规范》中的测试过程a)测试策划:确定需要测试的内容或质量特性,确定测试的充分性要求,提出测试的基本方法,确定测试资源和技术需求,进行风险分析与评估,制定测试计划b)测试设计:依据测试需求,分析并选用已有的测试用例或设计新的测试用例,获取并验证测试数据,确定测试用例执行顺序,获取测试资源,开发测试