`
yearn21c
  • 浏览: 18422 次
  • 性别: Icon_minigender_1
  • 来自: 广东汕头
最近访客 更多访客>>
社区版块
存档分类
最新评论

梦想风暴

阅读更多
作为一个有理想、有追求的程序员,你成天被各种名词包围着,你对其中一个叫做敏捷的东西特别感兴趣,因为它特别强调人的作用,这听着都让做程序员的你感到舒服。为了让自己早日敏捷起来,你从众多的敏捷实践中选择了一个叫做测试驱动开发(Test Driven Development,TDD)的作为你的起始点。因为它对你周遭的环境要求是最低的:它不像结对那样,要求其他人和你一起合作;也不像采用Story那样改变你所在团队的做事方式……你所需要做的,只是在你编写业务代码之前,把测试先写好。这完全是一种润物细无声的做法,根本无需告诉你之外的任何人。就在别人忙碌的找bug时,你便开始享受敏捷带给你的快乐了。顺便带来的好处是,下次在那里和别人争论敏捷的时候,你可以以一个实践者的姿态出现,而不是在那里信口开河。

你不会打无准备之仗,于是,你通读了Kent Beck的那本薄册子。通读之下,你对TDD更是充满了信心。因为“红——绿——重构”的步骤实在是简单得令人发指。好吧!总而言之,你已经信心十足的准备开始TDD,步入敏捷的康庄大道了。

理想很美好,现实很残酷。

当你着手在实际项目中体验TDD的时候,一切变得并不像最初看起来的那样美好。虽然你努力的坚持着TDD的原则,但你经常就会发现某些东西不好测,比如你遇到了数据库,比如你遇到了GUI,比如你遇到了计时器(Timer)。敏捷并非教条,当某些事不可为的时候,你完全可以不那么坚持。于是,你告诉自己,不好测的东西可以不测,这样,至少从心理上来说,你觉得舒服多了。随着工作的继续,你发现,你不能测的东西越来越多,单元测试的覆盖率随着开发的进行正在逐渐降低,一丝恐惧涌上心头。回过头来,再去看Kent Beck的书,你突然觉得,你似乎被骗了,因为Kent Beck的例子貌似全都是逻辑,如果只是逻辑,当然好测了,但现实从来就不是这样。

难道TDD只是看上去很美?

显然,你不愿意就这样放弃,放弃你苦心学来的软件开发秘籍,那些传说中的高手极力推崇的TDD必然有一定道理,TDD确实能够让你感觉很好:能测试的那部分代码确实极大的增强了你对软件质量的信心,而且出错了也确实好找,每次修改代码之后运行测试出现的绿条也确实让你身心愉悦。

那问题到底出在哪呢?你陷入了沉思。

信马由缰,你翻开了自己写过的代码。看着自己写的这些代码,你忽然意识到一个问题,自己遇到的问题并不属于TDD,而是属于单元测试。正如你之前所想到的那样,TDD做法本身的结果是让你感到快乐的。对,一定是单元测试本身出了问题。那单元测试出了什么问题,很显然,一大堆不能测试的部分让单元测试变得很难写,降低了单元测试的覆盖度。那是不是这会是一个无解的问题呢?你显然不愿意就此放弃,所以,顺着这个思路继续向前。

TDD之所以让你安心,主要是每次编写代码之后,运行测试会出现一个绿条,告诉你测试通过。这样,你可以放心大胆的向前继续,因为你的代码并没有破坏任何东西。究竟是什么让你感到不安,显然是那些测试没有覆盖到的代码。你又仔细翻看了一下那些没有测试覆盖的代码,你的思路一下子清晰起来。之所以这部分让你不安,因为里面除了那些确实不好测试的部分之外,里面还有一些逻辑。如果只是那些真正不好测试的部分没有被测试覆盖到,你会觉得心里还有一些安慰。你确定了,真正使你不安的就是与不好测试的代码共存亡的这些逻辑部分。

如果测试可以覆盖到这些逻辑的部分,至少从感情上来说,就可以接受了。那怎么才能让这些部分被测试覆盖到呢?你仔细观察着那些没有测试的代码,如果这样做,这个部分就可以测试了,如果那样做,那个部分也可以测试了,一来二去,这些貌似不可测试的代码可以分解出许多可以测试的部分。

你的心情一下子好了许多,因为这么做终于可以让测试的覆盖度达到让你心理上可以接受的范围。不过,新的问题也随之而来。我在做什么?拆来分去,这不就是设计吗?怎么走到这里来了。我不是在分析单元测试的问题吗?对了,我最初的问题是TDD,怎么一路跑到设计上来了?

TDD?设计?

你突然发觉自己对TDD的理解有一些偏差。TDD,并不代表不需要设计。读过很多书的你突然想起了Robert Martin那本著名的《敏捷软件开发》,上面有一个关于数据库访问的例子。那个例子里面,前后两个版本的差异正好就是考虑设计的结果。通常,在设计中考虑测试,会很容易找到设计中僵硬的部分,让程序更加灵活。再进一步,如果在开始动手之前,稍微进行一些设计,这些问题还是可能注意得到的。你突然觉得,正是因为TDD本身过于强调测试的价值所在,让你忽略软件开发中很重要的部分:设计。

思路一下子清楚起来,TDD其实不只是“红——绿——重构”,它还是与设计相关的:在动手之前,还是要有一定的设计,而且,在设计中要考虑测试的问题。终于解开了心中的困惑,现在的你,对于TDD有了一个新的认识,虽然这个认识不见得是什么终极真理,但至少是通过自己的思考得来的,这让你更加相信实践出真知的道理。
理清思路后,你更加坚信TDD本身的价值所在,也坚定了在日后开发中继续使用TDD的念头,当然,目光远大的你已经盯上了其它的敏捷实践。
分享到:
评论

相关推荐

    hypersnap

    3. 探索Antlr(Antlr 3_0更新版) - 梦想风暴 - 博客大巴.mht:Antlr是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。MHT文件是一种单个文件的网页存档,可能包含关于Antlr 3.0的教程...

    ChatGPT风暴来袭,终极梦想照进现实.pdf

    资源搜集不易,感谢大家支持!

    大学生头脑风暴协会创立策划书2022年[扫描版].pdf

    协会面向全校对未来有梦想、目前迷茫、充满激情并对策划感兴趣的师生。 五、发起人与领导层 协会的发起人和领导层主要由有学生会和社联经验的10级学生组成,他们具备一定的管理技能和热情,致力于推动协会的发展。 ...

    军训感言《热血豪情启大学梦想钢筋铁骨铸军旅英魂》.docx

    而就在他们初识大学生活之际,军训如同一场及时的风暴,席卷而至,它不仅对他们的身体进行着一次严格而全面的锻炼,更为他们的心灵带来了深刻的影响。《热血豪情启大学梦想钢筋铁骨铸军旅英魂》这篇感言,就是对这一...

    概要写作单元测试题(含答案)经典 (3).doc

    同时,这个概要也要提醒人们,在追求梦想和激情的时候,永远不应该忽视安全的重要性。 在英语高考中,要想做好概要写作,除了准确概括文章的主旨,还需要关注文章的结构和逻辑,找出作者的论点和论据,以及文章的...

    雨果的名言警句精选.doc

    2. **勇气与坚韧**:“不管是多么危险的风暴,也不能使他后退”,体现了雨果对坚韧意志的赞美,他鼓励人们面对困难时要坚持不懈,不向阻力低头。 3. **面具与真实**:“被人扯下面具是一种失败,但本人揭去面具那么...

    福建金太阳联考:整装再出发,人生永不“落榜”.pdf

    能甘于平凡,止步不前呢?我们要学会在挫折中成长,把每一次...即使遇到风暴,我们也要扬帆破浪,驶向未知的彼岸。让我们怀揣梦想,勇往直前,相信自己,相信未来,因为人生永不“落榜”,我们的人生篇章永远可以续写。

    【金识源】2015六年级语文下册 5 紫罗兰之死练习 鲁教版五四制.doc

    通过紫罗兰的故事,学生们能够学习到如何认识自我,理解个体价值,并在追求梦想的过程中做出明智的选择。 紫罗兰的故事发生在一片宁静的花园中。紫罗兰,一种谦逊、安贫、温柔的植物,内心却怀揣着对美好事物的向往...

    让人不舍毕业赠言

    4. **挑战与机遇**:面对未知的未来,比如金融风暴或就业困难,鼓励同学们要有信心和勇气,因为真正的实力可以战胜困难,毕业是新的开始,而非终点。 5. **感恩与祝福**:赠言中充满了对彼此的祝福,希望朋友们在...

    2009年北京卷高考作文题目:我有一双隐形的翅膀.doc

    这双翅膀让我在黑暗中找寻光明,让我坚信,无论多大的风暴,都无法阻挡我前行的步伐。 在成长的道路上,我并非孤身一人。父母的关爱、朋友的陪伴如同羽翼般温柔地托起我,让我感受到人间的温暖。他们的鼓励和支持,...

    0.高效团队、团队建设期、团队意识.pptx

    共同的愿景是团队凝聚力的源泉,团队成员需有共同的梦想和成长目标,这可以通过“定位”来实现,即领导有梦,骨干有心,基层有力,大家有利。有效的评估则涉及了解自身和团队成员的能力,遵循团队发展的四个阶段:...

    ATonyTrivisonno'sAmericanDreamPPT教学课件.pptx

    2. **个人梦想的探讨**:在预读任务中,让学生进行头脑风暴,思考自己的梦想是什么,这旨在引导学生自我反思,了解个人目标,并为后续讨论美国梦提供个人视角。 3. **听力理解**:通过听Dr. Hertz的采访录音,学生...

    关联词造句大全三年级篇三年级上册关联词造句及拟人三年级上册关联词造句及拟人、比喻句复习材料.doc

    ” 比喻句:“生活不是等待风暴过去,而是学会在雨中跳舞。” 5. **尽管…但…**:表达让步转折。例如,“尽管很累,但我还是坚持完成了任务。” 拟人句:“尽管石头沉默无言,但它坚韧不屈。” 比喻句:“困难虽大...

    初中语文文摘人生请把我的遗嘱写成段子

    2. 生活不是等待风暴过去,而是学会在雨中跳舞。克里斯的经历教导我们要把握每一个时刻,勇敢地追求梦想,不给自己留下遗憾。 3. 挫折可以成为成长的催化剂。克里斯的漂流经历和误诊,都让他变得更强大,更有决心去...

    大学生创新创业入门教程考试试题.pdf

    3. **不适合创业的特质**:不适合创业的人通常表现为倾向于帮助他人实现梦想、认为世界万物刚刚好、享受主流人群的生活,而不具备敏锐的商业嗅觉。 4. **公司控制权**:创始人要修改公司章程并获得绝对发言权,需要...

    适合初一阅读的英语短文100篇.doc

    公主对英俊王子的一见钟情,以及后来遭遇的风暴,都是她追求梦想旅程中的重要一环。这个故事不仅让读者感受到了爱情的力量,还展示了冒险和挑战是实现梦想的必经之路。对初一学生而言,这样的故事可以鼓励他们勇于...

    初中语文文摘社会走进华尔街:品味“美国金融中心”

    每一次金融风暴和市场调整,华尔街都能通过其内在的韧性与创新,继续稳固其金融霸主的地位。 华尔街的街头巷尾,无论是来去匆匆的行人,还是坐在街边咖啡馆边喝咖啡边看报的人们,都无时无刻不在昭示着这个地方的...

    隐形的翅膀作文.doc

    他用自己的隐形翅膀掀起了一场风暴,阻止了伐木者的行为。他用实际行动保护了大自然的宁静与和谐。这个事件传递出的环保意识和责任感,是我们在现实生活中同样需要拥有的隐形翅膀。 在旅程的最后一站,孩子遇到了一...

    从业资格考试SYB第二步.ppt

    在现代商业环境中,创业已成为许多人心中追逐梦想和实现自我的一条途径。然而,成功的创业之旅往往始于一个伟大的企业想法。本教育课件从业资格考试SYB第二步,深入探讨了如何发掘一个好的企业想法,并将其转化为...

    乐高数字设计师4.3用户手册

    乐高我设计提供了丰富的积木选择,便于用户搭建心中梦想的模型;乐高头脑风暴则适合使用乐高机器人套装中的积木进行搭建;而乐高拓展区为用户提供了更多的积木和色彩选择,有助于突破传统积木的限制。 在使用鼠标...

Global site tag (gtag.js) - Google Analytics