TDD实践之实用主义

1. 为沟通选择语言

我们在一个海员管理系统的开发中遇到了问题,这个领域的专业术语我们很 难翻译。即使勉强翻译出了,也感觉辞不达意,无论是初看上去,还是过一段时 间再看都一头雾水。比如,我们写出了下面的测试用例:

public void test_should_return_NOT_pass_if_duty_higher_than_second_mate_or_second_ engineer_and_education_level_is_secondary_and_guraduated_after_2002_02 _01() {
  ……
}

但其中second mate/second engineer是什么意思呢? secondary的education level具体又是什么?

还有:

public void test_should_return_third_mate_course_for_jianxi_third_mate() {
  ……
}

jianxi_third_mate是什么? 等等。

当然,我们可以制定一个术语表,请专业人士先帮我们翻译好,然后在代码 中遵循这个术语表。然而随着需求的增加,术语层出不穷,并且有特定中国特色 的名词根本就没有对应的翻译,于是这个问题就一直困扰着我们。

而直到有一天,在一次重构中我们把上面的第一个测试用例重命名了一下, 一切似乎突然间开朗了:

public void test_应该算未通过_if_职务高于二副二管轮_而_学历只 是中专_并且_毕业时间晚于2002年2月1日() {
  ……
}

Team里的人纷纷围过来,看着这个跟需求描述里的验收条件几乎一模一样的 测试用例名称,感受到一种前所未有的清澈。大家几乎在几秒钟之内就做出了选 择:这种形式是可以接受的,而且表达能力更强,交流效果不错。

什么?使用中文作为函数名?这似乎只是那些被主流舆论鄙视的"汉语编程"研 究者才搞的东西,我们一直就被教育离这些东西远点,甚至汉语拼音都不推荐使 用,一个经常拿来做反面教材的例子就是数据库表的列名使用汉语拼音,这被看 作不专业的表现。又或者,以后团队中加入外国开发者怎么办?

幸运的是,我们是软件工程师,不是计算机科学家。学术理论可以极端,而 工程一定是某种折衷。定理由自然界精确遵守,而工程却是各种应力的人为平衡 。

具体到这个案例,让我们正视现实:

团队成员并不善长本项目领域的专业英语。

任何翻译都会造成一定的信息损失,尤其在一些具有中国特色的领域,比如" 中专"翻译为英语就很难像中文一样简洁直观。

在可预见的将来,不会有老外加入开发团队。

而选用中文却能够让我们更好的坚持以下原则:

代码除了完成功能, 另外一个重要的功能是交流。(我们选择了对团队来说 最有效的交流方式)

用测试用例的名字来描述需求。(用中文描述更精确, 易于理解)

当然我们也会失去一些东西,比如对上面提到的"应该坚持使用英文"原则的 放弃。在这里我们认为放弃这条原则的收益大于损失。一种损失就是失去了学习 英文的机会,比如上面最后一个测试用例,用中文写出来就是:

public void test_见习三副应该参加三副的培训() {
  ……
}

或者有人会说:"见习"的英语是"intern",常用词啊。然而系统中还有另外 一类角色,叫"实习三副"等,那才是"intern"。实习是实际动手,担当实际的职 责;见习是只看不练,跟在后面观摩学习。见习的英文单词是"noviciate",并 不为项目组所熟悉,而我们也不再关心它。

总之,在实践中应当权衡各种利弊,选择对你来说最有效的方式。

时间: 2024-10-31 03:52:10

TDD实践之实用主义的相关文章

测试驱动开发TDD(1)

TDD 今儿接到一需求如下: 比如一个给定的数字2975,让你去猜.6次机会.如果第一次输入2509,系统会提示 1A2B:其中数字"2"位置猜对&&数字也猜对.称为1A,而"9"和"5"数字猜对了但是位置没有猜对.称为2B..如果输入2975那么就是4个数字都猜对了并且位置也是对的系统提示4A0B.民间俗称猜数字游戏:百度百科传送门:http://baike.baidu.com/view/358630.htm. 做个简单分析.客

敏捷测试(2) ATDD概念

什么是验收测试驱动开发 在准备实施一个功能或特性之前,首先团队需要定义出期望的质量标准和验收细则,以明确而且达成共识的验收测试计划(包含一系列测试场景)来驱动开发人员的TDD实践和测试人员的测试脚本开发. 注意:测试人员必须是团队的一部分,并在ATDD的过程中扮演关键和掌控性的角色. 典型的ATDD开发过程是: Step 1:产品负责人向测试人员和开发人员讲解用户故事,澄清他们提出的问题: Step 2: a.测试人员列出验收该功能所需要验证的所有测试场景,每个测试场景通常是概要,清晰的一句话:

度量驱动开发

在意大利罗马召开的DevOpsDays上,我进行了题目为"度量驱动开发"的演讲,这篇文章以演讲内容为基础. 如今,IT世界里的发布已经变成几小时内的事情,甚至几分钟就能完成.所有的内容都要垂直伸缩.水平扩展.因此,有一个良好的监控系统是必需的.在很多IT组织里,应用是业务的核心.但监控却由不写应用的OPS(运维)团队单独去做.为什么会这样?如果是这样的话,为什么需要改变?又该如何去改变?怎样才能得到更好的结果呢?在这篇文章里,我将分享我的想法和来自于我和DEV(开发)团队一起工作的经验

进一步认识度量驱动开发

如今,IT世界里的发布已经变成几小时内的事情,甚至几分钟就能完成.所有的内容都要垂直伸缩.水平扩展.因此,有一个良好的监控系统是必需的.在很多IT组织里,应用是业务的核心.但监控却由不写应用的OPS(运维)团队单独去做.为什么会这样?如果是这样的话,为什么需要改变?又该如何去改变?怎样才能得到更好的结果呢?在这篇文章里,我将分享我的想法和来自于我和DEV(开发)团队一起工作的经验--让度量变得有意义. 本文描述的观点来自我在Adform公司任职IT架构师(联系开发团队和运维团队)的工作经验.Ad

《测试驱动的嵌入式C语言开发》——3.5节先测试驱动接口再测试驱动内部实现

3.5 先测试驱动接口再测试驱动内部实现好的接口对于设计良好的模块来讲很关键.前面几个测试会驱动接口设计.关注于接口意味着我们是从外向内开发代码的.测试作为接口的首个用户,从调用者(或客户端代码)的角度给出了开发代码的使用方式.从使用者的角度出发会产生可用性更强的接口.我通常也会让前面的几个测试来检验一些产品代码的边界条件.选择一个带边界检查的简单用例. 为了消除这个编译错误,在模块的接口声明头文件中增加这个接口函数原型: 写出并且通过这些测试能帮助我们实现以下目标:它定义了驱动程序的一个接口函

Android开发笔记之:对实践TDD的一些建议说明_Android

最近部分采用了TDD的方法来开发一个模块,小有收获特此总结一下:1. TDD的基本原则TDD的最核心思想就是先明确需求,且用代码的方式量化,明确需求标准,然后进行编码实现以达成由代码测试来衡量的标准.那么它要求,先把需要标准写出来,每次只写一个.编码实现通过达到,并刚好满足这个标准.这样一点一点的迭代.这样有三个好处:一个是先明确标准,不至于我们迷失主题,偏离方向.有标准在检测,保证代码是正确的.仅满足当前测试,不至于过早优化和过度设计.2. TDD的难点难点在于如何设计这个测试标准,1)让它足

Android开发笔记之:对实践TDD的一些建议说明

最近部分采用了TDD的方法来开发一个模块,小有收获特此总结一下: 1. TDD的基本原则 TDD的最核心思想就是先明确需求,且用代码的方式量化,明确需求标准,然后进行编码实现以达成由代码测试来衡量的标准. 那么它要求,先把需要标准写出来,每次只写一个.编码实现通过达到,并刚好满足这个标准.这样一点一点的迭代. 这样有三个好处:一个是先明确标准,不至于我们迷失主题,偏离方向.有标准在检测,保证代码是正确的.仅满足当前测试,不至于过早优化和过度设计. 2. TDD的难点 难点在于如何设计这个测试标准

Ruby如何实践TDD?

问题描述 Ruby的开发环境和相关软件毕竟没有Java或.NET丰富,这里想请教下,做Ruby或ROR项目时,有哪些比较好的工具(比如自动化单元测试工具)能协助来做敏捷开发呢? 解决方案 好用一个就够了, 多没有用.autotest : 可以自动运行测试.CruiseControl.rb : 敏捷开发集成测试工具

TDD并不是看上去的那么美

出处:http://coolshell.cn/articles/3649.html 春节前的一篇那些炒作过度的技术和概念中对敏捷和中国ThoughtWorks的微辞引发了很多争议,也惊动了中国ThoughtWorks公司给我发来了邮件想来找我当面聊聊.对于Agile的Fans们,意料之中地也对我进行了很多质疑和批评.我也回复了许多评论.不过,我的那些回复都是关于中国ThoughtWorks咨询师以及其咨询的方法的.我对Agile方法论中的具体内容评价的不是很多,所以,我想不妨讨论一下Agile方