图书简介:本书用实际案例及故事讲述了测试驱动开发(TDD)的最佳实践,从TDD为什么实践起来非常困难等最根源的问题入手,循序渐进地介绍了构筑TDD的三项修炼,涉及到未雨绸缪的单元及自动化测试、结构化、敏捷以及平衡式的开发迁移、软件开发和重构设计以及大量的实践心得和经验总结归纳,给团队、读者以最佳TDD实践的成长路线图,从而走出TDD实践丛林。
本书用武士历经万险,最后找到了美丽的TDD公主的故事,给大家讲述了TDD实践中的技能、知识基础以及技巧和经验。扶君上马,送上一程,希望大家在轻松愉快地品味故事的同时,毫不费力地修炼好通往TDD乃至整个极限编程实践的大门。其实,这是一个真实的案例,故事中的主人公Jack,实际上就是万千读者中的一员。是的,在这个行业里呆了很久,认识了很多像我们主人公的他们,就是不懈追求真理、追求先进技术和研发管理经验、严谨、务实的广大软件开发者及管理者中的一员。不信,请看下面这个以一只猫的自传体小说来演绎的这段真实的TDD历程带给Jack的幸福故事。 张大花是一只猫—— 猫尾巴上的IT爱情 张大花是一只猫。 张大花是一只家猫,一只普普通通的三花猫。 张大花曾经非常讨厌自己村姑气的名字,抱怨主人怎么给自己起了个这么俗气的名字,它都羞于主人叫她。那时她嫉妒五楼那个嗲声嗲气的贵妇犬,虽然瘦骨嶙峋,却好像披着个借来的白裘皮大衣,每天被她那手上带着好几个戒指、涂脂抹粉的胖太太亲热地叫做“海琳娜”。影集里的照片,大花那时最喜欢那张主人高兴时把一个太阳镜带在她的头上,给她照的照片。照片上她懒洋洋地坐在白色的沙发上。只有这张照片,大花才觉得自己能稍微有些洋气,有时主人不在家时自己会翻开影集欣赏半天。后来主人的同事在家里讲笑话,说一个朋友问她从事什么行业,她说是IT,这个朋友想了半天说原来是it呀(英语中“它”的意思),肯定是取个贱名好养活。听了这个笑话,大花才明白主人为什么给她起名叫庸俗的“张大花”了,后来大了又想,现在大俗即大雅,民族的才是世界的,更不会有八楼的大黑狗和二十楼的波斯猫同样叫“亚历山大男爵”的尴尬。这样想,她就不会像从前那样在意自己的名字了。 张大花是自由的,因为现在这年代是那些出身高贵血统的宠物的天下,大花明白她走到哪里,都不会有人注意自己,更不用担心有人会捉她。大花胆子非常大,她敢从三楼自己打开玻璃窗,钻过雕花的护栏,顺着空调管道自己爬上爬下。每天自己在家呆得无聊,大花就到处乱窜,直到天黑才回家,反正趁主人回家前原路返回就行了。大花整天在小区的花园里随便闲逛,有时大花会很念旧,心血来潮地跑回原来住的地方。那里已经拆迁了,到处一片狼藉,一个高大的吊车在远处忙碌着。看着这曾经非常熟悉的地方,大花来回走了几圈,已经分辨不清,哪个残垣断壁是自己和主人住过的楼了,大花又不无伤感起来。不过不用担心大花会走丢,大花在搬家时和主人坐在驾驶室里就记下了路。这一点她对自己的聪明头脑非常自信,就像大花的主人一样。 大花的主人是一个搞软件设计的小姑娘,这一行业好多聪明的男孩子都叫苦,那些和大花主人同事的姑娘都已经转行了,但大花的主人却一直从事着这个行业。大花的家里有好多好多又大又厚的书,隔不了多长时间,主人就会从书店买回一本,看到很晚。大花有时看着也非常心疼她的主人。 大花跟主人关系很好,她清楚地记得她是怎么来到这个家的。那是一个寒冬的夜晚,北风呼呼地吹,她蜷缩在路边冬青里,浑身抖着,却找不到自己的妈妈了。而她当时出生只有两个月。她又冷又饿,已经快叫不出声了。虽然她的旁边就是公交车站牌,但是没有人理会她,有人听到了她的叫声,抱起来看看是一只普通家猫,脏兮兮,赖赖的,就又重新把她放回路边。她已经冻得快没知觉了,她想她明天等不到太阳出来也许就会死了。这时末班车来了,她又下意识地低声叫了两声,也许这凄惨的两声给她带来了一辈子的缘分。那天主人正好晚上加班回家,听到她惨兮兮的叫声,将她放到了怀里,裹在羊绒大衣里,她一进大衣就睡着了。到了家,她打起了喷嚏,还咳嗽起来。主人在牛奶里拌上压碎的药片,整整喂了她两天她才活过来了,搬家时主人想扔掉小时喂她的奶瓶,但是被大花又悄悄骨碌到箱子里,因为她不想扔掉那段记忆。 有时大花还能忆起来到家以前的事。那时跟着妈妈四处流浪,过着风餐露宿的生活,日子虽然苦,跟妈妈在一起倒也很香甜。因为天冷时她会依偎在妈妈温软的毛皮底下,饿时,她会吮吸着妈妈的乳汁听妈妈讲她出生前的故事。那时主人家来了一个一只眼睛蓝一只眼睛绿,浑身雪白的波斯猫,于是妈妈拖着还没出生的她就被赶出了家门。大花想她以前为什么那么讨厌海琳娜,可能就是小时候听到的那可恶的波斯猫跟海琳娜有着一样颜色的白毛皮而已,现在大花想,赶妈妈出来的是妈妈喜新厌旧的主人,并不是那只波斯猫呀,所以也就不那么讨厌海琳娜了。 大花和主人的关系,小时候主人像妈妈,长大后和主人逐渐变成朋友关系,主人除了会为大花准备猫粮和毛砂外,其他由着大花折腾,因为主人并不要求大花能怎么样,只要她能快乐就行。更不会像海琳娜一样,一会儿被她的胖太太套上一个花里呼哨的小马夹,一会儿又被套上沙袋说要锻炼身体参加什么狗赛,乐得大花会学赵本山调侃海琳娜,说“小样,换个马夹就不认识你了”。看着海琳娜痛苦的表情,大花有时想海琳娜也挺可怜的,过分的关注和关心也许就是痛苦和压力了。大花挺满意和主人现在的关系,她想喊主人姐姐,她每天晚上会趴在姐姐腿上,和姐姐亲热几分钟就会高兴地一晚上打起小呼噜。 由于主人下班后要看好长时间的书,大花有时也会跟着翻一翻,她有时会想自己是一只多么聪明的猫啊。因为自己也能看得懂一些简单的类似“hello,world”的小程序,有时主人不在家,她还能用爪子打开计算机Power键,看看熟悉的Windows画面。每每想到这些,她都会自豪起来。上次头脑简单的海琳娜看到大花想套近乎,拼命想跳下胖太太的怀抱,却被那个暴发户胖太太拦住,还无故鄙夷地骂大花是“野猫”时,大花就高高地扬起自己骄傲的头颅,表示对那个胖太太不屑一顾。 大花有时也会对主人不满。因为姐姐不会打扮自己,整天素面朝天穿着牛仔裤,留着那几年不会变得清汤挂面式的头发,浴室里浴架上的化妆品更是从来也不会超过两瓶,弄得大花上次跟男爵猫在一起不知道什么叫SKII,让男爵嘲笑了半天。瞧隔壁的海伦姐姐,一头漂亮的离子烫卷发还夹带些不经意漂染的黄色,脚上的高跟鞋跟还没有大花的爪子大但是比自己的头还高,还会每天换一身新衣服,带着漂亮夺目的首饰去国贸上班。虽然大花知道海伦姐姐是一个只会接电话的前台小姐,工资并不高,但海伦姐姐会撇着嘴说她上班就是为了一种心情。看最新的时尚节目,大花才知道海伦姐姐叫BOBO一族。海伦姐姐的女伴会打电话给她说:“国贸地下打折了,那双你上次看中的鞋子才卖两千块钱,还不快去抢。”海伦姐姐就会大呼小叫地打车跑出去,但每次月末海伦姐姐都入不敷出。只有海伦姐姐一个女儿的海伦妈下岗在家,大花经常偷偷看到海伦妈有时吃饭时就是喝白开水啃面包,老摇头流泪。大花有时会想主人这样也挺好,至少不会自己光鲜让她也啃干面包,她会有伟嘉,还有维它命,要不毛色这么光亮。 大花就是在这样的生活中遇到了凯撒,大花那天在小区花园里慵懒地有一搭没一搭地散步,这时她遇到了凯撒。凯撒是一只刚刚搬来的胖胖的松狮犬,金黄色的鬃毛非常威武,翘翘的黑嘴巴,笑呵呵地伸着紫色的舌头,像极了大花在“狮子王”中看到的“辛巴”。正惊奇间,凯撒向她友好地走过来,憨厚的模样,让大花颇有好感。大花非常喜欢凯撒,因为凯撒没有种族血统观念,不像那只亚历山大男爵猫老是对她摆出一副视而不见、不屑一顾的样子。大花想不就是比我多带个蓝色的隐形眼睛嘛,有什么了不起。 大花用爪子挠挠凯撒软软的肚子,抓抓他的鬃毛,凯撒也不生气,还用舌头舔大花的脸。大花挺痒痒的,跟凯撒玩得非常起劲。直到凯撒的主人招呼凯撒回去,凯撒依依不舍,大花也不忍分开,于是就跟着到凯撒家做客。到了凯撒家里,大花才开始打量了一下凯撒的主人,黑黑的皮肤,大大的眼睛,穿着洗得发白的牛仔裤和T恤,大花想他可没有william哥哥帅。william哥哥是大花主人原来的男朋友,那时在外地读经济学研究生,他会经常来看姐姐,会 常讲些笑话逗大花和姐姐笑。还会写诗 “我远去列车的铁轨, 是思念的琴弦, 轰隆隆不停的那是我想你的音符罢了,走得越远, 弦律会向身后的铁轨一样拉得越长。” 大花每次都好像感动得要哭。每月姐姐会留下自己和大花的生活费后将剩下的全部寄给哥哥,还会想着冬天给哥哥寄毛衣,考试时寄补品。但william哥哥到美国读博后,来了一封信就再也没有消息了。那段时间,姐姐常独自哭,大花自己只有静静地陪伴姐姐,大花想难道美国就没有铁轨了嘛……大花不愿再想那段伤心的往事,搞得自己心情不好。 凯撒的主人像凯撒一样友好,他招待大花和凯撒吃了妙鲜包后,就自己到电脑前飞快地敲着键盘。大花绕到他的身后,看到了那是一行行的程序,大花对黑哥哥更有了几分好感。因为大花觉得做IT工作的人,虽然讲话不多,不会甜言蜜语,但会像他们写的这一行行的代码,实在没有一点虚假,就像姐姐一样。哥哥的桌子上也放着一本红红的《C++ primer》书,和自己在家中常翻姐姐的那本一模一样。 凯撒会让大花玩自己的皮球和橡皮骨头,大花玩得不亦乐乎,都不想回家了。天晚了,姐姐在各个楼层轻轻唤着大花。 黑哥哥将她送了出来,说:“是您的猫吧,非常乖的猫”,大花挺高兴。 姐姐高兴还有些愠怒地说:“可找到你这家伙了,谢谢”。 “我是刚搬来的邻居Jack,很高兴认识你”,黑哥哥温文尔雅,讲话时露出白白的牙齿,淡淡但客气的笑容。大花忽然觉得黑哥哥有些像古天乐了,大花可是他的忠实fans。 大花有时会带着凯撒回家,凯撒的可爱和好脾气令姐姐非常喜爱,大花有时会生出一些嫉妒来。但还好凯撒不会跟大花争什么。黑哥哥也常来,和姐姐因为同样的职业有好多话题,他们讨论着如何编写运行稳定的程序,如何进行项目管理。大花和凯撒有时也会静静地听着。黑哥哥会有一些新名词,例如“XP,CMM,TDD,每日building”,让大花佩服不已。大花想,我也应该算一只有IT经验的猫了吧,也许这样会比较容易在外面找到工作。 姐姐出差时,不再像以前那样留下几天猫粮和水,独自让大花留在家中了。大花会被黑哥哥接去和凯撒幸福地生活几天,大花会和黑哥哥、凯撒乱疯。黑哥哥会把大沙柚皮剪成漂亮的帽子给大花戴上,并拍成照片放在网上供人下载,大花想我一不留神会不会出名呢,出名了要怎么面对那些追星的娱记呢。她自己想不明白,还会问问凯撒,但凯撒也说不清楚。黑哥哥去做项目了,凯撒也会到大花家来。大花和凯撒会想,他们IT人怎么老这么忙呢?不过大花和凯撒都已经习惯了。 姐姐承担了一个新闻出版系统的项目,作为项目经理不仅要做项目管理、业务调研、系统分析设计,还要有后台部分的主要编码,那段时间姐姐工作到很晚。大花也知趣地自己吃饭睡觉,不打扰姐姐。大花想,姐姐这不是在干几个人的活吗?他们的香港老板真黑啊。大花有次听姐姐跟黑哥哥讲笑话,说她们公司同事在给老板过生日时,送给老板一件礼物,一台榨汁机,嘴上名曰说是请老板多补充VC。黑哥哥大笑说,你们肯定是说老板榨你们汁了。 姐姐有时工作太累了,会抱怨说公司会把女的当男的使,男的当机器使。还会想不开说不做了,说一线软件项目经理真累啊,在别的国家,项目经理可以不懂技术,但在中国项目经理还必须是技术leader,否则团队中的人肯定不服气,或者客户不满意了。黑哥哥会不置可否地笑笑,帮姐姐分析问题,帮姐姐做风险应对计划。大花有时想,如果自己也这么累不就成机器猫了吗?她就愿跟凯撒一起玩,那就干脆不做IT领域的猫了。 姐姐终于病倒了,诊断为胃溃疡,要卧床休息。黑哥哥下班后会熬好鸡汤给姐姐,虽然是拿着菜谱随看随做的,笨手笨脚的让大花又有些着急又有些想笑。但大花除了和凯撒老实呆在一起外,其他一点办法也没有。有时黑哥哥会将大花藏在电脑包里带到医院去,大花这时会不吭一声,因为躲过那位凶凶的老护士的视线,她就能到姐姐身旁呆一会儿。 姐姐的项目进度延迟了,姐姐非常着急。黑哥哥临时接管了姐姐的工作邮箱,在家时按照项目的需求,迭代地按照测试驱动开发的模式按照理解项目的主要编码部分完成。去医院时,哥哥带着笔记本将一些需求中的问题和姐姐沟通,然后回家再次将代码重构完成。大花不放心地偷偷监督了哥哥的工作,发现黑哥哥编写的程序整齐规范,还看到了他编写的大量自动单元测试代码,黑哥哥只要一行命令就可以让程序重新自动进行单元测试,这让大花非常佩服。 姐姐的病好了,系统也按计划上线了,并顺利和客户进行了系统验收测试。哥哥和姐姐心情很好,大花和凯撒心情也很好。 黑哥哥写了一个简单程序,说程序的输出就是他想要对姐姐说的。大花偷偷看了看,并伸出自己和凯撒的爪子,算了半天,也没有算清,黑哥哥拿红丝线仔细别在大花的尾巴上。 int main() { int s = 1-2+3+4+5+6+7*8*9; for(int i =0;i<10000; i++) { cout << s << endl; } }; 大花回家了,姐姐将程序输入到计算机里,一个又一个521在DOS窗口里输出了,这不是一万个吾爱你吗,爱看爱情剧的大花乐滋滋地想,这个含蓄的不爱讲话的黑哥哥也挺浪漫的呀。 这天晚上,大花做了一个梦,梦见她和凯撒生活在一起了,凯撒还用爪子给她捣饬捣饬毛,说“准备好了,茄子”。 正像张大花文中的Jack一样,乐观、热情、坚定,这是我们进行软件开发最佳实践道路上的必备心态,也希望像我们的主人公Jack一样收获TDD实践宝贵经验的同时,收获更多…… 接下来让我们看看一段寻找TDD精髓的征途…… 对于本书中的问题或者感想,哪怕只是就某一相关事项想找我聊聊天,作者随时恭候大家。Wangxy.05@sem.tsinghua.edu.cn,谢谢。 王晓毅 于清华园