《测试驱动数据库开发》—第1章1.1节为何改变书的内容

简介:

本节书摘来自异步社区《测试驱动数据库开发》一书中的第1章1.1节为何改变书的内容,作者【美】Max Guernsey, III,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.1 为何改变书的内容
测试驱动数据库开发
本书最初的书名是《敏捷数据库开发:从需求到交付》。到现在书名和内容都己经变了好几次。

在读者反馈和自我启发的双重作用下,本书经历了几次激进的蜕变,由开始的一本主要讨论开发过程并稍带讲一点技术的书,转化为讨论 TDD 的差异如何影响敏捷数据库开发过程的书,然后最终将有关团队级别的开发过程内容完全去除而成为今天这个样子的书。

为什么我几次变化本书的方向?主要是因为开发人员学到的有关敏捷软件开发的几乎所有有关过程管理(process-management)的知识,对任何领域都是普遍适用的,通常情况下甚至适用于硬件设计。我过去写的很多东西,要么是对别人写过的内容的重复,要么就是向人们说教那些他们已经接受了的东西,再写这些东西注定都是无效的。对于那些在构建数据库时寻求如何做敏捷开发的建议的人,建议先学如何做敏捷软件开发,然后再将其运用在数据库上。

当然,如果你做数据库开发,你会发现你需要学习如何做TDD。要想让任何敏捷开发的努力取得成功,测试驱动开发的法则是绝对至关重要的,并且我相信是无可争议的,你需要一系列可执行的规格说明来告诉你,你所做的变化是否安全。如果没有这样的规格说明,你就不可能让敏捷有成效。

事情在这里变得有些棘手,将测试驱动开发运用到传统面向对象开发和数据库开发中会有很大的不同。也就是说,尽管 TDD 的原则普遍适用,但是为构建应用程序和中间层逻辑而开发的相应的实践,却不总会完美地被转换到数据库领域中。

另外,即使你的团队还没有准备好拥抱敏捷软件开发,你也能使用测试驱动开发。

1.1.1 每天敏捷都在逐步地入侵我们的领域
文明的潮汐控制着人们做事情的方式。当这个大潮退去时,我们集中起来建立指挥和控制结构,并试图在大批量和排长队的现象中找到效率。当潮水涨回来时,我们又打破那些结构,开始将控制权交到“平常”人的手中,并且试图在那些离问题最近的人所快速做出的决定中找到效率。

潮水正在涨回来,在本书写作期间,潮水也将可能退去。

对于我们来说,潮水涨潮是否正确,就跟站在海滩上的人关心水冲到岸上是否正确一样,是无关紧要的。波浪已经来临,不管你是否喜欢,最好做好准备。因为开发人员不得不用更小的增量和更快速地交付价值的方式来改善开发工作,因为人们已经不愿意经过漫长的等待才能得到自己想要的东西。

一些人认为数据库是个例外,是一种特殊情况,即能够忽略那种驱动力,该驱动力无处不在,并促使我们更频繁地做出改变和对实际需求进行反应。没有更客气的方式来表达这个意思:那些人错了。数据库也不例外。当然,数据库开发者或许可以躲在海湾里将原来的开发领域保留得比其他产品开发领域更长一点,但是并不能阻止潮汐。在未来的几年或几十年里,快速做出变化的压力将变为压倒性的,并且坦率地说,与能适应该趋势的人相比,那些阻止这种趋势的人最终将被降级为不那么重要的角色。

1.1.2 若没有TDD敏捷就没有成效
试图得到快速的工作交付仅存在一个问题:变化是件危险的事情。如果你正在做交付价值的事情,那么对这件事所做的变更必然会危及价值的持续交付。如果你的产品停止交付价值,那么你就会开始失去与客户的良好关系。如果任由上述腐化持续足够长的时间,你就会开始失去客户。

除了那些把股票借给对冲基金公司来做“放空”操作的托管代理机构,以及做类似事情的组织之外,没有人想要失去客户1。所以,即使变化发生得非常频繁,保护价值的机制也必须落实到位,这样的机制才允许我们能够很快地做出改变。

上述机制就是测试驱动开发。测试驱动开发提供了多种优势,但对于本书所讨论的内容来说,其主要优势是用自动测试为软件组件提供充足和有意义的保护。部署到位的测试一方面能够在破坏了某些代码时立即给你反馈,另一方面也能防止你把某些已处于被破坏状态的代码作为产品发布出来,这两方面的优势缺一不可。

除了上述测试驱动开发最关键的好处之外,还有许多其他好处被很多人奉为 TDD 的“主要的”好处,包括加强软件设计分析或者戏剧性地减少过度构建。上述好处非常重要,本书将讨论这些好处,但是它们不会让你的开发工作做得很快,它们仅仅是帮你把工作做得快一点而已。

1.1.3 在数据库领域运用TDD是个挑战
本书之所以存在,是因为 TDD 非常难以在数据库开发中得到运用,特别是难以用一种能够让开发者快速地对变更进行开发、验证和发布的方式来运用。

这种困难很大程度上源于开发人员最初构建数据库的方式。在许多组织中,数据库是远古遗迹。一些特定的数据库实例非常重要,且其重要性已经让设计本身黯然失色。

我见过许多这样的案例,开发者只基于一些极其重要的实例来考虑数据库的设计而不顾其他。也就是说,他们只考虑设计“这个”开发数据库、“这个”测试数据库和“这个”生产数据库(production database),并且他们主要关心如何将变化从一个数据库传播到另一个数据库。为了使用测试驱动开发进行数据库设计,这种思考方式必须做出180°的大转变。

本书接下来的各个章节将解释如何能做到这一点。

1 在美国,一些大型投资基金机构购买股票后,一般将其托管在由一些大的银行或券商组成的托管代理机构手里。另外,一些对冲基金公司可以从上述托管代理机构手中借到股票来进行“放空”操作,为此对冲基金公司需要向托管代理机构支付利息。对于这些托管代理机构,一方面其客户不会知道它们可以把卖家已经卖出的股票再借给对冲基金公司来做“放空”操作,另一方面其手中持有的上述这些用于做“放空”的股票十分稀缺,所以这些托管代理机构不用担心失去客户。—译者注
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
4月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
7月前
|
数据采集 人工智能 监控
人工智能驱动的软件工程:测试左移的崛起价值
本文探讨了人工智能驱动下测试左移理念在软件工程中的重要性,分析测试工程师在需求评估、AI代码生成及遗留系统优化中的关键作用,揭示AI带来的挑战与机遇,并指出测试工程师需提升技能、关注合规与可维护性,以在AI时代保障软件质量。
418 89
|
10月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1361 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
3540 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
机器学习/深度学习 数据采集 人工智能
探索AI驱动的自动化测试新纪元###
本文旨在探讨人工智能如何革新软件测试领域,通过AI技术提升测试效率、精准度和覆盖范围。在智能算法的支持下,自动化测试不再局限于简单的脚本回放,而是能够模拟复杂场景、预测潜在缺陷,并实现自我学习与优化。我们正步入一个测试更加主动、灵活且高效的新时代,本文将深入剖析这一变革的核心驱动力及其对未来软件开发的影响。 ###
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
343 1
|
机器学习/深度学习 人工智能 自然语言处理
AI驱动的自动化测试:提升软件质量的未来之路
【9月更文挑战第3天】AI驱动的自动化测试是提升软件质量的未来之路。它借助AI技术的力量,实现了测试用例的智能生成、测试策略的优化、故障预测与定位等功能的自动化和智能化。随着技术的不断进步和应用场景的不断拓展,AI驱动的自动化测试将在未来发挥更加重要的作用,为软件开发和运维提供更加高效、准确和可靠的解决方案。
|
机器学习/深度学习 人工智能 自然语言处理
探索软件自动化测试的未来:AI驱动的测试策略
【7月更文挑战第47天】 随着人工智能(AI)技术不断进步,其在软件测试领域的应用也日益广泛。本文将探讨如何整合AI技术与现有的自动化测试流程,提出一个面向未来的测试策略。文章重点分析了AI在测试用例生成、执行、结果分析和持续集成中的作用,同时预测了这种技术融合对测试工程师角色的影响,以及它如何提高软件测试的效率和准确性。
|
Java 测试技术
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现