测试驱动开发

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


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


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

将软件设计转换成计算机可接受的程序,即写成以某一程 序设计语言表示的"源程序清单“ 充分了解软件开发语言、工具的特性和编程风格,有助于 开发工具的选择以及保证软件产品的开发质量 面向对象的开发语言和开发环境合为一体,有效提高开发 的效率,如Java集成开发环境Eclipse
JUnit4参数测试
指明Parameterized类
@RunWith(Parameterized.class) public class ParametricRegularExpressionTest { //... }
谢谢


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

一个应用的商业逻辑需要大量的测试用例以确保其健壮, 对于先前版本的JUnit,变化的参数组意味着需要为每一 独立的参数组编写一个测试用例 JUnit4引入新特性,可用以创建通用测试用例,该用例可 以多组参数值填充,即创建一个单独测试用例运行多次, 每一次对应一参数组
JUnit4参数测试
创建填充方法
@Parameters public static Collection regExValues() { return Arrays.asList(new Object[][] { {"22101", true }, {"221x1", false }, {"22101-5150", true }, {"221015150", false }}); }
语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖 路径覆盖
单元测试用例设计
黑盒测试 – 外部观察单元行为

等价类划分

边界值分析
错误推测 综合策略


JUnit4系统需求
建议系统配置

Sun JDK 1.5.0_09以上

Eclipse 3.2以上
操作系统Windows或Linux


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

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

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


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

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

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

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

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

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

先前的JUnit版本使用机械的预定设置模型,必须将每个 测试方法包裹于setUp()与tearDown()方法中 JUnit4使用元注释用于运行预定设置针对每一个测试或仅 一次性针对整个类 四个预定设置元注释:两个类级(@BeforeClass, @AfterClass)和两个方法级(@Before, @After)
JUnit4参数测试
创建类成员
private String phrase; private boolean match;
JUnit4参数测试
创建一个构造
public ParametricRegularExpressionTest(String phrase, boolean match) { this.phrase = phrase; this.match = match; }
JUnit旧框架约束
Java 5 元注释之前,JUnit框架使用两个规则

第一,JUnit要求用于逻辑功能测试的任何方法以单 词”test”开头,如testUserCreate 第二,对于JUnit认为一个类包含测试,该类本身必须继 承于JUnit的TestCase 一个测试类与其中任一约束相违背则无法运行

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

总 纲

传统软件开发流程

单元测试及JUnit 极限测试

评审
对功能的正确性,完整性和清晰性,以及其它需求给予评价,评 审通过才可进行下一阶段的工作
软件设计
软件设计分为概要设计与详细设计两个阶段

需求明确之后,编码之前需进行软件设计

概要设计是结构设计,其主要目标就是给出软件的模块结 构 详细设计的首要任务就是设计模块的程序流程、算法和数 据结构,以伪代码实现设计程序逻辑,根据实际情况,很 多公司将其与编码结合完成


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

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

开发周期中的测试
测试用例
需求分析包括需求的获取、分析、规格说明、验证、管理 的一系列需求工程 需求分析阶段结束后,产生软件规格说明书(SRS, Software Requiements Specification)


需求分析
需求分析的作用

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

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


单元测试
单元测试目的

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

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




测试驱动开发技术
朱 宁
总 纲

传统软件开发流程

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


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

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

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

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

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


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

由于测试重点始于较小的程序单元,所以单元测试是管理 测试大量组合元素的方法 当发现某错误,容易定位到具体模块单元,所以单元测试 减轻调试(debugging)的任务负担 单元测试提供了同时测试多个模块的可能
JUnit4参数测试
创建通用测试
@Test public void verifyGoodZipCode() throws Exception{ Matcher mtcher = this.pattern.matcher(phrase); boolean isValid = mtcher.matches(); assertEquals("Pattern did not validate zip code", isValid, match); }

概要设计
概要设计目的

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

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


概要设计
概要设计的任务

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

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

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




参数测试(Parametric tests) 异常测试(Exception tests) 超时测试(Timeout tests) 灵活的预定设置(Flexible fixtures) 快捷的测试忽略(ignore tests) 逻辑测试分组


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

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

需求分析
需求分析的过程

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

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

编写规格说明书
编制文档,描述需求的文档称为软件需求规格说明书


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

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

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

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