1、软件测试,总复习,主要内容,CH1 软件测试概述 CH2 黑盒测试 CH3 白盒测试 CH4 集成测试 CH5系统测试 CH6软件测试自动化基础,CH1 软件测试概述,软件测试的目的和意义 软件测试的过程 软件测试与软件开发的关系,软件测试的定义:,软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。 简单地说,软件测试是“探测”,在“探测”中发现软件的毛病。,CH1 软件测试概述,CH1 软件测试概述,软件测试的目的和意义,以最少的时间
2、和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。,CH1 软件测试概述,软件测试的过程,模块中有无故障,(1)可以发现很多软件故障 (2)修改成本较低,发现与接口有关的模块之间的问题,增量式集成测试法,是否满足软件需求,结论性评价,证明系统性能,独立的测试机构,向用户表明系统可以像用户预的那样工作,CH1 软件测试概述,软件测试与软件开发的关系 软件测试过程V模型,CH1 软件测试概述,软件测试过程W模型,CH1 软件测试概述,软
3、件测试环境的搭建测试环境是指用来运行软件的环境。测试环境硬件软件网络数据准备测试工具 搭建软件测试环境还应注意以下几点: 尽量模拟用户的真实使用环境; 测试环境中尽量不要安装其它与被测软件无关的软件,但最好安装杀毒软件,以确保系统没有病毒; 测试环境应与开发环境独立,CH2 黑盒测试,黑盒测试是从一种从软件外部对软件实施的测试,也称功能测试或基于规格说明的测试。 基本观点: 任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容(实现)是完全不知道的,只知道软件要做什么。 只关心软件的输入数据和输出结果。,CH2 黑盒测试,黑盒测试两个显著的优
4、点: 黑盒测试与软件具体实现无关,所以如果软件实现发生了变化,测试用例仍然可以使用; 设计黑盒测试用例可以和软件实现同时进行,因此可以压缩项目总的开发时间。,CH2 黑盒测试,(1)等价类划分方法 输入域的某个互不相交的子集合, 所有等价类的并便是整个输入域。划分等价类+测试用例设计,无冗余性,完备性,CH2 黑盒测试,第 一 步,第 二 步,第 三 步,1.形成等价类表 2.每一等价类规定一个唯一的编号,1.设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类; 2.重复这一步骤,直到所有有效等价类均被测试用例所覆盖,1.设计一新测试用例,使其只覆盖一个无效等价类 2.重复这一步骤直到所有
5、无效等价类均被覆盖;,CH2 黑盒测试,CH2 黑盒测试,CH2 黑盒测试,CH2 黑盒测试,(2)边界值分析法 在等价类划分基础上进行边界值分析测试的基本思想是,选取正好等于、刚刚大于或刚刚小于等价类边界的值作为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。,CH2 黑盒测试,(3)判定表法判定表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来而形成的表格。它能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。,CH2 黑盒测试,任何一个条件组合的特定取值及其相应要执行的操作称为一条规则,CH2 黑盒测试,构造判
6、定表可采用以下5个步骤: (1)列出所有的条件桩和动作桩。 (2)确定规则的个数。 (3)填入条件项。 (4)填入动作项,得到初始判定表。 (5)简化判定表,合并相似规则。,CH3 白盒测试,白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。,CH3 白盒测试,(1)逻辑驱动测试 为了衡量测试的覆盖程度,需要建立一些标准,目前常用的一些覆盖标准从低到高分别是: 语句覆盖:每个语句至少都能被执行一次. 判定覆盖(分支覆盖):每一个分支至少都通过一次。 条件覆盖:每个判断的每个条件的每个可能取值至少执行一次; 判定/条件覆盖:每个条件取到各种可能的值,并使
7、每个判定取到各种可能的结果。 条件组合覆盖:每个判定中条件的各种可能组合都至少出现一次。,CH3 白盒测试,CH3 白盒测试,CH3 白盒测试,(2)基本路径测试 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法: 程序的控制流图:描述程序控制流的一种图示方法。 程序圈复杂度:从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。 准备测试用例:确保基本路径集中的每一条路径的执行。
8、工具方法: 图形矩阵,CH3 白盒测试,流图只有二种图形符号 图中的每一个圆称为流图的结点,代表一条或多条语句。 流图中的箭头称为边或连接,代表控制流。 在将程序流程图简化成控制流图时,应注意: 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。 独立路径:至少沿一条新的边移动的路径,void Sort(int iRecordNum,int iType) 1 2 int x=0; 3 i
9、nt y=0; 4 while (iRecordNum- 0) 5 6 if(iType= =0) 7 x=y+2; 8 else 9 if(iType= =1) 10 x=y+10; 11 else 12 x=y+20; 13 14 ,CH3 白盒测试,程序流程图和对应的控制流图如下:,CH4 集成测试,集成测试:假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的相互接口是否正确。,CH4 集成测试,集成策略 非渐增式集成 渐增式集成 自顶向下、自底向上、三明治,CH4 集成测试,自顶向下 优点:在测试过程早期,对主要的控制点或判决点进行检验。如果主要控制点有问题,早点认识到
10、这个问题就变得很重要。如果选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能,功能可行性较早得到证实,能够给开发者和用户带来成功的信心。 缺点:在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分,CH4 集成测试,自底向上 优点:由于驱动模块模拟了所有调用参数,测试模块返回结果不影响驱动模块,生成测试数据也没有困难。如果关键模块是在结构图的底部,自底向上的测试是有优越性的。另外自底向上的组装测试不必开发桩模块。 缺点:当最后一个模块尚未测试时,还没有呈现出被测软件系统的雏形,CH5 系统测试,性能测试:检验软件是否达到需求
11、规格说明书中规定的各类性能指标,并满足一些性能相关的约束和限制条件。 评估系统的能力。 识别系统中的弱点。 系统调优。,压力测试:是指模拟巨大的工作负荷,以查看系统在峰值使用情况下是否可以正常运行 通过增加系统负载来测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态 反常的方式,找出性能瓶颈, 本质:破坏程序,压力测试与性能测试的联系与区别: 压力测试是用来保证产品发布后系统能否满足用户需求,关注的重点是系统整体; 性能测试可以发生在各个测试阶段,即使是在单元层,一个单独模块的性能也可以进行评估。压力测试是通过确定一个系统的瓶颈,来获得系统能提供的最大服务级别的测试。 性能测试
12、是检测系统在一定负荷下的表现,是正常能力的表现;而压力测试是极端情况下的系统能力的表现。,容量测试:采用特定的手段测试系统能够承载处理任务的极限值所从事的测试工作。 容量测试往往应用于数据库方面的测试 数据库容量测试使测试对象处理大量的数据,以确定是否达到了将使软件发生故障的极限。 容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。,容量测试与压力测试的区别 与容量测试十分相近的概念是压力测试。二者都是检测系统在特定情况下,能够承担的极限值。 然而两者的侧重点有所不同,压力测试主要是使系统承受速度方面的超额负载,例如一个短时间之内的吞吐量。 容量测试关注的是数据方面的承受能力
13、,并且它的目的是显示系统可以处理的数据容量。,自动化测试的定义 自动化测试就是使用软件工具来代替手工进行的一系列动作。它具有良好的可操作性、可重复性和高效率等特点。 自动化测试的目的是减轻手工测试的工作量,以达到节约资源(包括人力、物力等),保证软件质量,缩短测试周期的效果。 通常是使用脚本或者其他代码驱动应用程序。这一切可以通过可视用户界面(如浏览器)完成,也可以通过直接命令(从客户端发向服务器,以模仿浏览器发送的命令)完成自动化测试。 自动化测试大都属于回归测试的范畴。,CH6软件测试自动化基础,自动化测试优点 提高测试效率 降低对软件新版本进行回归测试的开销 完成手工测试不能或难以完成的测试 具有一致性和可重复性 更好地利用资源 降低风险,增加软件信任度,CH6软件测试自动化基础,自动化测试的局限性 不能完全取代手工测试和手工测试工程师 软件自动化测试可能降低测试的效率 测试人员期望自动测试发现大量的新错误 如果缺乏测试经验,测试的组织差、文档少或不一致,则自动测试的效果比较差 软件自动化测试工具本身的问题,CH6软件测试自动化基础,