文档章节

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

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

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

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

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

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

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

  

© 著作权归作者所有

共有 人打赏支持
杨武兵

杨武兵

粉丝 247
博文 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
爱默生的超验主义文学

爱默生(Ralph Waldo Emerson, 1803-1882)是19世纪最重要的美国作家之一。他提倡超验主义(Transcendentalism)。 所谓"超验主义",就是这样一种信仰,认为在人类的理性和经验之上有一种更高...

阮一峰
2006/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

67:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

1、shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断、循环等语法: 可以自定义函数,目的是减少重复的代码: shell是系统命令的集合...

芬野de博客
25分钟前
0
0
json schema

json schema是用来验证和描述json对象结构的。 在线验证:https://www.jsonschemavalidator.net/ json schema 编辑器,推荐VSCode,写上"$schema": "https://raw.githubusercontent.com/jso......

谷永权
30分钟前
0
0
部署生产级的 Kubernetes 集群,使用kubespray

部署生产级的 Kubernetes 集群,使用kubespray 项目源码,https://github.com/openthings/kubespray 国内部署,https://github.com/zhangguanzhang/Kubernetes-ansible 欢迎加入 kubernetes......

openthings
37分钟前
0
0
73.分发系统介绍 expect脚本远程登录 执行命令 传递参数

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数 20.27 分发系统介绍: 场景:业务越来越大。用的比如app,后端(也就是服务器)所使用...

王鑫linux
43分钟前
0
0
SpringBoot应用不能访问项目静态页面html问题处理

问题描述:SpringBoot搭建web应用在eclipse中启动能够正常访问页面,打包成jar之后不能访问到页面,没有任何出错提示。 环境:使用的是前后端分离架构,没有使用模板,前端html和静态文件放到...

奋斗小蜗牛
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部