022 TDD和Stack Overflow的专家开发者

《黑色敏捷书》简体中文版可在这里购买:https://weidian.com/s/161651986?wfr=c&ifr=shopdetail

(《敏捷思维》在背景中播放)

Vanilla:呃,你就是Lecter先生吧?

Hannibai:Lecter博士。叫我Hannibai就好了。

Vanilla:博士先生,TDD是如何运作的呢,我们可以尝试使用吗?

Hannibai:流程似乎非常简单,和开发者熟悉的传统工作流步骤恰好相反。目前我对这样工作的效果比较关注。此外,我还很关注这种工作流的价值。

Vanilla:呃,是的。回到工作流上,你了解这些步骤吗?

Hannibai:工作流似乎是,第一步,研究产品代码,发现你想变动的地方。

Vanilla:没错,正是。

Hannibai:第二步,决定具体的设计。考虑是新增方法,还是直接修改已有的代码。

Vanilla:然后呢?关键的步骤是?

Hannibai:是的,Clarice。第三步是——

Vanilla:呃,Clarice?

Hannibai:请让我继续说,第三步是很有趣的一步。我们并不是直接变动代码,相反,我们会写出——

Vanilla:(很激动地)测试代码!

Hannibai:没错,为变动代码所写的微测试。有时候,我们需要改变一个已有的接口,或者写一个新的对象和函数,然后用测试来驱动调用已有代码里的新接口。确定微测试的规格,是实现下一步功能的最简单方法。

Vanilla:(很夸张地)然后呢?

Hannibal:第四步,运行微测试,查看是否能通过。观察红色的错误提示。你看见是哪个了没有(严肃地),Clarice?

Vanilla:啊哈……

Hannibal:也就是说,微测试的确有可能通不过。但你知道吗,Clarice?

Vanilla:啊……

Hannibal:

(angrily) There is no sense in writing automated tests that cannot indeed fail!

Hannibal:(有些生气的样子)如果所写的微测试100%会通过的话,就没必要写啦!

Vanilla

True

Vanilla:确实如此。

Hannibal:还有第二个原因,你知道不?在我们添加或是修改了产品代码之后,可以观察测试结果由失败到通过的改变。

第三个原因,先写测试,能让你从代码调用者的角度思考。调用代码的人才是新功能的使用者。这不像你自己独自吃掉一个蛋奶酥,很快当。学会用良好的方式编写接口,不可能像吃蛋奶酥一样一下子就好。这一切是一种更高明的代码编写方法。

Vanilla:(觉得尴尬和唐突)呃,好的。听起来挺不错的。我们可以开始了吗?

Hannibal:没错。我们把故事分成两部分,一部分要使用TDD,另一部分不用TDD。我们用计时器来测量每个组所花费的精力。

Vanilla:好的,为什么这样做呢?

Hannibal:(清了清喉咙)啊,亲爱的Clarice,你看见了没?我们必须了解TDD的确是能节省开发和测试环节时间的。不然何必使用TDD呢?

Vanilla:是的,有道理。

Hannibal:计时开始,大家行动吧!

(Typing sound.  Music.  Time passes. Ding.)

(打字的声音。音乐。时间过去了。叮。)

Vanilla:测试已通过。

Hannibal:好极了,Clarice!TDD比我想象的还要有用!我没想看到绿色指示条的时候,那种喜悦的成就感多好!看看我们的测试报告!我们通过了6个测试,确认了代码能满足我们的需求。只花了一小时。看看呢!就点一下运行按钮,测试不到一秒钟就执行完毕了。每个微测试只需要几百分之一秒。好极了。

Vanilla:是的。

Jose:看看呢,你们两个伙计在干什么?

Junior Joe:Vanilla Pop与Stack Overflow的顶级开发者一起结对编程?

Jose:Pops会成为另一个XMan?

Hannibal:我都兴奋起来了,嘴巴都有口水了。我能吃掉你的。

Vanilla:哇,博士先生,请冷静下来。

Junoir:是午饭时间了。先生,我们是不是可以…

Hannibal:博士

Junior:把尊敬的博士先生带去吃午饭。

Vanilla:呃,我没有——

Hannibal:好极了,我们一定会有个安静、封闭些的地方。最好可以大声喊叫。我住得离这里不远,我可以带你们三个过去吃午饭吗?

Jose:当然——

Vanilla:Jose和我有事情要忙呢。

Jose:有吗?

Junior:我们可以帮你们搞定的。

Vanilla:不,我们还需要你们的帮助呢。

Junoir:你需要吗?

Hannibal:噢,真遗憾呢……

Junior:不,不,Pop。博士和我会过去的,我稍后再帮你。

Vanilla:但是——

Hannibal:Clarice,我们出发吧。(他们的声音消失在了走廊里。)我得到了非常非常想要的一个短柄槌球,现在只需要一些新鲜的肉食就好啦。

Jose:好的,Pop。什么情况?我们午饭的时段并没有其它安排呢。

Vanilla:我不相信那个人。

Jose:你太偏激了。不管怎样,我们去买个汉堡吧,我饿了。

Vanilla:我觉得我们以后见不到Junior Joe了。

(Suspense sound)

(暂停的声音)

(Door sound)

(开门声)

Vanilla:你回来了哦,Lecter博士。Joe呢?

Hannibal:Joe说他有点事情要外出一趟。你应该一起来吃午饭的,Clarice。享受美食就像是坐在上帝身边一样,我总是这样说。

Vanilla:啊,让我给Joe打个电话。

Hannibal:荒唐,我们还要写代码呢。来,我把计时器弄开。让我们做第二部分,不用TDD,看看是什么情况。

(Typing music)

(打字的声音)

Hannibal:真让人兴奋,不是吗?

Vanilla:没错,我们像开发者通常那样写代码,然后调试错误,执行代码,发现并修复问题。花了这么多时间才得到正确的代码,我一点不吃惊。

Hannibal:没错。用TDD的话,我们会觉得好像在做设计工作一样,有些不适应。使用常规的“发现错误再解决”开发模式,我们会忙着写代码,围着调试器忙乎,直到代码能投入使用。

Vanilla:我们甚至有一个小的程序来执行我们的代码。多浪费时间呢,全部都是手动操作。我觉得我们的测试都还不够深入。

Hannibal:我同意。我们的测试没有记录。全部都没有记录呢。就好像我们从来都没测试一样。大家都明白了吧,我敢说,Pop,如果时间太紧张,大家可能想完全跳过测试。但是我们用计时器的结果来看,反而节省了10%的开发时间。不过——

Vanilla:不过,没有自动化测试的时候,所以我们的进度反而落后了。

Hannibal:的确如此。

Vanilla:如果我们调整了功能,我们就不会——

Hannibal:(吃着美食的声音)那个好吃的绿色进度条告诉我们一切都状态良好。知道全部代码都状态良好很重要。我们就可以很快发布代码了。(他站起啦,准备离开)Vanilla Pop先生,这非常有学习的价值。我谢谢你了。编写TDD的微测试代码所的投入,和它持续不断的回报相比,简直是微不足道。我们随时都可以运行这些测试。而使用调试器运行的手动测试的价值,只是一次性的。举例来说,我亲爱的Vanilla,如果我说让我们调整一下还没测试的代码,接着再继续手动测试,你觉得怎样呢?

Vanilla:我担心我会抗议的。这样会花费至少20分钟,来重做我们在调试器里所做的工作。

Hannibal:正确!所以微测试每天都会产出价值。手动测试的价值就如同昙花一现,是一次性的。手动测试真是个负担,确实如此。但是想进行手动测试的心理诱惑是很大的。不过,换个方法,点一下运行,微测试就搞定了!执行所有自动化微测试的付出几乎是零。

Jose:有谁看见Junior Joe了吗?他不接电话呢。

(Suspense)

Hannibal:打搅下,我得走了。(开关门的声音)

Vanilla:噢,天呐,就像我最糟糕的噩梦一样。可怜的Joe。我就知道不应该让他和那个怪物一起离开的!现在都见不到Joe了。

Jose:你和Lecter检查了代码了没?

Vanilla:当然,为什么这样问?

Jose:连续整合面板报告有微测试未通过。

(Suspense)

Vanilla:不可能啊,我们在提交前运行了全部的测试……等等,看到这里了没?有人提交了一个有瑕疵的代码。

Jose:噢,看呀,构建的代码开始了另一个测试。你看看那。无论是谁解决的这个问题,代码已经通过测试了。

Vanilla:让我看看是谁提交的代码。记录提示说是Junior Joe提交的。他肯定在家里忙着办公呢。

Jose:他在Slack上给我发了消息,说他吃了午饭回家了。他之前给我说过,他在家手机信号不太好。所以你还觉得他是个怪物吗?

Vanilla:呃,好吧,没事了。

Jose:看看楼下的街上。那不是Lecter博士和Code Dog吗?

Vanilla:噢,天啊,看起来鲶鱼被换成了三文鱼。祝三文鱼好运。

Narrator:

解说:如果你喜欢这段很有戏剧性的TDD故事,那么你会喜欢阅读《黑色Scrum》漫画书的。这本漫画让你跟随Ace,一位高冷的敏捷顾问,一起探险、了解Scrum。如果你不喜欢漫画,那么看看《黑色敏捷书》这本小说吧。它讲述了一个项目经理,把已有的瀑布型项目转变为敏捷管理,而使项目获得了生机。漫画和小说都可在亚马逊购买。印度的顾客可在Pothi.com购买《黑色敏捷书》,而中国的顾客可在我的微店(LancerKind1234)购买。注释中有这些商品的链接。

部分音效来自以下FreeSound.org用户:keweldog和risto_alcinov和Breviceps.

你要学习敏捷?你喜欢读悬疑书吗?

我感觉学习敏捷有一点难。下班时候我要玩还是休息。我的书架上我有很多敏捷书和小说书。下班时或者周末我经常看小说书可是非小说很小就看。从2000我也写很多本小说书。为了我喜欢每个人了解敏捷,我写专项的小说书黑色敏捷。这个书你会阅读很快乐也学习敏捷。如果你有兴趣,你可以买在我的微店。如果你不喜欢这本书你告诉我然后我还你的钱:https://weidian.com/s/161651986?wfr=c&ifr=shopdetail

敏捷理念
敏捷理念
022 TDD和Stack Overflow的专家开发者
Loading
/

Comments are closed.