1、毛新军毛新军 教授教授计算机科学与技术系计算机科学与技术系602教研室教研室 0731-(45)73649软件工程导论软件工程导论 之之Copyright Xinjun Mao软件测试软件测试2n初步的软件系统存在错误,如何: 发现错误? 纠正错误?n软件测试是软件质量保证活动中关键步骤 对SRS、设计规格说明书以及编码的最后复审 其工作量往往占软件开发总工作量的40%以上 软件测试是确保软件质量的一种有效 (可操作)手段n软件测试有其特殊性和规律 因为软件是逻辑产品Copyright Xinjun Mao软件测试软件测试31.基本概念2.软件测试技术3.软件测试策略4.基于CASE的软件测试
2、和排错Copyright Xinjun Mao软件测试软件测试4n软件错误 软件系统的功能和性能与预期的功能和性能不一致n软件测试是发现软件错误的过程Copyright Xinjun Mao软件测试软件测试5n目标 发现软件中的错误,提高软件质量 注意软件测试中没有发现错误并不意味着软件就没有错误 = 测试不充分, 潜在错误不能发现Copyright Xinjun Mao软件测试软件测试6n软件测试思想 数据处理 设计测试用例 判断结果Copyright Xinjun Mao软件测试软件测试7n 二种测试方法 白盒测试 黑盒测试Copyright Xinjun Mao软件测试软件测试8 设计设
3、计测试测试用例用例 n思想 已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作n依据 程序的内部逻辑结构,针对程序的逻辑路径设计测试用例n特点 必须了解程序的内部工作流程Copyright Xinjun Mao软件测试软件测试9 功能功能: 求二个数中较大者求二个数中较大者 测测试试用用例例 n思想 根据已知程序的功能和性能(而不是内部细节),通过测试检验每个功能和性能是否正常n依据 程序的功能和性能描述n特点 知道程序的功能和性能,不必了解程序的内部结构和处理细节Copyright Xinjun Mao软件测试软件测试10n软件开发 从高抽象层次向低层次抽象过渡n软件
4、测试 从低层次抽象向高层次抽象过渡n软件测试的层次 单元测试:测试程序中每个模块是否有错误(白盒) 集成测试:测试软件总体结构是否有错误(黑盒) 确认测试:测试软件是否满足用户需求(黑盒)Copyright Xinjun Mao软件测试软件测试11需求分析需求分析概要设计概要设计详细设计详细设计编码编码单元测试单元测试集成测试集成测试确认测试确认测试软件开发过程软件开发过程软件测试过程软件测试过程Copyright Xinjun Mao软件测试软件测试121.基本概念2.软件测试技术3.软件测试策略4.基于CASE的软件测试和排错Copyright Xinjun Mao软件测试软件测试13n白
5、盒测试 白盒测试是根据程序的控制结构来设计测试用例Copyright Xinjun Mao软件测试软件测试14 1 2 3 6 7 8 4 5 11 9 10 n要设计多少测试用例? 覆盖准则 语句覆盖 分支覆盖 路径覆盖: 程序通道 基本路径覆盖Copyright Xinjun Mao软件测试软件测试15n基本路径 至少引入一个新语句或者新判断的程序通道 n思想 路径 = 基本路径 = 基本路径测试n前提 软件模块的逻辑结构(流程图)n如何设计测试用例确保基本路径覆盖 = 哪些基本路径 = 流图 = 流程图Copyright Xinjun Mao软件测试软件测试16 2,3 6 7 8 9
6、10 4,5 11 程程序序流流图图 1 2 3 6 7 8 4 5 11 9 10 模模块块流流程程图图 Copyright Xinjun Mao软件测试软件测试17void Func(int nPosX, int nPosY) while (nPosX 0) int nSum = nPosX + nPosY;if (nSum 1) nPosX-; nPosY-;else if (nSum 0) int nSum = nPosX + nPosY;if (nSum 1) nPosX-; nPosY-;else if (nSum 0) int nSum = nPosX + nPosY;if (n
7、Sum 1) nPosX-; nPosY-;else if (nSum -1) nPosX -= 2; else nPosX -= 4; / end of while 2,3 6 7 8 9 10 4,5 11 程序流图程序流图 Copyright Xinjun Mao软件测试软件测试25n黑盒测试技术 测试软件是否满足功能和性能要求,它不涉及模块的内部过程性细节n主要的黑盒测试技术 等价分类法 边界分类法Copyright Xinjun Mao软件测试软件测试26n思想 把程序的输入数据集合按输入条件划分为若干个等价类,每一个等价类对于输入条件而言为一组有效或者无效的输入,然后为每一个等价类
8、设计一个测试用例n优点 减少测试次数,不丢失发现错误的机会Copyright Xinjun Mao软件测试软件测试27n输入条件为一范围 划分出三个等价类:(1) 有效等价类(在范围内),(2) 大于输入最大值,(3)小于输入最少值n输入条件为一值 划分为三个等价类: (1) 有效,(2) 大于,(3) 小于n输入条件为集合 划分二个等价类: (1) 有效(在集合内),(2) 无效(在集合外)n输入条件为一个布尔量 划分二个等价类,(1) 有效(此布尔量),(2)无效(布尔量的非)Copyright Xinjun Mao软件测试软件测试28nz = func(x, y): 当 0 x 1024
9、 并且 y = 0, z = -1 否则,z = x * lg(y)n关于x的等价类: (0, 1024), (-#, 0, 1024, +#) n关于y的等价类: 0, (-#, 0), (0, +#)n测试用例: 9个 , , ; , , ; , , Copyright Xinjun Mao软件测试软件测试29n输入条件是一范围(a,b) a,b以及紧挨a,b左右的值应作为测试用例n输入条件为一组数 选择这组数的最大者和最小者,次大和次小者作为测试用例n如果程序的内部数据结构是有界的 应设计测试用例使它能够检查该数据结构的边界Copyright Xinjun Mao软件测试软件测试301.
10、基本概念2.软件测试技术3.软件测试策略4.基于CASE的软件测试和排错Copyright Xinjun Mao软件测试软件测试31n对软件的最小单元模块进行测试多采用白盒测试(1) 模块接口测试(2) 模块局部数据结构测试(3) 模块独立执行路径测试(4) 模块中各条错误处理通道测试(5) 模块边界条件测试Copyright Xinjun Mao软件测试软件测试32Copyright Xinjun Mao软件测试软件测试33n模块相互调用时引入接口问题 = 集成测试n集成测试方法 (1) 自顶向下集成从目标软件系统的主控模块开始,按照软件的控制层次结构,以深度优先或者广度优先的策略把各个模块
11、集成在一起进行测试 (2) 自底向上集成从软件结构最底层模块开始自底向上进行组装和测试Copyright Xinjun Mao软件测试软件测试34 M1 M2 M3 M4 M5 M6 M8 M7 Copyright Xinjun Mao软件测试软件测试35n任务 判断目标软件系统是否满足用户的功能和性能需求; 文档资料是否完整、准确n依据和标准 软件需求规格说明书n确认测试的类型 测试 测试Copyright Xinjun Mao软件测试软件测试36 测测试试用用例例 排排错错 执执行行某某个个测测试试用用例例 结结果果 假假想想错错误误 追追加加测测试试 确确定定了了错错误误原原因因 修修正
12、正程程序序 回回归归测测试试 n测试是为了发现错误,当发现错误后就要将它改正,改正错误主要依靠排错技术n排错过程Copyright Xinjun Mao软件测试软件测试37n 排错方法 原始法 回溯法 排除法 基于归纳和演绎的方法:收集与出错有关的所有数据,假想一组出错的原因,用这组数据证明或者反驳之Copyright Xinjun Mao软件测试软件测试381.基本概念2.软件测试技术3.软件测试策略4.基于CASE的软件测试和排错Copyright Xinjun Mao软件测试软件测试39n静态分析器 通过静态的扫描源程序,找出可能导致程序出错的异常情况n代码审查器 检查源程序代码是否满足
13、最基本的代码标准n断言处理器 检查程序员关于程序行为的断言在程序执行过程中是否成立n测试数据产生器Copyright Xinjun Mao软件测试软件测试40n目的 发现错误;定位和纠正错误n独立性 可有独立的测试小组进行;必须由开发人员完成Copyright Xinjun Mao软件测试软件测试41 1.基本概念(软件测试的概念、目标, 方法和过程等)2.软件测试技术(白盒和黑盒软件测试方法)3.软件测试策略(步骤,方法等)4.基于CASE的软件测试和排错Copyright Xinjun Mao软件测试软件测试42n思考题 只要设计足够多的测试用例,软件测试是否完全可以发现软件中的所有错误?Copyright Xinjun Mao软件测试软件测试43Practice, Practice, and Practice