buct软件测试复习_第1页
buct软件测试复习_第2页
buct软件测试复习_第3页
buct软件测试复习_第4页
buct软件测试复习_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件测试技术SoftwareTestingTechnology 赵瑞莲E Mail rlzhao 软件测试的基本概念 IEEE在软件工程标准术语中给软件测试下的定义是 使用人工或自动手段来运行或测定某个系统的过程 其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别 该定义包含了两方面的含义 1 是否满足规定的需求2 是否有差别 这一定义非常明确地提出了软件测试以检验软件是否满足需求为目标 软件测试的基本概念 对测试人员 测试的最好定义是 测试是为了发现故障而执行程序的过程 这一定义非常明确地提出了软件测试以发现故障为目的 发现故障的测试是成功的测试 软件测试的基本概念 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例 即输入数据及其预期的输出结果 并利用这些测试用例去运行程序 以发现软件故障的过程 软件测试的基本概念 软件测试主要涉及5方面的问题 谁来执行测试 测试什么 什么时候测试 怎样进行测试 测试停止的标准是什么 与任何事物一样 软件也有一个从孕育 诞生 成长到衰亡的生存过程 通常称为软件生存周期 包括制定计划 需求分析 设计 程序编码 测试运行维护六个阶段 软件生存周期 软件生存期与软件测试 如同任何产品离不开质量检验一样 软件测试是在软件投入运行前 对软件需求分析 设计规格说明和编码实现的最终审定 贯穿于软件定义与开发的整个期间 在软件生存期中占据着非常突出的重要位置 软件测试并不等于程序测试 软件测试应贯穿于软件定义与开发的整个期间 软件开发与软件测试 V模型 软件开发与软件测试 W模型 软件开发是一个自顶向下 逐步细化的过程 软件测试则是依相反顺序的自底向上 逐步集成的过程 低一级的测试为上一级的测试准备条件 软件测试过程 单元测试 单元测试一般在编码之后进行 由于每个模块在整个软件中并不是孤立的 在对每个模块进行单元测试时 需要考虑它和周围模块的相互联系 为模拟这一联系 在进行单元测试时 必须设置若干个辅助测试模块 单元测试 这些辅助模块分为两种 驱动模块 driver 用以模拟被测模块的上级模块 相当于被测模块的主程序 桩模块 stub 用以模拟被测模块的下级模块 相当于被测模块调用的子模块 单元测试的环境 单元测试完成 集成测试 软件集成测试又称组装测试 即对程序模块采用自顶向下或自底向上组装起来 对系统的接口进行正确性检验的测试工作 软件集成测试由项目经理组织软件测试工程师依据 概要设计说明书 和 集成测试计划 进行 集成测试 一些模块单独能够工作 并不能保证连接起来也能正常工作 程序在某些局部反映不出的问题 在全局上很可能暴露出来 影响功能的发挥 集成测试是将多个模块组合在一起进行测试的过程 集成测试 独立地测试程序的每个模块 然后再把它们组合成整个程序的集成测试方法 把下一个待测试的模块组合到已经测试过的那些模块上去 再进行测试 从主控模块开始 按照软件的控制层次结构 逐步把各个模块集成在一起 从最下层的模块开始 按照程序的层次结构 逐渐形成完整的整体 集成测试 系统测试 系统测试是将通过确认测试的软件 作为整个基于计算机系统的一个元素 与计算机硬件 外设 某些支持软件 数据和人员等其它系统元素结合在一起测试 在实际运行 使用 环境下 对计算机系统进行一系列的组装测试和确认测试 系统测试 静态测试与动态测试 静态测试是指不利用计算机运行被测试的程序 通过其它手段达到检测的目的 是对被测程序进行特性分析的一些方法的总称 动态测试则是指通常意义上的测试 通过运行和使用被测程序 发现软件故障 以达到检测的目的 经验表明 使用静态测试可以发现大约30 到70 的逻辑设计和编码错误 验证测试与确认测试 验证是对软件产品进行人工检查或评审 验证测试针对开发过程中的任何中间产品进行 是为确定某一开发阶段的产品是否满足在该阶段开始时提出的要求而对系统或部件进行评估的过程 验证就是对诸如需求规格说明 设计规格说明和代码之类的产品进行评估 审查和检查的过程 属于静态测试 确认是 基于计算机的测试 过程 属于动态测试 确认测试是对照软件需求规格说明书 对软件产品进行评估以确定其是否满足需求规格的过程 验证活动 验证活动是测试生存周期中的一个阶段 包括需求验证 功能设计验证 详细设计验证和代码验证 在每一类的验证活动中 都要考虑以下问题 使用的验证方法 审查 走查 伙伴检查等 产品中要验证的和不要验证的范围 没有验证的部分所承担的风险 需要优先进行验证的范围 资源 进度 工具和责任等 回归测试是对程序进行测试以确定是否因故障修复而引入了新的故障 回归测试不是一种新的测试活动 它是为检查是否因修复故障引入了新的故障而重新执行某些或所有测试用例的过程 可以为每一个测试活动进行回归测试 比如 单元测试 可用性测试 功能测试 系统测试等 回归测试 测试 测试是由一个用户在开发环境下进行的测试 也可以是开发机构内部的用户在模拟实际操作环境下进行的测试 测试的目的是评价软件产品的功能 可使用性 可靠性 性能和支持 尤其注重产品的界面和特色 测试可以从软件产品编码结束之时开始 或在模块 系统 测试完成之后开始 也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始 测试 测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试 与 测试不同的是 开发者通常不在测试现场 只有当 测试达到一定的可靠程度时 才能开始 测试 它处在整个测试的最后阶段 同时 产品的所有手册文本也在此阶段定稿 测试生命周期 黑盒测试与白盒测试 黑盒测试和白盒测试是两类广泛使用的软件测试方法 黑盒测试 功能性测试 功能性测试是一类广泛使用的软件测试方法 功能性测试的基本观点是将被测程序看作一个打不开的黑盒 测试人员在完全不考虑程序内部结构和内部特性的情况下 只依靠被测程序输入和输出之间的关系 或程序的功能来设计测试用例 功能性测试 黑盒测试 采用功能性方法标识测试用例 所使用的唯一信息就是软件的规格说明 功能性测试用例具有两个优点 1 功能性测试与软件如何实现无关 如果实现发生了变化 测试用例仍然可以使用 2 测试用例的开发可以和实现并行进行 可以缩短项目的开发时间 功能性测试 黑盒测试 采用功能性方法标识测试用例 所使用的唯一信息就是软件的规格说明 功能性测试用例也常常带来两个问题 1 测试用例之间可能存在严重的冗余 2 可能会有未被测试的软件漏洞 功能性测试 黑盒测试 测试用例集合完全局限在已描述行为的集合内 功能性测试方法是基于已描述行为的 因此很难想象这些方法能够标识没有被描述的行为 黑盒测试 功能性测试 常用的黑盒测试方法有 边界值分析 等价类划分 决策表驱动法等 边界值测试 边界值分析 边界值分析的基本思想是利用输入变量值的最小值 稍大于最小值 正常值 稍小于最大值 最大值 边界值分析基于一种假设 在可靠性理论中称为 单缺陷 假设 即由两个 或两个以上 故障同时出现而导致软件失效的情况很少 一个含n个变量的程序 边界值分析要取4n 1个测试用例 边界值分析 健壮性测试 一个含n个变量的程序 健壮性测试要取6n 1个测试用例 n变量函数的最坏情况测试 会产生5n个测试用例 图4两个变量程序的最坏情况测试用例 最坏情况测试 边界值分析测试用例是最坏情况测试用例的真子集 最坏情况测试显然更彻底 也意味着更多的工作 n变量函数的健壮最坏情况测试 会产生7n个测试用例 最坏情况测试 等价类测试 EquivalenceClassTesting 等价类测试 等价类划分把程序的输入域划分成若干个互不相交的一组子集 等价类 所谓等价类是指输入域的某个集合 等价类的并便是整个输入域 这对于测试有两个非常重要的意义 表示整个输入域提供了一种形式的完备性 而互不相交则可保证一种形式的无冗余性 等价类由等价关系决定 因此等价类中的元素有一些共同的特点 如果用等价类中的一个元素作为测试数据进行测试不能发现程序中的故障 那么使用集合中的其它元素进行测试也不可能发现程序故障 对揭露程序中的故障来说 等价类中的每个元素是等效的 等价类测试 有效等价类 有效等价类是指对程序规格说明 是有意义的 合理的输入数据所构成的集合 在考虑等价类时 应注意区别有效等价类和无效等价类 利用有效等价类 可以检验程序是否实现了规格说明预先规定的功能和性能 在具体问题中 有效等价类可以是一个 也可以是多个 等价类测试 无效等价类 无效等价类是指对程序规格说明 是不合理或无意义的输入数据所构成的集合 利用无效等价类 可以检查程序功能和性能的实现是否有不符合规格说明要求的地方 对于具体的问题 无效等价类至少应有一个 也可能有多个 等价类测试 1 为每个等价类规定一个唯一的编号 2 设计一个新的测试用例 尽可能多地覆盖尚未被覆盖的有效等价类 重复这一步 直到测试用例覆盖了所有的有效等价类 3 设计一个新的测试用例 使其覆盖并且只覆盖一个还没有被覆盖的无效等价类 重复这一步 直至测试用例覆盖了所有的无效等价类 根据已列出的等价类表 按以下步骤确定测试用例 等价类测试 弱一般等价类测试 x1有效等价类 a b b c c d x2有效等价类 e f f g 测试用例的数量和含最大子集数目的等价类中的数目相同 强一般等价类测试 x1有效等价类 a b b c c d x2有效等价类 e f f g 测试用例的数量3 2 6 弱健壮等价类测试 x1有效等价类 a b b c c d x2有效等价类 e f f g x1无效等价类x1dx2无效等价类x2g 测试用例的数量3 2 2 7 强健壮等价类测试 x1有效等价类 a b b c c d x2有效等价类 e f f g x1无效等价类x1dx2无效等价类x2g 测试用例的数量 3 2 2 2 20 基于决策表的测试 DecisionTable BasedTesting 决策表测试 决策表最突出的优点是 它能把复杂的问题按各种可能的情况一一列举出来 简明而易于理解 也可避免遗漏 因此利用决策表可以设计出完整的测试用例集合 在所有的黑盒测试方法中 基于决策表的测试是最严格 最具有逻辑严格性的测试方法 决策表 决策表通常由4个部分组成 条件桩部分列出了问题的所有条件 动作桩则给出了问题规定的可能采取的操作 动作项和条件项紧密相关 指出了在条件项的各组取值情况下应采取的动作 NextDate函数的测试用例 使用决策表设计测试用例 我们可以把条件解释为输入 把行动解释为输出 设计出完整的测试用例集合 结构性测试 结构性测试 结构性测试方法的突出特点是它们都基于被测程序的源代码 而不是软件规格说明 和其它软件测试技术相比 结构性测试方法更容易发现软件故障 常用于单元测试中 ControlFlowgraphBasedTestingDataFlowBasedTesting UseCFGstoguideselectionoftestsforwhiteboxorstructuraltesting Theflowofdatainaprogramisvitaltothecomputationitperforms Analysisofthedefinitionanduseofdatainexecutionpaths 程序控制图 程序控制图的重要性 程序的执行对应于从源节点到汇节点的路径 测试用例必然要执行某条程序路径 可以清楚明确地描述测试用例和测试用例所执行的程序部分之间的关系 ControlFlowGraphs ACFGmodelsallexecutionsofamethodbydescribingcontrolstructuresNodes Statementsorsequencesofstatements basicblocks Edges TransfersofcontrolBasicBlock Asequenceofstatementssuchthatifthefirststatementisexecuted allstatementswillbe nobranches Rulesfortranslatingstatementsintographs CFG TheifStatement if x y y 0 x x 1 else x y if x y y 0 x x 1 CFG Theif ReturnStatement if x y return print x return CFG whileandforLoops x 0 while x y y f x y x x 1 Loopsrequire extra nodestobeadded CFG whileandforLoops for x 0 x y x y f x y implicitlyincrementsloop Loopsrequire extra nodestobeadded CFG doLoop breakandcontinue x 0 do y f x y x x 1 while x y println y CFG doLoop breakandcontinue x 0 while x y y f x y if y 0 break elseif y 0 y y 2 continue x x 1 print y CFG Thecase switch Structure read c switch c case N y 25 break case Y y 50 break default y 0 break print y 逻辑覆盖 逻辑覆盖是一种使用最广泛的结构测试方法 逻辑覆盖以程序内部的逻辑结构为基础设计测试用例 要求对被测程序的逻辑结构有清楚的了解 甚至要能掌握源程序的所有细节 逻辑覆盖要求对被测程序的结构作到一定程度的覆盖 由于覆盖测试的目标不同 逻辑覆盖又可分为 语句覆盖 判定覆盖 条件覆盖 判定 条件覆盖及路径覆盖 逻辑覆盖 它的程序流程图如下 a b c d和e为控制流上的若干程序点 1 语句覆盖语句覆盖要求设计若干个测试用例 运行被测程序 使程序中的每个可执行语句至少被执行一次 这里所谓 若干 自然是越少越好 我们如果选择 Test1 age 50 sex M comm 2500作为测试用例 则程序按路径ace执行 这样该程序段的4个语句都得到执行 从而作到了语句覆盖 逻辑覆盖 它的程序流程图如下 a b c d和e为控制流上的若干程序点 2 判定覆盖判定覆盖要求设计若干测试用例 运行被测程序 使得程序中每个判断的取真分支和取假分支至少执行一次 即判断的真假值均要被检测 判定覆盖又称为分支覆盖 逻辑覆盖 它的程序流程图如下 a b c d和e为控制流上的若干程序点 3 条件覆盖条件覆盖要求设计若干测试用例 执行被测程序 使得程序中每个判断的每个条件的可能取值至少被执行一次 逻辑覆盖 它的程序流程图如下 a b c d和e为控制流上的若干程序点 4 判定 条件覆盖判定 条件覆盖要求设计足够的测试用例 执行被测程序 使得判断中每个条件的所有可能取值至少被执行一次 同时每个判断的所有可能判断结果也至少被执行一次 逻辑覆盖 路径能否被全面覆盖在软件测试中是一个重要的问题 因为程序要取得正确的结果 就必须消除遇到的各种障碍 沿着特定的路径顺利执行 如果程序中的每一条路径都得到考验 才能说程序受到了全面检验 基本路径测试 数学上 向量空间都有一个基 向量空间的基是一组相互独立的向量 其中的任何其他向量都可以用基向量来表示 一组基向量在一定程度上可以代表整个向量空间的本质 如果一个基向量被删除 则这种覆盖特性就会丧失 对测试的意义是 如果把程序看做是一个向量空间 则这种空间的基就是要测试的非常有意义的元素集 如果基没有问题 则认为用基表示的一切都没有问题 数据流测试 数据流分析 数据流分析 dataflowanalysis 在软件开发 测试和维护中起着十分重要的作用 它将程序中变量的出现分为变量的定义和引用 若语句k执行时改变了程序变量V的值 则称k定义了 definition 变量v 若语句k执行时引用了变量v的值 则称k引用了 use 变量v 定义 使用测试 为描述定义 使用测试 先定义几个基本术语 变量v的定义结点n 记做DEF v n 结点n G P 是变量v V的定义结点 当且仅当变量v的值由对应结点n的语句或语句片段所定义 输入语句 赋值语句 循环控制语句和过程调用 都可以定义变量 如果执行了对应这些语句的结点 那么与被定义变量关联的存储单元的内容就会改变 定义 使用测试 变量v的使用结点n 记做USE v n 结点n G P 是变量v V的使用结点 当且仅当变量v的值在对应结点n的语句或语句片段中被引用 输出语句 赋值语句 条件语句 循环控制语句和过程调用 都是使用变量的结点 但是 执行对应这些语句的结点 并不改变与被引用变量关联的存储单元的内容 定义 使用测试 谓词使用 记做P useUSE v n 是一个谓词使用 当且仅当语句n是谓词语句 否则 USE v n 是计算使用 记做C use 条件语句 循环控制语句中变量的使用一般是谓词使用 而赋值语句中变量的使用一般是计算使用 定义 使用测试 定义 使用路径 记做du path如果对某个变量v V 存在一个定义 使用结点对 即DEF v m 和USE v n 使得变量v在结点m处被定义 在结点n处被使用 则从m到n的结点序列称为一条定义 使用路径 结点m称为该定义 使用路径的开始结点 而结点n则称为该定义 使用路径的结束结点 定义 使用测试 定义清晰路径 definition clearpath 记做dc path如果对某个变量v V 存在一个定义 使用结点对 即DEF v m 和USE v n 使得变量v在结点m处被定义 在结点n处被使用 并且从m到n的结点序列中没有其他结点对变量v进行过定义 则从m到n的结点序列称为一条定义清晰路径 结点m称为该定义 使用路径的开始结点 而结点n则称为该定义 使用路径的结束结点 RecallOurExample ForjustthevariablexinIF THENx 1ELSEx 2FI y 50 IF x 1 THENx 2ELSEDO ODFI x x 1 RecallOurExample ForjustthevariablexinIF THENx 1ELSEx 2FI y 50 IF x 1 THENx 2ELSEDO ODFI x x 1 定义 使用路径测试覆盖 所有定义 使用路径覆盖准则集合T满足程序P的所有定义 使用路径覆盖准则 当且仅当对所有的变量v V T包含了从v的每个定义结点到v的所有使用结点的定义清晰路径 AllduPaths ADUP Foreveryvariableandforeverydefinitiondofthatvariableandforeveryuseuofdandforeverydu pathfromdtouthereistestwhichexercisesthatpath Example ForthevariablexinIF THENx 1ELSEx 2FI y 50 IF x 1 THENx 2ELSEDO ODFI x x 1 d d up d ucd AllduPaths example 1 定义 使用路径测试覆盖 所有定义覆盖准则集合T满足程序P所有定义覆盖准则 当且仅当对所有的变量v V T包含了从变量v的每个定义结点到v的一个使用结点的定义清晰路径 AllDefinitions AD Alldefinitionscoveredbysomeuse AD example 1 2 3 1 2 and3 wouldsuffice AD example 3 4 6 Also3 4 and6 wouldsuffice 定义 使用路径测试覆盖 所有使用覆盖准则集合T满足程序P的所有使用覆盖准则 当且仅当对所有的变量v V T包含了从v的每个定义结点到v的所有使用结点的定义清晰路径 Allusesstrategy AU Sameasalldupathsexceptweonlyrequireatleastonepathfromeachdefinitiontoeachuse

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论