Soft_Job 板


LINE

针对关於 TDD 的讨论另外回一篇好了 觉得用推文太长了 XD : 推 stupidlove0: 朝圣!重要的真的是unit test 08/23 18:47 : → HZYSoft: 回楼上 TDD 问题,TDD 不只要测试,还要先写测试才写code 08/23 21:33 : → HZYSoft: 很多人无法习惯这种顺序,是否一定要 TDD 这有争议 08/23 21:34 补充一下,TDD 是还没有开始写任何的 code 之前,就先针对 程式写好之後 "预期应该要有的行为" 先写 test cases 接着,先跑一次测试亲眼看着他 fail 因为还没写任何 code,所以测试绝对会 fail, 如果没写 code 却 pass 那表示你的 test case 根本没有测到。 接着才开始写 code,重复跑测试直到确认 pass 为止,就是完成了。 不同於先写 code 再测试,TDD 是颠倒,先测试再写 code,所以才叫 test driven 如果程式被报 bug,也是先写一个会 fail 的 test case,确认可以重现 bug 接着才开始改 code 修正,直到测试 pass 为止,就表示修好了。 这是一个观念很特别的流派,他们的主张都是有道理的,就只是比较违反直觉不好实现。 如果你无法先写出测试,那表示你还没弄清楚要实作什麽行为, 或是你原先构思的 API 介面难以使用,以至於你写不出 test case 这是强迫你厘清 spec 以及设计好介面的方法,但实在有点极端,被不少人视为邪教 XD : 推 TeaEEE: TDD最大的阻力来自你的老板 08/24 11:40 Testing 相关的东西常常是这样,因为一开始看不到立竿见影的成果, 花掉的资源,也没有立刻转成给客户的价值,跟下水道工程一样重要但看不见。 : 推 wulouise: TDD在需求不明确的时候写会很痛苦,SPEC改testcase全改 08/24 12:43 : → wulouise: 但只有一个test, 还是可以加快开发的iteration, test编 08/24 12:46 : → wulouise: 译执行时间通 08/24 12:46 : → wulouise: 通常比跑production快很多 08/24 12:46 这个事情我觉得不是 TDD 的锅,需求不明确本身就很痛苦,TDD 只是让你提早面对它 需求不明确或是改来改去,你连 code 该怎麽写,写出来该有什麽行为都不知道 自然是无法写出 test case 的。但反过来说如果状况是如此,你写出的 code 会对吗? 错是错在没定义清楚程式行为,不是 TDD 的错。 TDD 只是一面镜子,让你提早发现问题,事实上这是好事。 表面上测试写得很艰难拖慢进度,实际上是反映团队沟通不良,和需求不清的问题 我们应该解决问题,而不是解决发现问题的人(跳过测试不做) 如果放弃做测试来节省时间,做出问题一堆的产品,这些时间後面也是要加倍还... 但也有情况例外,就是做 MVP 的时候。还来不及做测试,产品就被取消了,就免还债 XD : → foreverk: TDD比较可怕的是工程师还没掌握domain,写出不合理的te 08/24 14:04 : → foreverk: st case,而且自己不知道 08/24 14:04 这或许不是 TDD 的锅,domain 掌握不足,设计出来的 API 多半也会是有问题的, TDD 并没有让事情更糟,只是强迫问题更早浮现罢了。 说了半天整篇都在帮 TDD 护航,但我自己大多是没在用 TDD (汗颜...) 主要原因还是真的很难习惯,而且经验比较不足,有时候 API 设计也是 try & error 虽然整个软体巨观该有什麽行为已经订出来了,但程式会拆成很多小模组 每个模组该有哪些行为,完全端看你怎麽拆,而很多时候就是这点难以决定, 需要稍微实验不同的作法,在这个阶段强迫要先写 test 还真有点强人所难。 但如果是定义很明确的 API,例如 web 後端的 RESTful API,介面都已经订好了 这时候遵循 TDD 先写 test case 完全是可行的,有兴趣的朋友不妨一试! -- Sent from PCMan on PCMan's PC --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.249.189.4 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1661350664.A.083.html ※ 编辑: HZYSoft (111.249.189.4 台湾), 08/24/2022 22:22:04
1F:推 windclara: 想问若是前端的话,该怎麽TDD较适合呢?观念都理解, 08/24 22:24
2F:→ windclara: 但在前端常常写一写又拆出子组件… 08/24 22:24
3F:→ HZYSoft: 抱歉这个我无法回答,我自身经验也不够 XD 08/24 22:27
4F:→ HZYSoft: 虽然我能理解也算认同TDD的理念,但也没办法真的掌握它 08/24 22:27
5F:→ HZYSoft: 应该不少人觉得实行起来困难,所以批评声浪也没停过 08/24 22:28
6F:推 linnom: 笑死 “Sent from PCMan on PCMan's PC” 08/24 22:31
7F:推 shibin: 推,最近写UT也是很苦手,很高兴可以看到此类讨论 08/24 22:36
8F:推 iankingh: 推 08/24 22:57
9F:推 wulouise: 越靠ui的通常越难写写UT...至於规格不明确的确是不该怪T 08/24 23:31
10F:→ wulouise: DD, 只是不明确的时候应该先弄清楚再来写XD 08/24 23:31
11F:推 holebro: 好想进去有走TDD的公司 感觉好赞 08/24 23:36
12F:推 wulouise: 说真的有unit test就很好了,100%TDD执行面有困难 08/24 23:52
13F:推 viper9709: 原来是这样~感谢分享 08/25 00:16
14F:→ sevenHEAD: 前端大概或许用testing-library那种测法,内部你怎麽 08/25 01:28
15F:→ sevenHEAD: 拆不管 08/25 01:28
16F:→ foreverk: 同意TDD是让问题提早浮现,尤其edge case可能是使用到 08/25 08:53
17F:→ foreverk: 其他api时才会发现的,不过通常需求会一环扣一环,团队 08/25 08:53
18F:→ foreverk: 其他人可能宁愿你先写个可以跑的东西让他可以接下去, 08/25 08:53
19F:→ foreverk: 而不是等到TDD流程都走完,要求团队都有单元测试都有点 08/25 08:53
20F:→ foreverk: 难了,还要大家都TDD实在无法想像XD 08/25 08:53
21F:→ Wishmaster: 单元测试不是放在重点服务及重点功能上吗? 08/25 11:12
22F:→ Wishmaster: 真的有公司所有的程式都写UT吗? 实务可能吗? 08/25 11:12
23F:推 vi000246: TDD很难的原因有可能是需要重构到很精简没有相依 08/25 11:29
24F:→ vi000246: 才能写出有效的测试 在开发阶段写UT就没什麽时间了 08/25 11:30
25F:→ vi000246: 更何况要重构 以及担负重构衍生出的问题责任 08/25 11:30
26F:推 superpai: 你写的任何程式不测试怎麽知道对不对,你把写console lo 08/25 11:43
27F:→ superpai: g跟用眼睛看结果的时间拿去写 unit test就好了 08/25 11:43
28F:→ DrTech: 一般真正能落实的公司,就是考管理政策推动。线上出现Bug 08/25 12:32
29F:→ DrTech: ,不同等级,对於考绩的影响是什麽,导致Unit Test,cover 08/25 12:32
30F:→ DrTech: age,增量覆盖率,都有规范,避免出大错。有了管理与考绩 08/25 12:32
31F:→ DrTech: 支持,TDD就变成增加效率的优势了。 08/25 12:32
32F:→ DrTech: 没靠管理支撑品质,人都说有惰性的,绝对不觉得TDD多重要 08/25 12:33
33F:→ DrTech: 。 08/25 12:33
34F:推 art1: 结果是一张图的时候应该没办法很难测吧 08/25 15:50
35F:→ art1: *应该很难测 08/25 15:50
36F:推 testPtt: 面对随时有陨石会砸下来的情况下TDD有用吗? 08/25 16:00
37F:推 lovdkkkk: 其实越常变化或扩展测试的用处越大,不过跟 TDD 较无关 08/25 16:18
38F:→ lovdkkkk: 有写就有用,不一定要 "先" 写 08/25 16:18
39F:推 CRPKT: TDD 可以提早验证 API 的使用性有没有缺陷 08/25 16:46
40F:→ CRPKT: 但并不是 API 漂亮就不会在架构上遇到问题 08/25 16:46
41F:→ CRPKT: 有时候两边都要顾一下会比较平衡 08/25 16:47
42F:推 henry4343: 好奇真的有办法先写好unit test在开始写程式吗? 08/25 21:05
43F:→ henry4343: 很多unit test都是在assert function 没function的话 08/25 21:05
44F:→ henry4343: 没function的话要怎麽compile过呀 还是是说function先 08/25 21:06
45F:→ henry4343: 宣告但内容不写 然後先写测试这样吗? 08/25 21:06
46F:→ HZYSoft: 极端一点没 function 直接写测试也可以,要确定他会 fail 08/25 21:11
47F:→ HZYSoft: 当程式有 #ifdef 的时候确实可能有些 code 根本没 build 08/25 21:11
48F:→ HZYSoft: 所以从头到尾测试根本没 build 到,先确定会 fail 有帮助 08/25 21:12
49F:→ HZYSoft: 或是像 python,没定义 function 也能跑 runtime 才失败 08/25 21:13
50F:→ HZYSoft: 这种也可以先跑看看确定他会 fail,确认 test 真的有执行 08/25 21:13
51F:→ HZYSoft: 我自己真的有遇过 test function 没跑到,结果假性 pass 08/25 21:13
52F:→ HZYSoft: 原因是我把 function name test_xxx 拼错成 tset_xxx 08/25 21:14
53F:→ HZYSoft: 於是 python 的 unit test 没抓到这个 test function 08/25 21:14
54F:→ HZYSoft: 怎麽跑都 pass,因为根本就没测到。所以不要觉得这很多余 08/25 21:14
55F:→ HZYSoft: 或是先写个空的 function,跑看看确认他真的会 fail 08/25 21:15
56F:→ HZYSoft: 这算是 TDD 一个重要的观念 08/25 21:15
57F:推 wulouise: 真的要先fail才有办法确定他是有用的XD 08/25 21:24
58F:→ wulouise: 我有遇到test永远是对的 里面对不对根本不知道 08/25 21:25
59F:→ wulouise: 还有根本不存在资料被判断存在,因为跟其他资料重复XDD 08/25 21:25
60F:推 mmonkeyboyy: 你有规格书就能先写啊 没有就只能边做边摸索 08/26 04:33
61F:推 CYHyen: 其实想起来也没那麽邪,就像刷题,也是test先写好等你 08/26 09:46
62F:推 zebraseven: 好 08/26 12:44
63F:推 SHANGOYANYI: TDD难在要想出各种案例XD 08/26 21:11
64F:→ bnd0327: TDD在做自己私人专案的时候比较好用,因为自己写的本来就 08/30 14:38
65F:→ bnd0327: 比较随兴,用TDD方法一步一步做比较不会放飞自我 08/30 14:40
66F:推 akira01: 个人的经验,一堆人在等你的code才能继续下去,一个礼拜过 09/02 07:20
67F:→ akira01: 去了,这时只说我由於用tdd只完成了测试程式,会遭人白眼, 09/02 07:20
68F:→ akira01: 所以通常我们还是会先完成功能再补测试程式 09/02 07:20
69F:推 superpai: tdd是测试跟实作交替写,会说测试先写完就是做错了 09/02 07:35
70F:→ HZYSoft: 测试先写是针对要改动的地方,不是整个系统都只先写测试 09/02 21:47
71F:→ HZYSoft: 实务上确实是交替进行没错 09/02 21:47
72F:→ longlongint: TDD不会升迁啦,写烂code升迁学弟接手赞赞(反串) 09/11 20:49
73F:推 jackhsien: 个人经验TDD 适合需求明确的开发 不然光改测资就耗掉一 09/16 10:44
74F:→ jackhsien: 堆时间 09/16 10:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP