测试驱动开发简介

本文节选自《测试驱动的面向对象软件开发》 第1章第4节“测试驱动开发简介”

 

TDD核心的循环是:写一个测试;写一些代码让测试通过;重构代码,使被测试特征的实现尽可能简单。重复这个过程,如图1-1所示。


图1-1基本TDD循环

在开发系统时,我们利用TDD来得到系统实现品质(“它能工作吗?”)和设计品质(“它的结构好吗?”)的反馈。以测试优先的方式来开发可以事半功倍。写测试有如下好处:

  •  澄清下一部分工作的验收条件——我们必须问自己怎样才算是完成了工作(设计)。
  •  鼓励我们写出松耦合的组件,这样它们就能够容易地分开来测试,并在较高的层面上组织在一起(设计)。
  •  为代码功能添加一段可执行的描述(设计)。
  •  添加到完整的回归测试套件中(实现)。

运行测试有如下好处:

  •  在我们还很清楚情况时检测到错误(实现)。
  •  让我们知道何时已经做得够好了,避免“镀金的”和不必要的特征(设计)。

这个反馈循环可以总结为TDD金规:

 


测试驱动开发金规:

先写一个会失败的测试,再写一个新特征,永远如此。


重构。局部思考,局部动作

重构的意思是在不改变代码行为的情况下改变已有代码的内部结构。重构的要点是改进代码,使其能够更好地表示它实现的特征,提升可维护性。

重构是一种训练有素的技巧,程序员对代码应用一系列的转换(或称为“重构”),同时又不改变代码的行为。每次重构都足够小,所以很容易理解,也很“安全”。例如,程序员可能将一段代码放到一个辅助方法中,使原来的方法更短或更容易理解。程序员确保在每次重构之后系统仍能正常工作,将因改动而引起麻烦的风险降到最小。如果有测试驱动的代码,我们通过运行测试就能保证这一点。

重构是一种“微技巧”,它是通过发现一些小规模的改进来驱动的。我们的经验表明,严格应用并坚持应用重构,它的众多小步骤会导致极大的结构改进。重构不是重新设计。重新设计是指程序员有意识地决定改变大规模的结构。这就是说,如果决定重新设计,项目团队可以利用重构技巧,增量式地、安全地实现新的设计。

您会在第三部分中看到许多重构的例子。这个概念的标准教科书是Fowler的[Fowler99]。

 

《测试驱动的面向对象软件开发》 样章下载:http://download.csdn.net/source/2580569

【内容简介】

本书采用通俗易懂的比喻,众所周知的编程语言,短小精悍的工作实例,深入浅出的分析处理——仿佛在和几位世界级的编程高手一边喝茶,一边聊天,循序渐进地让读者在不知不觉中进入编程的最高境界。即使是刚刚入门的初学者,也会从中找到读书的乐趣,因为可以从一开始就找到开启面向对象开发大门的钥匙;随着经验的积累,编程水平的提高,再来看这本书,用不同的视角重新审视程序,又会体会到更深层的编程哲学。
本书是编程爱好者的启蒙指南,更是系统分析人员、测试人员、程序设计人员、软件开发人员以及面向对象程序研究人员等专业人士革新编程思想的必备手册。

转载于:https://www.cnblogs.com/hzbook/archive/2010/07/29/1787761.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 .NET 中使用 Flurl 高效处理Http请求

简介官方介绍,Flurl是一个现代的,流利的,支持异步的,可测试的,可移植的,URL增强和Http客户端组件。Url构建现在有一个登录的接口,地址如下:https://www.some-api.com/login?nameLee…

java jdbc 删除_java使用jdbc实现各种类型添加删除修改数据

项目描述上次为大家分享了使用jdbc实现各种类型查询数据,这次为大家分享使用jdbc实现各种类型添加、删除、修改数据运行环境jdk8tomcat7mysql项目技术(必填)jdbcdao层数据库文件DROP TABLE IF EXISTS class;CREATE TABLE class (id int(11) NOT NULL auto_increment…

图像还可以这样玩!如何用波的算法处理图像

我对图像处理一直很感兴趣,曾经写过好几篇博客。前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以这样玩!下面我就…

[存档]CxServer的项目周期管理

2019独角兽企业重金招聘Python工程师标准>>> 主题:大学生创新性实验计划 项目周期管理 作者:宋志民备注:本文为《 基于CxServer的大学生科学研究项目管理实践探索》的一部分 内容: 一般情况下大学生科研计划的种类较多…

C# 在PC上的通过蓝牙(bluetooth)发送数据到手机

概述在PC端用.NET开发一个蓝牙下载的程序。实现在PC上查找周围的蓝牙设备(主要是手机),并将PC上的文件通过蓝牙传输到手机上。目前我采用的是OpenNETCF.Net.Bluetooth,能够正常发现周围的蓝牙设备,手机也能够正常进行蓝…

新浪股票接口 java_新浪股票接口Android SDK(非官方)

新浪股票接口AndroidSDK昨天想到一个点子,需要访问股票行情。于是在网上搜了一下免费的股市行情的接口。发现新浪股票的数据接口比较稳定,于是就用它了。网上对于新浪股票的数据接口介绍比较详细,并且实现也很简单,所以花了一下午…

VC++的dll中接收消息

LRESULT CALLBACK MessageWinProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter)//用于处理消息窗口接收到的消息{switch(uMsg){case WM_CLOSE:DestroyW…

在职场中,长得漂亮真的有用吗?

非常有用。下面五张图,每张图介绍一个研究,都可以从一个侧面回答问题。01 企业对求职者的颜值有多看重?这张图来自两位学者对国内某网站超过100万份招聘广告的分析结果。总的来看,有7.7%的企业会对应聘者的外貌提出要求&#xff0…

TIOBE 3月榜单:新功能将加入,C语言仍高居榜首

喜欢就关注我们吧!TIOBE 公布了 2021 年 3 月的编程语言排行榜。本月 TIOBE 指数没有什么有趣的变化。因此,TIOBE CEO Paul Jansen 表示,其打算透露一些近期将加入至榜单中的新功能。第一个问题涉及到一个 bug 修复。由于使用了复杂的算法&am…

java jdk win10安装_Java 安装 JDK WIN10

JDK的全称是Java SE Development Kit它的官方网站只要用Goole搜索下即可找到,官方提供JDK8、11、12的下载入口。我们点击Java SE Development Kit 8进入下载。我们下载的版本是jdk-8u91-windows-x64.exe安装过程按导向默认安装,中途什么选项都不改。安装…

twitter达人不能不知的缩写

今天上午有人在新闻编辑室问“嘿,Twitter上的MT是什么意思?”,让我们觉得编制一个Twitter缩写的列表可能会有帮助。 这就是为什么我们要做这些的原因。想要全面地完成其实不容易,所以请在评论中增加这个列表中缺失的缩写吧。技术类…

50张神图……好不容易才找到完整版!

描述:1.耶鲁大学耗时5年的研究成果。 如果你看见这个舞女是顺时针转,说明你用的是右脑 如果是逆时针转,说明你用的左脑。 据说,14%的美国人可以两个方向都能看见 可以和别人一起看,测试下,一般不同人同时看…

BeetleX.Http.Clients V1.5发布

组件开始设计是针对以接口的方式来定义HTTP/HTTPS访问,虽然基于接口来操作有很大的便利性,但定义起来就比较麻烦了。所以在1.5版本中实现了一个HttpClient类来简化调用。HttpClient 该类支持HTTP的GET,POST,DELETE和PUT操作,通过这几个…

java set spliterator_Java HashSet spliterator() 方法

Java HashSet spliterator() 方法spliterator() 用于在HashSet中的元素上创建后绑定和故障快速的Spliterator。将后期绑定的Spliterator绑定到元素的来源意味着HashSet在第一次遍历,第一次拆分或第一次查询估计大小时,而不是在创建Spliterator时。它可以…

系统的crontab设定:/etc/crontab

crontab -e 是针对用户的cron来设计的,如果是系统的例行性任务,该怎么办?是否还是需要以crontab -e来管理例行性命令?当然不需要,您只需要编辑/etc/crontab文件就可以了。需要注意的是:crontab -e的作用其实…

编程到底难在哪里?

写在前面:这篇回答并不是讲述在生活中程序员如何买苹果,而是以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析,理清其涉及的所有细节,预测可能发生的所有意外与非意外的情况,列出解决方案的所有步…

DDD实战课--学习笔记

目录学好了DDD,你能做什么?领域驱动设计:微服务设计为什么要选择DDD?领域、子域、核心域、通用域和支撑域:傻傻分不清?限界上下文:定义领域边界的利器实体和值对象:从领域模型的基础…

java 字符utf8编码_java字符串转utf8编码

Java中ASC码与字符互相转化_计算机软件及应用_IT/计算机_专业资料。Java 中 ASC 码与字符互相转化 packagecom.ljq.test; /** * Java 中 ASC 码与字符互相转化......JAVA 字符串转日期或日期转字符串(转) 2010-08-16 16:34:03| 分类: java |字号 订阅 JAVA 字符串转日期或日期转…

如何预测未来房价的发展

1946年2月16日,是一个值得纪念的日子。在这一天,人类历史上真正意义上的第一台电子计算机诞生了,此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

《进击吧!Blazor!》系列入门教程 第一章 7.图表

作者备注《进击吧!Blazor!》是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。视频地址:https://space.bilibili.com/483888821/channel/detail?cid151273Bl…