让数据库应用开发不再裸奔——Test-Driven Database Development译者序

原创 2013年12月04日 13:34:25

让数据库应用开发不再裸奔——Test-Driven Database Development译者序

 

1993年,我从大学计算机专业毕业后,开启我的IT职业生涯的第一份工作,就是在一家国营单位,用dBase III做MIS系统的数据库应用开发。从那以后,我做了11年的程序员,先后开发和维护过内容管理系统(CM)、电信运营增值服务系统、通信设备网络管理系统、和电子商务系统。这些系统,无一例外都使用了像Oracle和MySQL这样的数据库来保存持久化数据。

 

在这些系统中,有些系统甚至是以数据库的设计为核心来驱动应用程序代码的开发。即一旦客户的需求到了我们这些程序员手里,先找出需求中的实体(Entity),再分析这些实体之间的关系,并画出E-R图(Entity-Relationship Diagram,实体关系图),然后确定各个实体的属性,并找出主键,最后根据这份E-R图来在数据库中生成数据库表,之后就可以用像Java这样的编程语言来进行应用系统的开发了。

 

上面这样看似完美的开发过程,被印在20多年前我在大学修的“关系型数据库管理系统”的教科书上,并多年来一直指导着我来做数据库应用开发。但直到最近,我才意识到,这种方法无法解决实际数据库应用开发工作中的最大的难题:一套数据库应用系统当交付给相互之间具有不同需求的多个客户时,所出现的版本控制问题。回想我所工作的一家软件公司,曾为另一家在国内某领域领先的“巨无霸”甲方公司,开发一套以数据库为核心的应用系统。该系统陆续在这家甲方公司的国内八个省得到了部署。俗话说:“龙生九子,各有不同。”这八个省所部署的数据库应用系统,虽然都来自最初的那个系统,但是每个省的需求各不相同,这家软件公司只好成立八个庞大团队来维护这八个省的系统。在不堪重负地挣扎了很长一段时间后,最后这家软件公司下决心,要建立一个新系统,来统一这八个系统,以减少维护成本。但最后不幸的是,这个新系统最后也无奈地成为“龙的第九个儿子”。

 

所幸的是,本书作者Guernsey先生不仅在工作中解决了上述问题,还把解决方案条理清晰地写在了这本书中,功德无量!Guernsey先生洞察到导致上述问题的原因,是各个数据库实例的数据库结构因需求变化而发生变更时,数据库原先保存的数据的版本在此期间没有得到有效的管理。Guernsey先生敏锐地观察到,当发生变更时,面向对象编程中的“类”与数据库开发领域中的“数据库实例的结构”会表现出不同的特点。前者在变更时不需要管理历史信息,只要把服务停下来,把旧的“类”替换成新的“类”,再重新启动服务就好了。但是后者在发生变更时,不可能仅仅把数据库结构替换为新的,而把原有结构所在的数据库中以前所保存的数据全都清除掉。数据库实例的结构在发生变更时,需要保持以前存储的数据。毕竟,数据库的价值就体现在这些被保存的宝贵的历史数据中。

 

在洞察到数据库应用开发的上述特点之后,Guernsey先生开创性地把在面向对象编程中得到广泛应用的测试驱动开发(Test-Driven Development,TDD)的理念,引入到数据库应用开发——这个几乎还处于类似面向机器编码的“汇编语言”时代的——蛮荒之地,就像本书英文版封面所展示的那样,在一片广袤的沙漠中,赫然出现了一个环绕一眼清泉的生机勃勃的绿洲。TDD的理念与数据库应用开发保存历史数据的特点相结合后,就如同给以前无奈地进行“裸奔”的传统数据库应用开发的程序员们,穿上了“测试”这层坚实的铠甲。

 

Guernsey先生不仅讨论了传统关系型数据库的测试驱动开发的方法和技术,还在本书最后一章,将这些方法和技术运用到XML应用、文件系统及其他对象目录、和序列化数据对象之上。相信本书所阐述的测试驱动数据库开发的概念和原则,都能被广泛地应用于任何需要对数据进行各种形式的持久化的应用系统的测试驱动开发之上。

 

Guernsey先生的上述开创性的工作,使得我决定暂时中断写自己的《驯服烂代码》一书,而花费4个月中全部的空闲时间来翻译本书。我在翻译本书时,力求用通顺的语句来表达作者的原意,争取让自己阅读自己翻译的文字,就如同喜欢阅读原文一样。如有翻译不当之处,恳请在我的新浪微博“@伍斌_Ben”上给予指点,以求改进。我个人也会在我的CSDN博客“http://blog.csdn.net/wubinben28”上创建和维护本书中译版的勘误表,以方便读者。

 

本书300页的内容的翻译工作,得以在4个月内顺利完成,离不开我妻子薛静和儿子乐乐的理解和支持;离不开我20年前的大学同学杨光,从远在万里的大洋彼岸给我的有关美国“对冲基金”公司运作模式的专业介绍;离不开编辑杨海玲老师对我的信任;离不开我的微信、微博、和北京设计模式学习组(bjdp.org)这些圈子里各位亲友的关心;最后,离不开我的父母的养育之恩。

 

最后,希望Guernsey先生所带来的测试驱动数据库开发的理念,能为在中文世界里辛苦加班的程序员们,带来能够化解数据库应用开发的种种烦恼的一剂良药。

 

——伍斌,独立匠艺程序员,免费编程操练社区“bjdp.org北京设计模式学习组”创办者


《Test-Driven development By Example》阅读(一)

SQ3R阅读法:   一、Survey(阅读前的调查)       1、书名:《Test-Driven development By Example》,中文译名《测试驱动开发实例》。    ...
  • makunyuan123
  • makunyuan123
  • 2013年07月05日 10:51
  • 864

Eclipse安装Database Development插件。(其他插件类似)

Eclipse安装Database Development插件。(其他插件类似) 标签: java eclipse database development 插件 ...
  • u010456982
  • u010456982
  • 2016年12月12日 10:42
  • 1786

什么是测试驱动开发(Test-Driven Development)

        不怕被大家笑话,刚才同事手上拿到《测试驱动开发实用指南》这本书时,我还以为是驱动开发方面的书籍呢,仔细翻了一下才知道不是。这本书的英文名称是《Test-Driven Developme...
  • syspro
  • syspro
  • 2008年04月03日 14:37
  • 2552

Bourbaki集合论(1)译者序与作者简介

Burbaki集合论(1)
  • zzwu
  • zzwu
  • 2014年01月16日 19:46
  • 2710

Test-Driven Development

信奉Test-Driven Development的工程师鄙视先写code再补tests的工程师,先写code再补tests的工程师鄙视不写tests的工程师,不写tests的工程师鄙视又他妈乱改需求...
  • huaweitman
  • huaweitman
  • 2014年12月25日 17:16
  • 427

TDD (Test-Driven Development) Patterns

Test-Driven Development PatternsTest n.How do you test your software? Write an automated test.Isolat...
  • heyang22118952
  • heyang22118952
  • 2007年02月28日 20:56
  • 538

裸奔和rtos下开发的差异分析

嵌入式设备网络化、u盘化、功能复杂化的趋势,使越来越多的、过去可以用裸奔实现的嵌入式产品,产生了应用操作系统的需求。     而人力成本的持续上升、芯片成本的连续下降,以及cpu性能的迅速提高,又为大...
  • djyos
  • djyos
  • 2015年05月13日 17:18
  • 1398

测试驱动开发实践 - Test-Driven Development

一.前言 不知道大家有没听过“测试先行的开发”这一说法,作为一种开发实践,在过去进行开发时,一般是先开发用户界面或者是类,然后再在此基础上编写测试。 但在TDD中,首先是进行测试用例的编写,然后再...
  • tgdem2012
  • tgdem2012
  • 2016年08月06日 18:37
  • 29

测试驱动开发(Test-Driven Development)

最近看了下测试驱动开发(Test-Driven Development), 第一部分用一个资金实例讲解测试驱动开发模式(采用java编写示例),感觉挺不错的。    不过这种模式需要编写跟功能代码量...
  • To_Utopia
  • To_Utopia
  • 2012年07月27日 15:53
  • 690

Test-Driven Development and Testing Early

Test-driven development (TDD) is a discipline of design and programming where every line of code is ...
  • liuchunming033
  • liuchunming033
  • 2014年03月26日 18:11
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让数据库应用开发不再裸奔——Test-Driven Database Development译者序
举报原因:
原因补充:

(最多只允许输入30个字)