认识TDD
初步认识TDD
TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名。本文将对TDD有一个较为系统的认识。
起源:20世纪90年代。
性质:一种由极限编程倡导的程序开发方法。
中心思想:先写测试程序,然后编码实现其功能。
目的:取得快速反馈并使用“illustrate the main line”方法来构建程序。
1、戴两顶帽子的开发方式
(1)、戴实现功能的帽子,在测试的辅助下,快速实现其功能。
(2)、戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。
2、中心思想
测试驱动着整个开个过程。
(1)、驱动代码的设计和功能的实现。
(2)、驱动代码的再设计和重构。
1、特征
测试驱动开发中需求分析和详细设计的范畴,在代码基本完毕以后,并且这些测试也成为单元测试的一个部分。
2、要点
可读性甚至比生产代码更重要,明确,简洁,足够的表达力。
3、一般模式
构造数据 — 操作数据 — 检验数据
4、遵循的规则
(1)、单个测试中断言数量应该最小化,可以快速方便地理解其结论。
(2)、每个测试一个概念,即每个测试函数只做一件事。
(3)、F.I.R.S.T原则
快 速(First):能够快速运行。
独 立(Independence):可单独运行每个测试,也就是说可以任何顺序运行测试。
可重复(Repeat):在任何环境中测试均能通过。
自动验证(Spontaneous Verification):应有布尔值输出。
及 时(Timely):应在生产代码之前编写。
1、在编写不能通过的单元测试前,不可编写生产代码。
2、只可编写刚好无法通过的单元测试,不能编译也算不通过。
3、只可编写刚好足以通过当前失败测试的生产代码。
总的来说就是先写测试再写生产代码,写一个测试就应该立即写它的实现代码。
1、正面
(1)、可以有效避免过度设计带来的浪费。
(2)、可以让开发者在开发中拥有更全面的视角。
(3)、确保所有需求都能被照顾到。
2、负面
(1)、过度关注用例和测试案例,而不是设计本身。
(2)、可能会导致单元测试的覆盖度不够,比如可能缺乏边界测试。
(3)、放慢开发实际代码的速度。
(4)、对于GUI,资料库和Web应用而言,构造单元测试比较困难,若强行构造单元测试,反而会给维护带来额外的工作量。
(5)、test case 并没有那么好写,如果说我们开发的Test Case是用来保证我们代码实现的正确性,那么,谁又来保证我们的Test Case的正确性呢?
使用TDD完成过一个小游戏项目,感觉TDD的开发方式让我觉得有了另一种思维开发方式,从这个项目的各个功能点来写测试,并通过测试来实现我们的生产代码。以前完成一个项目是自上而下的思维,就是站在一个宏观的角度,来全局总览这个项目,那么最开始的时候就得考虑很多,这个时候最容易陷入细节误区了,即会细化到某些细节难以控制自己的思维。现在接触TDD之后,给我的感觉就是自下而上了。不考虑全局的东西,我一个小功能一个小功能的实现,曾经是从树顶来做,现在是从树根了,每一个根节点实现了我往上一层一层加起来,最后就是一棵树了,哈哈~
ps:本文内容若是有误或者迷糊,还请指正或指出。
认识TDD的更多相关文章
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- 初步认识TDD
TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名.本文将对TDD有一个较为系统的认识. 基础属性 ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- TDD原则
TDD 介绍 测试驱动开发,或者叫 TDD,是一个敏捷方法,通过确保在代码是先前手动编写测试用 例,用测试来驱动开发,从而翻转开发生命周期(它不只是作为一种校验工具). TDD 的原则很简单的: 只有 ...
- Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计
Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计 1.1. software development methodology (also known as SDM 1 1 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...
- 使用IdleTest进行TDD单元测试驱动开发演练(2)
[前言] 1. 有关上篇请参见<使用IdleTest进行TDD单元测试驱动开发演练(1)>,有关本篇用到Entity Framework Code First请参见<使用NuGet助 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(1)
[前言] 开发工具:Visual Studio 2012 测试库:Visual Studio 2012自带的MSTest DI框架:Unity 数据持久层:Entity Framework 前端UI: ...
- 前端自动化测试 —— TDD环境配置(React+TypeScript)
欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...
- TDD学习笔记【四】--- 如何隔离相依性 - 基本的可测试性
前言 相信许多读者都听过「可测试性」,甚至被它搞的要死要活的,还觉得根本是莫名其妙,徒劳无功.今天这篇文章,主要要讲的是对象的相依性,以及对象之间直接相依,会带来什么问题.为了避免发生因相依性而导致设 ...
随机推荐
- Android 布局管理器
为了更好地管理Android应用程序的用户界面组件,Android它提供了一个布局管理.通过使用布局管理,Android具有良好的平台无关的图形用户界面应用程序. 平时,推荐布局管理器来管理分布式组件 ...
- Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP
Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4. ...
- JBPM4实例教程
JBPM语言概述:全名 Java Business Process Management ,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可运行流程语言框架. 是开源 ...
- 操作系统学习笔记_12_I/O管理 --I/O管理概述
h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans",sans-serif; font- ...
- HDU 3081 Marriage Match II(二分法+最大流量)
HDU 3081 Marriage Match II pid=3081" target="_blank" style="">题目链接 题意:n个 ...
- Asp.Netserver控制发展Grid实现(一个)UI转让
使用Asp.Net办Web开发时间,控制系统提供了,目的,有时很难达到理想的.然后,有几种方法来解决,例如,使用html+js形式,在所需界面的布局的前端,然后通过ajax和其他方式获得的数据.为了实 ...
- 看德日进,凯文·凯利与Kurzweil老师?
生命从哪里来.要到那里去.生命存在的意义是什么.这些差点儿是人类可以探究的最深层次问题.基督教给出的答案是毁灭和审判.佛学给出的答案是无常,科学的达尔文进化论给出了生命的起点和进化的过程,对于未来.达 ...
- MySQL当您插入列无效的数据插入
1.错误叙述性说明 com.mysql.jdbc.exception:jdbc4.MySQLSyntaxErrorException:Unknown column 'man' in 'field li ...
- sql server 更新表,每天的数据分固定批次设置批次号sql
按表中的字段 UpdateTime 按每天进行编号,每天的编号都从1开始编号,并附带表的主键 cid,把数据存入临时表中 WITH temp AS (SELECT cid,updatetime, RO ...
- 兼容Firefox和IE的onpropertychange事件oninput
原文 兼容Firefox和IE的onpropertychange事件oninput onpropertychange能够捕获每次输入值的变化.例如:对象的value值被改变时,onpropertych ...