




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12课程概述课程概述3重点和难点重点和难点结构化程序设计的原则和风格结构化程序设计的原则和风格 软件测试的目的和原则软件测试的目的和原则 白盒测试、黑盒测试的定义白盒测试、黑盒测试的定义 熟练掌握熟练掌握白盒测试中各种逻辑覆盖的基本思想白盒测试中各种逻辑覆盖的基本思想 熟练掌握熟练掌握黑盒测试中等价划分、边界值分析方法黑盒测试中等价划分、边界值分析方法 软件测试策略中单元测试、组装测试、确认测试和系软件测试策略中单元测试、组装测试、确认测试和系统测试的相关概念及方法统测试的相关概念及方法 程序调试步骤和几种程序调试方法、过程程序调试步骤和几种程序调试方法、过程4 7.1.1 选择程序设计语言选
2、择程序设计语言 程序设计语言的分类程序设计语言的分类 从软件工程的角度,根据程序设计语言从软件工程的角度,根据程序设计语言发展的历程,大致分为发展的历程,大致分为4类:类: l第一代语言:从属于机器的语言第一代语言:从属于机器的语言 l第二代语言:汇编语言第二代语言:汇编语言 l第三代语言:高级程序设计语言第三代语言:高级程序设计语言 l第四代语言第四代语言(4GL)5选择程序设计语言考虑的因素:选择程序设计语言考虑的因素: l 系统用户的要求系统用户的要求 l 可以使用的编译程序可以使用的编译程序 l 可以得到的软件工具可以得到的软件工具 l 工程规模工程规模 l 程序员的知识程序员的知识
3、l 软件的可移植性要求软件的可移植性要求 l 软件的应用领域软件的应用领域 项目应用领域是最关键的因素。项目应用领域是最关键的因素。6一般语言的项目应用领域一般语言的项目应用领域7 编码风格编码风格是指一个人编制程序时所表现出是指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。来的特点、习惯、逻辑思路等。 良好编码风格包括:良好编码风格包括: l程序内部应该有很好的文档:程序内部应该有很好的文档:如标识符、如标识符、注释良好,程序文档结构易读易理解。注释良好,程序文档结构易读易理解。 l数据说明应易于理解和维护。数据说明应易于理解和维护。 l语句结构尽可能简单直观。语句结构尽可能简单直观。
4、l输入输出风格遵守人机界面设计准则。输入输出风格遵守人机界面设计准则。 l效率满足用户需求即可。效率满足用户需求即可。8从三个方面考虑效率问题:从三个方面考虑效率问题:l程序运行的时间程序运行的时间 l存储器效率存储器效率 大型机要考虑操作系统页式调度的特点;大型机要考虑操作系统页式调度的特点; 微型机可考虑使用最小的存储单元;微型机可考虑使用最小的存储单元;提高存储器效率的关键是程序的简单性。提高存储器效率的关键是程序的简单性。 l输入输入/ /输出的效率输出的效率 简单清晰是提高人机通信效率的关键;简单清晰是提高人机通信效率的关键; 硬件间通信也有一些原则要遵循。硬件间通信也有一些原则要遵
5、循。97.2 软件测试的基础软件测试的基础 什么是软件测试?什么是软件测试? 是为了发现错误而执行程序的过程。是为了发现错误而执行程序的过程。 发现错误是为了更正错误,最终得到一个发现错误是为了更正错误,最终得到一个高质量的软件系统。高质量的软件系统。 软件测试的对象:软件测试的对象:整个软件定义、开发周期的整个软件定义、开发周期的产品产品 测试用例:测试用例:通常指测试数据和预期的输出结果通常指测试数据和预期的输出结果107.2.1 软件测试的目标软件测试的目标 软件测试存在的矛盾软件测试存在的矛盾 用户希望通过软件测试暴露软件中用户希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接
6、受隐藏的错误和缺陷,以考虑是否可接受该产品。该产品。 软件开发者希望通过软件测试表明软件开发者希望通过软件测试表明软件产品中不存在错误,已正确地实现软件产品中不存在错误,已正确地实现了用户的要求。了用户的要求。11G.Myers给出的软件测试目的给出的软件测试目的 l 测试是为了发现错误而执行程序的过程;测试是为了发现错误而执行程序的过程; l 好的测试用例是极可能发现迄今为止尚未发现的好的测试用例是极可能发现迄今为止尚未发现的错误的测试用例;错误的测试用例; l 成功的测试是发现了至今尚未发现的错误的测试。成功的测试是发现了至今尚未发现的错误的测试。 总之,测试的目的是以最少的时间和人力,总
7、之,测试的目的是以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷;测试系统地找出软件中潜在的各种错误和缺陷;测试附带的收获是它能证明软件的功能和性能与需求附带的收获是它能证明软件的功能和性能与需求说明相符合。说明相符合。 注意:测试不能表明软件中不存在错误,它只能说注意:测试不能表明软件中不存在错误,它只能说明软件中存在错误。明软件中存在错误。121)所有测试都能追溯到用户需求)所有测试都能追溯到用户需求2)应该远在测试开始之前就制定出测试计划)应该远在测试开始之前就制定出测试计划 3)应该把)应该把Pareto原理应用到软件测试中原理应用到软件测试中 群集现象:群集现象:8080的错
8、误可能是由的错误可能是由2020的模块造成的的模块造成的 4)从)从“小规模小规模”测试开始,逐步过渡到测试开始,逐步过渡到“大规模大规模”测试测试5)穷举测试是不可能的)穷举测试是不可能的 测试只能证明程序有错,不能证明程序没有错误测试只能证明程序有错,不能证明程序没有错误 6)应由独立的第三方从事测试工作)应由独立的第三方从事测试工作13 软件测试方法一般分为:静态测试和动态测试。软件测试方法一般分为:静态测试和动态测试。 静态测试静态测试是指被测程序不在机器上运行,是指被测程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段采用人工检测和计算机辅助静态分析的手段对程序进行检测。对程
9、序进行检测。 动态测试动态测试是指通过运行程序发现错误,是指通过运行程序发现错误,又分又分黑盒法黑盒法和和白盒法白盒法两种。两种。14两种动态测试方法两种动态测试方法 已知产品应该具有的功能,可以通过已知产品应该具有的功能,可以通过黑盒测试黑盒测试来检验每个功能是否符合设计要来检验每个功能是否符合设计要求。求。 已知产品的内部工作过程,可以通过已知产品的内部工作过程,可以通过白盒测试白盒测试来检验每种内部操作是否按要求来检验每种内部操作是否按要求的规定正常进行。的规定正常进行。151、黑盒测试、黑盒测试 又称功能测试或数据驱动测试。又称功能测试或数据驱动测试。 将测试对象看做一个黑盒子,完全不
10、考将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据虑程序内部的逻辑结构和内部特性,只依据程序需求规格说明书,检查程序的功能是否程序需求规格说明书,检查程序的功能是否符合它的功能说明。符合它的功能说明。16 测试所有可能的输入测试所有可能的输入条件和输出条件是不可能的。条件和输出条件是不可能的。设某程序设某程序P P,输入变量,输入变量X X和和Y Y,输出,输出Z Z。若在字长为若在字长为3232位的计算机上运行,且位的计算机上运行,且X X、Y Y取取整数,按黑盒方法进行穷举测试,可能采用整数,按黑盒方法进行穷举测试,可能采用的测试数据组:的测试数据组: 2 2323
11、2 2 23232 2 264 64 如果测试一组数据需要如果测试一组数据需要1 1毫秒,一年工毫秒,一年工作作3653652424小时,完成所有测试需小时,完成所有测试需5 5亿年。亿年。17 又称又称结构测试结构测试或或逻辑驱动测试逻辑驱动测试。 将测试对象看做一个透明的盒子,允许将测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信测试人员利用程序内部的逻辑结构及有关信息,设计或选息,设计或选 择测试用例,对程序所有逻择测试用例,对程序所有逻辑路径进行测试。辑路径进行测试。 注意:注意:对一个具有多重选择和循环嵌套对一个具有多重选择和循环嵌套的程序,的程序, 不同的路径
12、数目可能是天文数字。不同的路径数目可能是天文数字。18例:例: 某程序的流程图,包括一个执行某程序的流程图,包括一个执行20次的循环,次的循环, 则包含的不同执行路径数达则包含的不同执行路径数达5 20 条。条。 若对每条路径进行测试需要若对每条路径进行测试需要1毫秒,设一年工作毫秒,设一年工作 365 24小时,要把所有路径测试完,需小时,要把所有路径测试完,需3170 年。年。19测试的测试的4 4个步骤:个步骤: l 单元(模块)测试单元(模块)测试 l 集成测试(子系统和系统测试)集成测试(子系统和系统测试) l 确认(验收)测试确认(验收)测试 l 平行运行平行运行20 21 222
13、3 在单元测试的开始,应对通过被测模在单元测试的开始,应对通过被测模 块块的数据流进行测试。的数据流进行测试。测试项目:测试项目: l 调用本模块的输入参数是否正确;调用本模块的输入参数是否正确; l 本模块调用子模块时,输入给子模块的参数本模块调用子模块时,输入给子模块的参数 是否正确;是否正确; l 输出给标准函数的参数是否正确;输出给标准函数的参数是否正确; l 全局量的定义和用法在各模块中是否一致;全局量的定义和用法在各模块中是否一致; l 与外部设备的输入输出是否正确与外部设备的输入输出是否正确24测试项目:测试项目: l 不正确或不一致的数据类型说明不正确或不一致的数据类型说明 l
14、 使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量 l 错误的初始值或错误的缺省值错误的初始值或错误的缺省值 l 变量名拼写错或书写错变量名拼写错或书写错 l 不一致的数据类型不一致的数据类型 l 全局数据对模块的影响全局数据对模块的影响25关键:测试用例要适当关键:测试用例要适当26着重测试以下可能发生的错误:着重测试以下可能发生的错误: l出错的描述是否难以理解出错的描述是否难以理解 l出错的描述是否能够对错误定位出错的描述是否能够对错误定位 l显示的错误与实际的错误是否相符显示的错误与实际的错误是否相符 l对错误条件的处理正确与否对错误条件的处理正确与否 l在对错误进行处理之
15、前,错误条件是否已在对错误进行处理之前,错误条件是否已经引起系统的干预等经引起系统的干预等 27 重点检查刚好等于、大于或小于边重点检查刚好等于、大于或小于边界值的数据;界值的数据; 对运行时间有要求的模块,还要专对运行时间有要求的模块,还要专门进行关键路径测试,以确定最坏情况门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因下和平均意义下影响模块运行时间的因素。素。返回返回28 人工测试源程序。人工测试源程序。 参与者:参与者:程序的设计者、编写者、测试者程序的设计者、编写者、测试者 没有直接参与系统开发,但有能力的程序没有直接参与系统开发,但有能力的程序员。员。 方法:方
16、法:研究设计说明书,一起审查程序代研究设计说明书,一起审查程序代码如何实现设计,从中发现问题。码如何实现设计,从中发现问题。 注意:注意:通常代码审查和机器测试结合使用。通常代码审查和机器测试结合使用。29 单元测试通常在编码阶段进行。常用单元测试通常在编码阶段进行。常用机器机器测试测试,即通过运行模块发现问题。,即通过运行模块发现问题。 两个重要概念:两个重要概念: l 驱动程序驱动程序(driver):相当于被测试模块的:相当于被测试模块的“主程序主程序”,接收测试数据,把这些数据,接收测试数据,把这些数据传送给被测试的模块,并且输出相关结果。传送给被测试的模块,并且输出相关结果。 l 存
17、根程序存根程序(stub):代替被测试模块所调用:代替被测试模块所调用的的 模块。不需要具有子模块所有功能,但模块。不需要具有子模块所有功能,但不允许什么事情也不做。不允许什么事情也不做。3031 要测试要测试“编辑子系统编辑子系统”,需要上层,需要上层“驱驱动模动模 块块”和下层和下层“存根程序存根程序”32 在单元测试之后,将模块组装承系统,为发现并在单元测试之后,将模块组装承系统,为发现并排除模块在连接中可能出现的问题,而进行的测试。排除模块在连接中可能出现的问题,而进行的测试。需要考虑:需要考虑: l 模块连接时穿越模块接口的数据是否会丢失;模块连接时穿越模块接口的数据是否会丢失; l
18、 一个模块对另一个模块是否会产生不利的影响;一个模块对另一个模块是否会产生不利的影响; l 各子功能组合起来,能否达到预期要求的父功各子功能组合起来,能否达到预期要求的父功 能;能; l 全局数据结构是否有问题;全局数据结构是否有问题; l 单个模块的误差累积起来,是否会放大至不能接单个模块的误差累积起来,是否会放大至不能接 受受的程度。的程度。33 非渐增式组装方式非渐增式组装方式 对每个模块分别进行单元测试,再把所对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行的测试,从有模块组装成一个完整的系统进行的测试,从而得到要求的软件系统。而得到要求的软件系统。 渐增式组装方式渐增
19、式组装方式 先对模块进行单元测试,然后将测试后的先对模块进行单元测试,然后将测试后的模块逐步组装成较大的系统;在组装的过程中模块逐步组装成较大的系统;在组装的过程中边连接边测试,以发现连接过程中产生的问题;边连接边测试,以发现连接过程中产生的问题;最后组装成为最后组装成为 要求的软件系统。要求的软件系统。34l自顶向下的渐增方式自顶向下的渐增方式l自底向上结合的渐增方式自底向上结合的渐增方式 l混合渐增测试混合渐增测试35 自顶向下的增殖方式自顶向下的增殖方式 将模块按系统程序结构,沿控制层将模块按系统程序结构,沿控制层次自顶向下进行组装。次自顶向下进行组装。 不需要驱动模块,需要存根模块不需
20、要驱动模块,需要存根模块? 深度优先深度优先 ? 宽度优先宽度优先36深度优先组装的例子深度优先组装的例子37组合步骤组合步骤1 1)对主模块进行测试,用存根模块代替)对主模块进行测试,用存根模块代替 下层模块;下层模块;2 2)根据选定的结合策略,每次用一个实)根据选定的结合策略,每次用一个实 际模块代替一个桩模块;际模块代替一个桩模块;3 3)在结合进一个模块的同时进行测试;)在结合进一个模块的同时进行测试; 4 4)为保证加入的模块没有引进新的错)为保证加入的模块没有引进新的错 误,误,可能需要进行回归测试可能需要进行回归测试38优点优点 1 1)能在早期验证主要的控制和判断点。)能在早
21、期验证主要的控制和判断点。2 2)选用按深度方向组装的方式,可以首先)选用按深度方向组装的方式,可以首先 实现和验证一个完整的软件功能。实现和验证一个完整的软件功能。 缺点:缺点:可能遇到逻辑次序上的问题可能遇到逻辑次序上的问题39 自底向上的增殖方式自底向上的增殖方式 从程序模块结构最底层的模块开始组装和测试。从程序模块结构最底层的模块开始组装和测试。 不再需要存根程序,需要驱动模块。不再需要存根程序,需要驱动模块。 组合策略:组合策略: 1 1)把低层模块组合成实现某个特定的软件子功把低层模块组合成实现某个特定的软件子功 能的族;能的族; 2 2)用驱动程序协调测试数据的输入和输出;用驱动
22、程序协调测试数据的输入和输出; 3 3)对由模块组成的子功能族进行测试;对由模块组成的子功能族进行测试; 4 4)去掉驱动程序,沿软件结构自下向上移动,去掉驱动程序,沿软件结构自下向上移动, 把子功能族组合起来形成更大的子功能族。把子功能族组合起来形成更大的子功能族。40自底向下组合测试的例子自底向下组合测试的例子41回归测试回归测试思考:思考:采用采用“渐增式测试渐增式测试”时,测试中当新的模时,测试中当新的模块结合进来之后,是否需要对程序进行再次测块结合进来之后,是否需要对程序进行再次测试?试? 定义:定义:指集成测试中,重新执行已经做过测试的指集成测试中,重新执行已经做过测试的某个子集,
23、以保证上述这些变化没有带来非预某个子集,以保证上述这些变化没有带来非预期的副作用。期的副作用。 先采取自顶向下的方式测试被修改的模块先采取自顶向下的方式测试被修改的模块及其子模块;然后将这一部分视为子系统,再及其子模块;然后将这一部分视为子系统,再自底向上测试。自底向上测试。42混合策略混合策略 1 1)衍变的自顶向下的增殖测试)衍变的自顶向下的增殖测试 先对输入输出模块和引入新算法先对输入输出模块和引入新算法模块进行测试;模块进行测试; 再自底向上组装成为功能相当完整再自底向上组装成为功能相当完整且相对独立的子系统;且相对独立的子系统; 然后由主模块开始自顶向下进行增然后由主模块开始自顶向下
24、进行增殖测试。殖测试。432 2)自底向上)自底向上自顶向下的增殖测试自顶向下的增殖测试 先对含读操作的子系统自底向上直先对含读操作的子系统自底向上直至根结点模块进行组装和测试;至根结点模块进行组装和测试; 再对含写操作的子系统做自顶向下再对含写操作的子系统做自顶向下的组装与测试。的组装与测试。4445确认测试的步骤确认测试的步骤46 通常采用通常采用黑盒测试黑盒测试,验证被测软件是否,验证被测软件是否满足用户需求。满足用户需求。 测试计划:测试计划:包括测试种类及进度安排;包括测试种类及进度安排; 测试步骤:测试步骤:描述具体的测试用例描述具体的测试用例 测试目的:测试目的:确定软件的特性是
25、否与需求相符;确定软件的特性是否与需求相符; 所有的文档都是正确且便于使用;所有的文档都是正确且便于使用; 其它软件需求。其它软件需求。测试结果:测试结果:与预期的结果相符;与预期的结果相符; 与预期的结果不符:要提交一份问题报告。与预期的结果不符:要提交一份问题报告。4748 适用:适用:为多个用户开发的软件为多个用户开发的软件 测试:测试:由用户在开发环境下进行的测试。由用户在开发环境下进行的测试。 主要评价软件产品的主要评价软件产品的FLURPSFLURPS(即功能、(即功能、局域化、局域化、 可使用性、可靠性、性能和支持)。可使用性、可靠性、性能和支持)。 测试:测试:由最终用户在实际
26、使用环境下进行的测由最终用户在实际使用环境下进行的测试,这些用户定期返回有关错误信息给开发者。试,这些用户定期返回有关错误信息给开发者。 注意:注意:只有当只有当测试达到一定的可靠程度时,才测试达到一定的可靠程度时,才开始开始测试。测试。497.6 白盒测试技术白盒测试技术 白盒测试执行的要求:白盒测试执行的要求: p 对程序模块的所有独立的执行路径至少测对程序模块的所有独立的执行路径至少测试一次;试一次; p 对所有的逻辑判定,取对所有的逻辑判定,取“真真”与取与取“假假”的两种情况都至少测试一次;的两种情况都至少测试一次; p 在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执
27、行循环体; p 测试内部数据结构的有效性。测试内部数据结构的有效性。50 逻辑覆盖是以程序内部的逻辑结构为基础逻辑覆盖是以程序内部的逻辑结构为基础设计测试用例的技术。设计测试用例的技术。 l 语句覆盖语句覆盖 l 判定覆盖判定覆盖 l 条件覆盖条件覆盖 l 判定条件覆盖判定条件覆盖 l 条件组合覆盖条件组合覆盖 l 点覆盖点覆盖 l 边覆盖边覆盖 l 路径覆盖路径覆盖5152535455561、语句覆盖、语句覆盖 设计若干个测试用例,使得被测程序设计若干个测试用例,使得被测程序的的至少执行一次。至少执行一次。5758语句覆盖的弱点语句覆盖的弱点思考:思考:假使程序中两个判定的逻辑运算有问题,假
28、使程序中两个判定的逻辑运算有问题,第一个判定运算符第一个判定运算符“AND”AND”错成错成“OR”OR”,或者,或者是第二个判定运算符是第二个判定运算符 “ “OR”OR”错成错成“AND”AND”; 或者第二个条件语句中或者第二个条件语句中X1X1误写成误写成X0X0, 若仍然使用该测试用例若仍然使用该测试用例(2, 0, 4)(2, 0, 4),是否能够,是否能够发现程序的错误?发现程序的错误?答:不能发现。答:不能发现。程序仍然按照流程图上的路径程序仍然按照流程图上的路径 a ac ce e执行。执行。 一般认为,语句覆盖是很不充一般认为,语句覆盖是很不充分的一种标准。分的一种标准。5
29、92、判定覆盖、判定覆盖 又称为分支覆盖又称为分支覆盖 程序中每个判断表达式的取真分支和程序中每个判断表达式的取真分支和取假分支至少执行一次。取假分支至少执行一次。6061另一组测试用例另一组测试用例即路径即路径abeabe和和acdacd,得另一组测试用例,得另一组测试用例: : 【(2, 1, 1)(2, 1, 1),(2, 1, 2)(2, 1, 2)】覆盖】覆盖 abeabe【L3L3】 【(3, 0, 3)(3, 0, 3),(3, 1, 1)(3, 1, 1)】覆盖】覆盖 acdacd【L4L4】62判定覆盖总结判定覆盖总结 上述两组测试用例不仅满足了上述两组测试用例不仅满足了“判
30、定覆判定覆盖盖”,同时还满足了,同时还满足了“语句覆盖语句覆盖”,从这点看,从这点看,判定覆盖强于语句覆盖。判定覆盖强于语句覆盖。 若第二个判定条件若第二个判定条件X1X1错写成了错写成了X1X1,能,能否发现问题?否发现问题? 仍然按原路执行。仍然按原路执行。 判定覆盖不能判定覆盖不能确定判定内部条件的错误,需要更强的逻辑覆确定判定内部条件的错误,需要更强的逻辑覆盖来检验判定内的条件。盖来检验判定内的条件。633、条件覆盖、条件覆盖 使每个判断表达式中的每个条件都取到各使每个判断表达式中的每个条件都取到各种可能的结果。设:种可能的结果。设:条件条件A A1 1,真为,真为T1 T1 ,假为,
31、假为F1 F1 条件条件B B0 0,真为,真为T2 T2 ,假为,假为F2 F2 条件条件A A2 2,真为,真为T3 T3 ,假为,假为F3 F3 条件条件X X1 1,真为,真为T4 T4 ,假为,假为F4F464符合条件覆盖的测试用例符合条件覆盖的测试用例 65条件覆盖总结条件覆盖总结覆盖了条件的测试覆盖了条件的测试 用例不一定覆盖分支。用例不一定覆盖分支。 为解决这个矛盾,需为解决这个矛盾,需要兼顾条件和分支。要兼顾条件和分支。664、判定条件覆盖、判定条件覆盖 判断中每个条件的所有可能取值至少执行一次,判断中每个条件的所有可能取值至少执行一次,同时每个判断的可能取值也至少执行一次。
32、同时每个判断的可能取值也至少执行一次。675、条件组合覆盖、条件组合覆盖 每个判断表达式中所有可能的每个判断表达式中所有可能的至少执行一次。设:至少执行一次。设:686 6、路径覆盖、路径覆盖 路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。覆盖程序中所有可能的路径。l当程序中判定多于一个时,形成的分支结当程序中判定多于一个时,形成的分支结构可以分为两类:构可以分为两类:和和。l对于嵌套型分支结构嵌套型分支结构,若对于嵌套型分支结构嵌套型分支结构,若有有 个判定语句,需要个判定语句,需要 个测试用例;个测试用例;l对于连锁型分支结构连锁型分支结构,对于
33、连锁型分支结构连锁型分支结构, 若若有有 个判定语句,需要有个判定语句,需要有个测试用例,覆个测试用例,覆盖它的盖它的条路径。当条路径。当 较大时将无法测试。较大时将无法测试。69707、点覆盖、点覆盖 与语句覆盖标准相同。与语句覆盖标准相同。 如果连通图如果连通图G G的子图的子图GG是连通的,而且包含是连通的,而且包含G G的所有的所有节点,由称节点,由称GG是是G G的点覆盖。的点覆盖。 8、边覆盖、边覆盖 与判断覆盖相同。与判断覆盖相同。 如果连通图如果连通图G G的子的子图图GG是连通的,而且包含是连通的,而且包含G G的所有边,的所有边,由称由称GG是是G G的边覆盖。的边覆盖。7
34、1总结:总结:6种覆盖标准的对比种覆盖标准的对比727.6.2 控制结构测试控制结构测试1、基本路径测试、基本路径测试 以环形复杂度为基础,导出基本可以环形复杂度为基础,导出基本可执行路径集合,设计测试用例的方法。执行路径集合,设计测试用例的方法。 测试用例要保证程序的每个可执行语句测试用例要保证程序的每个可执行语句至少执行一次。至少执行一次。73步骤:步骤: 步骤步骤1:由程序流程图导出程序控制流图,由程序流程图导出程序控制流图, 并计算其环路复杂度。并计算其环路复杂度。 步骤步骤2:确定程序的独立路径。确定程序的独立路径。 什么是独立路径?什么是独立路径? 流图中,一条独立路径是至少包含一
35、条在其流图中,一条独立路径是至少包含一条在其它独立路径中从未有过的边的路径。它独立路径中从未有过的边的路径。 独立路径条数独立路径条数是确保程序中,每个可执行语是确保程序中,每个可执行语句至少能被执行一次所必需的测试用例数目的上界。句至少能被执行一次所必需的测试用例数目的上界。 独立路径独立路径条数程序环路复杂性条数程序环路复杂性V(G)V(G)74例:独立路径例:独立路径 图中一组独立的路径是:图中一组独立的路径是:L1L1:1,11 1,11 L2L2:1,2,3,4,5,10,1,11 1,2,3,4,5,10,1,11 L3L3:1,2,3,6,8,9,10,1,11 1,2,3,6,
36、8,9,10,1,11 L4L4:1,2,3,6,7,9,10,1,111,2,3,6,7,9,10,1,11 路径路径L1L1,L2L2,L3L3,L4L4组组 成了控制流图的一个基本成了控制流图的一个基本路径集。路径集。75步骤步骤3:由基本路径集,导出测试用例由基本路径集,导出测试用例 基本路径集不是唯一的,对于给定的基本路径集不是唯一的,对于给定的程序图,可以得到不同的基本路径集。程序图,可以得到不同的基本路径集。 导出测试用例,确保基本路径集中的导出测试用例,确保基本路径集中的 每一条路径的执行。每一条路径的执行。767.7 黑盒测试技术黑盒测试技术黑盒测试主要是为了发现以下错误黑盒
37、测试主要是为了发现以下错误: : l 是否有不正确或遗漏了的功能是否有不正确或遗漏了的功能? ? l 能否正确地接受输入能否正确地接受输入? ? 能否正确的输出结果能否正确的输出结果? ? l 是否有数据结构错误或外部数据库访问错误是否有数据结构错误或外部数据库访问错误? ? l 性能上是否能够满足要求性能上是否能够满足要求? ? l 是否有初始化或终止性错误是否有初始化或终止性错误? ? 几种黑盒测试技术:几种黑盒测试技术: 等价类划分、边界值分析、等价类划分、边界值分析、错误推测法、因果图错误推测法、因果图777.7.1 等价划分等价划分 基本思想:基本思想:把所有可能的输入数据(包括把所
38、有可能的输入数据(包括 有效或无效的),划分成若干数据类(等有效或无效的),划分成若干数据类(等价类),然后从每个数据类中选取少数有价类),然后从每个数据类中选取少数有代表性的数据做为测试用例。代表性的数据做为测试用例。 这种方法完全不考虑程序的内部结这种方法完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用构,只依据程序的规格说明来设计测试用例。例。78设计测试用例的步骤设计测试用例的步骤步骤步骤1 1:划分等价类(列出等价类表)划分等价类(列出等价类表) 等价等价类是指输入数据的子集合。在该子集合中,类是指输入数据的子集合。在该子集合中,各输入数据对于发现程序中的错误都是等各输入数
39、据对于发现程序中的错误都是等效的。效的。 根据程序功能说明,确定有效和根据程序功能说明,确定有效和无效的等价类。无效的等价类。 设计测试用例的步骤设计测试用例的步骤 步骤步骤2 2:根据等价类设计测试用例包括有效根据等价类设计测试用例包括有效等价类和无效等价类的设计。等价类和无效等价类的设计。79步骤步骤1:划分等价类:划分等价类等价类分为:等价类分为: l 有效等价类:有效等价类:是指对于程序的规格说明是指对于程序的规格说明来说,是合理的,有意义的输入数据构成来说,是合理的,有意义的输入数据构成的集合。的集合。 l 无效等价类:无效等价类:是指对于程序的规格说明是指对于程序的规格说明来说,是
40、不合理的,无意义的输入数据构来说,是不合理的,无意义的输入数据构成的集合。成的集合。 在设计测试用例时,要同时考虑有在设计测试用例时,要同时考虑有效等价类和无效等价类的设计!效等价类和无效等价类的设计!80等价类划分原则(等价类划分原则(1)原则原则1:若规定了取值范围,或输入值的个数,则可:若规定了取值范围,或输入值的个数,则可以以 确立一个有效等价类和两个无效等价类。确立一个有效等价类和两个无效等价类。 例:例:程序对输入条件的要求是:程序对输入条件的要求是:输入数是从输入数是从1 1到到 999 999 则有效等价类是则有效等价类是“11输入数输入数999”999”; 两个无效等价类是两
41、个无效等价类是“输入数输入数1”1”或或“输入数输入数999”999” 81等价类划分原则(等价类划分原则(2)原则原则2 2:如果规定了输入数据的一组值,而且程序:如果规定了输入数据的一组值,而且程序要对每种输入数据分别处理,则可为每种输入值要对每种输入数据分别处理,则可为每种输入值确立一个有效等价类,此外针对这组值确立一个确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。无效等价类,它是所有不允许的输入值的集合。例:例:教师上岗方案中规定对教授、副教授、讲师和教师上岗方案中规定对教授、副教授、讲师和助助 教分别计算分数,做相应的处理。因此可以教分别计算分数
42、,做相应的处理。因此可以确定确定 4 4个有效等价类为教授、副教授、讲师和助个有效等价类为教授、副教授、讲师和助教,教, 一个无效等价类,它是所有不符合以上身一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。分的人员的输入值的集合。 82等价类划分原则(等价类划分原则(3) 原则原则3 3:若规定了输入值的集合,或者是规:若规定了输入值的集合,或者是规定了定了“必必 须如何须如何”的条件,则可确立一的条件,则可确立一个有效等价类和一个有效等价类和一 个无效等价类。个无效等价类。例:例:PascalPascal语言对变量标识符规定必须语言对变量标识符规定必须“以字母以字母 打头打头”,
43、则所有以字母打头的,则所有以字母打头的构成有效等价类,而不构成有效等价类,而不 以字母打头的归以字母打头的归于无效等价类。于无效等价类。 83等价类划分原则(等价类划分原则(4)原则原则4 4:如果规定输入数据为整型,则可划:如果规定输入数据为整型,则可划分出正整分出正整 数、零和负整数三个有效类,数、零和负整数三个有效类,其他数据为无效类。其他数据为无效类。 原则原则5 5:如果程序处理对象是表格,则应使:如果程序处理对象是表格,则应使用空表、含一项和多项的表。用空表、含一项和多项的表。 原则原则6 6:如果确知,已划分的等价类中各元:如果确知,已划分的等价类中各元素在程序中的处理方式不同,
44、则应将此素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。等价类进一步划分成更小的等价类。 84步骤步骤2:确立测试用例:确立测试用例 在确立了等价类之后,建立等价类在确立了等价类之后,建立等价类表,列出所有划分出的等价类。表,列出所有划分出的等价类。85测试用例的选择原则测试用例的选择原则原则原则1 1:为每一个等价类规定一个唯一编号;:为每一个等价类规定一个唯一编号; 原则原则2 2:设计一个新的测试用例,使其尽可能多:设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一地覆盖尚未被覆盖的有效等价类,重复这一步步, ,直到所有的有效等价类都被覆盖为止;直
45、到所有的有效等价类都被覆盖为止; 原则原则3 3:设计一个新的测试用例,使其仅覆盖一:设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。直到所有的无效等价类都被覆盖为止。86等价类划分法设计测试用例(例等价类划分法设计测试用例(例1)例例1 1: 某报表处理系统,要求用户输入处理报表的某报表处理系统,要求用户输入处理报表的日期。日期。 系统规定日期由年、月的系统规定日期由年、月的6 6位数字字符组成,位数字字符组成,前前4 4 位代表年,后两位代表月。位代表年,后两位代表月。 设日期限制在设日期限制在
46、19901990年年1 1月至月至19991999年年1212月,即系月,即系统只能对该段时期内的报表进行处理。如果用户统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误。输入的日期不在此范围内,则显示输入错误。 现用等价类划分法设计测试用例,来测试程现用等价类划分法设计测试用例,来测试程序的序的 “ “日期检查功能日期检查功能”。87划分等价类并编号划分等价类并编号 88为合理等价类设计测试用例为合理等价类设计测试用例 6位数字字符位数字字符 在在19901999之间之间 在在112之间之间89为每个不合理等价类设计测试用例为每个不合理等价类设计测试用例907.
47、7.2 边界值分析边界值分析 边界是指,对于输入和输出等价类而言,稍边界是指,对于输入和输出等价类而言,稍高和稍低于其边界值的一些特定情况。高和稍低于其边界值的一些特定情况。 经验得知,大量的错误是发生在输入或输出经验得知,大量的错误是发生在输入或输出范围范围 的边界上,而不是在输入范围的内部。的边界上,而不是在输入范围的内部。 边界值分析方法思想:边界值分析方法思想:确定边界之后,选取确定边界之后,选取正好等于、刚刚大于或刚刚小于边界的值做为测正好等于、刚刚大于或刚刚小于边界的值做为测试数据,而不是选取等价类中典型值或任意值做试数据,而不是选取等价类中典型值或任意值做为测试数据。为测试数据。
48、 通常总是与等价划分技术联合使用,是等价通常总是与等价划分技术联合使用,是等价类划分方法的补充。类划分方法的补充。917.7.3 错误推测错误推测 基本思想:基本思想:列举程序中所有可能有列举程序中所有可能有的错误和容易发生错误的特殊情况,根的错误和容易发生错误的特殊情况,根据它们选择据它们选择 测试用例。测试用例。 依靠经验和直觉推测程序中可能存依靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检在的各种错误,从而有针对性地编写检查这些错误查这些错误 的测试用例。的测试用例。927.8 调试(调试(Debug) 软件调试软件调试是在成功测试之后,进一步是在成功测试之后,进一步诊断
49、和改正程序中潜在的错误。诊断和改正程序中潜在的错误。调试活动的组成部分调试活动的组成部分: l 确定程序中可疑错误的确切性质和位置。确定程序中可疑错误的确切性质和位置。 l 对程序对程序( (设计设计, ,编码编码) )进行修改,排除这进行修改,排除这个错误。个错误。937.8.1 调试过程调试过程 从错误的外部表现形式入手,确定程序从错误的外部表现形式入手,确定程序 中出错位置;中出错位置; 研究有关程序,找出错误的内在原因;研究有关程序,找出错误的内在原因; 修改设计和代码,排除这个错误;修改设计和代码,排除这个错误; 重复进行暴露了这个错误的原始测试或重复进行暴露了这个错误的原始测试或
50、某些有关测试。某些有关测试。9495调试在技术上的难度调试在技术上的难度l 错误现象与原因所处的位置可能相距甚远。当错误现象与原因所处的位置可能相距甚远。当其它错误得到纠正时,这一错误所表现出的现其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。象可能会暂时消失,但并未实际排除。 l 非错误原因非错误原因( (例如,舍入误差例如,舍入误差) )。 l 不容易发现的人为错误。不容易发现的人为错误。 l 错误是由于时序问题引起的,与处理过程无关。错误是由于时序问题引起的,与处理过程无关。 l 现象是由于难于精确再现的输入状态(例如,现象是由于难于精确再现的输入状态(例如,实
51、实 时应用中输入顺序不确定)引起。时应用中输入顺序不确定)引起。 l 现象可能是周期出现的。在软、硬件结合的嵌现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。入式系统中常常遇到。967.8.2 调试途径调试途径 强行排错强行排错 效率最低的方法,常见形式效率最低的方法,常见形式: : 打印出所有存储内容、代码打印出所有存储内容、代码 在程序特定部位设置打印语句在程序特定部位设置打印语句 自动调试工具。自动调试工具。97 回溯法回溯法( (跟踪法跟踪法) ) 根据错误症状位置,人工沿程序控根据错误症状位置,人工沿程序控制流程向回追踪源代码。制流程向回追踪源代码。 适用于小程序,路径数
52、目很大时无适用于小程序,路径数目很大时无法进行。法进行。98 归纳法调试归纳法调试一种从特殊现象推断一般原理的思考方法。一种从特殊现象推断一般原理的思考方法。99归纳法调试步骤归纳法调试步骤 收集有关数据。收集有关数据。列出所有已知的测试用例和程列出所有已知的测试用例和程序执行结果。序执行结果。 组织数据。组织数据。组织整理数据,以发现规律。组织整理数据,以发现规律。3W1H3W1H形式。形式。 提出假设。提出假设。利用分析结果,设计一个或多个关利用分析结果,设计一个或多个关于出于出 错原因的假设。若提不出假设,则需收错原因的假设。若提不出假设,则需收集更多数据。集更多数据。 证明假设。证明假
53、设。把假设与原始线索或数据进行比较,把假设与原始线索或数据进行比较,若它能完全解释一切现象,则假设得到证明;若它能完全解释一切现象,则假设得到证明;否则,否则, 就认为假设不合理、不完全,或是存就认为假设不合理、不完全,或是存在多个错误,在多个错误, 以致只能消除部分错误。以致只能消除部分错误。100演绎法调试演绎法调试 一种从一般原理或前提出发,经过排除和精化的一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。过程来推导出结论的思考方法。101演绎法调试步骤演绎法调试步骤列举所有可能出错原因的假设。列举所有可能出错原因的假设。把所有可能的把所有可能的错误原因列成表。通过它
54、们,组织、分析现有错误原因列成表。通过它们,组织、分析现有数据。数据。 利用已有的测试数据,排除不正确的假设。利用已有的测试数据,排除不正确的假设。仔仔细分析已有的数据,寻找矛盾,力求排除前一细分析已有的数据,寻找矛盾,力求排除前一步列出的所有原因。如果所有原因都被排除了,步列出的所有原因。如果所有原因都被排除了,则需要补充则需要补充 一些数据一些数据( (测试用例测试用例) ),以建立新,以建立新的假设。的假设。 改进余下的假设。改进余下的假设。对没有被排除的原因,利用对没有被排除的原因,利用已知已知 的线索,进一步改进,使之更具体化,的线索,进一步改进,使之更具体化,以便可以精确地确定出错
55、位置。以便可以精确地确定出错位置。 证明余下的假设。证明余下的假设。见归纳法第四步。见归纳法第四步。102调试原则调试原则 确定错误的性质和位置的原则确定错误的性质和位置的原则 l 用头脑去分析思考与错误征兆有关的信息。用头脑去分析思考与错误征兆有关的信息。 l 避开死胡同。避开死胡同。 l 只把调试工具当做辅助手段来使用。利用只把调试工具当做辅助手段来使用。利用调试工具,可以帮助思考,但不能代替思调试工具,可以帮助思考,但不能代替思考。考。 l 避免用试探法,最多只能把它当做最后手避免用试探法,最多只能把它当做最后手 段。段。103修改错误的原则修改错误的原则l修改错误的一个常见失误是只修改了这修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没个错误的征兆或这个错误的表现,而没有修改错有修改错 误的本身。误的本身。 l当心修正一个错误的同时有可能会引入当心修正一个错误的同时有可能会引入新的错误。新的错误。 l修改错误的过程将迫使人们暂时回到程修改错误的过程将迫使人们暂时回到程序设计阶段。序设计阶段。 l修改源代码程序,不要改变目标代码。修改源代码程序,不要改变目标代码。1047.9 软件可靠性软件可靠性7.9.1 基本概念基本概念 1、什么是软件可靠性?、什么是软件可靠性? 程序在给定的时间间隔内,按照规
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB3709T 038-2025泰山茶 山地低产茶园提升改造技术规程
- 海南九乐再生资源回收与利用有限公司水稳站项目环评报告表
- 项目资金评分表
- 海航技术附件维修事业部海口复材车间新租赁厂房及APU新试车台项目环评报告表
- 店铺硅酸钙板施工方案
- 隔墙板做砖胎膜的施工方案
- 福建省泉州市2025届高中毕业班质量监测 (三)物理试题(含答案)
- 地板砖铺设施工方案
- 2024-2025学年下学期高二语文第三单元A卷
- 数控加工工艺与编程技术基础 教案 模块一 任务2 初识数控加工工艺
- 小儿锌缺乏症剖析
- 古风集市策划方案
- 道路危险货物运输安全培训课件
- 社会工作综合能力初级讲义课件
- 青春期心理健康讲座课件
- 《广联达培训教程》课件
- 儿童流感的防治和预防措施
- 美业招商课件
- 城市灾害学课件-地质灾害(1)课件
- 面密度仪设备原理培训课件
- 铸件(原材料)材质报告
评论
0/150
提交评论