




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程,第6讲 软件测试,第6讲 软件测试,6.1 软件测试的基本概念 6.2 测试的原则、类型和文档 6.3 黑盒测试方法 6.4 白盒测试方法 6.5 软件测试的基本过程 6.6 软件纠错,(1)什么是软件测试?其目的是什么? (2)什么是成功的测试?什么是失败的测试? (3)什么是好的软件测试? (4)穷举测试能够把所有的错误找完吗? (5)通过测试能够证明软件无错吗? (6)测试的基本工作有哪些? (7)什么是测试用例? (8)测试由谁来完成? (9)测试与纠错有何关系? (10)纠错由谁来完成? (11)测试的信息流之间有何关系?,6.1 软件测试的基本概念,(1)什么是软件测试?其目的是什么?,测试的定义 软件(程序)测试是为了发现错误而执行程序的过程。 测试的目的 发现程序的错误。,测试为什么重要,ARIANE火箭 耗资70亿美元,1996年发射37秒后爆炸,begin sensor_get(vertical_veloc_sensor); sensor_get(horizontal_veloc_sensor); vertical_veloc_bias := integer(vertical_veloc_sensor); horizontal_veloc_bias := integer(horizontal_veloc_sensor); . exception when numeric_error = calculate_vertical_veloc(); when others = use_irs1(); end;,发射失败的原因 程序中试图将64位浮点数转换成16位整数时的溢出错误 如果看其浮点转换程序,并没有任何问题。问题在于他们复用了Ariane 4的部分软件需求文档因而软件工程师不知道其Ariane 5的水平加速度比Ariane 4快5倍因此要求额外3位整数存储,所以其背后的真正原因是系统需求。,测试为什么重要,测试为什么重要,爱国者导弹 第一次海湾战争期间,美国爱国者导弹系统拦截伊拉克飞毛腿导弹失败。导弹摧毁了一个美军兵营,造成28名士兵死亡,100人受伤。,起因 导弹拦截软件的取整错误导致计时不正确,令爱国者忽略了飞毛腿导弹,(2)什么是成功的测试?什么是失败的测试?,什么是成功的测试? 能够找到至今尚未发现的错误。 什么是失败的测试? 没有找到至今尚未发现的错误。 (3)什么是好的软件测试? 用最少的代价能够找到至今尚未发现的更多的错误。 测试工作反映了经济学的观点。,(4)穷举测试能够把所有的错误找完吗?,例1 对于程序内部路径的测试 如图中所示从A到B的中间有一个20次的循环,循环中有5条路径,那么从A到B的独立路径数约为1014(即52051951) 例2 对于程序功能的测试 一个程序需要3个整型数的输入。假设计算机字长是16位,则每个整数可能取值有216个,那么3个输入整数的各种可能值的情况约为216 216 216 248 3 1014,(5)通过测试能够证明软件无错吗?,穷举测试是不可取的。 通过测试不可能把所有的软件错误找完。 因此,通过测试不可能证明软件不存在错误。 测试只能证明错误存在,而不能证明错误不存在(不彻底性)。 (6)测试的基本工作有哪些? 制定测试计划 建立测试环境 设计测试用例 执行测试 结果分析 完成测试报告,(7)什么是测试用例?,测试用例(Test Case)测试数据+期望的结果 测试用例的重要作用:测试用例是连接测试计划与实施测试的桥梁。 设计测试用例是搞好软件测试的关键。 (8)测试由谁来完成? 一般情况下,应该由非程序员或非程序开发机构来完成。 这样做的主要原因主要: 从心理学的角度考虑; 从质量的观点看,应该有专门的机构或组织来完成。,(9)测试与纠错有何关系?,纠错的目的和任务:根据测试所发现的错误,确定错误发生的位置、性质,并纠正这些错误。 纠错的过程就是程序调试的过程。 测试是纠错/排错/调试的基础和依据;纠错需要测试所发现的错误现象,才能确定错误发生的性质、位置,并纠正这些错误。 (10)纠错由谁来完成? 程序员,(测试数据),(11)测试的信息流之间有何关系?,测试过程的输入 测试过程中需要3类输入(见上图): 软件配置 包括软件需求规格说明、软件设计规格说明、源代码等。 测试配置 包括测试计划、测试用例、测试驱动程序等。 测试工具 为测试的实施提供某种服务,以减轻完成测试任务中的手工劳动。 测试工具 测试数据自动生成程序 静态分析程序 动态分析程序 测试结果分析程序 驱动测试的测试数据库等等。,分析测试结果 测试完成后,要对所有的测试结果进行分析,如果发现软件有错误,就要排错并修正有关文档,接着再测试,直到通过为止。 如果经常出现需要修改设计的严重错误,则软件质量与可靠性值得怀疑,需进一步测试。 如果测试未发现错误,则应重新审查测试配置。,6.2 测试的原则、类型和文档,1)测试原则 (1)所有的测试都应追溯到用户需求。 软件测试的目标在于揭示错误。而最严重的错误是那些导致程序无法满足需求的错误。 (2)充分注意测试中的群集现象。 在被测程序段中,若发现错误数目多,则残存错误数目也比较多。因此,应当对错误群集的程序段进行重点测试,以提高测试投资的效益。,(3)测试应从“小规模”开始,逐步转向”大规模”。 (4)测试应该由非程序员或非开发机构来进行。 (5)对于非法的和非预期的输入情况也要象正常测试一样,编写测试用例。 检查程序是否做了要做的事仅仅是成功的一半,另一半是看程序是否做了不该做的事。 (6)妥善保存测试计划、测试用例、出错统计和最终分析报告。 回归测试,2)软件测试方法 (1)静态分析:通过对被测程序的静态检查,发现代码中潜在的错误。静态分析包括2种方式: 静态分析器分析(自动方式);如PMD 扫描java源代码,查找潜在的问题: 可能的bugs,如空的try/catch/finally/switch声明 死亡的代码,没有使用的本地变量,参数和私有方法 过于复杂的表达式,如不必要的if表达式 重复的代码,拷贝、粘贴的代码 代码评审(人工方式),包括代码会审、走查、办公桌检查等。 (2)动态测试(简称测试):将被测程序在机器上运行来发现程序中的错误。动态测试包括2类方式: 黑盒测试(测试程序的功能) 白盒测试(测试程序的结构),3)测试的文档,(1)测试计划 主体是测试内容说明。包括:测试项目名称,各项测试的目的、步骤、进度,测试用例的设计等。 (2)测试报告 主体是测试结果。包括:测试项目名称,实测结果与期望结果的比较,发现的问题,测试达到的效果等。 (3)测试用例,(1)黑盒测试的基本概念 不考虑程序的内部结构和处理过程,只在程序的接口处进行测试,以检查程序功能是否能按规格说明书中的要求正常实现。 黑盒测试又称为功能测试,其主要目的是为了发现程序在功能方面的错误。,6.3 黑盒测试方法,黑盒法分类,等 价 类 化 分 法,边 界 值 分 析 法,错 误 猜 测 法,因 果 图 法,(2)等价类划分法 基本思想:根据程序的I/O特性,将程序的输入域划分为有限个等价区段 “等价类”,并从等价类中选出最有“代表性”的用例。 等价类:是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。 测试某等价类的代表值就等价于对这一类其它值的测试。 如果一个测试用例不能检测出某个错误,那么等价类中其它测试用例也不能发现这一错误。 等价类分为: 有效等价类 对于程序的规格说明是合理的、有意义的输入数据构成的集合。 无效等价类 对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。,等价类划分法的步骤 划分等价类 合理的(有效的)、不合理的(无效的)2类 找出测试用例 给每个等价类规定一个惟一的编号; 设计一个新的测试用例,使其尽可能多地覆盖未被覆盖的有效等价类,直到所有合理等价类被覆盖完为止; 设计一个测试用例,使其仅仅覆盖一个未被覆盖的无效等价类,直到所有不合理等价类被覆盖完为止。,例 如下是一个程序的功能描述,用等价类划分法设计测试用例。,功能描述:某城市的电话号码由3部分组成。假定被测程序能接收一切符合下述规定的电话号码,拒绝所有不符合规定的电话号码。 地区码:空白或3位数字; 前缀:非0或1开头的3位数字; 后缀:4位数字。,测试用例的设计:,(3)边界值分析 基本思想: 人们从长期的测试工作中发现,大量的错误是发生在输入或输出范围的边界,而不是在输入范围的内部。 因此,针对各种边界情况设计测试用例,可以查出更多的错误。 边界条件 相对于输入与输出等价类直接在其边缘上,稍高于或稍低于其边界的这些状态条件。,边界值分析方法与等价类划分方法的区别: 边界值不是从某个等价类中随便挑选一个作为代表,而是选出一个或几个元素,使得这个等价类的每个边界都要作为测试对象; 边界值分析不仅仅考虑输入条件,同时还要考虑输出条件(即输出等价类)。 边界值分析方法选择测试用例的步骤 首先应确定边界情况。 其次,选取测试数据。 应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。,例 边界值分析 模块bubblesort(a,n)是对数组a中的n个整型数从小到大进行排序。 假设n为10。那么可以用5组数据进行测试: 0个数据 1个数据 9个数据 10个数据 11个数据,(4)错误猜测法 基本思想: 根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误地测试用例。 例:模块bubblesort(a,n)是对数组a中的n个整型数从小到大进行排序。假设n为10。那么可以用3组数据进行测试: 0个数据 已经从小到大排好序的10个数据 从大到小的10个逆序数据,(5)因果图法 等价类划分和边界值分析方法,都是着重考虑输入条件,而未考虑输入条件之间的联系。如果在测试时必须考虑输入条件的各种组合则可能又会产生一些新的情况。 因此,必须考虑使用一种适合于多种条件组合的动态测试方法,这就是因果图法把输入条件视为“因”,把输出条件视为“果”,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。 因果图方法最终生成的是判定表,它适合于检查程序输人条件的各种组合情况。,因果图方法实例 某电力公司有A、B、C、D四类收费标准, 并规定: 居民用电 100度/月 按A类收费 100度/月按B类收费 动力用电 10000度/月,非高峰,B类收费 10000度/月,非高峰,C类收费 10000度/月, 高峰,C类收费 10000度/月, 高峰,D类收费,1,I1,2,B,4,A,C,3,5,D,I4,I3,I2,居民用电,动力用电,100度/月,10000度/月,高峰,把因果图转换为判定表,(1)白盒测试的基本概念 白盒测试以程序的结构为依据进行测试,也称结构测试。 (2)2类白盒测试: 逻辑覆盖测试: 将注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度; 路径覆盖测试: 注意力放在程序执行路径,用程序图来代替流程图设计测试用例。,6.4 白盒测试方法,逻辑覆盖测试的5种覆盖准则: 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 多重条件覆盖 路径覆盖测试的3种覆盖准则: 结点覆盖 边覆盖 路径覆盖,(3)白盒法设计测试用例的步骤 1)选择逻辑覆盖标准。 2)按照覆盖标准列出所有情况。 3)选择确定测试用例。 4)验证分析运行结果与预期结果。,(4)逻辑覆盖测试举例 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。主要利用流程图设计测试用例,重点是依据流程图中的判定框。 语句覆盖 测试数据如下表所示,满足语句覆盖准测。 PROCEDURE EXAMPLE(A,B:REAL;VAR X:REAL) BEGIN IF (A1) AND (B=0) THEN X:=X/A; IF (A=2)OR(X1) THEN X:=X+1 END;,判定覆盖 期望结果应该有具体的值,这里用有颜色的线表示。 测试数据如下表所示,满足判定覆盖准测。,判定1,判定2,条件覆盖 期望结果应该有具体的值,这里用有颜色的线表示。 测试数据如下表所示,满足条件覆盖准测。,判定1,判定2,判定/条件覆盖 期望结果应该有具体的值,这里用有颜色的线表示。 测试数据如下表所示,满足判定/条件覆盖准测。,判定1,判定2,多重条件覆盖 期望结果应该有具体的值,这里用有颜色的线表示。 测试数据如下表所示,满足多重条件覆盖准测。 共8种组合条件: (1)A1,B=0 (2)A1,B0 (3)A1,B=0 (4)A1,B0 (5)A=2,X1 (6)A=2,X1 (7)A2,X1 (8)A2,X1,注意:测试数据对该情况并未测试到!,(5)路径覆盖测试举例 结点覆盖:相当于语句覆盖 边覆盖:相当于判定覆盖 路径覆盖:每条可能的路径至少执行一次。如有循环至少进入一次。 路径覆盖测试举例 将流程图转换为程序图。 确定路径。 测试数据如下表所示,满足路径覆盖准测。 路径覆盖准测是相当强的一种覆盖准则。,路径测试的特征 满足结构测试的最低要求:即满足“完全覆盖”。 完全覆盖(白盒测试的最低要求): 完全覆盖:语句覆盖判定覆盖 满足路径覆盖即满足完全覆盖 完全覆盖被认为是白盒测试的最低要求。 有利于安排循环路径的测试,综合例子 一个程序(由小到大对数组排序)如右图。要求: 画出程序流程图 将程序流程图转换为程序图 计算该程序图的环域复杂度 用白盒法设计测试用例使其分别满足 语句覆盖准则 判定覆盖准则 用边界值分析法设计用例 用猜测法设计测试用例,sort(int a ,int n) int i,j,temp; for (i=0;iaj+1) temp=aj; aj=aj+1; aj+1=temp; ,解 程序流程图 程序图 环域复杂度 V(G)=m-n+2(连通图) =12-10+2 =4 V(G)=m-n+2 =M-N+1 (强连通图) =13-10+1 V(G)=判定结点数1 =3+1=4 V(G)即为独立路径数。请补冲路径覆盖准则的测试。,解(续) 设计测试用例使其满足语句、判定覆盖准则 A=6,4,n=2 A=6,2,4,n=3 用边界值分析法设计测试用例 A=4,n=1 先给A赋值6个数,A=8,4,6,5,7,1,但令n=7 先给A赋值6个数,A=8,4,6,5,7,1,但令n=5 用猜测法设计测试用例 A=8,7,6,5,4,3,n=6 A=1,2,3,4,5,6,n=6,6.5 软件测试的基本过程,(1)单元测试 单元测试的目的 在于发现各模块内部可能存在的各种差错,表明模块与其规范相矛盾。 单元测试的优点:便于错误的定位 单元测试需要从程序的内部结构出发设计测试用例。 为提高效率,单元测试可以并行地独立进行。,单元测试的内容,模块,模块接口测试,局部数据结构测试,重要路径测试,错误处理测试,边界条件测试,I/O 参数值的个数、类型、次序、格式是否正确,I/O文件属性、操作是否正确等。,数据说明是否正确、一致,变量及其初值定义是否正确等。,检查“错误处理程序”本身的错误。,边界条件常包括循环边界,最大最小值、控制流中等于、大于、小于的比较值等。,重要路径通常是指完成模块功能的主要路径,一般是控制结构。,单元测试的“测试环境” 考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块(驱动模块、桩模块)来模拟其他模块。,驱动模块和桩模块 驱动模块:模拟调用程序功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。 桩模块:用于模拟那些由被测模块所调用的下属模块功能。 驱动模块和桩模块的编写会给测试带来额外开销。因为它们在软件交付时不做为产品的一部分一同交付,而它们的编写需要一定的工作量。 特别是桩模块,不能只简单地给出“曾经进入”的信息。为了能够正确地测试软件,桩模块可能需要模拟实际子模块的功能,否则被测模块可能失败。,(2)集成测试 单元测试进行完之后,就可以根据设计规定的软件体系结构,将经过单元测试的模块组装成具有良好一致性的结构完整的程序。 集成测试的目的 主要针对软件的结构设计,发现模块联接过程中出现的问题(即界面问题),以及集成后的模块的功能是否符合预定的功能等。 测试的主要内容 参数的个数、顺序、名称、传递方式、范围、类型等是否正确 穿越模块接口的数据是否会丢失; 各个子功能组合起来,能否达到预期要求的父功能; 一个模块是否会对另一个模块的功能产生不利的影响; 全局数据结构,数据库接口是否有问题; 单个模块的误差积累是否会放大,达到不可接受的程度。,集成测试的实施 对于单元测试需要考虑的问题: 对每个模块独立进行单元测试,然后集成?(非增量式) 把一个待测模块组合到已经测试过的那些模块中? (增量式) 增量式集成测试: 自顶向下测试 由底向上测试 混合方式测试:是前面2种方式的结合。,自顶向下测试 将模块按系统体系结构,沿控制层次自顶向下进行集成。,由底向上测试 从最底层模块开始组装和测试。,不同集成策略的比较 自顶向下集成测试 优点 较早地验证了主要的控制和判断点。如果主要控制有问题,尽早发现它能够减少以后的返工。 功能可行性较早得到证实,还能够给开发者和用户带来成功的信心。 缺点 需编制较多的桩模块,工作量较大,且桩模块很难真实模拟实际模块全部功能,部分测试内容只能在换上真实模块后再补充测试。 使用较多的桩模块也增加了设计测试用例的困难。 由底向上集成测试 优点 设计测试用例较容易。 缺点 主要的控制和判断点的验证较迟,功能可行性较不能较早得到证实,存在着返工较大的风险。,(3)确认测试 确认测试必须有用户积极参与,或者以用户为主进行。 目的:确认组装完毕的程序是否满足SRS的要求 。,确认测试内容,1)有效性测试 用黑盒测试来验证软件功能与需求是否一致; 2)配置复审 目的是保证软件配置的所有元素(文档、报告、程序、表格、数据)都已经被正确地开发和分类;,Alpha 测试和Beta测试 如果一个软件是为大众开发的, 让每个客户都进行正式的验收测试是不现实的。 Alpha 测试:是开发者在场进行指导的情况下,用户进行的测试。由开发者用户使用中出现的错误和其它问题。 Beta测试:是用户在自己的场所进行的测试。由用户记录遇到的问题,并定期报告给开发者。 只有当Alpha 测试达到一定的可靠程度时,才能开始Beta测试,(4)系统测试 系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。 系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。,系统测试的种类 批量测试:让程序处理大量的数据。 强度测试:短时间内处理最多的数据。 可使用性测试:力图发现使用上的问题或人为因素。 性能测试:在一定负荷下的响应时间及处理速度。 存储量测试:程序所需内、外、临时文件的大小。 配置测试:每一类硬件的配置都要测试。 可修改性测试 可靠性测试 安全性测试 可恢复性测试,6.6 软件纠错,(1)程序错误的类型 语法错误:编译是发现语法错误的最好工具。 结构性错误: 包括:结构异常、结构不全、结构多余等错误。 结构性错误可以通过代码评审发现,也可以通过专门工具对代码作静态分析来发现。 而编译是不能发现结构性错误的。 功能性错误:程序功能与用户需求不相符合的错误。 产生功能性错误的原因: 需求规格说明不清晰; 或设计时对需求理解有错。 功能性错误主要通过动态测试来发现。接口错误:,(1)程序错误的类型(续) 接口错误:接口错误的主要症状有 对全局变量的引用不当; 调用子程序或函数时实际参数的类型、个数、顺序与形式参数不一致; 模块对全局性数据的说明相互矛盾。 接口错误是集成测试所检测的重点(即主要通过集成测试发现),也可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜牧业粪污处理与资源循环利用考卷考核试卷
- 2025年微波辐射计、微波散射计、测高计合作协议书
- 《内部控制评估与培训》课件
- 洪水风险图编制与应用考核试卷
- 盾构机施工中的岩土工程设计与施工优化策略研究与应用考核试卷
- 创业投资投资决策风险控制策略优化与应用实践路径探索考核试卷
- 木材的抗风化和紫外线防御考核试卷
- 2025年毛织机项目建议书
- 《活力社区展示》课件
- 【可行性报告】2025年汽轮机项目可行性研究分析报告
- 三级安全教育考试试题(的)
- VMWare VSAN软件定义的超融合解决方案
- “小风筝大创意”小学STEM项目式学习活动案例
- 生态环境执法大练兵练习(行政处罚法、新固废法、大气法)
- 芒针疗法课件
- 小学二年级下册科学课件1.《春夏秋冬》大象版(22张)ppt课件
- 第三章:船舶主机安装工艺
- 鼻咽癌放疗临床路径
- 地下水八大离子-阴阳离子平衡计算公式
- T∕CCES 23-2021 装配式多层混凝土墙板建筑技术规程
- 计件工薪酬制度
评论
0/150
提交评论