白盒测试与OO测试第八章、单元测试2/26课程回顾基本路径测试绘制控制流图计算圈复杂度导出基本路径集设计测试用例执行测试3/26本章学习目标单元测试认识单元测试的一些概念了解单元测试的策略掌握单元测试的过程通过一个例子掌握如何进行单元测试4/26单元测试-对象测试对象:结构化编程-函数、过程面向对象编程-类5/26单元测试-目的和方法测试目的:发现设计或实现中逻辑错误,及早暴露代码中的缺陷,便于问题的定位和解决。测试方法:一般以白盒测试为主、结合黑盒测试的方法。允许多个测试单元的测试并行展开。6/26单元测试-测试内容功能测试语句和分支覆盖率模块设计是否合理输入和输出接口测试内部数据流测试其它要特定要求的测试7/26策略步骤理解设计概览源代码走读代码设计测试用例搭建测试环境执行测试用例重复进行设计测试用例和加载测试分析判断,给出结论8/26例子要求把科学记数法表示的数转换为实数。例如:1.45E+3,模块要将其转换为1450.000000。设计要求:对于不合法的输入报错,例如:含有除了e和E之外的其它字母;能够进行容错处理,例如:输入中有空格、tab键、回车键等;其它一些按照科学记数法的要求。9/26测试过程-第一步理解需求和设计:被测试单元业务背景所在层次功能要求其它要求重要程度10/26例子分析本模块被其它模块调用,完成数据转换。但是该模块需要调用一个公共模块-decision,该模块的作用主要是对输入的参数进行合法性检测但是同时要求程序也有容错性设计,例如用户在输入时,前面加了空格、tab键或回车键则认为输入是正确的,但是在字符串中如果有这些字符则认为是不正确的。如果是一个非科学记数法表示的实数输入后程序怎么样呢?11/26测试过程-第二步粗略地看一看源代码:编码是否符合规范,可以大致看出开发人员编写单元的情况;以便针对这些薄弱环节设计测试用例。通过经验,可以看出代码中哪里可能有潜在的缺陷;大致了解模块的规模、复杂程度12/26测试过程-第三步认真地走读代码一遍或两遍,比较复杂的模块甚至要还要仔细推敲。13/26测试过程-第四步设计测试用例。14/26测试用例(一)15/26测试用例(二)16/26测试用例(三)17/26测试过程-第五步搭建测试环境驱动模块桩模块18/26测试环境19/26测试过程-第六步执行测试用例20/26用例执行结果21/26测试过程-第七步根据上面测试用例执行的情况,对于没有覆盖的功能或分支、语句等重新设计测试用例,并进行加载测试,这个过程可能是一个反复的过程。直到最后满足单元测试的要求。22/26测试过程-第八步分析判断,并给出结论通过第三组测试用例可以看出,程序处理e或E后省略+的情况。第四组的第一个测试数据、第七组测试用例、第七组测试用例都可以验证这一点。通过第九组测试用例可看出,程序不能处理符号与数据分开的情况。23/26单元测试是对软件基本组成单元进行测试。基本单元可以是函数、类、过程,也可以是任何具有明确功能、规格定义、明确的接口定义规模一般比较小单元测试的重点在于发现程序设计或程序实现中的逻辑错误,使问题及早暴露,便于问题的定位解决。基本属于白盒测试范畴,允许多个测试单元并行展开24/26总结-测试用例设计思路运行第一个测试用例设计正向测试用例设计反向测试用例设计其它测试用例加载测试用例运行程序、记录测试结果补充测试用例继续测试,直到满足单元测试的要求25/26单元测试整个过程计划设计实施评审26/26本章小结单元测试的方法单元测试的过程单元测试的实施步骤