Re: [討論] 怎樣算是一個合格的junior cpp programme
針對關於 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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.189.4 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1661350664.A.083.html
※ 編輯: HZYSoft (111.249.189.4 臺灣), 08/24/2022 22:22:04
推
08/24 22:24,
1年前
, 1F
08/24 22:24, 1F
→
08/24 22:24,
1年前
, 2F
08/24 22:24, 2F
→
08/24 22:27,
1年前
, 3F
08/24 22:27, 3F
→
08/24 22:27,
1年前
, 4F
08/24 22:27, 4F
→
08/24 22:28,
1年前
, 5F
08/24 22:28, 5F
推
08/24 22:31,
1年前
, 6F
08/24 22:31, 6F
推
08/24 22:36,
1年前
, 7F
08/24 22:36, 7F
推
08/24 22:57,
1年前
, 8F
08/24 22:57, 8F
推
08/24 23:31,
1年前
, 9F
08/24 23:31, 9F
→
08/24 23:31,
1年前
, 10F
08/24 23:31, 10F
推
08/24 23:36,
1年前
, 11F
08/24 23:36, 11F
推
08/24 23:52,
1年前
, 12F
08/24 23:52, 12F
推
08/25 00:16,
1年前
, 13F
08/25 00:16, 13F
→
08/25 01:28,
1年前
, 14F
08/25 01:28, 14F
→
08/25 01:28,
1年前
, 15F
08/25 01:28, 15F
→
08/25 08:53,
1年前
, 16F
08/25 08:53, 16F
→
08/25 08:53,
1年前
, 17F
08/25 08:53, 17F
→
08/25 08:53,
1年前
, 18F
08/25 08:53, 18F
→
08/25 08:53,
1年前
, 19F
08/25 08:53, 19F
→
08/25 08:53,
1年前
, 20F
08/25 08:53, 20F
→
08/25 11:12,
1年前
, 21F
08/25 11:12, 21F
→
08/25 11:12,
1年前
, 22F
08/25 11:12, 22F
推
08/25 11:29,
1年前
, 23F
08/25 11:29, 23F
→
08/25 11:30,
1年前
, 24F
08/25 11:30, 24F
→
08/25 11:30,
1年前
, 25F
08/25 11:30, 25F
推
08/25 11:43,
1年前
, 26F
08/25 11:43, 26F
→
08/25 11:43,
1年前
, 27F
08/25 11:43, 27F
→
08/25 12:32,
1年前
, 28F
08/25 12:32, 28F
→
08/25 12:32,
1年前
, 29F
08/25 12:32, 29F
→
08/25 12:32,
1年前
, 30F
08/25 12:32, 30F
→
08/25 12:32,
1年前
, 31F
08/25 12:32, 31F
→
08/25 12:33,
1年前
, 32F
08/25 12:33, 32F
→
08/25 12:33,
1年前
, 33F
08/25 12:33, 33F
推
08/25 15:50,
1年前
, 34F
08/25 15:50, 34F
→
08/25 15:50,
1年前
, 35F
08/25 15:50, 35F
推
08/25 16:00,
1年前
, 36F
08/25 16:00, 36F
推
08/25 16:18,
1年前
, 37F
08/25 16:18, 37F
→
08/25 16:18,
1年前
, 38F
08/25 16:18, 38F
推
08/25 16:46,
1年前
, 39F
08/25 16:46, 39F
→
08/25 16:46,
1年前
, 40F
08/25 16:46, 40F
→
08/25 16:47,
1年前
, 41F
08/25 16:47, 41F
推
08/25 21:05,
1年前
, 42F
08/25 21:05, 42F
→
08/25 21:05,
1年前
, 43F
08/25 21:05, 43F
→
08/25 21:06,
1年前
, 44F
08/25 21:06, 44F
→
08/25 21:06,
1年前
, 45F
08/25 21:06, 45F
→
08/25 21:11,
1年前
, 46F
08/25 21:11, 46F
→
08/25 21:11,
1年前
, 47F
08/25 21:11, 47F
→
08/25 21:12,
1年前
, 48F
08/25 21:12, 48F
→
08/25 21:13,
1年前
, 49F
08/25 21:13, 49F
→
08/25 21:13,
1年前
, 50F
08/25 21:13, 50F
→
08/25 21:13,
1年前
, 51F
08/25 21:13, 51F
→
08/25 21:14,
1年前
, 52F
08/25 21:14, 52F
→
08/25 21:14,
1年前
, 53F
08/25 21:14, 53F
→
08/25 21:14,
1年前
, 54F
08/25 21:14, 54F
→
08/25 21:15,
1年前
, 55F
08/25 21:15, 55F
→
08/25 21:15,
1年前
, 56F
08/25 21:15, 56F
推
08/25 21:24,
1年前
, 57F
08/25 21:24, 57F
→
08/25 21:25,
1年前
, 58F
08/25 21:25, 58F
→
08/25 21:25,
1年前
, 59F
08/25 21:25, 59F
推
08/26 04:33,
1年前
, 60F
08/26 04:33, 60F
推
08/26 09:46,
1年前
, 61F
08/26 09:46, 61F
推
08/26 12:44,
1年前
, 62F
08/26 12:44, 62F
推
08/26 21:11,
1年前
, 63F
08/26 21:11, 63F
討論串 (同標題文章)