感觉在这里 TDD 不是很受欢迎啊

2018-04-13 08:43:47 +08:00
 asj

有没有特别的原因啊?

发个自己用 TDD 解 leetcode 题目的练习

https://www.bilibili.com/video/av21007067/

欢迎拍砖。

10638 次点击
所在节点    程序员
64 条回复
q397064399
2018-04-13 17:10:36 +08:00
反对 TDD,上个迭代写的代码,下个迭代 逻辑就改的面目全非了,别说啥 OCP 原则了,
一般都是从脑子里 找出所有需要改动的地点,然后赶紧铺代码,啥 TDD,写个测试,首先要保证测试是正确的,
如果你的 testcase 在整个模块的生命周期就执行那么几次,然后又要被改动,那 testcase 的意义又何在呢?
MajorAdam
2018-04-13 17:11:39 +08:00
妈耶, 整天改需求的
asj
2018-04-13 17:46:18 +08:00
asj
2018-04-13 17:47:36 +08:00
@q397064399
如果你的 testcase 在整个模块的生命周期就执行那么几次,然后又要被改动,那 testcase 的意义又何在呢?
---------
不能赞同更多。

所以我巴不得改代码的时候,每敲一下键盘就跑一次 testcase。
kaneg
2018-04-13 19:59:10 +08:00
TDD 说起来是一种增加代码单元测试覆盖率的方式,但在实际中,很多程序员是排斥写单元测试的,所以很多搞 TDD 都是虎头蛇尾,一旦没有强势的管理层推动,往往就不了了之了
yingfengi
2018-04-13 20:37:53 +08:00
我这联通好像都是 FDD,等等,我们说的应该不是同一个东西
langjiyuan
2018-04-13 20:54:12 +08:00
需求变动太大,一通电话需求改了大半,求着发封邮件确认.
TDD 是个好东西,但是经不住 漫天飞舞的需求更改.
如果可以搞定方案,宁愿前期加班赶测试代码...
ssynhtn
2018-04-13 21:02:36 +08:00
tdd 从来就没受过欢迎,声势很大但从来都是非主流
n1dragon
2018-04-13 21:35:22 +08:00
我觉得通过写 test case 能让人更明确代码的逻辑,而且能模拟一些不常见的 edge case
Philippa
2018-04-13 21:48:17 +08:00
按照经验, 测试是必须的, 但可以后面写。然而文档是最重要的, 文档驱动能很好地限制产品, 可靠地传达产品设计思路。那才是消耗最大的地方。现实中 TDD 带来的一点优点, 远远不如项目管理的重要性。我宁愿代码是避免多重继承的, 或是糟糕变量名又多重封装的, 这些比测试更重要。不然协作成本远远高出质量成本。有少量的质量问题通常也可以接受。
hxtheone
2018-04-13 22:31:42 +08:00
https://github.com/MrHuxu/leetcode 我也是这样来做 leetcode, 但是在工作中很难能做到这样, 讲真, 如果用写测试来当工作量汇报的话, 八成会被领导干死
dddd1919
2018-04-13 22:38:10 +08:00
一般 T 都最后补,很少 TDD
kid1412621
2018-04-13 23:03:28 +08:00
@codehz 我还是以为 tdd fdd
msg7086
2018-04-13 23:21:02 +08:00
我来加个反对意见吧。

我个人是很不喜欢 TDD 的。增加测试覆盖很好,但是我觉得 TDD 本末倒置了,很多时候为了测试而测试,反而忘了软件开发的原本要求 —— 软件开发。

比如要设计一个返回 输入+1 的功能,先写单元测试:
assert(add_one(4), 5)
assert(add_one(-1), 0)
然后写代码 add_one(in),会不会有人写成 return in == 4 ? 5 : 0 ?

还有,当你没有一个方法的时候,先写测试再写方法,会让人的思维更优先地去让方法满足测试,而不是满足项目的需求。有很大的可能,会导致面向测试开发,而不是面向需求开发。

我一直遵从的是 BDD,基于行为驱动开发,大量测试程序的行为而不是内部实现。可以剥离出来的类库函数则剥离出来以后再测试其对外的 API 接口。因为程序行为是和用户需求相关,而非内部实现,所以重构的时候不会增加大量的重写单元测试时间,同时也能保证需求里规定的行为被正确实现。

当然我们的 BDD 里,集成测试是在功能结构设计完,代码写完以后再上的。
fish47
2018-04-13 23:53:18 +08:00
https://github.com/fish47/leetcode
做算法题写一下验证是有用的,例如用 DFS 来验证 DP 算法。

https://github.com/fish47/MPVDanmakuLoader/tree/dev
普通工程写单元测试,好处是帮助你调整出更清晰的架构,避免代码改坏。坏处是多了一些不必要(?)的抽象 /封装。
bitlaoyuan
2018-04-14 06:51:28 +08:00
一个人做自己的项目,一直都是 BDD,Bug Driven Develop
ghostsf
2018-04-14 10:36:54 +08:00
不适合 XP 极限编程
lowzoom
2018-04-14 14:31:33 +08:00
TDD 是好东西,可惜真正理解并掌握正确设计方法的人极少
很多人都是理解个皮毛,然后就骂骂咧咧地用回他们那套“去实际运行环境中运行打断点看变量 /在控制台临时打印输出”的小学生做法了
mightofcode
2018-04-14 17:01:05 +08:00
TDD 不能应对快速变化的需求
asj
2018-04-14 17:36:33 +08:00
@ghostsf 没看懂,是说现实中不适合使用 XP 极限编程?

还是说 TDD 不适合 XP ? TDD 不就是极限编程首先提出的么。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX