是否使用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的原理是在开发功能代码之前,编写单元测试用例代码,测试 ...
随机推荐
- Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
由于最近比较忙,一直到假期才有空,因此将自己学到的知识进行分享.如果有不对的地方,请指出,谢谢!目前深度学习越来越火,学习.使用tensorflow的相关工作者也越来越多.最近在研究tensorflo ...
- [2017BUAA软工]个人项目心得体会:数独
心得体会 回顾此次个人项目,感受比较复杂,最明显的一点是--累!代码编写.单元测试.代码覆盖.性能优化,环环相扣,有种从作业发布开始就一直在赶DDL的感觉,但是很充实,也学习到和体验了很多东西.最令人 ...
- loadrunner在win10破解提示:Cannot save the license information because acceses to the registry is denied的解决办法
方法1 下图1-1中提示就是说明了破解的时候权限不足导致,解决办法就是使用管理员权限打开loadrunner破解就好了,但是右键“以管理员身份运行”选项打开loadrunner又是会提示1-2中的问题 ...
- 关于对JSON.parse()与JSON.stringify()的理解
JSON.parse()与JSON.stringify()的区别 JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"nam ...
- chrome浏览器下的xdebug helper使用方法
chrome浏览器下的xdebug helper使用方法 自从安装了xdebug后,发现每次调试都需要从eclipse中先从头启动,然后一步步走到你要调试的页面,而不是说想什么时候调试就什么时 ...
- DTCping 的简单使用与排错
1. 工具下载路径 https://support.microsoft.com/zh-cn/help/918331/how-to-troubleshoot-connectivity-issues-in ...
- (转)Python中如何理解if __name__ == '__main__'
摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == ...
- 【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
[BZOJ3551]Peaks加强版(Kruskal重构树,主席树) 题面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相 ...
- 51nod 1564 区间的价值 | 分治 尺取法
51nod 1564 区间的价值 题面 一个区间的价值是区间最大值×区间最小值.给出一个序列\(a\), 求出其中所有长度为k的子区间的最大价值.对于\(k = 1, 2, ..., n\)输出答案. ...
- 前端学习 -- image标签和meta标签
Image标签 使用img标签来向网页中引入一个外部图片, img标签也是一个自结束标签 属性: src:设置一个外部图片的路径 alt:可以用来设置在图片不能显示时,对图片的描述 搜索引擎可以通过a ...