1 / 43

第 7 讲 软件测试

软件工程导论 之. 第 7 讲 软件测试. 毛新军 教授 xjmao@nudt.edu.cn 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 序言. 初步的软件系统存在错误,如何: 发现错误 ? 纠正错误? 软件测试是软件质量保证活动中关键步骤 对 SRS 、设计规格说明书以及编码的最后复审 其工作量往往占软件开发总工作量的 40% 以上 软件测试是确保软件质量的一种有效 ( 可操作 ) 手段 软件测试有其特殊性和规律 – 因为软件是逻辑产品. 本讲内容. 基本概念 软件测试技术 软件测试策略

ronat
Download Presentation

第 7 讲 软件测试

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 软件工程导论 之 第7讲 软件测试 毛新军 教授 xjmao@nudt.edu.cn 计算机科学与技术系602教研室 0731-(45)73649 用工程化的方法来开发软件

  2. 软件测试 序言 • 初步的软件系统存在错误,如何: • 发现错误? • 纠正错误? • 软件测试是软件质量保证活动中关键步骤 • 对SRS、设计规格说明书以及编码的最后复审 • 其工作量往往占软件开发总工作量的40%以上 • 软件测试是确保软件质量的一种有效 (可操作)手段 • 软件测试有其特殊性和规律 –因为软件是逻辑产品

  3. 软件测试 本讲内容 • 基本概念 • 软件测试技术 • 软件测试策略 • 基于CASE的软件测试和排错

  4. 软件测试 软件测试的基本概念 • 软件错误 • 软件系统的功能和性能与预期的功能和性能不一致 • 软件测试是发现软件错误的过程

  5. 软件测试 软件测试的目标 • 目标 • 发现软件中的错误,提高软件质量 • 注意 软件测试中没有发现错误并不意味着软件就没有错误 => 测试不充分, 潜在错误不能发现

  6. 软件测试 软件测试的信息流程 • 软件测试思想 • 数据处理  设计测试用例  判断结果

  7. 软件测试 软件测试方法 • 二种测试方法 • 白盒测试 • 黑盒测试

  8. 软件测试 白盒测试 • 思想 • 已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作 • 依据 • 程序的内部逻辑结构,针对程序的逻辑路径设计测试用例 • 特点 • 必须了解程序的内部工作流程

  9. 思想 根据已知程序的功能和性能(而不是内部细节),通过测试检验每个功能和性能是否正常 依据 程序的功能和性能描述 特点 知道程序的功能和性能,不必了解程序的内部结构和处理细节 软件测试 黑盒测试

  10. 软件测试 软件测试步骤 • 软件开发 • 从高抽象层次向低层次抽象过渡 • 软件测试 • 从低层次抽象向高层次抽象过渡 • 软件测试的层次 • 单元测试:测试程序中每个模块是否有错误(白盒) • 集成测试:测试软件总体结构是否有错误(黑盒) • 确认测试:测试软件是否满足用户需求(黑盒)

  11. 软件测试 软件开发活动和软件测试活动间的关系 确认测试 需求分析 概要设计 集成测试 详细设计 单元测试 软件测试过程 编码 软件开发过程

  12. 软件测试 本讲内容 • 基本概念 • 软件测试技术 • 软件测试策略 • 基于CASE的软件测试和排错

  13. 软件测试 软件测试技术 • 白盒测试 • 白盒测试是根据程序的控制结构来设计测试用例

  14. 要设计多少测试用例? 覆盖准则 语句覆盖 分支覆盖 路径覆盖: 程序通道 基本路径覆盖 软件测试 白盒测试

  15. 软件测试 基本路径测试的思想 • 基本路径 • 至少引入一个新语句或者新判断的程序通道 • 思想 • 路径 ==> 基本路径 ==> 基本路径测试 • 前提 • 软件模块的逻辑结构(流程图) • 如何设计测试用例确保基本路径覆盖 • ==> 哪些基本路径 ==> 流图 ==> 流程图

  16. 软件测试 流程图和流图示意图

  17. void Func(int nPosX, int nPosY) { while (nPosX > 0) { int nSum = nPosX + nPosY; if (nSum > 1) { nPosX--; nPosY--; } else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; } } // end of while } 软件测试 步骤1:根据程序逻辑画出流程图

  18. 软件测试 步骤2:将流程图转换为流图(1/2) • 流图刻画了程序的控制结构但不涉及程序的过程性细节 • 节点(过程块,结合点,判定点) • 有向边 • 判定点不含复合条件,否则应按照下列方式增加判定点

  19. 软件测试 步骤2:将流程图转换为流图(2/2)

  20. 基本路径 流图Cyclomatic复杂度正好是基本路径的数目 V(G) = E – N + 2 V(G) = 11 - 9 + 2 = 4 软件测试 步骤3:确定基本路径的集合(1/2)

  21. 1 - 11 1 - 2, 3 - 6 - 7 - 9 - 10 - 1 - 11 1 - 2, 3 - 4, 5 - 10 - 1 - 11 1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11 软件测试 步骤3:确定测试路径的集合(2/2)

  22. 软件测试 void Func(int nPosX, int nPosY) { while (nPosX > 0) { int nSum = nPosX + nPosY; if (nSum > 1) { nPosX--; nPosY--; } else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; } } // end of while }

  23. 软件测试 步骤4:针对测试路径设计测试用例 • 1-11 • nPosX 取-1, nPosY取任意值 • 1 - 2, 3 - 4, 5 - 10 - 1 - 11 • nPosX 取1, nPosY取1 • 1- 2, 3 - 6 - 7 - 9 - 10 - 1 – 11 • nPosX 取1, nPosY取-1 • 1- 2, 3 - 6 - 8 - 9 - 10 - 1 - 11 • nPosX 取1, nPosY取-3

  24. 软件测试 void Func(int nPosX, int nPosY) { while (nPosX > 0) { int nSum = nPosX + nPosY; if (nSum > 1) { nPosX--; nPosY--; } else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; } } // end of while }

  25. 软件测试 黑盒测试 • 黑盒测试技术 • 测试软件是否满足功能和性能要求,它不涉及模块的内部过程性细节 • 主要的黑盒测试技术 • 等价分类法 • 边界分类法

  26. 软件测试 等价分类法(1/2) • 思想 • 把程序的输入数据集合按输入条件划分为若干个等价类,每一个等价类对于输入条件而言为一组有效或者无效的输入,然后为每一个等价类设计一个测试用例 • 优点 • 减少测试次数,不丢失发现错误的机会

  27. 软件测试 等价分类法(2/2) • 输入条件为一范围 • 划分出三个等价类:(1) 有效等价类(在范围内),(2) 大于输入最大值,(3)小于输入最少值 • 输入条件为一值 • 划分为三个等价类: (1) 有效,(2) 大于,(3) 小于 • 输入条件为集合 • 划分二个等价类: (1) 有效(在集合内),(2) 无效(在集合外) • 输入条件为一个布尔量 • 划分二个等价类,(1) 有效(此布尔量),(2)无效(布尔量的非)

  28. z = func(x, y): 当 0 < x < 1024 并且 y = 0, z = -1 否则,z = x * lg(y) 关于x的等价类: (0, 1024), (-#, 0], [1024, +#) 关于y的等价类: 0, (-#, 0), (0, +#) 测试用例: 9个 <1, 0>, <1, -2>, <1, 2>; <-1, 0>, <-1, -2>, <-1, 2>; <1024, 0>, <1024, -2>, <1024, 2> 软件测试 等价分类法例子

  29. 软件测试 边界值分析法 • 输入条件是一范围(a,b) • a,b以及紧挨a,b左右的值应作为测试用例 • 输入条件为一组数 • 选择这组数的最大者和最小者,次大和次小者作为测试用例 • 如果程序的内部数据结构是有界的 • 应设计测试用例使它能够检查该数据结构的边界

  30. 软件测试 本讲内容 • 基本概念 • 软件测试技术 • 软件测试策略 • 基于CASE的软件测试和排错

  31. 软件测试 单元测试 • 对软件的最小单元-模块进行测试.多采用白盒测试 (1) 模块接口测试 (2) 模块局部数据结构测试 (3) 模块独立执行路径测试 (4) 模块中各条错误处理通道测试 (5) 模块边界条件测试

  32. 软件测试 单元测试(续)

  33. 软件测试 集成测试 • 模块相互调用时引入接口问题 => 集成测试 • 集成测试方法 • (1) 自顶向下集成 从目标软件系统的主控模块开始,按照软件的控制层次结构,以深度优先或者广度优先的策略把各个模块集成在一起进行测试 • (2) 自底向上集成 从软件结构最底层模块开始自底向上进行组装和测试

  34. 软件测试 集成测试例子

  35. 软件测试 确认测试 • 任务 • 判断目标软件系统是否满足用户的功能和性能需求; • 文档资料是否完整、准确 • 依据和标准 • 软件需求规格说明书 • 确认测试的类型 • α测试 • β测试

  36. 软件测试 排错(1/2) • 测试是为了发现错误,当发现错误后就要将它改正,改正错误主要依靠排错技术 • 排错过程

  37. 软件测试 排错(2/2) • 排错方法 • 原始法 • 回溯法 • 排除法 • 基于归纳和演绎的方法:收集与出错有关的所有数据,假想一组出错的原因,用这组数据证明或者反驳之

  38. 软件测试 本讲内容 • 基本概念 • 软件测试技术 • 软件测试策略 • 基于CASE的软件测试和排错

  39. 软件测试 基于CASE的软件测试和排错 • 静态分析器 • 通过静态的扫描源程序,找出可能导致程序出错的异常情况 • 代码审查器 • 检查源程序代码是否满足最基本的代码标准 • 断言处理器 • 检查程序员关于程序行为的断言在程序执行过程中是否成立 • 测试数据产生器

  40. 软件测试 软件测试和软件调试 • 目的 • 发现错误;定位和纠正错误 • 独立性 • 可有独立的测试小组进行;必须由开发人员完成

  41. 软件测试 本讲小结 • 基本概念(软件测试的概念、目标, 方法和过程等) • 软件测试技术(白盒和黑盒软件测试方法) • 软件测试策略(步骤,方法等) • 基于CASE的软件测试和排错

  42. 软件测试 思考题 • 思考题 • 只要设计足够多的测试用例,软件测试是否完全可以发现软件中的所有错误?

  43. 软件测试 An Introduction to Software Engineering Q & A Practice, Practice, and Practice

More Related