作者繼2022年出版關於測試與程式架構的《你就是不寫測試才會沒時間:Kuma的單元測試實戰—Java篇》後,再推出《你就是不寫測試才會沒時間:Kuma的TDD實戰—TypeScript篇》,書中從0開始設計並實作一個Slot遊戲,並用TDD的方式實作,來傳達給讀者「TDD可以Work」這個重要訊息,幫助那些為「沒時間」所苦的開發者解決痛點,在開發的路上走得更輕鬆順利!
TDD 不是沒用,是你沒有好好使用
系統越來越大時,可以幫助你將系統維持在一定的整潔度
重點思維
✔ 不只是要保護功能,更要能夠促進理解
✔ 在完成功能的同時,也要維持系統品質
✔ 不需總是預留彈性,但能隨時創造彈性
✔ 以模式為思考中心,看似不變實則萬變
≡≡≡≡≡≡≡≡≡≡≡≡≡≡
你很忙,我知道。
從前你說:「寫程式都沒時間了,哪來時間寫測試?」
現在程式都是 AI 在寫,總該有時間寫測試了吧?
你又改說:「AI 寫得這麼快,測試也叫 AI 寫就好呀!」
結果呢?測試一大堆,都測不到真正的問題。改一行壞三個功能、半夜被 Call、看不懂 AI 寫什麼,
省下來的時間都拿去幫 AI Debug 了。
越困難的事,越要簡單做
業務邏輯已經夠複雜了,還要兼顧正確性、可維護性、可擴充性、可讀性?
TDD 的長處,正是「面對困難的開發挑戰,用最小、最簡單的步驟前進」。
開發不再是一次解決大問題,而是透過讓一連串簡單的小成功,堆疊出可靠的系統。
不要宗教口號,而要實戰案例
TDD 不是要你寫更多功能,而是用更安全穩定的方式做你原本就在做的事。
TDD 不是口號,也不是宗教,而是一種讓你吃得下飯、睡得著覺,還有餘裕思考的開發節奏。
在本書中,我們要學習的是:
如何用測試保護自己、不是折磨自己
用 TDD 找出真正該改的地方,而不是亂 Refactor
讓團隊從「怕改」變成「敢改」;把「改壞東西」變成「放心重構」
本書程式碼:https://github.com/bearhsu2/ithelp2023
教學影片:https://www.youtube.com/watch?v=7mhf8vRGqSM&list=PLvBh-90IwbPJH33DpWvaIxz-Ud_9j9doU
TDD 不是沒用,是你沒有好好使用
系統越來越大時,可以幫助你將系統維持在一定的整潔度
重點思維
✔ 不只是要保護功能,更要能夠促進理解
✔ 在完成功能的同時,也要維持系統品質
✔ 不需總是預留彈性,但能隨時創造彈性
✔ 以模式為思考中心,看似不變實則萬變
≡≡≡≡≡≡≡≡≡≡≡≡≡≡
你很忙,我知道。
從前你說:「寫程式都沒時間了,哪來時間寫測試?」
現在程式都是 AI 在寫,總該有時間寫測試了吧?
你又改說:「AI 寫得這麼快,測試也叫 AI 寫就好呀!」
結果呢?測試一大堆,都測不到真正的問題。改一行壞三個功能、半夜被 Call、看不懂 AI 寫什麼,
省下來的時間都拿去幫 AI Debug 了。
越困難的事,越要簡單做
業務邏輯已經夠複雜了,還要兼顧正確性、可維護性、可擴充性、可讀性?
TDD 的長處,正是「面對困難的開發挑戰,用最小、最簡單的步驟前進」。
開發不再是一次解決大問題,而是透過讓一連串簡單的小成功,堆疊出可靠的系統。
不要宗教口號,而要實戰案例
TDD 不是要你寫更多功能,而是用更安全穩定的方式做你原本就在做的事。
TDD 不是口號,也不是宗教,而是一種讓你吃得下飯、睡得著覺,還有餘裕思考的開發節奏。
在本書中,我們要學習的是:
如何用測試保護自己、不是折磨自己
用 TDD 找出真正該改的地方,而不是亂 Refactor
讓團隊從「怕改」變成「敢改」;把「改壞東西」變成「放心重構」
本書程式碼:https://github.com/bearhsu2/ithelp2023
教學影片:https://www.youtube.com/watch?v=7mhf8vRGqSM&list=PLvBh-90IwbPJH33DpWvaIxz-Ud_9j9doU
Chapter 1 TDD
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識asnd Chapter 1 TDD
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識askw Chapter 1 TDD
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識asnd Chapter 1 TDD
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識askw Chapter 1 TDD
1.1 TDD 的操作與起源
1.2 TDD 的運作原理
Chapter 2 Slot
2.1 Slot 簡介
2.2 機率系統(Probability System)
Chapter 3 用測項「框」出功能
3.1 第一步:列測項
3.2 第一個失敗的測試:輸!
3.3 用最小的努力通過測試
3.4 重構:移動 Class 至獨立檔案
Chapter 4 逐步「捏」出機率系統的外貌
4.1 用簡單場景「逼」出 Input 與 Output
4.2 加入滾輪(Reels)
4.3 重構:為 Reels 加入領域概念
4.4 當 L2 押中時:注入 Reels
4.5 重構:抽參數以合併相似函數
4.6 重構:隱藏測試中的操作細節
4.7 快速加入 L3:談重構時機
Chapter 5 加入隨機行為:當我們錯估情勢
5.1 先加測試:讓滾輪隨機轉動
5.2 當發現太大步:回到原 Commit 點再來一次
5.3 重整旗鼓:滾輪的控制與檢視
5.4 重構 :消滅 Primitive Obsession,找出領域物件
5.5 加強控制細節:控制每一個 Reel 的轉動
5.6 重構:讓 Reel 各自管理 Index,強化內聚力
5.7 用合約直接驗證部份邏輯
5.8 多型的力量:兼顧隨機性與可控性
Chapter 6 賠率表與算分機制
6.1 多押單中
6.2 多押多中
6.3 賠率表——連線規則
6.4 賠率表——連線長度與 Symbol
6.5 顯示觀景窗
Chapter 7 再談 TDD
7.1 關於 TDD 的迷思
7.2 實戰中的 TDD
Chapter 8 免費遊戲:Free Game
8.1 Free Game 的定義與觸發
8.2 Free Game 的進行
8.3 Free Game 的結束
8.4 Retrigger Free Game
8.5 用合約限制呼叫方的行為
Chapter 9 Recovery 與 Memento
9.1 Recovery 簡介
9.2 加入暫存功能
9.3 改寫成 memento 模式
Chapter 10 RTP 與靜態工廠
10.1 RTP 與模擬器
10.2 哎呀,介面出錯啦!
10.3 再戰模擬器
10.4 一如既往地重構
10.5 加入第二個遊戲
Chapter 11 軟體開發與 TDD
11.1 專心錯了嗎:聊心流理論
11.2 兩個諸葛亮:聊 Pair Programming
11.3 高效開發的關鍵:適合且有效的設計
11.4 最後也是最初:TDD、AI 工具,與領域知識
許煜松(Kuma)
Kuma,台中人,Java 出身的軟體開發者,討厭在無意義的重複工作上浪費生命,也相信人腦應該用來做高價值的事情,而不是被「沒時間」當作藉口束縛。
喜歡準時下班,於是平日邊工作邊研究世上任何可以提早下班的事物,例如 TDD、OOP、系統架構等。力行「重構即設計」、「漸進式重構」,而非「重寫裝重構」。
Kuma 堅信世上並不存在完美且永恆的系統,追求「越來越好」才是正道,而這得建立在能準時關掉 IDE 的前提之下。畢竟,下班不是結束,而是生活的下一次迭代。該重構的,不只是程式,還有人生。
Facebook
https://www.facebook.com/kukumamaya
YouTube
https://www.youtube.com/@kukumamaya
Kuma,台中人,Java 出身的軟體開發者,討厭在無意義的重複工作上浪費生命,也相信人腦應該用來做高價值的事情,而不是被「沒時間」當作藉口束縛。
喜歡準時下班,於是平日邊工作邊研究世上任何可以提早下班的事物,例如 TDD、OOP、系統架構等。力行「重構即設計」、「漸進式重構」,而非「重寫裝重構」。
Kuma 堅信世上並不存在完美且永恆的系統,追求「越來越好」才是正道,而這得建立在能準時關掉 IDE 的前提之下。畢竟,下班不是結束,而是生活的下一次迭代。該重構的,不只是程式,還有人生。
https://www.facebook.com/kukumamaya
YouTube
https://www.youtube.com/@kukumamaya
Details
Review
0 ratings
1 stars
0%
2 stars
0%
3 stars
0%
4 stars
0%
5 stars
0%
Write a review
Eligible to write reviews after purchasing products or add to Library




