第2章软件测试策略与过程-hxx_第1页
第2章软件测试策略与过程-hxx_第2页
第2章软件测试策略与过程-hxx_第3页
第2章软件测试策略与过程-hxx_第4页
第2章软件测试策略与过程-hxx_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

第二章软件测试策略与过程 2 第2章软件测试策略与过程 2 1软件测试的复杂性分析2 2排除软件缺陷的手段2 3软件测试方法与策略2 4单元测试2 5集成测试2 6确认测试2 7系统测试2 8验收测试2 9测试后的调试2 10面向对象的软件测试 3 本章教学目标 理解软件测试的复杂性理解软件测试的方法与策略明确单元测试的主要任务和过程明确集成测试的方法和确认测试的准则明确系统测试的八个领域测试要点明确验收测试的主要内容和相关配置 4 2 1软件测试的复杂性分析 1 无法对程序进行完全测试 1 测试所需要的输入量太大 2 测试的输出结果太多 3 软件实现的途径太多 4 软件规格说明没有一个客观标准2 测试无法显示潜在的软件缺陷和故障 通过软件测试只能报告软件已被发现的缺陷和故障 无法报告隐藏的软件故障 3 存在的故障现象与发现的故障数量成正比 结论 应当对故障集中的程序段进行重点测试 5 M1 D1 D2 D3 D4 M2 M3 M4 M5 M6 M7 D5 20次 循环次数012 20独立路径数51 52 53 521 1014 1百万亿 每个测试用例 考虑 执行 验证结果 5分钟共需测试时间10亿年 无法进行完全测试的例子 1 6 无法进行完全测试的例子 2 程序P X Y Z 若X Y为所有可能的整数在字长32位机上测试X1 Y1 Z1 Xn Yn Znn 232 232 264 1 84 1019 7 软件测试的复杂性分析 续 4 不能修复所有的软件故障 原因 没有足够的进行修复 修复的风险较大 不值得修复 可不算做故障的一些缺陷 杀虫剂现象 结论 关键是要进行正确的判断 合理的取舍 根据风险分析决定哪些故障必须修复 哪些故障可以不修复 5 软件测试的代价 工作原则 就是如何将无边无际的可能性减小到一个可以控制的范围 以及如何针对软件风险做出恰当选择 去粗存精 找到最佳的测试量 使得测试工作量不多也不少 既能达到测试的目的 又能较为经济 8 9 2 2排除软件缺陷的手段 软件测试软件项目评审 10 软件测试 软件测试 测试在软件开发中占有重要地位 测试成本占总开发成本的近一半 11 软件开发成本分布 12 测试人员所占比例 13 实际产品中的情况 14 需求分析 设计走查 概要设计 设计评审 详细设计 编码 代码走查 单元测试 集成测试 确认测试 测试评审 需求评审 单元测试计划 软件项目评审 回归测试 系统测试 15 T 测试R 评审UT 单元测试IT 集成测试ST 系统测试AT 验收测试 引入 消除 传递 需求 设计 编程 测试 UT IT AT ST R 运行 维护 T 软件生存期中缺陷的引入 传递与消除 16 缺陷跟踪 17 缺陷的状态 MicrosoftFixedDuplicatedPostponedBydesignNotreproWon tfix AthensOlympicGamesSystemOpenInAnalysisAcceptedRejectedFixedDeliveredPendingClosedReopenedUnresolved 18 根据微软的经验 每修复三到四个Bug一般就会产生一个新的Bug 19 测试对象 程序测试 发现程序中的缺陷 测试数据 程序P 比较 结果数据 预期数据 相符 不符 追查缺陷 20 测试对象 文档测试 发现文档中存在的各种错误 以及各种文档之间的逻辑不一致性等需求规格说明设计说明 概要与详细 程序 代码走查 编写的代码是否符合既定的规范和标准等 不是指可执行的二进制代码 测试用例 测试计划 测试结果报告用户手册 安装 配置手册 帮助文档等其他样本 范例 错误提示信息和产品支持信息等 所有与软件产品有关联的部分都可成为被测试的对象 21 测试计划测试用例测试程序 测试 建立可靠性模型 排错 评估测试结果 预期结果 修正的软件 可靠性模型 软件配置 测试配置 测试工具 测试结果 错误 出错率 回归测试 软件测试信息流 22 23 P 制定测试计划D 执行测试C 测试评审A 解决测试评审发现的问题 软件开发 软件测试 测试计划与测试评审的关系 24 需求分析 概要设计 详细设计 编码 单元测试 集成测试 确认测试 系统测试 决定软件与系统的配合关系 测试与开发前期工作的关系 25 发现的错误数 周 周 总缺陷数目 不同阶段的缺陷数目 测试查错曲线 26 27 需求分析阶段制定本项目的VV T计划设置基于需求的测试用例对需求进行评审与分析对用户手册初稿进行评审与分析概要设计阶段修订VV T计划制定基于设计的测试步骤对概要设计进行评审与分析详细设计阶段设置基于设计的功能测试数据对详细设计进行评审与分析 软件生存期各阶段的VV T活动 28 程序编写和单元测试完成测试用例说明书进行单元测试进行集成测试安装进行系统测试进行验收测试运行和维护阶段软件评价软件修改评价回归测试 引自美国国家标准局信息处理标准FIPSPUB101 软件生存期各阶段的VV T活动 续 29 如何正确对待测试工作 明确测试工作意义 加强责任心 疏忽可能造成恶果 学习 实践 钻研 积累经验 努力提高业务水平 处理好与编程人员关系 30 测试工作评估问题 你单位是否有专人负责测试工作 你们是否有 是否用测试计划规范 你们是否有 是否用单元测试规程 你们是否有 是否用测试报告规范 测试过程 包括计划和实施 与整个开发过程是否并行开展 测试在开发初期着手 在开发结束完成 测试能够确认规格说明得到正确的实现吗 除规格说明以外 你能否确认用户的期望也能满足吗 测试人员能验证开发的阶段 如需求和设计 的精确性和完全性吗 测试人员向开发人员报告缺陷以期进一步采取措施吗 在制定计划之前测试人员能估计业务风险吗 31 测试工作评估问题 续 针对被测软件是否提出了可度量的测试目标 如已提出 它与商业风险有关吗 测试中发现的缺陷是否做了纪录和总结 使其用于改进开发过程和测试过程 测试人员是否根据以前的工作经验判断可能的缺陷 是否有改进测试过程的办法 你为缺陷命名吗 是否利用缺陷记录 总结和事故数据来评价测试过程的有效性 是否采用度量 如千行代码缺陷数 来计划和评价测试过程 是否已建立了测试人员的培训制度 采用测试工具来支持测试过程吗 32 不同等级的测试机构 33 不同等级的测试机构 34 2 3软件测试方法与策略 2 3 1静态测试与动态测试2 3 2黑盒测试与白盒测试2 3 3软件测试过程2 3 4软件测试原则 Return 35 软件测试策略 什么是软件测试策略 是为软件工程过程定义的一个软件测试的模板 也就是把特定的测试用例方法放置进去的一系列步骤 软件测试策略包含的特征 1 测试从模块层开始 然后扩大延伸到整个基于计算机的系统集合中 2 不同的测试技术适用于不同的时间点 3 测试是由软件的开发人员和 对于大型系统而言 独立的测试组来管理的 4 测试和调试是不同的活动 但是调试必须能够适应任何的测试策略 36 软件测试充分性准则 对任何软件都存在有限的充分测试集合 如果一个软件系统在一个测试数据集合上的测试是充分的 那么再多测试一些数据也应该是充分的 这一特性称为单调性 即使对软件所有成分都进行了充分的测试 也并不表明整个软件的测试已经充分了 这一特性称为非复合性 即使对软件系统整体的测试是充分的 也并不意味软件系统中各个成分都已经充分地得到了测试 这个特性称为非分解性 软件测试的充分性应该与软件的需求和软件的实现都相关 软件越复杂 需要的测试数据就越多 这一特性称为复杂性 测试得越多 进一步测试所能得到的充分性增长就越少 这一特性称为回报递减率 37 2 3 1静态测试与动态测试 1 静态测试静态测试不实际运行软件 主要是对软件的编程格式 结构等方面进行评估 静态测试包括代码检查 静态结构分析 代码质量度量等 它可以由人工进行 也可以借助软件工具自动进行 静态测试方法也可利用计算机作为对被测程序进行特性分析的工具 但与人工测试方式有着根本区别 另一方面 因它并不真正运行被测程序 只进行特性分析 这又与动态方法不同 所以 静态方法常常称为 分析 静态测试是对被测程序进行特性分析方法的总称 38 静态测试与动态测试 续 代码检查代码检查包括代码走查 桌面检查 代码审查等 主要检查代码和设计的一致性 代码对标准的遵循 可读性 代码的逻辑表达的正确性 代码结构的合理性等方面 代码检查的具体内容 变量检查 命名和类型审查 程序逻辑审查 程序语法检查和程序结构检查等 代码检查的优点 在实际使用中 代码检查比动态测试更有效率 能快速找到缺陷 发现30 70 的逻辑设计和编码缺陷 代码检查看到的是问题本身而非征兆 代码检查的缺点 非常耗费时间 而且代码检查需要知识和经验的积累 39 静态测试与动态测试 续 静态结构分析静态结构分析主要是以图形的方式表现程序的内部结构 例如函数调用关系图 函数内部控制流图 其中 函数调用关系图以直观的图形方式描述一个应用程序中各个函数的调用和被调用关系 控制流图显示一个函数的逻辑结构 由许多节点组成 一个节点代表一条语句或数条语句 连接结点的叫边 边表示节点间的控制流向 40 静态测试与动态测试 续 代码质量度量软件质量包括六个方面 功能性 可靠性 易用性 效率 可维护性和可移植性 软件的质量是软件属性的各种标准度量的组合 针对软件的可维护性 目前业界主要存在三种度量参数 Line复杂度 Halstead复杂度和McCabe复杂度 其中Line复杂度以代码的行数作为计算的基准 Halstead以程序中使用到的运算符与运算元数量作为计数目标 直接测量指标 然后可以据以计算出程序容量 工作量等 McCabe复杂度一般称为圈复杂度 它将软件的流程图转化为有向图 然后以图论来衡量软件的质量 41 静态测试与动态测试 续 静态测试阶段的任务 1 检查算法的逻辑正确性 2 检查模块接口的正确性 3 检查输入参数是否有合法性检查 4 检查调用其他模块的接口是否正确 5 检查是否设置了适当的出错处理 6 检查表达式 语句是否正确 是否含有二义性 7 检查常量或全局变量使用是否正确 8 检查标识符的使用是否规范 一致 9 检查程序风格的一致性 规范性 10 检查代码是否可以优化 算法效率是否最高 11 检查代码注释是否完整 是否正确反映了代码的功能 42 静态测试与动态测试 续 静态测试可以完成以下工作 1 发现下列程序的错误 错用局部变量和全局变量 未定义的变量 不匹配的参数 不适当的循环嵌套或分支嵌套 死循环 不允许的递归 调用不存在的子程序 遗漏标号或代码 2 找出以下问题的根源 从未使用过的变量 不会执行到的代码 从未使用过的标号 潜在的死循环 3 提供程序缺陷的间接信息 所用变量和常量的交叉应用表 是否违背编码规则 标识符的使用方法和过程的调用层次 4 为进一步查找做好准备 5 选择测试用例 6 进行符号测试 43 静态测试与动态测试 续 2 动态测试动态方法的主要特征是 计算机必须真正运行被测试的程序 通过输入测试用例 对其运行情况即输入与输出的对应关系进行分析 以达到检测的目的 动态测试包括 1 功能确认与接口测试 2 覆盖率分析 3 性能分析 4 内存分析 44 2 3 2黑盒测试和白盒测试 若测试规划是基于产品的功能 目的是检查程序各个功能是否能够实现 并检查其中的功能错误 则这种测试方法称为黑盒测试 Black boxTesting 方法 黑盒测试又称为功能测试 数据驱动测试和基于规格说明的测试 它是一种从用户观点出发的测试 一般被用来确认软件功能的正确性和可操作性 若测试规划基于产品的内部结构进行测试 检查内部操作是否按规定执行 软件各个部分功能是否得到充分使用 则这种测试方法称为白盒测试 White boxTesting 方法 白盒测试又称为结构测试 逻辑驱动测试或基于程序的测试 一般用来分析程序的内部结构 45 黑盒测试和白盒测试 续 两种测试方法从完全不同的角度出发 反映了测试思路的两方面情况 适用于不同的测试阶段 46 黑盒测试和白盒测试 续 1 黑盒测试黑盒测试的基本观点是 任何程序都可以看作是从输入定义域映射到输出值域的函数过程 被测程序被认为是一个打不开的黑盒子 黑盒中的内容 实现过程 完全不知道 只明确要做到什么 黑盒测试主要根据规格说明书设计测试用例 并不涉及程序内部构造和内部特性 只依靠被测程序输入和输出之间的关系或程序的功能设计测试用例 黑盒测试的特点 1 黑盒测试与软件的具体实现过程无关 在软件实现的过程发生变化时 测试用例仍然可以使用 2 黑盒测试用例的设计可以和软件实现同时进行 这样能够压缩总的开发时间 47 黑盒测试和白盒测试 续 48 黑盒测试和白盒测试 续 黑盒测试主要是为了发现以下几类错误 是否有不正确或遗漏了的功能 在接口上 输入能否正确地接受 能否输出正确的结果 是否有数据结构错误或外部信息访问错误 性能上是否能够满足要求 是否有初始化或终止性错误 黑盒测试的难点 在哪个层次上进行测试 黑盒测试的具体技术方法 边界值分析法等价类划分法因果图法决策表法 49 黑盒测试和白盒测试 续 2 白盒测试白盒测试将被测程序看作一个打开的盒子 测试者能够看到被测源程序 可以分析被测程序的内部结构 此时测试的焦点集中在根据其内部结构设计测试用例 白盒测试要求是对某些程序的结构特性做到一定程度的覆盖 或者说这种测试是 基于覆盖率的测试 通常的程序结构覆盖有 语句覆盖判定覆盖条件覆盖判定 条件覆盖路径覆盖 50 黑盒测试和白盒测试 续 51 黑盒测试和白盒测试 续 3 黑盒测试法和白盒测试法的比较 52 黑盒测试和白盒测试 续 黑盒测试 以用户的观点 从输入数据与输出数据的对应关系 即根据程序外部特性进行测试 而不考虑内部结构及工作情况 黑盒测试技术注重于软件的信息域 范围 通过划分程序的输入和输出域来确定测试用例 若外部特性本身存在问题或规格说明的规定有误 则应用黑盒测试方法是不能发现问题的 白盒测试 只根据程序的内部结构进行测试 测试用例的设计要保证测试时程序的所有语句至少执行一次 而且要检查所有的逻辑条件 如果程序的结构本身有问题 比如说程序逻辑有错误或者有遗漏 那也是无法发现的 53 黑盒测试和白盒测试 续 54 黑盒测试和白盒测试 续 A只能用黑盒测试发现的错误C只能用白盒测试发现的错误B用黑盒测试或白盒测试都能发现的错误D用黑盒测试或白盒测试均无法发现的错误A B能用黑盒测试发现的错误B C能用白盒测试发现的错误A B C用两种测试能发现的错误A B C D软件中的全部错误 A B C D 黑盒测试与白盒测试能够发现的错误 55 2 3 3软件测试过程 图2 2软件测试的过程流程 56 软件测试过程 续 单元测试 针对每个单元的测试 以确保每个模块能正常工作为目标 集成测试 对已测试过的模块进行组装 进行集成测试 目的在于检验与软件设计相关的程序结构问题 确认 有效性 测试 是检验所开发的软件能否满足所有功能和性能需求的最后手段 系统测试 检验软件产品能否与系统的其他部分 比如 硬件 数据库及操作人员 协调工作 验收 用户 测试 检验软件产品质量的最后一道工序 主要突出用户的作用 同时软件开发人员也应有一定程度的参与 57 一个实用软件测试过程 一种简单实用的软件测试过程模型POCERM测试过程中必需的基本测试活动及其产生的结果拟定软件测试计划 Plans 编制软件测试大纲 Outlines 设计和生成测试用例 testCasegeneration 实施测试 Execution 生成软件测试报告 softwaretestingReports 软件问题报告SPR SoftwareProblemReport 测试结果报告 testresultReports 58 一个实用软件测试过程 续 基本特性 1 计划性 任务人员设备时间相关 2 平行性 开发编码 测试再测试 3 完整性 计划 大纲 用例 SPRs 4 重用性 测试再测试回归测试升级多平台 5 可重复性 SPRs用例大纲再现Bugs 6 周期性 testcycles regression update 7 可管理性 wellstructuredandorganizedQEgroup wellplannedandpreparedtask 59 软件测试计划 一个大中型软件系统的测试必须经历一个相当复杂的测试过程 并且常常需要经历数月乃至史长时间 需要投入相当可观的人力和物力资源 所以针对整个项目的预定目标和可能的实际条件 对系统的测试过程事先进行认真的计划 软件测试计划可分为3个层次 1 概要测试计划 是软件项目实施计划中的一项重要内容 应当在软件开发初期 即需求分析阶段制定 这项计划应当定义被测试对象和测试目标 确定测试阶段和测试周期的划分 制定测试人员 软硬件资源和测试进度等方而的计划 规定软件测试方法 测试标准以及支持环境和测试工具 比如 语句覆盖率需达到95 3级以上的错误改正率需95 所有决定不改正的 轻微 错误都必须经过专门的质量评审委员会同意等 60 软件测试计划 续 2 详细测试计划 是针对子系统在特定的测试阶段所要进行的测试工作制定详细计划 它详细规定了测试小组的各项测试任务 测试策略 任务分配和进度安排等 3 测试人员的测试实施计划 是根据详细测试计划制定的测试者的测试具体实施计划 它规定了测试者在每一轮测试中负贡测试的内容 测试强度和工作进度等 测试实施计划是整个软件测试计划的组成部分 是检查测试实际执行情况的重要依据 61 软件测试大纲 软件测试大纲是软件测试的依据 它明确详细地规定了在一次测试中针对系统的每一项功能或特性所必须完成的基木测试项目和测试完成的标准 无论是自动测试还是手动测试 都必须满足测试大纲的要求 实际上 测试大纲是从测试的角度对被测对象的功能和各种特性的细化和展开 比如 针对系统功能的测试大纲是基于软件质量保证人员对系统需求规格说明书中有关系统功能定义的理解 将其逐一细化展开后编制而成的 因此 测试大纲不仅是软件开发后期测试的依据 而且在系统的需求分析阶段也是质量保证的重要文档和依据 62 两者的区别 计划是组织管理文档 考虑的是组织架构 工作任务分配 工作量估计 人力物力资源的分配 进度的安排 风险的估计和规避 各任务通过准则等 并不涉及到技术层面的东西 测试大纲是技术文档 考虑的是测试需求的细化 自动化测试框架的设计 测试数据和测试脚本的设计 测试用例设计的原则等 不需考虑组织管理方面的因素 63 在测试工作开始以前 不应设想程序中没有缺陷或找不出缺陷 测试心理学 测试以前应预知测试的结果数据 尽可能避免测试自己写的程序 坚持独立测试原则 必要的情况下建立独立测试机构 测试用例应兼顾有效输入和无效输入 不仅要检验程序是否做了该做的事 还应检验是否做了不该做的事 测试的充分性 测试的有效性 限于人力 物力 测试工作适可而止 测试经济学 2 3 4软件测试的原则 64 软件测试的原则 续 保留一切测试用例 任何已测程序的变更都应重新进行测试 回归测试 测试是不完全的 测试不完全 测试具有免疫性 软件缺陷免疫性 测试是 泛型概念 全程测试 80 20原则 缺陷的必然性 软件测试的意义 事后分析 65 2 4单元测试 2 4 1单元测试的主要任务2 4 2单元测试的执行过程 Return 66 软件测试的过程流程 67 单元测试的基本概念 单元测试是对程序模块进行正确性检验的测试工作 单元测试的目标 验证开发人员所书写的编码是否可以按照其所设想的方式执行而产出符合预期值的结果 确保产生符合其需求的可靠的程序单元 符合需求的代码通常应该具备以下性质 正确性 清晰性 规范性 一致性 高效性 68 单元测试的误区 单元测试是一种浪费时间的工作 单元测试只能证明代码做了什么 我是一个很棒的程序员 是不是可以不进行单元测试 集成测试可以捕捉所有的BUG 单元测试的成本效率不高 69 70 单元测试的主要任务 续 模块接口这是对模块接口进行的测试 检查进出程序单元的数据流是否正确 模块接口测试必须在任何其它测试之前进行 模块接口测试至少需要如下的测试项目 1 调用所测模块时的输入参数与模块的形式参数在个数 属性 顺序上是否匹配 2 所测模块调用子模块时 它输入给子模块的参数与子模块中的形式参数在个数 属性 顺序上是否匹配 3 是否修改了只做输入用的形式参数 4 调用标准函数的参数在个数 属性 顺序上是否正确 5 全局变量的定义在各模块中是否一致 71 单元测试的主要任务 续 局部数据结构在模块工作过程中 必须测试模块内部的数据能否保持完整性 包括内部数据的内容 形式及相互关系不发生错误 对于局部数据结构 应该在单元测试中注意发现以下几类错误 1 不正确的或不一致的类型说明 2 错误的初始化或默认值 3 错误的变量名 如拼写错误或书写错误 4 下溢 上溢或者地址错误 72 单元测试的主要任务 续 路径测试在单元测试中 最主要的测试是针对路径的测试 测试用例必须能够发现由于计算错误 不正确的判定或不正常的控制流而产生的错误 常见的错误有 误解的或不正确的算术优先级 混合模式的运算 错误的初始化 精确度不够精确 表达式的不正确符号表示 针对判定和条件覆盖 测试用例还要能够发现如下错误 不同数据类型的比较 不正确的逻辑操作或优先级 应当相等的地方由于精确度的错误而不能相等 不正确的判定或不正确的变量 不正确的或不存在的循环终止 当遇到分支循环时不能退出 不适当地修改循环变量 73 单元测试的主要任务 续 边界条件边界测试是单元测试的最后一步 必须采用边界值分析方法来设计测试用例 认真仔细地测试为限制数据处理而设置的边界处 看模块是否能够正常工作 一些可能与边界有关的数据类型如数值 字符 位置 数量 尺寸等 还要注意这些边界的首个 最后一个 最大值 最小值 最长 最短 最高 最低等特征 在边界条件测试中 应设计测试用例检查以下情况 1 在n次循环的第0次 1次 n次是否有错误 2 运算或判断中取最大值 最小值时是否有错误 3 数据流 控制流中刚好等于 大于 小于确定的比较值是否出现错误 74 单元测试的主要任务 续 出错处理测试出错处理的重点是模块在工作中发生了错误 其中的出错处理设施是否有效 检验程序中的出错处理可能面对的情况有 1 对运行发生的错误描述难以理解 2 所报告的错误与实际遇到的错误不一致 3 出错后 在错误处理之前就引起系统的干预 4 例外条件的处理不正确 5 提供的错误信息不足 以至于无法找到错误的原因 75 2 4 2单元测试的执行过程 何时进行单元测试 单元测试常常是和代码编写工作同时进行的 在完成了程序编写 复查和语法正确性验证后 就应进行单元测试用例设计 在单元测试时 如果模块不是独立的程序 需要设置一些辅助测试模块 辅助测试模块有两种 1 驱动模块 Drive 用来模拟被测试模块的上一级模块 相当于被测模块的主程序 它接收数据 将相关数据传送给被测模块 启动被测模块 并打印出相应的结果 2 桩模块 Stub 用来模拟被测模块工作过程中所调用的模块 它们一般只进行很少的数据处理 驱动模块和桩模块都是额外的开销 虽然在单元测试中必须编写 但并不需要作为最终的产品提供给用户 76 单元测试的执行过程 续 被测模块 驱动模块和桩模块共同构成了一个如下图所示的单元测试的测试环境 77 单元测试和集成测试的关系 对象不同 单元测试是程序模块 详细设计 集成测试是模块 概要设计 以及模块组合 测试方法不同 单元测试主要使用基于代码的白盒 集成测试主要使用基于功能的黑盒测试 测试时间不同 集成测试在单元测试之后 测试内容不同 单元测试主要测试模块内部 集成测试主要测试模块之间接口 二者的界限趋向模糊 78 单元测试和系统测试的关系 对象不同 单元测试是证明程序模块的正确 系统测试是证明系统是否满足用户的需求 出发点不同 单元测试主要从程序员的角度测试 系统测试主要从用户的角度测试 测试时间不同 系统测试在单元测试之后 测试内容不同 单元测试主要测试模块内部 系统测试主要根据需求规格说明书进行 测试错误定位 单元测试定位容易可以并行 系统测试发现错误比较难定位 79 单元测试经验总结 测试人员在进行测试的工作过程中 应该注意积累测试工作经验 这样可以缩短单元测试的时间 提高测试效果和效率 如 1 在做单元测试的过程中 要灵活选用测试用例设计技术 首先使用黑盒测试用例设计技术 然后根据相应的覆盖率统计再补充白盒测试用例 既减少了测试工作的重复 又保证了单元测试的完整性 2 应该尽量开发简单测试驱动代码 增强其可读性 最重要的是 单元测试代码中不能包含分支和逻辑语句 因为这意味着有多个测试在同时进行 这样将会使测试代码变得难以理解和维护 80 单元测试小结 通过单元测试 我们验证开发人员所书写的编码是可以按照其所设想的方式执行的 产出了符合预期值的结果 这就实现了单元测试的目的 相比后面阶段的测试 单元测试的创建更简单 维护更容易 并且可以更方便的进行重复 从全程的费用来考虑 相比起那些复杂且旷日持久的集成测试 或是不稳定的软件系统来说 单元测试所需的费用是很低的 模块单元设计完毕之后的开发阶段就是单元测试 81 2 5集成测试 2 5 1非增量式测试2 5 2增量式测试2 5 3不同集成测试方法的比较2 5 4回归测试 Return 82 集成测试应该考虑的问题 在把各个模块连接起来的时候 穿越模块接口的数据是否会丢失 各个子功能组合起来 能否达到预期要求的父功能 一个模块的功能是否会对另一个模块的功能产生不利的影响 全局的数据结构是否有问题 单个模块的误差积累起来 是否会有放大 从而达到不可接受的程度 83 2 5 1非增量式测试 非增量式测试是采用一步到位的方法来构造测试 对所有模块进行个别的单元测试后 按照程序结构图将各模块连接起来 把连接后的程序当作一个整体进行测试 非增量式测试的缺点 当一次集成的模块较多时 非增量式测试容易出现混乱 因为测试时可能发现了许多故障 为每一个故障定位和纠正非常困难 并且在修正一个故障的同时 可能又引入了新的故障 新旧故障混杂 很难判定出错的具体原因和位置 84 非增量式测试 1 程序结构图 3 集成测试示意图 2 单元测试示意图 85 2 5 2增量式测试 增量式测试的集成是逐步实现的 逐次将未曾集成测试的模块和已经集成测试的模块 或子系统 结合成程序包 再将这些模块集成为较大系统 在集成的过程中边连接边测试 以发现连接过程中产生的问题 按照不同的实施次序 增量式集成测试又可以分为三种不同的方法 1 自顶向下增量式测试 2 自底向上增量式测试 3 混合增量式测试 86 自顶向下增量式测试 自顶向下增量式测试表示逐步集成和逐步测试是按照结构图自上而下进行的 即模块集成的顺序是首先集成主控模块 主程序 然后依照控制层次结构向下进行集成 从属于主控模块的按深度优先方式 纵向 或者广度优先方式 横向 集成到结构中去 深度优先方式的集成 首先集成在结构中的一个主控路径下的所有模块 主控路径的选择是任意的 广度优先方式的集成 首先沿着水平方向 把每一层中所有直接隶属于上一层的模块集成起来 直到底层 87 自顶向下增量式测试 续 集成测试的整个过程由3个步骤完成 1 主控模块作为测试驱动器 2 根据集成的方式 深度或广度 下层的桩模块一次一次地被替换为真正的模块 3 在每个模块被集成时 都必须进行单元测试 重复第2步 直到整个系统被测试完成 实例按照广度优先方式进行集成测试实例按照深度优先方式进行集成测试 88 自顶向下增量式测试 续 1 2 3 广度优先方式 89 自顶向下增量式测试 续 1 2 3 深度优先方式 4 90 自底向上增量式测试 自底向上增量式测试表示逐步集成和逐步测试的工作是按结构图自下而上进行的 即从程序模块结构的最底层模块开始集成和测试 由于是从最底层开始集成 对于一个给定层次的模块 它的子模块 包括子模块的所有下属模块 已经集成并测试完成 所以不再需要使用桩模块进行辅助测试 在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到 实例采用自底向上增量式测试方法进行集成测试 91 自底向上增量式测试 92 混合增量式测试 混合增量式测试是把自顶向下测试和自底向上测试这两种方式结合起来进行集成和测试 这样可以兼具两者的优点 而摒弃其缺点 常见的两种混合增量式测试方式 1 衍变的自顶向下的增量式测试 基本思想是强化对输入 输出模块和引入新算法模块的测试 并自底向上集成为功能相对完整且相对独立的子系统 然后由主模块开始自顶向下进行增量式测试 2 自底向上 自顶向下的增量式测试 首先对含读操作的子系统自底向上直至根节点模块进行集成和测试 然后对含写操作的子系统做自顶向下的集成与测试 93 集成测试方法 非增量测试增量测试自顶向下测试广度优先深度优先自底向上测试混合测试 94 2 5 3不同集成测试方法的比较 1 非增量式测试与增量式测试的比较非增量式测试的方法是先分散测试 然后集中起来再一次完成集成测试 假如在模块的接口处存在错误 只会在最后的集成测试时一下子暴露出来 增量式测试是逐步集成和逐步测试的方法 把可能出现的差错分散暴露出来 便于找出问题和修改 而且一些模块在逐步集成的测试中 得到了较多次的考验 因此 可能会取得较好的测试效果 结论 增量式测试要比非增量式测试具有一定的优越性 95 不同集成测试方法的比较 续 2 自顶向下与自底向上增量式测试的比较自顶向下增量式测试 优点在于它可以自然的做到逐步求精 一开始就能让测试者看到系统的框架 缺点是需要提供桩模块 并且在输入 输出模块接入系统以前 在桩模块中表示测试数据有一定困难 自底向上增量式测试 优点在于 由于驱动模块模拟了所有调用参数 即使数据流并未构成有向的非环状图 生成测试数据也无困难 缺点在于 直到最后一个模块被加进去之后才能看到整个程序 系统 的框架 96 集成测试与系统测试的区别 1 测试对象集成测试的测试对象是由通过了单元测试的各个模块所集成起来的组件 而系统测试的测试对象 除了软件之外 还有计算机硬件及相关的外围设备 数据采集和传输机构 计算机系统操作人员等的整个系统 2 测试时间集成测试是介于单元测试和系统测试之间的测试 在测试时间上 先于系统测试 97 集成测试与系统测试的区别 3 测试方法集成测试通常会采用灰盒测试 而系统测试通常使用黑盒测试 4 测试内容集成测试的主要内容就是各个单元模块之间的接口 以及各个模块集成后所实现的功能 而系统测试的主要内容就是整个系统的功能和性能 98 集成测试与系统测试的区别 5 测试目的集成测试的主要目的就是发现单元之间接口的错误 以及发现集成后的软件同软件概要设计说明不一致的地方 而系统测试的主要目的就是 通过与系统需求定义相比较之后发现软件与系统定义不符合或矛盾的地方 6 测试角度集成测试工作的开展更多的是站在测试工作人员的角度上 系统测试工作的开展更多的是站在用户的角度来进行 99 2 5 4回归测试 什么是回归测试 在集成测试策略的环境中 回归测试是对某些已经进行过的测试的某些子集再重新进行一遍 以保证上述改变不会传播无法预料的副作用或引发新的问题 在更广的环境里 回归测试就是用来保证 由于测试或其他原因的 改动不会带来不可预料的行为或另外的错误 回归测试可以通过重新执行所有的测试用例的一个子集人工地进行 也可以使用自动化的捕获回放工具来进行 回归测试集包括三种不同类型的测试用例 1 能够测试软件的所有功能的代表性测试用例 2 专门针对可能会被修改而影响软件功能的附加测试 3 针对修改过的软件成分的测试 100 2 6确认测试 1 确认测试的准则确认测试也称为合格性测试 是检验所开发的软件是否能按用户提出的要求进行 软件确认要通过一系列证明软件功能和要求一致的黑盒测试来完成 经过确认测试 应该为已开发的软件给出结论性评价 1 经过检验的软件的功能 性能及其他要求均已满足需求规格说明书的规定 则可被认为是合格的软件 2 经过检验发现与需求说明书有相当的偏离 得到一个各项缺陷清单 101 确认测试 续 2 配置审查的内容确认测试过程的重要环节就是配置审查工作 其目的在于确保已开发软件的所有文件资料均已编写齐全 并得到分类编目 足以支持运行以后的软件维护工作 配置审查的文件资料包括用户所需的以下资料 1 用户手册 2 操作手册 3 设计资料 如 设计说明书 源程序以及测试资料 测试说明书 测试报告 等 102 2 7系统测试 为什么要进行系统测试 由于软件只是计算机系统中的一个组成部分 软件开发完成之后 最终还要和系统中的硬件系统 某些支持软件 数据信息等其他部分配套运行 因此 在投入运行前要完成系统测试 以保证各组成部分不仅能单独的得到检验 而且在系统各部分协调工作的环境下也能正常工作 尽管每一个检验有特定的目标 然而所有的检测工作都要验证系统中每个部分均已得到正确的集成 并能完成指定的功能 严格的说 系统测试超出了软件工程范围 通常这项工作并不由系统开发人员或系统开发组织来承担 而是由软件用户或软件开发机构委托独立测试机构来完成 103 恢复测试 恢复测试是通过各种手段 强制性地使软件出错 使其不能正常工作 进而检验系统的恢复能力 恢复测试包含的内容 如果系统恢复是自动的 由系统自身完成 则应该检验 重新初始化 检验点设置机构 数据恢复以及重新启动是否正确 如果这一恢复需要人为干预 则应考虑平均修复时间是否在限定的 可以接受的范围之内 104 安全测试 安全测试的目的在于验证安装在系统内的保护机制能否在实际中保护系统且不受非法入侵 不受各种非法干扰 在安全测试中 测试者扮演着试图攻击系统的个人角色 尝试去通过外部的手段来获取系统的密码 使用可以瓦解任何防守的客户软件来攻击系统 把系统 瘫痪 使得其他用户无法访问 有目的地引发系统错误 期望在恢复过程中侵入系统 通过浏览非保密的数据 从中找到进入系统的钥匙系统的安全测试要设置一些测试用例试图突破系统的安全保密措施 检验系统是否有安全保密的漏洞 105 强度测试 从本质上来说 强度测试 也称压力测试 StressTesting 的目的是要检测非正常的情形 测试是想要破坏程序 强度测试需要在反常规数据量 频率或资源的方式下运行系统 以检验系统能力的最高实际限度 举例 如果正常的中断频率为每秒5次 强度测试设计为每秒50次中断 把输入数据的量提高一个数量级来测试输入功能会如何响应 若某系统正常运行可支持200个终端并行工作 强度测试则检验1000个终端并行工作的情况 运行大量的消耗内存或其他系统资源的测试实例 106 性能测试 性能测试用来测试软件在系统集成中的运行性能 特别是针对实时系统和嵌入式系统 仅提供符合功能需求但不符合性能需求的软件是不能被接受的 性能测试可以在测试过程的任意阶段进行 但只有当整个系统的所有成分都集成在一起后 才能检查一个系统的真正性能 性能测试常常和强度 压力 测试结合起来进行 而且常常需要硬件和软件测试设备 这就是说 常常有必要在一种苛刻的环境中衡量资源的使用 比如 处理器周期 107 正确性测试 正确性测试检查软件的功能是否符合规格说明 正确性测试的方法 枚举法 即构造一些合理输入 检查是否得到期望的输出 测试时应尽量设法减少枚举的次数 关键在于寻找等价区间 因为在等价区间中 只需用任意值测试一次即可 边界值测试 即采用定义域或者等价区间的边界值进行测试 因为程序设计容易疏忽边界情况 程序也容易在边界值处出错 108 可靠性测试 可靠性测试是从验证的角度出发 检验系统的可靠性是否达到预期的目标 同时给出当前系统可能的可靠性增长情况 对可靠性性测试来说 最关键的测试数据包括失效间隔时间 失效修复时间 失效数量 失效级别等 根据获得的测试数据 应用可靠性模型 可以得到系统的失效率及可靠性增长趋势 可靠性指标有时很难测试 通常采用平均无故障时间或系统投入运行后出现的故障不能大于多少数量这些指标来对可靠性进行评估 109 兼容性测试 软件兼容性测试是检测各软件之间能否正确地交互和共享信息 其目标是保证软件按照用户期望的方式进行交互 使用其它软件检查软件操作的过程 兼容性的测试通常需要解决以下问题 1 新开发的软件需要与哪种操作系统 Web浏览器和应用软件保持兼容 如果要测试的软件是一个平台 那么要求应用程序能在其上运行 2 应该遵守哪种定义软件之间交互的标准或者规范 3 软件使用何种数据与其它平台 与新的软件进行交互和共享信息 110 兼容性测试 续 软件兼容的实例 从Web页面剪切文字 然后在文字处理程序中打开的文档中粘贴 从电子表格程序保存账目数据 然后在另一个完全不同的电子表格程序中读入这些数据 使图形处理软件在同一操作系统下的不同版本正常工作 使文字处理程序从联系人管理程序中读取姓名和地址 打印个性化的邀请函和信封 升级到新的数据库程序 读入现存所有数据库 并能够像老版本一样对其中的数据进行处理 111 兼容性测试 续 兼容性通常有4种 向前兼容与向后兼容 不同版本间的兼容 标准和规范 数据共享兼容 1 向前兼容和向后兼容向前兼容是指可以使用软件的未来版本 向后兼容是指可以使用软件的以前版本 并非所有的软件都要求向前兼容和向后兼容 这是软件设计者需要决定的产品特性 使用文本文件可以对向前兼容和向后兼容作一个简单的演示 在Windows98上用Notepad创建的文本文件 它可以向后兼容MS DOS1 0后的所有版本 它还可以向前兼容Windows2000甚至以后的版本 112 兼容性测试 续 113 兼容性测试 续 2 不同版本间的兼容不同版本间的兼容是指要实现测试平台和应用软件多个版本之间能够正常工作 举例 现在要测试一个流行的操作系统的新版本 当前操作系统上可能有数几十上百万现有程序 则新操作系统的目标是与它们百分之百兼容 因为不可能在一个操作系统上测试所有的软件程序 因此需要决定哪些是最重要的 必须进行的 对于测试新应用软件也一样 需要决定在哪个平台版本上测试 以及和什么应用程序一起测试 114 兼容性测试 续 3 标准和规范适用于软件平台的标准和规范有两个级别 高级标准和低级标准 高级标准是产品应当普遍遵守的 例如软件能在何种操作系统上运行 是互联网上的程序吗 它运行于何种浏览器 每一项问题都关系到平台 假若应用程序声明与某个平台兼容 就必须最受关于该平台的标准和规范 低级标准是对产品开发细节的描述 从某种意义上说 低级标准比高级标准更加重要 115 兼容性测试 续 4 数据共享兼容数据共享兼容是指要在应用程序之间共享数据 它要求支持并遵守公开的标准 允许用户与其他软件无障碍的传输数据 实例 在Windows环境下 程序间通过剪切 复制和粘贴实现数据共享 在此状况下 传输通过剪贴板的程序来实现 若对某个程序进行兼容性测试就要确认其数据能够利用剪切板与其他程序进行相互复制 通过读写移动外存实现数据共享 如软磁盘 U盘 移动硬盘等 但文件的数据格式必须符合标准 才能在多台计算机上保持兼容 116 Web网站测试

温馨提示

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

评论

0/150

提交评论