大师Robert Martin Bob大叔针对ROR之父提出了反对意见:
"测试优先的原教旨主义就像是禁欲教育:是一个不切实际的,无效的道德活动,让人自我厌恶和羞耻。"
原文中两个单词:“测试优先原教旨主义”。原教旨主义是用来表示:“回归基本”;但由于911已经采取了暴力极端主义的内涵(原教旨主义导致极端暴力)。Bob大叔说:我还没有看到因为人们反复叫喊:“Kent Beck万岁”而导致任何测试驱动开发的飞行飞机撞击大厦,所以我必须完全否定其内涵。
那么测试驱动开发者会热爱自己的专业吗?当然,包括我自己在内;但我还没有听到关于TDDer们会通过武力去征服别人。所以,我必须得出结论,作者用了“原教旨主义”形容我们这些谁搞测试驱动开发的存在一个深深的贬义与嘲笑。
“禁欲性教育”。据我所知,没有人真的教禁欲性教育。而是教导一夫一妻制:一种坚定的关系,在一个确定的上下文范围内如婚姻内保持性接触。
不过在某些宗教团体一夫一妻制会紧密到道德倒是真的。不过,也有思想世俗的学校(我自己),简单地认为一夫一妻制是不会导致深刻的道德后果的良好的个人选择。鉴于HIV流行开始于上世纪80年代和90年代,或70年代的疱疹疫情 ;并考虑到单身母亲与贫困有很强的相关性,也许一夫一妻制不应该被用来作为一个贬义的形容词。
当然,人们可能会认为,鉴于50%的离婚率,一夫一妻制的策略也许不理想。然而,如果婚姻能够持续到丧偶,而二次婚姻也是如此,这样的一夫一妻制似乎显得好一点。
而且,毕竟,从一个纯粹的实用角度出发,每个人根本就没有更好的方法能够预防疾病和不必要的孩子。 (而且,至少在我的经验,一个快乐而有意义的生活。)
"是一个不切实际的,无效的道德活动,让人自我厌恶和羞耻"则显得好笑。
我明白作者想说什么。在TDD中有一些让他不舒服的刺耳说教。我自己已经使用了说教;我相信说教是必须的。原因很简单。在这个混蛋行业,如果你不这样实施TDD,或者类似TDD某种有效的措施,你会觉得非常糟糕。
我们为什么需要TDD?我们做TDD的一个重要的原因和几个不太重要的原因。不太重要的原因是:
1.我们花更少的时间调试。
2.测试作为在系统的最底层准确,精确,毫不含糊的文档。
3.编写测试首先需要去耦其他测试策略不需要的;我们认为,这种脱钩松耦合方式是有益的。
这些都是TDD的附带效益;他们是值得商榷的。然而,一个重要好处是:
如果你有一个你信任的测试套件,你愿意部署那些完全通过测试的系统; 如果该测试套件可以在几秒钟或几分钟来执行,那么你就可以快速,轻松地没有恐惧地清理代码。
如果开发人员可以快速,轻松地清理代码,而不必担心破坏任何东西,那就是好处。因为如果你可以有一套干净代码,你就可以保持开发团队避免陷入泥坑。你可以保持团队快速移动。
使用Rails的一些人主张使用数据库和GUI(使用 Capybara)进行测试。如果满足我提出的可信性和速度两个目标,那么尽管可以去做,如果你相信那些多集成测试能执行得很快,当他们通过时你愿意去部署;而且可以连续有效地重构和清理的代码,那么就去做吧。
但是,这在我看来,集成测试很少满足我的两个目标。首先,我怀疑他们能否获得必要的可信度,因为他们通过GUI操作;你不能从GUI访问所有的代码。在一个正常系统中有大量的代码是例外,它们在错误或奇怪的角落,这是无法通过正常的用户界面来达到测试母的。事实上,我认为你测试时只能覆盖多一点,超过一半的代码,但这似乎不太可能,我认为任何人会愿意基于测试部署,但是如果发现有这么一大块代码没有经过测试肯定是不愿意的。
其次,这种快速测试对我来说似乎不太可能,尽管在云中运行着数百台服务器,你可以得到那些需要有效和持续重构代码的速度,但是数据库和图形用户界面会很慢。
我想可能是错的。我很乐意被证明是错误的....