《软件工程6软件测试.ppt》由会员分享,可在线阅读,更多相关《软件工程6软件测试.ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程与项目管理 第6章 软件测试掌握:掌握:白盒测试、黑盒测试、测试用例、逻辑覆盖、等价类划分、边界值分析、错误推测法、因果图法、单元测试、集成测试、确认测试、系统测试、Alpha测试和Beta测试。6.1 软件测试概述6.1.1 软件测试的概念 软件测试是在软件投入运行之前对软件需求分析、设计规格说明及编码的最终审查,是软件质量保证的关键步骤,是为了发现错误而执行软件的过程。6.1.2 软件测试的目的 软件测试的目的就是为了发现错误并纠正错误,可以将其总结为以下几点:(1)测试是一个程序的执行过程,它的目的在于发现错误。(2)一个好的测试用例极可能发现至今未发现的错误。(3)一个成功的测
2、试是发现了至今末发现的错误的测试。6.1.3 软件测试的原则(1)测试前要认定被测试软件有错,不要认为软件没有错。(2)要避免由程序编写者自己进行测试。(3)要注意测试用例的合理设计和选择,预期结果的定义要有利于错误的检测。(4)软件测试要以软件需求规格说明书为标准。(5)测试是相对的,不能穷尽所有的测试,要根据人力物力安排测试。(6)应当制定严格的测试计划。(7)妥善保存测试计划与测试用例,为以后的维护提供方便。6.2 软件测试方法6.2.1 软件测试方法分类 1.按测试步骤与策略分类 可分为单元测试、集成测试、确认测试、系统测试、测试和测试。2.按测试技术分类 可分为白盒测试与黑盒测试。3
3、.按测试的环境分类 可分为静态测试与动态测试。4.按测试的功能分 可分为配置测试、兼容性测试、语言测试、易用性测试、文档测试、特殊测试等。6.2.2 白盒测试白盒测试是把程序看做一个透明的盒子,能够了解它的内部结构和处理过程,即对程序的所有逻辑路径进行测试,检查是否都能按预定要求正确工作。用白盒测试方法不可能进行完全测试,因为企图遍历所有的路径也是不可能做到的。图6-1 一个程序的控制流程图6.2.3 黑盒测试黑盒测试法是把程序看成一个黑盒子,不考虑程序的内部逻辑结构和处理过程,只着眼于程序的外部特性很显然,因为企图遍历所有的输入数据是不可能做到的,所以用黑盒测试法也不可能进行完全的测试。图6
4、-2 一个简单的程序模型6.3 测试用例6.3.1 测试用例概述测试用例是为特定目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。以在图6-1的程序模型为例,输入变量为A、B、C,输出变量为b,假设程序体为:b=A+B+C则一个可能的测试用例为:A=1,B=2,C=3,b=6“A=1,B=2,C=3”为测试输入,“b=6”为预期结果,没有执行条件。在实际测试工作中常存在以下误区:(1)好用例就是能发现到目前为止没有发现的缺陷的用例。(2)测试用例应该详细记录所有的操作信息,即使一个以前没有接触过此系统的人员也能进行测试。6.3.2 逻辑覆盖 1.语句覆盖 语句覆盖就是选
5、择足够多的测试用例,使得被测程序中的每个可执行语句至少执行一次。这是一种最基本的覆盖要求。例如,某PASCAL源程序如下:IF(A1)AND(B=0)THEN X:=X/A;IF(A=2)OR(X1)THEN X:=X+1;为方便问题的讨论,图6-3给出了该段程序的流程图,其中共有两个判定,将判定“(A1)AND(B=0)”记为P1,判定“(A=2)OR(X1)”记为P2;有4个条件,即“A1”记为C1,“B=0”记为C2,“A=2”记为C3,“X1”记为C4;有5条路径,分别用a、b、c、d、e表示。图6-3 本节例子程序的流程图为了使每个语句都执行一次,程序执行的路径应该是acbed”,b
6、、,d这两个流程无论条件是否成立都会经过。为此,可以设计以下一组测试用例:A2,B=0,X=5,此时,覆盖路径为acbed。2.判定覆盖 判定覆盖就是选择足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和一次“假”值,从而使得程序的每个分支至少都执行一次。对于“1.语句覆盖”中的例子,如果能够测试路径acbed和abd或acbd和abed,就可满足判定覆盖要求,为此,可设计以下两组测试用例:(1)A=3,B=0,X=1,此时,P1为T,P2为F。(2)A=2,B=1,X=1,此时,P1为F,P2为T。3.条件覆盖 条件覆盖就是要设计足够多的测试用例,使被测试程序中的每个判断语句中的每
7、个逻辑条件的可能值至少被满足一次。仍以“1.语句覆盖”中的例子为例,为满足条件覆盖的要求,必须使条件C1、C2、C3、C4都能取到“真”值和“假”值,为此,可设计以下测试用例:(1)A=0,B=0,X=1,此时,C1为F,C2为T,C3为F,C4为F,P1为F,P2为F,覆盖路径为abd。(2)A=2,B=1,X=2,此时,C1为T,C2为F,C3为T,C4为T,P1为F,P2为T,覆盖路径为abed。4.判定/条件覆盖 设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真/假)至少满足一次,同时,每个逻辑条件的可能值也至少满足一次。(1)A=0,B=0,X=1,此时,C1为F,
8、C2为T,C3为F,C4为F,P1为F,P2为F,覆盖路径为abd。(2)A=2,B=1,X=2,此时,C1为T,C2为F,C3为T,C4为T,P1为F,P2为T,覆盖路径为abed。(3)A=2,B=0,X=2,此时,C1为T,C2为T,C3为T,C4为T,P1为T,P2为T,覆盖路径为acbed。5.条件组合覆盖 条件组合覆盖要求设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少被满足一次。(1)A=0,B=0,X=1,此时,C1为F,C2为T,C3为F,C4为F,P1为F,P2为F,覆盖路径为abd。(2)A=2,B=1,X=2,此时,C1为T,C2为F,C3为
9、T,C4为T,P1为F,P2为T,覆盖路径为abed。(3)A=2,B=0,X=1,此时,C1为T,C2为T,C3为T,C4为F,P1为T,P2为T,覆盖路径为acbed。(4)A=0,B=1,X=2,此时,C1为F,C2为F,C3为F,C4为T,P1为F,P2为T,覆盖路径为abed。6.路径覆盖 路径覆盖要求设计足够多的测试用例,使得被测试程序中的每条路径至少被覆盖一次。(1)A=0,B=0,X=1,此时,C1为F,C2为T,C3为F,C4为F,P1为F,P2为F,覆盖路径 abde。(2)A=2,B=1,X=2,此时,C1为T,C2为F,C3为T,C4为T,P1为F,P2为T,覆盖路径a
10、be。(3)A=2,B=0,X=1,此时,C1为T,C2为T,C3为T,C4为F,P1为T,P2为T,覆盖路径acbe。(4)A=3,B=0,X=1,此时,C1为T,C2为T,C3为F,C4为F,P1为T,P2为F,覆盖路径acde。语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件覆盖以及路径覆盖对于程序逻辑覆盖的要求是由弱到强的,在实际测试工作中,应根据具体情况选择适合的逻辑覆盖测试技术。逻辑覆盖是一种白盒测试方法。6.3.3 等价类划分等价类划分方法是把被测试的程序的所有可能的输入数据(有效的和无效的)划分成若干个等价类,从而把无限的随机测试变成有针对性的等价类测试等价类划分属于黑盒测试
11、方法等价类划分的测试一般分为两步进行:第一步:划分等价类并给出定义。第二步:选择测试用例。划分初等价类以后,根据等价类设计测试用例时可以按照以下两个步骤进行:(1)设计一个新的测试用例,以尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止。(2)设计一个新的测试用例,使它覆盖一个且只覆盖一个尚未覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。注意,为避免因测试用例发现一个错误而掩盖其他错误的情况发生,应该是每个测试用例只覆盖一个无效等价类。例如,某城市的电话号码由3部分组成,分别是:(1)地区码:空白或3位数字;(2)前缀:非“0”或“1”开头的3位数
12、;(3)后缀:4位数字。假定被调试的程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,就可用等价分类法来设计它的测试用例。第一步:划分等价类,包括4个有效等价类,11个无效等价类,表6-1列出了划分的结果。在每一等价类之后加有编号,以便识别。输入条件有效等价类无效等价类地区码空白(1),3位数字(2)有非数字字符(5),少于3位数字(6),多于三位数字(7)前缀从200到999之间的3位数字(3)有非数字字符(8),起始位为“0”(9),起始位为“1”(10),少于3位数字(11),多于3位数字(12)后缀4位数字(4)有非数字字符(13),少于4位数字(14),多于4位数字(1
13、5)第二步:确定测试用例。表6-1中有4个有效等价类,可选择如表6-2所示的两个测试用例。测试数据范围期望结果()2762345等价类(1),(3),(4)有效(635)8059321等价类(2),(3),(4)有效 对11个无效等价类,可选择如表6-3所示的11个测试用例。测试数据范围期望结果(20A)1234567无效等价类(5)无效(33)2345678无效等价类(6)无效(7777)3456789无效等价类(7)无效(777)34A6789无效等价类(8)无效(234)0456789无效等价类(9)无效(777)1456789无效等价类(10)无效(777)346789无效等价类(11
14、)无效(777)23456789无效等价类(12)无效(777)345678A无效等价类(13)无效(777)345678无效等价类(14)无效(777)34556789无效等价类(15)无效6.3.4 边界值分析经验表明,程序在处理边界值时最容易发生错误,例如,许多程序错误出现在下标、数据结构和循环等边界附近。因此,设计使程序运行边界值的测试方案,可能会暴露出更多的错误。边界值分析方法正是根据这一思路而提出的,它通过使程序在边界值处运行,以判断程序是否存在错误。按照边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值作为测试数据。在使用
15、边界值分析方法设计测试用例时,可以参照以下:(1)如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理值的测试用例,同时还要选择刚好越过边界值的数据作为不合理值的测试用例。例如,输入值的范围是1,100,可取0、1、100、101等值作为测试数据。(2)如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。例如,一个输入文件可包括1255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。(3)对每个输出条件分别按照以上(1)或(2)的原则确定输出值的边界情况。例如,一个学生成绩管理系统规定,只能查
16、询9598级大学生的各科成绩,既应设计测试用例测试此查询范围内的某一届或四届学生的成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输入等价类)。(4)如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线性表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。6.3.5 错误推测法 在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。例如,当对一个排序程序进行测试时,可先用边界值分析法设计测试用例:(1)输入表为空表。(2)输入表中仅有一个数据。(3)输入表为满表。根据排序问题的具体描述,
17、使用错误推测法可以补充以下测试用例:(1)输入表已经排序。(2)输入表的排序恰与所要求的顺序相反。(3)输入表中的所有数据全部相同。此外,经验证明,在一段程序中已经发现的错误数量往往与尚未发现的错误数量成正比。因此,在进一步测试时要着重测试那些已发现较多错误的程序段。6.3.6 因果图法 考虑输入条件之间的相互组合,程序可能会产生一些新的错误,但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,它们之间的组合情况也相当多。因此必须考虑采用一种对于多种条件的组合相应产生多个动作的形式来设计测试用例,这就需要利用因果图(逻辑模型)。因果图方法用4种符号分别表示了规格说明中的4
18、种因果关系,如图6-4所示,左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。图6-4 因果图法表示的4种因果关系6.4 软件测试策略6.4.1 测试流程与测试计划 测试计划一般由项目负责人制定,一般来说,应包括以下几方面:1.项目基本情况 这部分应包括产品的一些基本情况介绍。例如,产品的运行平台和应用领域,产品的特点和主要功能模块等。对于大的测试项目,还要包括测试的目的和侧重点。2.测试任务 对测试任务进行简要描述,主要包括测试的目标、程序运行环境、测试
19、要求等内容。3.测试策略 这是整个测试计划的重点所在,既要描述如何公正、客观地开展测试,又要考虑模块、功能、整体、系统、版本、压力、性能、配置和安装等各个方面的测试用例。应尽可能地考虑到细节,越详细越好,并制作测试记录文档的模板,为即将开始的测试做准备。还应详细、具体地描述测试用例的目的、输入数据、预期输出、测试步骤、进度安排、条件等。4.测试组织 测试的组织首先要考虑测试的方法及测试用例的选择原则;其次对测试资源进行配置,包括测试人员、测试环境、设备等;最后要制定调试进度安排,即计划表。5.测试评价 主要是说明所进行的各项测试的范围、局限性及评价测试结果的准则。通常一个软件是由若干个子系统构
20、成的,每个子系统又由许多模块组成。与开发过程类似,测试过程也必须分步骤进行,只有在前一个步骤完成后,才能进入下一个步骤的测试。具体来说,软件的测试通常分为4个阶段:单元测试、集成测试、确认测试与系统测试,如图6-5所示。图6-5 软件测试流程图 6.4.2 单元测试单元测试也称模块测试,它是软件测试的第一步,通常在编码阶段就开始进行。单元测试以详细设计为指南对模块进行正确性检验,其目的在于发现模块内部可能存在的各种错误。单元测试的内容主要有以下5个方面:1模块接口测试2局部数据结构测试3路径测试4错误处理测试5边界测试6.4.3 集成测试实践表明,一些模块虽然在单独运行时能正常工作,但并不能保
21、证连接起来也能正常工作。程序在某些局部不能反映出来的问题,在全局上可能会暴露出来,影响系统功能的实现。因此,有必要在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,随后进行测试,这样的测试方法即为集成测试。集成测试的策略有很多种,如自底向上集成测试、自顶向下集成测试、Big-Bang集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。6.4.4 确认测试确认测试又称为有效性测试。在整体测试通过之后,应开始对软件进行有效性测试,通常采用黑盒测试法来验证软件功能是否与用户要求相一致。因此,确认测试的测试计划和测试过程的设计都是用来验证软件是否达到了功能要求,文
22、档资料是否正确、完整,以及软件的可移植性、兼容性和可维护性等性能是否满足要求。确认测试可以包括以下测试内容:安装测试、功能测试、可靠性测试、安全性测试、时间及空间性能测试、易用性测试、可移植性测试、可维护性测试、文档测试。6.4.5 系统测试 系统测试是将已经确认的软件与计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方。1.恢复测试 恢复测试用于测试计算机系统在出现错误后是否具有在一定时间内恢复并继续运行的能力。2安全性测试 安全性测试用于测试计算机系统内的保护机制能否保护系统不受到非法
23、侵入。3压力测试 无论是白盒测试,还是黑盒测试都对软件正常的程序与性能进行检查,而压力测试正好相反,它是测试软件对非正常情况的处理能力。4性能测试 性能测试就是要测试软件在集成系统中的运行性能。6.4.6 Alpha测试和Beta测试Alpha测试是指软件开发公司组织内部人员模拟各类用户对即将面市的软件产品(称为Alpha版本)进行测试,试图发现并修正错误。Beta测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用Beta版本,并要求用户报告异常情况、提出批评意见,然后软件开发公司再对Beta版本进行改错和完善。6.4.7 软件测试自动化 软件测试自动化是一项让计算机代替测试人员进行
24、软件测试的技术,它可以将测试人员从繁琐和重复的测试活动中解脱出来,专心从事有意义的测试设计等活动。如果采用自动比较技术,还可以自动完成测试用例执行结果的判断,从而避免了人工比对存在的疏漏问题。设计良好的自动化测试,在某些情况下可以实现“夜间测试”和“无人测试”。在大多数情况下,软件测试自动化可以减少开支,增加有限时间内可执行的测试数量,在执行相同数量测试时节约测试时间。6.4.8 测试分析报告 测试分析报告一般包含以下内容:(1)项目基本情况介绍。(2)测试计划的执行情况。主要说明测试的组织情况、每个项目的测试结果等。(3)测试评价。说明经过测试所表明的软件具有的能力、存在的缺陷及限制,以及可
25、能对软件运行带来影响、弥补缺陷的建议,最后说明测试结论,即能否通过。6.5 软件调试技术6.5.1 调试步骤(1)从错误的外部表现(如输出信息)入手,确定出错的大致位置。(2)研究相关部分的程序,找出错误的内在原因。(3)修改设计与代码,以排除错误。(4)重复进行暴露这个错误的测试,在测试过程中观察两方面内容:是否排除了该错误,以及是否引进了新的错误。(5)若所做的修改无效,则撤销修改,恢复到修改前的状态。6.5.2 调试方法 1简单的调试技术 1)在程序中插入打印语句 2)运行部分程序 3)借助调试工具 2回溯策略 回溯法能成功地用于程序的调试。方法是从可能出现错误的地方开始人工地沿控制流程往回追踪,直至发现出错的根源。3排除策略 排除法基于归纳和演绎原理,采用“分治”的概念,首先收集与错误出现有关的所有数据假想一个错误原因,用这些数据证明或反驳它;或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设己呈现端倪,就应立即精化数据,找出其错误根源。第第6章章 结束结束 谢谢!