第十一讲 测试驱动开发.

Slides:



Advertisements
Similar presentations
1 课程介绍 报告人:谢兆贤 2015/9/X. 2 纲要  课程设置  教学内容  教学设计  教学组织与实施  课程特色与创新  实验项目.
Advertisements

第 9 章 测试部署  9.1 测试  9.2 部署. 9.1 测试  应用测试:使用 JUnit 单元测试框架 测试的目的是检验开发结果是否满足规定需求,测试是保证软件质量的一个重要手段, 在软件开发过程中是不可缺少的组成部分。 单元测试与集成测试分别有各自的定义:在实际开发中,两者之间的界定是模糊的。
面向侧面的程序设计 方林博士 本文下载地址:
ASP .NET 程序设计(C#版) 第二版 机械工业出版社同名教材 配套电子教案
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
学生教育办介绍 2015年9月.
Tool Command Language --11级ACM班 金天行.
第9章 系統建置.
Java Programming Hygiene - for DIDC
第六章 软件测试自动化 HLJU Software Testing.
欢迎各位 Nice to Meet U.
测试驱动开发与代码重构 -TDD & Refactoring
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
JUnit 軟體測試架構 JUnit Software Testing Framework
第四章 系統內部控制設計.
SVN的基本概念 柳峰
AngularJS -- 使用AngularJS进行开发
测试驱动的设计和开发 ( Test Driven Design and Development ) 基础篇
学习前的准备工作 讲师:burning.
BizTalk Server 2004.
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
演講者簡介 陳建村(Teddy Chen),泰迪軟體創辦人,從事敏捷開發顧問與教育訓練服務,著有《笑談軟體工程:敏捷開發法的逆襲》(簡體版《笑談軟體工程:烽煙中的敏捷》)與《笑談軟體工程:例外處理設計的逆襲》等書。陳建村畢業於台北科技大學機電科技研究所(資訊組)博士班,有十九年以上的軟體開發經驗。目前為敏捷顧問與敏捷課程講師,並在台北科技大學資工系研究所擔任兼任助理教授。
唐大仕 JAVA 程序设计 怎样写好程序 唐大仕
黄海波 & 陶万山 with contribution by 劳晖
走进编程 程序的顺序结构(二).
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
Visual Studio Team System 简介
第九章 測試工具與測試管理系統.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
JUnit(java单元测试工具)
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
PaPaPa项目架构 By:Listen 我在这.
Agile Software Development
認識 Java.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
录制回放工具使用说明 鲁晓宇
新一代安全网上银行 小组成员:杨志明 王晶 任毅 刘建中 关昊 刘超.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
金門農工課程核心小組會議 ★各科多元選修彙整範例 ★彈性學習時間之規劃 ★選課機制 報告人: 董炤靈 107年10月23日.
第二章 資訊系統開發模式.
VisComposer 2019/4/17.
Aspect Oriented Programming
徐迎晓 复旦大学软件学院 实现模型 徐迎晓 复旦大学软件学院.
软件项目的配置管理 2019/5/1.
项目二:HTML语言基础.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
Web安全基础教程
第二章 軟體測試概論.
iSIGHT 基本培训 使用 Excel的栅栏问题
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
Delphi 7.0开发示例.
WEB321 使用ASP.NET2.0快速开发电子商务网站
OpenStack vs CloudStack
Python 环境搭建 基于Anaconda和VSCode.
CMP 讲义 2018 CMP设计哲学及基础概念 CMP推荐的4层代码结构.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
DEV310 Microsoft Visual Studio 2005托管代码调试
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
质量控制(QC)模式 BrookFIELD.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
第十章 : 系統建置與運轉 1. 前言 讓系統順利運轉之三類工作 : a) 轉換設計文件成為軟體 : 程式撰寫、軟體測試 、系統安裝
Presentation transcript:

第十一讲 测试驱动开发

目标 测试驱动开发的基本概念 测试驱动的基本流程 测试驱动的所采用的技术及工具

测试驱动开发的基本概念 为什么会出现测试驱动开发 什么是测试驱动 测试驱动所要达到的目标

什么是测试驱动 测试驱动是一种开发形式: 1.首先要编写测试代码 2.除非存在相关测试,否则不编写任何的产品代码 3.由测试来决定需要编写什么样的代码 4.要求维护一套详尽的测试集

clean code that work 测试驱动所要达到的目标 测试驱动所追求的目标就是代码整洁可用,其实现的规则就是: 1.只有测试失败时,我们才写代码 2.消除重复设计,优化设计结构

测试驱动开发的基本流程 定义应用程序的要求 熟悉应用程序的功能区域,确定要使用的单项功能项或功能要求 创建验证要求的测试列表 为功能或要求定义接口和类 编写测试代码 运行测试 根据测试生成产品代码 重新运行测试,根据测试修改产品代码,直到所有测试都通过 整理代码 重复上面的步骤

测试驱动开发的优点 能够保证编写单元测试 使程序员获得满足感从而更始终如一地坚持编写测试 有助于澄清接口和行为的细节 可证明、可再现、自动的验证 改变事物的信心

测试驱动开发的基本流程

什么是Regression Test “Regression testing is the process of validating modified parts of the software and ensuring that no new errors are introduced into previously tested code.” 一句话,Regresstion Test就是要重新测试所有的代码和功能。 Regression Test和Development Test的不同在于Regression Test 需要重用已经建立的所有的测试单元(Unit Test )和功能测试套件(Functional Test)。 Regression Test的基础是完整的自动单元测试和功能测试。

什么是Nightly Test Nightly Test就是每晚自动运行所有的Unit Test和Acceptance Test。 Nightly Test是XP中的Continuous Test的一个练习(Practice)。 Nightly Test可以准确的反映项目开发的进度和质量。

Nightly Test Nightly Test是软件开发中一个保证开发之质量的最有效的方法,也 是衡量软件之质量和开发效率的最好的指标。 Nightly Test就是每天工作结束,所有的代码都Check in到Source Control后,自动运行所有的Unit Test和Function Test。测试的结果 应该自动分发给开发人员和管理层。 两个指标数值: 测试例子的通过率 – 单元测试必须是100%通过。Functional Test 应该按计划的通过。 单元测试的覆盖率 – 表明有多少Class被测试过和测试的完善程度。

测试优先的编程 在写任何代码之前,先写它的Unit Test。 “Never write a line of functional code without a broken test case” Kent Beck Test-First Programming是一种测试技术吗? Test-First Programming首先是一种分析方法。它迫使程序员仔细思考要做什么和不要做什么(而不是如何具体的实现)。特别是各种例外的情况,并用程序语言正式的写下来。这就好像在程序员的任务和程序员之间签订了一个清晰的正式合同。 Test-First Programming是一种设计方法。Unit Test测试的事程序,而不是一个想法。程序员必须清晰的定义程序的界面才能写出它的Unit Test。而这时程序员是不知道(也不需要知道)里面的具体逻辑是如何实现的。程序员只需要考虑Class的界面和功能(Responsibility)。啊,你在做OO设计了。 Test-First Programming是一种质量控制方法( Quality Control )。如何控制质量呢?如何知道我的程序是否运行呢?我会不会漏了什么?运行一下Unit Test。 Test-First Programming是一种重构和优化的方法。我们总希望自己的代码可以漂亮,运行的效率高,所以我们会不断地去改进。可是如何保证改进和优化后的质量呢?会不会越改越糟?答案还是Unit Test。 Test-First Programming不是通常意义上的测试技术,它的目的也不是仅仅用来测试你的代码。 Test-First Programming是一种面向对象的开发方法。

什么是Test-Driven Design (TDD) 在写产品代码之前,先写它的单元测试( Unit Tests ) 没有单元测试的Class不允许作为产品代码 单元测试例子决定了如何写产品代码 不断地成功运行所有的单元测试例子 不断的完善单元测试例子 Test-Driven Design是把需求分析,设计,质量控制量化的过程!

编写单元测试是一种验证行为,更是一种设计行为。同样,它更是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功能验证方面的反馈循环

如何做Test Driven Design and Development 再开发一个新的功能之前 首先确定你要做什么(不是要如何做!!) 比如说一个论坛的增加用户的功能,我们需要又一个method来增加一个用户: public void addAccount( Account account ) 当然包括成功增加一个用户(在数据库中插入一条纪录) 还包括如果已经由一个相同的用户,应该返回一个用户已存在的消息 OK,我们知道这个method中的这段代码要做什么,而且这段代码也足够简单。

如何做Test Driven Design and Development (Continue ) 然后为这个功能(Method)写单元测试例子( Unit Test ) 单元测试例子要覆盖这个Method的 “做什么”。 所以我们至少有了两个测试例子: Test Case 1: 测试成功增加一个用户 Test Case 2: 测试增加一个已存在的用户 其他边缘情况测试: Test Case 3: 传入的Account对象为NULL

如何做Test Driven Design and Development (Continue ) 写Production代码 我们清楚知道这段代码需要做什么。因为我们有另一段代码摆在那里,清晰的表明这段代码的Contracts。 不用多,也不能少,只需要能实现再Unit Test中的Contracts和能够通过它的Unit Test。

如何做Test Driven Design and Development (Continue ) 运行Unit Test 如果顺利通过,你已经很好的完成了你的任务。 如果没通过,修补代码直到能通过Unit Test为止。 如果出现在Unit Test中没预先设定的结果,在Unit Test中增加一个Test Case,修补代码直到通过所有的Test Case为止。

TDD和PSP Personal Software Process的Development Design Code Build Test Test-Driven Design and Development Build Run Test Design Code Unit Test Code

TDD防止Over-Engineering 在开发中采用TDD,可以有效的避免过度设计和开发。如果程序员不愿为一个Method写测试例子或者认为现在没有必要测试改Method,那这个Method多半是现在不需要的。

TDD,程序员和管理层 对程序员来说,通过运行Unit Test和Functional Test,每天下班的时候都可以清楚的知道自己的代码是work的。 对管理层来说,通过Nightly Test的结果,每天一早都清楚的知道项目的质量和开发进度。

什么时候写Tests? 如果你要写一个新的功能,请先写她的测试例子 如果你要在没有经过测试的代码上写新的功能,请先写目前代码的测试例子 如果你要Fix一个Bug,请先为这个Bug写一个测试例子 如果你要Refactor没有测试过的代码,请先写一个测试例子 如果你发现一个边缘例外值,请为她写一个测试例子

xUnit Junit Java Class的测试Framework JFCUnit Java Swing app的测试Framework Catus Java Server Side( EJB, Servlet )的测试Framework HTMLUnit Html Page的测试Framework HTTPUnit Html Page的测试Framework CPPUnit C++测试Framework .NetUnit .Net app的测试Framework ……

谢谢大家!