Refactor

单元测试与TDD工作坊

继上次单元测试工作坊之后,我和Joseph在此基础上持续迭代,融入测试驱动开发,将工作坊扩充成一天的工作坊。 在这次的工作坊中,我们将继续探讨什么是单元测试?怎样才能写好的单元测试?如何在实际工作中编写优秀的单元测试?掌握单元测试自然而然就会想到测试驱动开发,到底测试驱动开发是怎样的一种开发方式?如何利用单元测试做好测试驱动开发?我们将融入代码道场与大家一起切磋。这里没有说教,我们只用代码沟通,快来尽情体验吧。 这次我们依旧不限制语言,所以带着你熟悉的开发环境一起来玩吧。 地址:上海浦东新区银宵路39弄(浦东世纪花园二期)3号楼1002室(Odd-e办公室) 时间:10月20日上午9:30~下午6:00 费用:500元/人(含培训午餐) 报名方式:http:

Agile

单元测试工作坊

我和Joseph一直以来想把更多的工程实践分享给更多的人,和大家一起朝着软件工匠的目标前进。一直以来我们做过Coding Dojo,Code Retreat以及Kata接力等等,现在我们想采取更直接的方式——工作坊。 我们选择单元测试作为第一次工作坊的内容。到底什么是单元测试?怎样才能写好的单元测试?如何在实际工作中写优秀的单元测试?我们将在工作坊中一起寻找答案。当然我们选择工作坊这种形式,也是贯彻我们一贯高互动的方式。不写代码如何学会写代码,这也是我们不断提高的唯一方式。不过要小心哦,我们设计了不少的坑等着你来跳。 另外我们决定这次不限制语言,所以带着你熟悉的开发环境一起来玩吧。 地址:上海浦东新区银宵路39弄(浦东世纪花园二期)3号楼1002室(Odd-e办公室) 时间:9月28日下午1:00~6:00 费用:200元/

Kata

[视频]质因数 Ruby版

这次Kata练习做的是求质因数,这个练习比较简单,适合初学TDD的同学练习。在给刚接触TDD的同学介绍TDD的时候,我比较喜欢用这个练习,可以给大家展示TDD的效果,帮助大家建立TDD的信心。 但是这次练习只是给大家做个演示,这种TDD的做法做的比较顺畅其实是一个巧合。解题思路完全是被case牵着走,在别的情况下前进是十分艰难的。解题之前需要对问题有比较深的认识,自己设计一步一步的case,知道case能把我们带向哪里,逐步向目标前进。 今天的这个视频过程十分的坎坷...各种手误,还不小心关了编辑器。根据上次的反馈,这次我增加了些解说,整个过程有些刻意放慢,时间拖到了20多分钟。其实这个练习大家自己做的时候也就10多分钟。 上次使用ScreenFlow自带的快捷键显示工具,感觉显示了很多多余的按键操作,这次使用了另外一个开源工具:KeyCastr。 使用的工具: Ruby 1.9.3 RSpec

Ruby

[视频] 罗马数字Kata Ruby版

最近这两个月一直在坚持每天做Kata练习,有不少的收获。我会挑一些比较有意思的做成视频发出来,也算是Kata接力的继续吧。 很巧这次做的Kata练习依然还是罗马数字,只不过上次用C#,这次换成了Ruby。另外,这几天学习了一种新的解法,不同于之前的递归,代码也相对简洁。 以前的做法多是放弃提取1到10之间的规则,直接使用字典。这个做法就是尝试发现1到10之间的规则,将4和9作为特例处理。充分利用了罗马字母叠加的逻辑。 在TDD过程中,不断使用愚蠢的办法制造重复,然后再重构的过程中,通过不断抽象重复推进代码演化。这个练习中Case的选择并没有体现出来,只需自然的顺着数字前进,因为数字顺序与逻辑演化方向是大概一致的,所以不会出现case路径选择问题。   第一次在Mac上录视频,还第一次献“声”,有点小紧张。 使用的工具: Ruby 1.9.3

Coach

Refactor之痛

实践敏捷开发这么多年来,我十分清楚重构重要性,不断清理代码,如同吃完饭要洗碗清理厨房,要经常打扫房间。然而实际上我并没有经常打扫房间,虽然我“知道”要经常打扫,结果只是偶尔想起来做一下。直到有一次出差了一段时间回到家发现,桌上灰层实在是太多,键盘,鼠标,鼠标垫上都是厚厚灰层。我无法忍受了,都不愿意碰鼠标和键盘了,对于我这个“技术宅”这事可大条了,我得去清理了。拿起抹布开始清理桌子,发现地上也很脏,扫地拖地吧。再出现这样的情况我可受不了,得预防一下吧,那就定期做一下清洁工作吧。我还是比较懒的,那就一个星期做一次吧。我突然意识到我现在的教练工作不也是同样的道理么。 教练不是上来就解决问题,反而要通过一系列迫使他真正意识到自己的问题(“你们的代码太垃圾”

C#

[视频]Kata接力 - 罗马数字

上次在Global Day of Code Retreat上,和Joseph@姚若舟提了Kata接力的想法,Joseph去做了个Java版的罗马数字http://www.tudou.com/programs/view/jr-iJXpqIR0。实在不好意思拖了这么长的时间,才花时间做了这个C#版的视频,同样也是罗马数字。 我的想法是罗马数字唯一的逻辑是每一位的数字转称罗马数字并拼接,其它的一律作为字典处理,因为逻辑1到10之间的规律不值得抽出逻辑来,直接字典来的比较直接。由于罗马数字最大也就3999,所以十位,百位,千位也直接用字典了,如果还有更多,那么就该提取逻辑了。 我在实现的过程中,中间有几次打断。转递归的时候卡了一下,其实是这里的重构步子迈的大了些。