




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试的目标 测试的目的就是在软件投入生产性运行之前 尽可能多地发现软件中的错误 目前软件测试仍然是保证软件质量的关键步骤 测试是对软件规格说明 设计和编码的最后复审 根本目标 尽可能多地发现并排除软件中潜藏的错误 最终把高质量的软件系统交给用户 无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分 软件测试在软件生命周期中横跨两个阶段 软件测试包括两种 单元测试 模块的编写者和测试者是同一个人综合测试 由专门的测试人员承担软件测试的工作量往往占软件开发总工作量的40 以上 7 基本概念 7 1 1软件测试的目标 1 测试是为了发现程序中的错误而执行程序的过程 2 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案 3 成功的测试是发现了至今为止尚未发现的错误的测试 测试的定义 为了发现程序中的错误而执行程序的过程 测试目标决定了测试方案的设计 如果为了表明程序是正确的而进行测试 就会设计一些不易暴露错误的测试方案 相反 如果测试是为了发现程序中的错误 就会力求设计出最能暴露错误的测试方案 由于测试的目标是暴露程序中的错误 因此由程序的编写者自己进行测试是不恰当的 因此 在综合测试阶段通常由其他人员组成测试小组来完成测试工作 测试不能证明错误不存在 只能表示软件错误已经出现 测试决不能证明程序是正确的 即使经过了最严格的测试之后 仍然可能还有没被发现的错误潜藏在程序中 测试只能查找出程序中的错误 不能证明程序中没有错误 测试原则 所有的测试都应追溯到用户需求 应在测试工作真正开始的前较长时间内就进行测试计划 测试计划可在设计模型一完成就开始 详细测试方案定义可在设计模型被确定后立即开始 穷举测试是不可能的 为达到最佳效果 应由独立的第三方来构造测试 可测试性 软件的可测试性就是一个计算机程序能够被测试的容易程度 可测试性特征 可操作性 运行得越好 被测试的效率越高 可观察性 你所见的即为你所测试的 可控制性 对软件控制越好 测试越能够被自动执行与优化 可分解性 通过控制测试范围 能更快的分界问题 执行更灵巧的再测试 简单性 需测试的内容越少 测试速度越快 稳定性 改变越少 对测试的破坏越小 易理解性 得到的信息越多 进行的测试越灵巧 好 测试的属性 一个好测试发现错误的可能性很高 一个好测试并不冗余 每个测试都该有不同的用途 一个好测试应该是一组目的相似的测试中最佳的 最可能找到所有错误的测试 一个好测试既不会太简单 也不会太复杂 7 1 2黑盒测试和白盒测试测试任何产品都有两种方法 黑盒测试 如果已经知道了产品应该具有的功能 可以通过测试来检验是否每个功能都能正常使用 白盒测试 如果知道产品内部工作过程 可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行 且所有内部部件被充分利用 确保 所有齿轮吻合 黑盒测试又称为功能测试 它把程序看成一个黑盒子 完全不考虑程序的内部结构和处理过程 也就是说 黑盒测试是在程序接口进行的测试 它只检查程序功能是否能按照规格说明书的规定正常使用 程序是否能适当地接收输入数据产生正确的输出信息 并且保持外部信息 如 数据库或文件 的完整性 故意不考虑控制结构 而是注意信息域 黑盒测试检测的错误类型 功能不对或遗漏 界面错误 数据结构或外部数据库访问错误 性能错误 初始化和终止错误 白盒测试又称为结构测试 它的前提是可以把程序看成装在一个透明的白盒子里 也就是完全了解程序的结构和处理过程 这种方法按照程序内部的逻辑测试程序 检验程序中的每条通路是否都能按预定要求正确工作 使用程序设计的控制结构导出测试方案 包含所有可能情况的测试称为穷尽测试 对于实际程序而言 穷尽测试通常是不可能做到的 白盒测试功能 保证一个模块中的所有独立路径至少被执行一次 对所有逻辑值均需测试TRUE和FALSE 在上下边界及可操作范围内运行所有循环 检查内部数据结构以确保其有效性 7 1 3软件测试的步骤1 模块测试模块测试的目的是保证每个模块作为一个单元能正确运行 所以模块测试通常又称为单元测试 在这个测试步骤中所发现的往往是编码和详细设计的错误 2 子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试 模块相互间的协调和通信是这个测试过程中的主要问题 因此这个步骤着重测试模块的接口 3 系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试 在这个测试步骤中发现的往往是软件设计中的错误 也可能发现需求说明中的错误 4 验收测试验收测试把软件系统作为单一的实体进行测试 目的是验证系统确实能够满足用户的需要 在这个测试步骤中发现的往往是系统需求说明书中的错误 5 平行运行平行运行就是同时运行新开发出来的系统和将被它取代的旧系统 以便比较新旧两个系统的处理结果 这样做的具体目的有如下几点 1 可以在准生产环境中运行新系统而又不冒风险 2 用户能有一段熟悉新系统的时间 3 可以验证用户指南和使用手册之类的文档 4 能够以准生产模式对新系统进行全负荷测试 可以用测试结果验证性能指标 测试阶段的信息流 软件配置 测试配置 测试实际结果 调试纪录测试配置 测试计划 测试方案测试方案 测试时使用的输入数据 测试用例 每组输入数据预定要检查的功能每组输入数据预期应该得到的正确输出 7 1 4测试阶段的信息流 7 单元测试 单元测试集中检验软件设计的最小单元 模块 单元测试通常使用白盒测试法 而且对多个模块的测试可以并行地进行 7 2 1单元测试考虑在单元测试期间主要评价模块的下述五个特性 模块接口 局部数据结构 重要的执行通路 出错处理通路 影响上述各方面特性的边界条件 在对接口进行测试时主要检查下述各点 参数数目和由调用模块送来的变元的数目是否相等 2 参数的属性和变元的属性是否匹配 3 参数和变元的单位系统是否匹配 4 传送给被调用模块的变元的数目是否等于那个模块的参数的数目 5 传送给被调用模块的变元属性和参数的属性是否一致 6 传送给被调用模块的变元的单位系统和该模块参数的单位系统是否一致 7 传送给内部函数的变元属性 数目和次序是否正确 8 是否修改了只做输入用的变元 9 全程变量的定义和用法在各个模块中是否一致 如果一个模块完成外部的输入或输出时 还应该再检查下述各点 1 文件属性是否正确 2 打开文件语句是否正确 3 格式说明书与输入 输出语句是否一致 4 缓冲区大小与记录长度是否匹配 5 使用文件之前先打开文件了吗 6 文件结束条件处理了吗 7 输入 输出错误检查并处理了吗 8 输出信息中有文字书写错误吗 对于一个模块而言 局部数据结构是常见的错误来源 应该仔细设计测试方案 以便发现下述类型的错误 1 错误的或不相容的说明 2 使用尚未赋值或尚未初始化的变量 3 错误的初始值或不正确的缺省值 4 错误的变量名字 拼写错或截短了 5 数据类型不相容 6 上溢 下溢或地址异常 由于错误的计算 不正确的比较或不适当的控制流造成的错误 1 计算次序不对或误解了运算符的优先次序 2 混合运算 运算对象的类型彼此不相容 3 变量初始值不正确 4 精度不够 5 表达式的符号表示错误 比较后控制流变化的错误 1 比较数据类型不同的量 2 逻辑运算符不正确或优先次序的错误 3 当由于精度问题两个量不会相等时 程序中却期待着相等条件的出现 4 差1 错 即 多循环一次或少循环一次 5 错误的或不存在的循环终止条件 6 当遇到发散的迭代时不能终止循环 7 错误地修改循环变量 当错误处理部分 应该考虑潜在的错误 1 对错误的描述是难于理解的 2 记下的错误与实际遇到的错误不同 3 在对错误进行处理之前 错误条件已经引起系统异常 4 对错误的处理 例外处理 不正确 5 描述错误的信息不足以帮助确定造成错误的位置 边界测试是单元测试中最后的也可能是最重要的任务 软件常常在它的边界上失效 7 2 2单元测试过程通常经过人工测试和计算机测试两种类型的测试 1 代码审查人工测试源程序可以由编写者本人非正式地进行 也可以由审查小组正式进行 后者称为代码审查 它是一种非常有效的程序验证技术 对于典型的程序来说 可以查出30 70 的逻辑设计错误和编码错误 代码审查比计算机测试优越的是 一次审查会上可以发现许多错误 可减少系统验证的总工作量实践表明 对于查找某些类型的错误来说 人工测试比计算机测试更有效 对于其他类型的错误来说则刚好相反 2 测试软件模块并不是一个独立的程序 因此必须为每个单元测试开发驱动软件和 或 存根软件 高内聚可简化单元测试过程 减少所需的测试方案 且模块中的错误也更容易预测和发现 在所有的模块都完成单元测试以后提一个问题 如果每个模块都工作的很好 那么为什么要怀疑把它们放在一起就不能正常工作呢 问题在于 怎样放在一起 接口问题数不胜数 集成测试 集成测试是通过测试发现和接口有关的问题来构造程序结构的系统化技术 目标 把通过了单元测试的模块拿来 构造一个在设计中所描述的程序结构 7 集成测试 集成测试是组装软件的系统技术 由模块组装成程序时有两种方法 一种方法是先分别测试每个模块 再把所有模块按设计要求放在一起结合成所要的程序 这种方法称为非渐增式测试方法 通常存在的倾向 另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试 测试完以后再把下一个应该测试的模块结合进来测试 这种每次增加一个模块的方法称为渐增式测试 这种方法实际上同时完成单元测试和集成测试 两种方法的主要优缺点 非渐增式测试方法工作量比较大渐增式测试可以较早发规模块间的接口错误 非渐增式测试最后才把模块组装在一起 因此接口错误发现得晚 非渐增式测试一下子把所有模块组合在一起 如果发现错误则较难诊断定位 使用渐增式测试方法时 如果发生错误则往往和最近加进来的那个模块有关 渐增式测试方法对程序的测试更彻底 渐增式测试需要较多的机器时间 非渐增式测试方法可以并行测试所有模块 因此能充分利用人力 加快工程进度 总的说来 渐增式测试方法比较好 使用渐增方式把模块结合到软件系统中去时 有自顶向下和自底向上两种方法 7 3 1自顶向下结合从主控制模块 主程序 开始 沿着软件的控制层次向下移动 从而逐渐把各个模块结合起来 7 3 2自底向上结合自底向上测试从 原子 模块 即在软件结构最低层的模块 开始组装和测试 7 3 3不同测试策略的比较自顶向下结合的优点 不需要测试驱动程序 能在早期实现并验证系统的主要功能 能较早发现上层模快的接口错误 自顶向下结合的缺点 需要存根程序 可能遇到与此相联系的测试困难 低层关键模块中的错误发现较晚 而且用这种方法在早期不能充分展开人力 自底向上测试方法的优缺点刚好相反 混合策略 改进的自顶向下测试方法 基本上使用自顶向下的测试方法 但是在早期 就使用自底向上的方法测试软件中的少数关键模块 混合法 对软件结构中较上层 使用的是自顶向下方法 对软件结构中较下层 使用的是自底向上方法 两者相结合 验收测试 验收测试的任务 验证软件的有效性 软件有效性定义 如果软件的功能和性能如同用户所合理地期待的那样 则软件是有效的 需求分析阶段产生的文档准确地描述了用户对软件的合理期望 因此是软件有效的标准 也是验收测试的基础 回归测试 对某些已经进行过测试的某些子集在重新进行一遍 用来保证 由于测试或其他原因 改动不会带来不可预料的行为或者另外的错误活动 通过重新执行所有的测试用例的一个子集人工的来进行 或使用自动化捕获回访工具来进行 测试用例的类型包括 能够测试软件的所有功能的代表性测试用例专门针对可能会修改影响的软件功能的附加测试针对修改过的软件成分的测试 进行集成测试时 应能识别关键模块 关键模块的特性 和好几个软件需求有关含有高层控制 位于程序结构的高层 本身是复杂的或者是容易出错的含有确定性的性能需求关键模块应尽可能早地进行测试回归测试应集中在关键模块的功能上 7 4 1验收测试 确认测试 的范围验收测试的范围与系统测试类似 但是也有一些差别 验收测试有两种可能的结果 1 功能和性能与用户要求一致 软件是可以接受的 2 功能或性能与用户的要求有差距 7 4 2软件配置复查 系统测试 将软件和其他系统成分 新的硬件 信息 集成起来 进行系统集成和确认测试 不属于软件工程的研究范围 系统测试类型恢复测试安全测试压力测试性能测试 设计测试方案 测试方案包括预定要测试的功能 应该输入的测试数据和预期的结果 通常的做法是 用黑盒法设计基本的测试方案 再用白盒法补充一些方案 7 5 1逻辑覆盖逻辑覆盖是对一系列测试过程的总称 这组测试过程逐渐进行越来越完整的通路测试 1 语句覆盖选择足够多的测试数据 使被测试程序中每个语句至少执行一次 2 判定覆盖判定覆盖又叫分支覆盖 它的含义是 不仅每个语句必须至少执行一次 而且每个判定的每种可能的结果都应该至少执行一次 也就是每个判定的每个分支部至少执行一次 3 条件覆盖不仅每个语句至少执行一次 而且使判定表达式中的每个条件都取到各种可能的结果 4 判定 条件覆盖同时满足判定和条件两种覆盖标准的逻辑覆盖 这就是判定 条件覆盖 它的含义是 选取足够多的测试数据 使得判定表达式中的每个条件都取到各种可能的值 而且每个判定表达式也都取到各种可能的结果 5 条件组合覆盖条件组合覆盖是更强的逻辑覆盖标准 它要求选取足够多的测试数据 使得每个判定表达式中条件的各种可能组合都至少出现一次 6 点覆盖如果连通图G的子图G 是连通的 而且包含G的所有节点 则称G 是G的点覆盖 7 边覆盖如果连通图G的子图G 是连通的 而且包含G的所有边 则称G 是G的边覆盖 8 路径覆盖选取足够多测试数据 使程序的每条可能路径都至少执行一次 如果程序图中有环 则要求每个环至少经过一次 7 5 2等价划分如果把所有可能的输入数据 有效的和无效的 划分成若干个等价类 则可以合理地做出下述假定 每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同 因此 可以从每个等价类中只取一组数据作为测试数据 这样选取的测试数据最有代表性 最可能发现程序中的错误 等价划分的测试方案用于设计基于输入条件的等价类评估如果对象具有对称性或自反性的关系连接 就存在等价类 等价类表示输入条件的一组有效或无效的状态 划分出等价类以后 根据等价类设计测试方案时主要使用下面两个步骤 1 设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类 复重这一步骤直到所有有效等价类都被覆盖为止 2 设计一个新的测试方案 使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类 重复这一步骤直到所有无效等价类都被覆盖为止 7 5 3边界值分析 BVA 是补充等价划分的测试方案设计技术 设计使程序运行在边界情况附近的测试方案 暴露出程序错误的可能性更大一些 应该选取刚好等于 稍小于和稍大干等价类边界值的数据作为测试数据 而不是选取每个等价类内的典型值或任意值作为测试数据 7 5 4错误推测错误推测法在很大程度上靠直觉和经验进行 它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况 并且根据它们选择测试方案 7 5 5实用测试策略对软件系统进行实际测试时 应该联合使用各种设计测试方案的方法 形成一种综合策略 通常的做法是 用黑金法设计基本的测试方案 再用白金法补充一些必要的测试方案 具体地说 可以使用下述策略结合各种方法 1 在任何情况下都应该使用边界值分析的方法 2 必要时用等价划分法补充测试方案 3 必要时再用错误推测法补充测试方案 4 对照程序逻辑 检查已经设计出的测试方案 测试步骤 确定测试要度量什么 要测试什么 为什么要测试 内容是需求规格说明的完全性 系统设计中模块的内聚性及实现代码的可靠性 决定如何测试待定软件 选择何种测试方法 开发测试用例 确定测试的期望结果并创建测试喻示 执行测试用例 将测试结果与测试喻示表示的期望结果进行比较 6调试 在成功的测试之后 还必须进一步诊断和改正程序中的错误 这就是调试的任务 调试过程的两个步骤 它从表示程序中存在错误的某些迹象开始 首先确定错误的准确位置工 作量大约占调试总工作量的95 确定问题的原因 并改正错误 7 6 1调试技术现有的调试技术主要有下述三类 1 输出存储器内容2 打印语句3 自动工具7 6 2调试策略调试过程的关键不是调试技术 而是用来推断错误原因的基本策略 1 试探法分析错误征兆 猜想故障的大致位置2 回溯法检查错误征兆 确定最先发现 症状 的地方 然后人工沿程序的控制流往回追踪源程序代码 直到找出错误根源或确定故障范围为止 3 对分查找法 4 归纳法从线索 错误征兆 出发 通过分析这些线索之间的关系而找出故障 归纳法的四个主要步骤 l 收集有关的数据 2 组织数据 3 导出假设 4 证明假设 5 演绎法演绎法调试开始时先列出所有看来可能成立的原因或假设 然后一个一个地排除列举出的原因 最后 证明剩下的原因确实是错误的根源 演绎法主要有下述四个步骤 1 设想可能的原因 2 用已有的数据排除不正确的假设 3 精化余下的假设 5 证明余下的假设 7 软件可靠性 7 7 1基本概念1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗健康行业:智慧医院建设与运营策略研究报告
- 2025年医疗健康产业数字化转型与智能医疗应用报告
- 培训学生朗诵体态
- 家庭亲子教育实施策略
- 众望教育初中化学课程体系
- 煤矿支护培训课件
- 小班生活活动总结
- 口腔缺牙培训
- 院前急救流程
- 古筝户外游戏活动方案
- 矿产资源储量报告编制和评审中常见问题及其处理意见
- 2024年清理道路塌方协议书模板
- 河南省郑州市管城回族区2023-2024学年五年级下学期期末数学试卷
- GB 44495-2024汽车整车信息安全技术要求
- 人教版五年级3《长方体和正方体》 单元整体作业设计
- 2024年广东省中考物理试卷(含答案逐题解析)
- DB43-T 2745-2023 地理标志产品 汨罗粽子
- 乒乓球体育课教案
- NB-T47003.1-2022常压容器第1部分:钢制焊接常压容器
- 云南红河州一中2025届高一下数学期末综合测试试题含解析
- 2024北京西城公安分局流管员招聘笔试参考题库含答案解析
评论
0/150
提交评论