问题

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(测试驱动开发)进行UI开发的更多相关文章

  1. TDD(测试驱动开发)培训录

    2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组 ...

  2. TDD(测试驱动开发)培训录(转)

    本文转载自:http://www.cnblogs.com/whitewolf/p/4205761.html 最近也在了解TDD,发现这篇文章不错,特此转载一下. TDD(测试驱动开发)培训录 2015 ...

  3. TDD(测试驱动开发)学习一:初识TDD

    首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...

  4. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  5. TDD(测试驱动开发)学习二:创建第一个TDD程序

    本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...

  6. (译)TDD(测试驱动开发)的5个步骤

    原文:5 steps of test-driven development https://developer.ibm.com/articles/5-steps-of-test-driven-deve ...

  7. 基于SOA架构的TDD测试驱动开发模式

    以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...

  8. TDD(测试驱动开发)的推广方法论

  9. 测试驱动开发(TDD)的思考

    极限编程 敏捷开发是一种思想,极限编程也是一种思想,它与敏捷开发某些目标是一致的.只是实现方式不同.测试驱动开发是极限编程的一部分. 1.极限编程这个思路的来源 Kent Beck先生最早在其极限编程 ...

  10. 测试驱动开发 TDD

    一.详解TDD 1.1.TDD概念 :Test Drived Develop 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种方法论.TDD的原理是在开发功能代码之前,编写单元测试用例代码,测试 ...

随机推荐

  1. app token session rsp

    引用:https://blog.csdn.net/jack85986370/article/details/51362278 一.登录机制 粗略地分析, 登录机制主要分为登录验证.登录保持.登出三个部 ...

  2. 6th Alpha阶段的postmortem报告

    组名:好好学习(代组长发布)  会议重要内容记录: 1.  尝试在beta阶段实现的功能,与alpha阶段相比的优势 (1)更改软件现有的bug: 1)软件的账目只能输入,但是一旦发生失误却无法更改和 ...

  3. Intellij IDEA Scala开发环境搭建

    1,在intellij 官网上下载IDEA 2,在scala官网上下载最新版scala 3,安装两个下载的文件 4,打开intellij,菜单栏help->find action   输入plu ...

  4. [C/C++] C++ Primer学习笔记

    记录下自己掌握不清楚的概念和用法... Day 1 endl:具有输出换行的效果,并刷新与设备相关联的缓冲区. 注:在调试程序过程中插入的输出语句都应刷新输出流,否则可能会造成程序崩溃,将会导致程序出 ...

  5. 开源自己实现一个.net rpc框架 - Machete.Rpc

    Machete.Rpc Machete.Rpc 是一个轻量级的Rpc(远程过程调用的)框架.底层代理使用了Emit提高了效率,底层通信采用DotNetty框架以提升通信的效率.目前正在逐步完善中. G ...

  6. JavaScript的setTimeout()和setInterval()

    1. setTimeout()方法 作用:在制定的毫秒数后调用函数或计算表达式 语法: setTimeout(code,millisec) 实例: function timedMsg() { var ...

  7. 十三个有彩蛋的Linux命令

    原文链接: https://my.oschina.net/u/4045573/blog/2986313   一键下载安装配置文本全部命令所需环境 sudo apt-get updategit clon ...

  8. idea建立web项目servlet映射的地址/jsp访问不到

    用IntelliJ IDEA 2017新建了一个web项目,成功运行后servlet mapping的地址一直访问不到 原因:在配置tomcat的时候Server中Open browser选项勾选之后 ...

  9. 【刷题】BZOJ 3732 Network

    Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...

  10. [洛谷P5081]Tweetuzki 爱取球

    题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...