iT邦幫忙

2021 iThome 鐵人賽

DAY 20
7


打球像做人

上圖是筆者幾年前拿網路上的圖來東湊西湊,拼出來的桌面,本只是拿來練 Photo Impact,沒想到幾年後發現蠻多人轉發的,甚至有人拿來再創作,放在自己的影音作品內。感覺很有意思。

在筆者成長的年代,那時台灣的棒球正在經歷一個史無前例的黑暗時代。職棒簽賭案一椿又一椿,當時搞得社會氛圍甚至有種「打棒球就是賭博」的氣氛。有一個人帶領我們撐過來了,那就是台灣巨砲-陳金鋒。

陳金鋒曾在一次訪談中說到:「打球像做人,就是真誠。」這對社會起來多少作用我不知道,但對一個棒球迷的我來說,在往後一些決策上,著實起了不小影響。一句話是不是你說的、一個 Solution 是不是你想出來的、一個技術你究竟會不會、熟不熟,你可以騙人,但總有一天你會需要拿真相出來驗證,到時你還是得面對真實。

不會,就練。練多了,你就會了。

本篇將藉一個公開的練習題,進行 TDD 的實彈演習。

Magneto Effect

各位如果常用一些繪圖軟體,或是畫 UML 流程圖的工具,應該有體驗過一個功能,就是在一個已存在的點附近按一下,不用按太準,滑鼠會自動「滑」到原有的點上去,就像被磁鐵吸過去一樣。Magneto Effect 這個題目就是在實踐這樣的工具。

例如,畫面上已存在了一個錨點(50, 50),而磁力作用的範圍假設是 5,當滑鼠在(49, 50)的座標上被按下時,因為在錨點的範圍內,所以就自動被「吸」到錨點(50, 50)上了。如果同時有多個錨點在附近,就「吸」到最近的點上去。

列測項

我們要先來列個測項,這些測項能幫助我們待會寫程式時有個目標物可以參考。同時,要注意測項的順序。一般來說,會先做簡單的 case,再一個一個慢慢加複雜,或是先處理介面等細節,再慢慢加入重要運算。最後,需注意測項間的依賴。如果做到一半發現測項有要新增、修改,或換順序的,就來把它改掉:

假設磁力作用的範圍是 5

錨點 滑鼠原位置 滑鼠新位置 測試功能
- (49, 50) (49, 50) 定介面、沒有錨點
(50, 50) (49, 50) (50, 50) 距離夠近
(0, 0) (49, 50) (49, 50) 距離很遠
(50, 50)、(0, 0) (49, 50) (50, 50) 兩個錨點,一個在附近
(50, 49)、(50, 50) (49, 50) (50, 50) 兩個錨點,都在附近

Video

題目不難,但因為篇幅有限,而 TDD 過程每一步還是比較繁瑣,所以這裡我們就用影片來演示整個過程:

Yes

請注意,此完全沒有經過美化與剪接,意在真實呈現真實工作中會出現的情形,中間有一些卡住與 debug的過程,請耐心服用。覺得語速較慢著,請加快成 1.5 倍速服用 :)

結論

透過這個小小的題目,我們稍稍對 TDD 的運作情形,有了一點點了解。然而,光是看是不夠的。要想享受 TDD 帶來的好處,是要一定程度的練習的,而筆者其實不建議各位一開始就拿工作的專案來練習。也許一段時間後可以,但一開始不要,尤其「絕對不要」在上班時間練習。

寫工作的 code 會有時間壓力。壓力一來,你會很難很難堅持使用你剛學、還沒掌握訣竅的方法,你會更傾向用你原本就熟悉的方式,就練習不到了。效率不彰的練習不如不練。所以,如果要練習,就空出個下班時段,上網找個與工作無關的題目來練吧!譬如 Code Wars。

謎之聲:「天才與庸才之間的差別不在基因、不在天分,而在刻意練習!」

Reference

  1. Magneto Effect:https://sites.google.com/site/tddproblems/all-problems-1/magneto-effect
  2. 安德斯‧艾瑞克森、羅伯特‧普爾,刻意練習:原創者全面解析,比天賦更關鍵的學習法,方智出版社,2016
  3. Code Wars:https://www.codewars.com/
tags: ithelp2021

上一篇
Day 19 「完美不完美」TDD 的困難之處
下一篇
Day 21 「事有經重緩急」Clean Architecture 簡易入門
系列文
你就是都不寫測試才會沒時間:Kuma 的 30 天 Unit Test 手把手教學,從理論到實戰 (Java 篇)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言