`
yearn21c
  • 浏览: 18275 次
  • 性别: 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的教程...

    梦想英语演讲稿PPT课件.pptx

    在风暴中,通过辛勤工作和努力,我们可以磨砺意志,实现梦想。 此外,演讲稿强调了热情和梦想的共生关系,生活的激情催生了梦想的生长,而梦想的繁荣又推动了生活的活力。这种生命力如同骆驼穿越沙漠的力量,使我们...

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

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

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

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

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

    【概要写作】是英语作文的一种特殊形式,它要求考生在限定的字数内(通常是60字以内)总结文章的主要思想和要点。...同时,这也提醒我们,无论在学习还是生活中,追求激情与梦想的同时,安全始终应放在首位。

    雨果的名言警句精选.doc

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

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

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

    让人不舍毕业赠言

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

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

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

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

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

    ATonyTrivisonno'sAmericanDreamPPT教学课件.pptx

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

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

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

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

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

    (中小学教育)中考复习之名著阅读 (2).ppt

    2. 《骆驼祥子》的主角祥子及其梦想:祥子的最大梦想是拥有一辆自己的车,这反映了他对生活的朴素追求和对未来的执着。 3. 《钢铁是怎样炼成的》中的主角保尔·柯察金:他经历四次生死考验,表现出坚定的信念和献身...

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

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

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

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

    大学生毕业纪念册留言.docx

    “不是一切大树,都被风暴折断;不是一切种子,都找到生根的土壤;不是一切真情,都流失在人心的沙漠里;不是一切梦想,都甘愿被折掉翅膀。”这段文字传达了一种积极向上的人生观,即使面临诸多不确定因素,也要坚定...

    苦难中开花(1000字).docx.docx

    他以行动证明,只要我们拥有坚定的信念,勇于面对挑战,就能在生活的风暴中找到生机,让生命在困境中开出最美的花。 总的来说,鲁滨孙的故事是一则关于生存、坚韧和追求的寓言,它教会我们,即使身处逆境,也要保持...

    大冰的书读后感1000字五篇.docx

    它们启发我们,生活不是等待风暴过去,而是学会在雨中跳舞。每一个“我不”都是对现状的挑战,是对更好自我的追求。通过阅读大冰的书,我们可以感受到人性的光辉,获得勇气回应生活的挑战,同时也能在平凡中找到非凡...

    六年级语文下册 名著导读《鲁滨孙漂流记》教案 鲁教版五四制-鲁教版五四制小学六年级下册语文教案.doc

    他在海上历经艰险,多次遭遇危机,其中一次风暴使他流落到一个荒无人烟的岛屿,开始了长达28年的孤独生活。 在荒岛上,鲁滨孙展现出惊人的生存技巧和坚毅的性格。他建造住所,猎捕动物,种植作物,驯养山羊,甚至...

Global site tag (gtag.js) - Google Analytics