第5讲-单元测试和JUnit
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
静态测试工具和动态测试工具
静态测试工具不需要运行代码,而是直接对代码进行语
法扫描和所定义的规则进行分析,找出不符合编码规范的地 方,给出错误报告和警告信息。 动态测试工具则需要通过运行程序来检测程序,需要写 测试脚本或测试代码来完成分支覆盖、条件覆盖或基本路径 覆盖的测试。
27
单元测试工具列表
17
代码审查
代码走查 代码审查的范围和方法 代码规范性的审查 代码缺陷检查表
18
代码走查
含义 代码走查是由一组程序和错误检查技术组成,并以代 码审查组方式进行 人员 组长(有威信的资深程序员担任):负责分配资料、 安排计划、主持会议、记录并保存被发现的错误 资深程序员 测试人员 程序开发员(可做会议主持)
42
Junit的各种断言
assertTrue( [String message],boolean condition)— —验证给定的二元条件是否为真,如果为假的话,将会失 败。Message参数是可选的。 assertFalse( [String message],boolean condition)— —验证给定的二元条件是否为假,如果不为假的话,将会 失败。Message参数是可选的 fail( [String message] )——使测试立即失败,其中 message参数使可选的。这种断言通常被用于标记某个不应 该到达的分支(例如,在一个预期发生的异常之后)
6
单元测试的主要任务
单元测试针对每个程序的模块,主要测试5个方面的问题: ——模块接口、局部数据结构、边界条件、独立的路径 和错误处理。 模块接口 出错处理 局部数据结构
模块
边界条件 路径测试
7
任务1: 模块接口测试
检查模块接口是否正确
Checklist: 输入的实际参数与形式参数是否一致。
23
代码审查步骤
步骤
准备 程序阅读 审查会 跟踪及报告
24
课程内容
•什么是单元测试 •单元测试的方法
•代码审查
•单元测试工具
•Junit
25
单元测试工具
单元测试工具列表 开源工具 商业工具
26
单元测试工具种类
代码规则/风格检查工具 内存资源泄漏检查工具 代码覆盖率检查工具 代码性能检查工具
软件测试
单元测试和JUnit
单元测试和JUnit
•什么是单元测试
•单元测试的方法 •代码审查 •单元测试工具 •JUnit
2
课程内容
•什么是单元测试 •单元测试的方法
•代码审查
•单元测试工具
•JUnit
3
问题
从传统制造业得到什么启发?
4
什么是单元测试
单元测试就是对已实现的软件最小单元进行测试,以保
19
代码走查
原因
功能性测试很难实现
• 有太多的条件 • 有太多的测试用例
20
代码审查的范围和方法
代码审查的目的就是为了产生合格的代码,检查 源程序编码是否符合详细设计的编码规定,确保 编码与设计的一致性和可追踪性
审查的内容
业务逻辑的审查 算法的效率 代码风格 编程规则
21
junit.jar —— Junit框架结构、扩展和测试运行 器的二进制发布 src.jar——源代码 junit——目录,有自带的Junit编写的测试示例程 序 javadoc——完整的API文档 doc——一些文档和文章
38
JUnit设置
39
Junit使用步骤
创建,从junit.framework.TestCase派生unit test 需要的test case 书写测试方法,提供类似于如下函数签名的测试 方法: public void testXXXXX(); 编译,书写完test case后,编译所写的test case 类 运行,启动junit test runner,来运行这个test case。
•代码审查
•单元测试工具
•集成测试
13
单元测试的方法
单元测试主要采用白盒测试方法,辅以黑盒测试 方法。白盒测试方法应用于代码评审、单元程序 检验之中,而黑盒测试方法则应用于模块、组件 等大单元的功能测试之中
14
驱动程序和桩程序
驱动程序(driver),对底层或子层模块进行(单元或
集成)测试时所编制的调用被测模块的程序,用以模拟被 测模块的上级模块
桩程序(stub),也有人称为存根程序,对顶层或上层
模块进行测试时,所编制的替代下层模块的程序,用以模 拟被测模块工作过程中所调用的模块。
15
示例
Test
A
运行
B
C
D
驱动程序
调用
E F G 被测模块B 测试结果
桩程序
桩程序
16
课程内容
•什么是单元测试 •单元测试的方法
•代码审查
•单元测试工具
•集成测试
43
JUnit脚本示例
44
课程练习
45
JUnit结构
46
JUnit结构
JUnit有四个重要的类:TestSuite、TestCase、 TestResult、TestRunner。前三个类属于Framework包 ,后一个类在不同的环境下是不同的。如用的是文本测 试环境,则是junit.textui.TestRunner。各个类的职责如 下:
Checklist: 对于判定和条件覆盖,测试用例还需要 算符优先级。 能够发现如下错误: 不同类型的比较。 混合类型运算。 不正确的逻辑操作或优先级。 精度不够。 应当相等的地方由于精确度的错误而不等。 表达式符号。 不正确的判定或不正确的变量。 不正确或不存在的循环终止。 循环条件,死循环。 当遇到分支循环时不能退出。 其它 不适当地修改循环变量。
40
一个简单的Junit例子
41
Junit的各种断言
assertEquals([String message], expected, actual)— —这是使用得最多的断言形式。expected-是你的期望值 (通常要硬编码),actual-被测代码实际产生的值, message-可选的消息,如果提供的话,将会在发生错误 的时候报告这个消息。 assertNull([String message],java.lang.Object object)——验证一个给定的对象是否为Null(或者为非 Null),如果答案为否,则将会失败。message参数是可 选的。 assertSame( [String message], expected,actual)—— 验证expected参数和actual参数所引用的是否为同一对象 ,如果不是的话,将会失败。Message参数是可选的。
添加适当的测试类(一个或多个)。
生成主干的单元测试框架(Unit Test Framework)类和属性。 创建单个测试方法。
创建适合特定接口的逻辑
29
VSTS单元测试属性
30
VSTS断言
31
开源单元测试工具
C/C++ 语言单元测试工具:CppTest、CppUnit、… Java语言单元测试工具:TestNG、PMD、Checkstyle、
28
微软VSTS的单元测试
Visual Studio Team System(VSTS)是一套工具集,全面 整合了软件设计、开发、测试、部署和人员协作工具,其开 发版(Development Edition)提供了静态分析、代码剖析 、代码涵盖以及其它单元测试所需的功能特性。
创建单元测试项目。 设臵项目引用。
1.TestResult,负责收集TestCase所执行的结果,它将结果分 为两类,客户可预测的Failure和没有预测的Error。同时负责 将测试结果转发到TestListener(该接口由TestRunner继承) 处理。 2.TestRunner,客户对象调用的起点,负责对整个测试流程 的跟踪。能够显示返回的测试结果,且报告测试的进度。 3.TestSuite,负责包装和运行所有的TestCase。 4.TestCase,客户测试类所要继承的类,负责测试时对客户 类进行初始化,以及测试方法调用。 47
个数、属性、量纲
调用其他模块的实际参数与被调模块的形参是否一致。
个数、属性、量纲
全程变量的定义在各模块是否一致。 外部输入、输出
文件、缓冲区、错误处理
其它
8
任务2: 模块局部数据结构测试
检查局部数据结构完整性
Checklist: 不适合或不相容的类型说明。 变量无初值。 变量初始化或默认值有错。 不正确的变量名或从来未被使用过。 出现上溢或下溢和地址异常。 其它
9
任务3: 模块边界条件测试
检查临界数据处理的正确性
Checklist: 普通合法数据的处理。 普通非法数据的处理。 边界值内合法边界数据的处理。 边界值外非法边界数据的处理。 其它
10
任务4: 模块独立执行通路测试
检查每一条独立执行路径的测试。保证每条语句 被至少执行一次。
证构成软件系统的各个单元的质量
单元测试活动中,强调被测试对象的独立性 单元测试应从各个层次来对单元内部算法、外部 功能实现等进行检验,包括对程序代码的评审和 通过运行单元程序来验证其功能特性等内容。
5
单元测试的目标
单元实现了其特定的功能,如果需要,返回正 确的值 单元的运行能够覆盖预先设定的各种逻辑 在单元工作过程中,其内部数据能够保持完整 性,包括全局变量的处理、内部数据的形式、 内容及相互关系等不发生错误 可以接受正确数据,也能处理非法数据,在数 据边界条件上,单元也能够正确工作 该单元的算法合理,性能良好 该单元代码经过扫描,没有发现任何安全性问 题
33
课程内容
•什么是单元测试 •单元测试的方法
•代码审查
•单元测试工具
•JUnit
34
JUnit介绍
JUnit(http://www.junit.org)是开源测试框 架体系xUnit的一个实例,可以方便地组织和运 行Java程序的单元测试 ,是代码驱动的单元测 试框架体系中最为成功的一例。
35
Findbugs、Jalopy……
Mock Object类工具:
其它
MockObjects、Xdoclet、EasyMock
、MockCreator、MockEJB、ObjcUnit、jMock等
32
商业单元测试工具
C/C++语言的单元测试工具以商业工具为主,例 如Parasoft C++、PR QA•C/C++、CompuWare DevPartner for Visual C++ BoundsChecker Suite、Panorama C++等 内存资源泄漏检查工具,如CompuWare BounceChecker, IBM Rational PurifyPlus等 代码覆盖率检查工具,如CompuWare TrueCoverage, IBM Rational PureCoverage, TeleLogic Logiscope等。 代码性能检查工具,如Logiscope和 Macabe等
代码规范性的审查
代码规范性的审查将助于更早地发现缺陷,代 码质量的提高,而且可以帮助程序员遵守规则 、养成好的习惯,以达到预防缺陷的目的 代码风格和编程规则两者不可缺一,都应列入 代码评审的范围里 命名规则 、缩进与对齐 、注释和函数处理 等
ห้องสมุดไป่ตู้
22
代码缺陷检查表
把程序设计中可能发生的各种缺陷进行分类,以 每一类列举尽可能多的典型缺陷,形成代码缺陷 检查表。 代码评审常常会使用这类检查表,以表的内容为 检查依据、要点,防止人为的疏漏,并提高评审 效率。在每次评审之后,对新发现的缺陷也要进 行分析、归类,不断充实缺陷检查表
11
任务5:模块的各条错误处理通路测试
预见、预设的各种出错处理是否正确有效。
Checklist: 对运行发生的错误描述难以理解。 记录的错误与实际不相符。 程序定义的出错处理前系统已介入。 异常处理不当。 未提供足够的定位出错的信息。 其它
12
课程内容
•什么是单元测试 •单元测试的方法
测试驱动开发(TDD)
TDD是一种编程风格,通常和Junit有一些关系
先编写测试代码,再编写产品代码本身,在编写 测试代码的时候执行重构
这样代码测试覆盖率高,易修改,易扩展
36
JUnit安装
37
Junit安装
Junit包也可单独下载:http://www.junit.org 包中包含以下文件