当前位置:文档之家› 测试驱动开发

测试驱动开发


测试用例(Test Case)是为某个特殊目标而编制的一组测 试输入、执行条件以及预期结果,用以测试某个程序路径 或核实是否满足某个特定需求。 单元测试用例依赖于详细设计说明书或代码,集成测试用 例依赖于概要设计说明书,系统测试用例依赖于需求规格 说明书

总 纲

传统软件开发流程

单元测试及JUnit 极限测试

JUnit4参数测试
创建参数测试步骤



创建一个无参数的通用测试方法 创建一个静态的填充方法,返回Collection类型,并以 @Parameter元注释修饰 为参数类型创建类成员,该类成员是通用测试方法必需的 创建一个构造,获取参数类型并相应的将参数与类成员建 立连接 指明该测试用例通过原注释@RunWith结合 Parameterized类运行


开发周期中的测试
基于开发周期中不同阶段对不同对象所进行的测试

回归测试 - Regression Testing 用于验证改变了的系统或其组件仍然保持应有的特性 验收测试 - Acceptance testing 测试整个系统,以保证其达到可以交付使用的状态

开发周期中的测试
测试用例


JUnit4新框架
JUnit4使用Java 5 元注释完全消除旧框架两约束

测试类不再必须继承特定的父类

用于功能测试的方法不再必须以“test”起头,仅需以新定 义的元注释”@Test”进行修饰
JUnit4元注释
Test 声明(declaration)

在JUnit4中声明一个测试仅需要以@Test元注释对一个测 试方法进行修饰 无需继承任何特殊的类

需求分析
需求分析的过程

问题识别
从系统角度理解软件,确定对所开发系统的综合要求,并提出这 些需求的实现条件,及需求应该达到的标准

分析与综合
逐步细化所有软件功能,找出系统各元素间的联系, 分析是否 满足需求,最终综合成系统的解决方案

编写规格说明书
编制文档,描述需求的文档称为软件需求规格说明书
需求分析包括需求的获取、分析、规格说明、验证、管理 的一系列需求工程 需求分析阶段结束后,产生软件规格说明书(SRS, Software Requiements Specification)


需求分析
需求分析的作用

需求分析就是分析软件用户的需求是什么

任务就是解决”做什么”的问题,就是要全面地理解用户 的各项要求,并准确地表达所接受的用户需求 需求分析之所以重要,就因为他具有决策性,方向性,策 略性的作用,在一个大型软件系统的开发中,他的作用要 远远大于程序设计


JUnit4参数测试
参数测试(Parametric testing)

一个应用的商业逻辑需要大量的测试用例以确保其健壮, 对于先前版本的JUnit,变化的参数组意味着需要为每一 独立的参数组编写一个测试用例 JUnit4引入新特性,可用以创建通用测试用例,该用例可 以多组参数值填充,即创建一个单独测试用例运行多次, 每一次对应一参数组

JUnit4元注释
测试预定设置(Test fixtures)

先前的JUnit版本使用机械的预定设置模型,必须将每个 测试方法包裹于setUp()与tearDown()方法中 JUnit4使用元注释用于运行预定设置针对每一个测试或仅 一次性针对整个类 四个预定设置元注释:两个类级(@BeforeClass, @AfterClass)和两个方法级(@Before, @After)

JUnit4元注释
超时测试(Testing with timeouts)

JUnit4中,测试用例可以超时值作为参数

以@Test后跟timeout值修饰测试方法即可实现自动超时 测试JUni Nhomakorabea4元注释
忽略的测试(Ignoring tests)

先前的JUnit框架忽略某些测试方法,需修改方法名使其 不符合测试方法命名规则,如在方法名前缀”test”前 加”_” JUnit4引入元注释@Ignore,用于强制框架忽略某些特别 的测试方法
测试驱动开发技术
朱 宁
总 纲

传统软件开发流程

单元测试及JUnit 极限测试
测试驱动开发


传统软件开发流程
软件开发生命周期(Software Development Life Cycle)
需求分析
什么是需求分析(Requirements Analysis) ?

需求分析是指理解用户需求,就软件功能与客户达成一 致,估计软件风险(Risk)和评估项目代价(Cost),最终形 成开发计划的一个复杂过程


开发周期中的测试
基于开发周期中不同阶段对不同对象所进行的测试

单元测试 - Unit Testing 由编程的开发人员自行计划与完成的,针对单个或相 关联的一组程序单元的测试
集成测试 - Integration Testing 计划于设计阶段,由开发人员与测试人员合作完成的, 针对结合起来的不同单元以及它们的接口的测试 系统测试 – System/Operational Testing 测试整个系统,以证实它满足要求所规定的功能、 质量和性能等方面的特性


单元测试
单元测试目的

将单元模块的实际功能与定义该模块的功能或接口规格 (specification)进行对比 与所有的测试过程目标一致,单元测试的目标不是为了证 明单元模块符合它的规格,而是为了显示出模块与规格之 间的冲突

单元测试用例设计
白盒测试 – 内部结构分析





概要设计
概要设计目的

将软件系统需求转换为未来系统的设计

逐步开发强壮的系统构架
使设计适合于实施环境,为提高性能而进行设计 将系统结构分解为模块和库


概要设计
概要设计的任务

制定规范
代码体系、接口规约、命名规则

总体结构设计
功能模块:每个需求点都有相应的模块来实现 模块层次结构:某个角度的软件框架视图 模块间的调用关系:模块间的接口的总体描述 模块间的接口:传递的信息及其结构 处理方式设计:满足功能和性能的算法 用户界面设计
测试驱动开发


单元测试
单元测试是用以测试规模较大软件程序中独立的子 程序,子模块或程序方法

由于测试重点始于较小的程序单元,所以单元测试是管理 测试大量组合元素的方法 当发现某错误,容易定位到具体模块单元,所以单元测试 减轻调试(debugging)的任务负担 单元测试提供了同时测试多个模块的可能

数据库设计 性能设计
概要设计
概要设计的内容


概述 术语表 系统界面原型 约束和假定 对象模型及描述 – UML类图 动态模型 – UML时序图 非功能性需求
概要设计的最终产物是概要设计说明书
编码
软件编码

将软件设计转换成计算机可接受的程序,即写成以某一程 序设计语言表示的"源程序清单“ 充分了解软件开发语言、工具的特性和编程风格,有助于 开发工具的选择以及保证软件产品的开发质量 面向对象的开发语言和开发环境合为一体,有效提高开发 的效率,如Java集成开发环境Eclipse

JUnit4新功能
由于Java 5 元注释,JUnit4更加轻量级和灵活




参数测试(Parametric tests) 异常测试(Exception tests) 超时测试(Timeout tests) 灵活的预定设置(Flexible fixtures) 快捷的测试忽略(ignore tests) 逻辑测试分组
JUnit4参数测试
指明Parameterized类
@RunWith(Parameterized.class) public class ParametricRegularExpressionTest { //... }
谢谢
JUnit4参数测试
创建类成员
private String phrase; private boolean match;
JUnit4参数测试
创建一个构造
public ParametricRegularExpressionTest(String phrase, boolean match) { this.phrase = phrase; this.match = match; }


使用Java 5 静态引入特性来引入断言(Assert)类的断言方 法
JUnit4元注释
异常测试(Testing for exceptions)

先前的JUnit版本对异常的测试,需编写try/catch,当异常 没有被捕捉测试失败 在JUnit4中测试特定的异常,@Test元注释支持expected 参数,该参数表示测试运行中预计抛出的异常

JUnit4元注释
测试预定设置(Test fixtures)

测试预定设置可以在一个测试之前或之后运行

预定设置中编写可复用的逻辑,比如,逻辑可能是初始化 类,用于测试多个测试用例或者是运行依赖数据的测试之 前连接数据库
当运行的许多用例使用相同的逻辑且其中部分或全部失败, 预定设置为失败原因的定位及排除提供方便

评审
对功能的正确性,完整性和清晰性,以及其它需求给予评价,评 审通过才可进行下一阶段的工作
软件设计
相关主题