文档章节

从一个案例深刻领悟TDD的真谛

杨武兵
 杨武兵
发布于 2013/06/06 08:53
字数 959
阅读 161
收藏 0

  一直以来比较推崇在开发中进行全面的单元测试,我觉得单元测试的好处非常多。但是没有真正的用起TDD,在编写功能实现代码之前先编写测试代码,这样的习惯没有养成,意义也没有觉得非常大。因此TDD其实没有真正用起来。直到最近在实际工作中的一个案例让我更加深刻得领悟出TDD开发的真谛!

  案例:最近我们开发一个消息中心的服务,该服务要给数十个项目组提供接口,由于各项目组的进度和步调不一致,消息中心服务的项目先开始工作,定义好了接口之后,将接口公布出去,然后就开始实现接口功能,进行接口的单元测试及模拟集成测试。一段时间后,陆陆续续有些应用项目组开始工作,发现了接口定义的一些问题,这些问题有的是接口无法满足他们的需求;有的是有些字段没有;有的是感觉接口使用不方便;反正最终导致的结果是消息中心服务项目组的代码进行了多次返工和修改,浪费了很多时间,至今还没有彻底满足所有项目组的需求。

  后来我接收负责其中一个接口的实现,反思之前出现的问题的原因是什么?有什么办法可以解决或者减轻这种问题呢?我觉得最根本的原因是在设计和实现接口的时候,服务提供项目组没有让服务的用户参与进来一起进行设计,服务接口公布出去之后,由于服务用户没有真正去了解和使用,也无法提出问题,等真正开始使用的时候才发现一大堆问题。因为接口实现项目组由于知识和场景的完全认识,无法清楚所有使用方的使用场景,因此导致实现的东西与接口用户想要的东西存在差异的原因。

  最终我的解决办法是也许可以应用TDD的思想。让接口用户参与进来共同设计接口,将开发顺序反过来结果就完全不一样。我这次的开发方法是这样的:首先让接口使用项目组自己设计协议接口,我来看接口是否存在问题,然后我写程序实现思路,画程序的活动图,用这些东西与接口的用户沟通,经过协商没有问题后就这样定下来了。然后,接口使用项目组开始面向接口编程,当他们的代码写完了之后,我再开始写我这边的单元测试,接着写实现代码,最终进行集成测试。最终的结果证明这种开发方式几乎没有返工,开发出来的接口几乎没有任何问题。

  从这个案例表面看起来好像是接口实现方和接口使用方之间的关系,但是这个道理同样可以应用到软件开发者和软件用户之间的关系。只有用户最了解自己想要什么,让用户参与进来验证需求,能够最大程度的保障需求的正确性。因此TDD能够将软件开发方和软件用户对需求的理解尽可能保持一致,让用户得到他们想要的软件,他们在自己的使用场景下用起来非常顺手的软件。

  

© 著作权归作者所有

共有 人打赏支持
杨武兵

杨武兵

粉丝 255
博文 61
码字总数 123254
作品 1
昌平
架构师
私信 提问
[草稿]-TDD-测试驱动开发-领悟总结

TDD : Test-Driven Development 测试驱动开发,即TDD,是敏捷开发一个重要的特点.而敏捷开发是一种将高效设计模式推广到了开发流程控制层面上结果.而TDD是敏捷概念的一种表现形式.(不善于讲广义...

Channely
2014/08/15
0
0
Nginx源码分析系列4:Nginx里的双向链表

花了半个小时看了买的书籍,原理已经掌握, 根据书上写了代码如下: typedef struct{u_char* str;ngxqueuet qEle;//位置任意int num;}TestNode; ngxintt compTestNode(const ngxqueuet a,con...

强子哥哥
2013/12/08
0
0
我的测试生活感悟1

真的是万事开头难,但我觉得更难的是,每天都坚持做同一件事情。在不被强迫的情况下(如:上班、吃饭、睡觉...),在可自由支配的时间里,现在我每天坚持做的貌似只有GoogleReader。希望我的测...

科技小毛
2017/07/19
0
0
书评:测试驱动开发的艺术

读罢《测试驱动开发的艺术》,忽然想起中国传统文化中的“道器之辩”。《易经》曰:形而上者谓之道,形而下者谓之器。中国的传统文化常常是重道轻器,认为道本器末,即道是根本,其他一切是道...

wayfarer
2011/02/11
0
0
单元测试和测试驱动开发 TDD 是怎么回事?

对于测试驱动开发和单元测试,我总有一种既爱又恨的感情在里面。 我一直都是这些“最佳实践”的热心支持者,但是我对它们的使用也一直持有怀疑态度。 软件开发中最大的问题之一是开发者或管理...

班纳睿
10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小程序异步操作 跨js执行 在微信小程序里面实现跨页面通信

我们知道,在小程序里面一个页面的变化,是通过调用 setData 函数来实现的。所以想做到在二级页面里让一级页面产生变化,最 Quick And Dirty 的做法就是把一级页面的 this 传入到二级页面去,...

xiaogg
9分钟前
0
0
授于管理员登录其它用户

1.沙盒中,授予管理员登录 安全性控制==>登录访问权限政策

在山的那边
11分钟前
1
0
线程安全的CopyOnWriteArrayList介绍

证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的。 ReadThread.java import java.util.List; public class ReadThread implements Runnable {......

绝地逢生
13分钟前
0
0
Java重写的7个规则

几年前你可能会遇到这样一个面试题:“重写和重载的区别”、而现在随着科技的更迭、面试的问题越来越高级、面试官的问题也越来越深入、此文是上述面试题的一个延伸、让你从简单的重写规则中更...

architect刘源源
14分钟前
1
0
JavaScript异步编程:Generator与Async

从Promise开始,JavaScript就在引入新功能,来帮助更简单的方法来处理异步编程,帮助我们远离回调地狱。 Promise是下边要讲的Generator/yield与async/await的基础,希望你已经提前了解了它。...

前端攻城老湿
14分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部