是否使用TDD(测试驱动开发)进行UI开发
问题
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的自动化测试上。原因可归结为以下两点:
- 不合理。“因为UI布局是主观的,所以应该由人来测试。”
- 不划算。对于UI的自动化测试,要花费很大的努力和很多的时间,随着UI改动,测试也要改动。工作量太大。明显不如由人来测试UI划算。
根据以上的讨论,我的结论是:
- TDD是辅助设计的一种方法,但不是唯一的方法。当我做UI布局时,写CSS时,没必要TDD。
- TDD应该针对程序的行为,而不是程序的外观。TDD的目标写出依赖尽量少的,方便测试的功能模块。
是否使用TDD(测试驱动开发)进行UI开发的更多相关文章
- TDD(测试驱动开发)培训录
2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组 ...
- TDD(测试驱动开发)培训录(转)
本文转载自:http://www.cnblogs.com/whitewolf/p/4205761.html 最近也在了解TDD,发现这篇文章不错,特此转载一下. TDD(测试驱动开发)培训录 2015 ...
- TDD(测试驱动开发)学习一:初识TDD
首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...
- TDD(测试驱动开发)
TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...
- TDD(测试驱动开发)学习二:创建第一个TDD程序
本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...
- (译)TDD(测试驱动开发)的5个步骤
原文:5 steps of test-driven development https://developer.ibm.com/articles/5-steps-of-test-driven-deve ...
- 基于SOA架构的TDD测试驱动开发模式
以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...
- TDD(测试驱动开发)的推广方法论
- 测试驱动开发(TDD)的思考
极限编程 敏捷开发是一种思想,极限编程也是一种思想,它与敏捷开发某些目标是一致的.只是实现方式不同.测试驱动开发是极限编程的一部分. 1.极限编程这个思路的来源 Kent Beck先生最早在其极限编程 ...
- 测试驱动开发 TDD
一.详解TDD 1.1.TDD概念 :Test Drived Develop 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种方法论.TDD的原理是在开发功能代码之前,编写单元测试用例代码,测试 ...
随机推荐
- Selenium_IDE的基本使用及脚本解析
Selenium确实还是很强大的.根据我以往的经验,这个东西在web测试里的作用还是相当大的.经过近期研究,暂时对基本运作方式有了一定了 解,依旧找个实例记录一下.本段脚本实现的是网易返现个人中心登录 ...
- 字符串拆分函数 func_splitstr
create type str_split is table of varchar2(4000) ; 1 CREATE OR REPLACE FUNCTION splitstr(p_string IN ...
- 关于Jquery使用中遇到典型问题集锦
①$.post("url",{search:1},function(){},"json")请求数据成功就是不执行回调函数? 答:最大可能导致原因为 数据格式不正 ...
- [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和 ...
- 多线程-Thread的run()与start()的区别
总结: 1) start: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一个线程,这 ...
- Embarcadero Delphi 7 Enterprise 7.0.4.453 中文版
在 win7下可能报错请大家按下面的方式 delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$ ...
- ubuntu在终端使用的常用命令
1.ubuntu系统显示IP地址:ifconfig 2.ubuntu系统文件命令: cat:显示文本文件内容,全部文本.格式:cat filename more:显示文件内容,分页显示,回车逐行下翻. ...
- JAVA LOG4J使用方法
首先,需要在项目中导入log4j使用的JAR包,导入结果如下图: 菜单:Build Path->Configure Build Path->Add Extern Jars 导入JAR包后, ...
- SpringBoot整合Kotlin构建Web服务
今天我们尝试Spring Boot整合Kotlin,并决定建立一个非常简单的Spring Boot微服务,使用Kotlin作为编程语言进行编码构建. 创建一个简单的Spring Boot应用程序.我会 ...
- Beta 完结撒花 —— 事后诸葛亮
写在前面 林燊大哥 团队成员 短学号 名 2325 燊(队长) 1232 志豪 1131 喜源 2523 宏岩 2230 恺翔 2509 钧昊 2507 俞辛 2501 宇航 2502 柏涛 项目宣传 ...