是否使用TDD(测试驱动开发)进行UI开发

标签: tdd ui gui | 发表时间:2015-02-12 13:31 | 作者:jollywing
出处:http://segmentfault.com/blogs

问题

StackOverflow上有一则 是否使用TDD(测试驱动开发)进行UI开发 的提问。

JacobE问:

对于是否使用TDD进行开发UI这件事,我想了很久,但难以决定。我想听听你们的意见。

回答

kdgregory的回答(23票赞同)

试图测试UI组件的放置是没有意义的,首先因为UI布局是主观的,所以应该由人来测试。其次,随着UI改动,你要不断地重写测试。
同样,没必要测试你所使用GUI库的组件,它们已经被非常多的人测试过了。如果你写了新的UI组件,倒是可以测一测。
你应该测试的是GUI下面的程序行为:控制器和模型部分。朝这个方向努力,你就会开始关心组件分离。为了方便测试,你会让你的模型部分和控制器和你的UI尽量解耦。

bangroot的回答(8票赞同)

当我使用自动化测试去测试UI的外观风格时,我发现这是最大的“过度工程”。我的建议是:不要! 把你的测试重心转移到程序的行为上吧,至于程序的UI,留给测试团队去做吧。关键是把你的精力用在高收益的行为上,自动化的UI测试不仅不会增加价值,还会让你负债!

Brian Rasmussen的回答(5票赞同)

TDD的作用就是让你的逻辑代码和你的GUI代码分离。如果你这样做了,你会发现很容易用TDD建立逻辑代码。如果你的逻辑代码分离得好,在它之上你完全可以建立另一套UI。

Harald Scheirich(4票赞同)

我从来不用TDD做任何UI布局的事情,因为花的时间太不值。

后面的解答不一一列举。

结论

关于这个问题的回答基本是一边倒的结论:没必要把精力放在UI的自动化测试上。原因可归结为以下两点:

  1. 不合理。“因为UI布局是主观的,所以应该由人来测试。”
  2. 不划算。对于UI的自动化测试,要花费很大的努力和很多的时间,随着UI改动,测试也要改动。工作量太大。明显不如由人来测试UI划算。

根据以上的讨论,我的结论是:

  1. TDD是辅助设计的一种方法,但不是唯一的方法。当我做UI布局时,写CSS时,没必要TDD。
  2. TDD应该针对程序的行为,而不是程序的外观。TDD的目标写出依赖尽量少的,方便测试的功能模块。

相关 [tdd 测试 开发] 推荐:

是否使用TDD(测试驱动开发)进行UI开发

- - SegmentFault 最新的文章
StackOverflow上有一则 是否使用TDD(测试驱动开发)进行UI开发 的提问. 对于是否使用TDD进行开发UI这件事,我想了很久,但难以决定. kdgregory的回答(23票赞同). 试图测试UI组件的放置是没有意义的,首先因为UI布局是主观的,所以应该由人来测试. 其次,随着UI改动,你要不断地重写测试.

在团队中进行单元测试/TDD的12条经验

- - ITeye资讯频道
两年前,我在一个Web项目开发组中,项目的目标是编写一个类似Excel的、用来计算产品/服务价格的Web应用程序. 项目团队被分成3部分——开发团队、需求团队和QA团队. 随着项目越做越大,而我们没有使用任何形式的自动化测试(QA团队使用手工测试),结果导致项目的测试时间比开发时间还要多. 每进行一次小的改动,QA团队都要花费几个小时来做测试.

JavaScript TDD 神器jasmine

- - JavaScript - Web前端 - ITeye博客
今天参加了圣路易斯本地的一个meet up group. 演讲主题是javascript 的tdd. 演讲者展示了jasmine的功能,真的是神器啊. 以下是jasmine的网址:. jasmine的syntax 极其简单:. 还有很多功能还在探索中,在写2500行的js之前知道这个就好了. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

推行TDD的思考

- - 简单文本
目前来看,推行TDD的障碍大约有如下几点:. 分析需求并进行任务分解的能力; 3. 将测试作为开发起点的开发习惯; 4. 开发人员的重构能力,包括如何识别坏味道和如何运用重构手法; 5. 单元测试的基础设施,尤其是测试数据准备;. 开发人员对于软件质量,常常偏重于软件的外部质量,体现在他们的工作效益上,就是被测试人员发现的缺陷数.

Bob大叔和Jim Coplien对TDD的论战

- Duo - 酷壳 - CoolShell.cn
今年春节时,我写了一篇《TDD并不是看上去的那么美》,在这篇文章中我列举了一些关于使用TDD的一些难点和对TDD的质疑,后来出现了一些争论(可参见那篇文章的评论),以及Todd同学的《TDD到底美不美》,还有infoQ中文上的那个几乎没有营养离线讨论. Coplien的很多观点和我之前的不谋而合,而他自己称他是坚决强烈地站在TDD的对立面上.

为什么 WCDMA 可以边通话边上网,而 TDD LTE 不能?

- - 知乎每日精选
这个问题给牛小哥点了赞同,Duncan Zhang的答案大体上是对的,但是不得不说,LTE不论时分还是频分双功是一定而且必须可以同时进行数据和话音业务的. WCDMA最开始的时候从GSM发展而来,因而保留了GSM的核心网部分,所谓核心网,简单来说就是一个交换网络,负责把数据请求和呼叫请求接到不同的网络上,在GSM还没有GPRS那会,基本上只有呼叫请求,而当时的通信是建立在电路交换的基础上,电路交换简单说就是有信道建立和信道拆除,通信中独占信道方式,通常的PSTN(即电话网)就是电路交换,强调可靠;而互联网是IP网络,基于分组交换,强调有效.

iOS开发进阶之单元测试

- - 博客园_首页
本文侧重讲述如何在iOS程序的开发过程中使用单元测试. 使用Xcode自带的OCUnit作为测试框架. 单元测试作为敏捷开发实践的组成之一,其目的是提高软件开发的效率,维持代码的健康性. 其目标是证明软件能够正常运行,而不是发现bug(发现bug这一目的与开发成本是正相关的,虽然发现bug是保证软件质量的一种手段,但是很显然这与降低软件开发成本这一目的背道而驰).

BrowserSwarm:开发者兼容测试利器,节省JavaScript项目的测试时间

- - IE浏览器中文网站
今天,我们联合 appendTo 和 Sauce Labs 共同发布了 BrowserSwarm – 这是一个开源工具,可以帮助 Web 开发人员跨设备和浏览器自动测试其 JavaScript 框架和库. 质量框架是现代 Web 的基础,但框架开发人员通常没有合适的资源来执行跨浏览器测试. BrowserSwarm 可以帮助开发人员构建可互操作的优秀框架.

【外刊IT评论网】“你这不是测试驱动开发”

- iBeyond - 外刊IT评论网
本文是从 “That’s Not TDD” 这篇文章翻译而来. 几个月前,我去一个客户那里,他们在使用测试驱动开发上遇到了很多问题. “我们的单元测试用例要半个小时才能跑完,”他说. “你们这不是在做驱动测试开发,”我说. “为了让测试发挥效能,所有的测试必须在几秒钟内能跑完,否则的话,程序员不得不频繁的停下来等待测试.