【從學員練習影片觀察到一個關於 TDD 的有趣現象】
極速開發的課後練習作業,雖說重點是放在極速開發要學習的技巧與刻意練習的模型,但開發的方式、順序也是刻意安排成類似 TDD 的進行方式,來讓生產力最大化(TDD 本來就是幫助開發的,不是幫助測試的)
我從2位第一次上我課的學員(當然就是 #極速開發,代表他們沒上過#單元測試 跟 #TDD與持續重構),雖然他們是照著示範影片、上課教學用 TDD 在寫整個 tennis 的過程,但從他們執行測試的時間點就可以發現:
「他是用測試來驗證 production code 的正確性」,即使他先寫了測試,也不先執行,沒有看到紅燈,每次都等到 production code 寫完了,應該要綠燈時,才執行測試。
而其他上過 TDD 課的同學 ,或是上過單元測試的同學,知道測試是用來描述情境,如果現在「加入的這個情境是新的需求或需求異動,代表目前 production code 還不支援這個情境,執行測試跑出的紅燈,就是等等 production code 要完成的 #目標」
test-frist 從來都只是 TDD 其中一個小小的衍生產物,而不是全貌。TDD, 測試驅動開發 從來都是一種開發方法,而不是測試方法。
總有些人老愛把 TDD 拿來跟測試相提並論,就總是喜歡把 test-first 當作靶子打,覺得違反人性跟直覺,覺得先寫測試在很多情況下是浪費時間或是不 work,可能拿來跟一堆測試的方法論相提並論,或總是只拿回歸測試的效益來當作 TDD 的整體。抑或是陷入 isolation unit test 與 integration test (其實就是非 isolation 等級、有實際依賴的自動測試)之爭。
```
註:TDD 事實上是可以不是單元測試等級的。
```
要比較正確看待 TDD 的角度,首先要知道它是幫助開發的、它是一種開發方式(當然不是唯一一種,甚至也不會是最好的一種,因為根本沒有最好,只有剛好)
接著要了解 TDD 可能用 IPO 模型還比較貼切,input-process-output,在你開發任何功能之前,你總要先想過這件事。而先想這件事,才是 TDD 的最基本精神。
接著是怎麼把你想好的東西,變成可執行的 spec,我們只是用測試程式來「描述」你腦袋中的「IPO模型」,把 process 的過程當作一個黑箱子。
而這個 IPO 模型在結合成「使用情境」,就會帶來「高易用性 API 的好處」,只有在一開始就先想好怎麼給別人用,最後才會好用。所謂的一開始想好,指的不是預先設計一堆 class,而是 input/output 想清楚期待(一般會結合實例化需求,搭配 Given/When/Then 的 gherkin style 來把前置條件、資料、前提想好,當發生什麼事,應該是怎樣的結果),然後描述它。在紅燈定義清楚目標,綠燈完成 input/output 關係且沒弄壞前面的所有情境後,來針對 process 進行重構(事實上 Kent Beck 的 TDD by Example 更多是用 refactor 來 #完成 process。
```
註:所謂的 output 不一定只有回傳值,包含外部依賴狀態、資料的改變,甚至顆粒度小一點,針對物件導向設計的話,物件內部狀態的改變也算,只是物件內部狀態改變,驗證點要嘛是拿得到內部狀態,要嘛就是要驗證物件哪個行為會因這個內部狀態而有所不同。
```
## 戰 TDD 之前該先做好的功課
要戰 TDD,是不是至少要把 Kent Beck 的 TDD by Example 看完?
要戰 TDD,請不要拿它跟測試方法論來比,那只是一下就被人看破手腳。因為它是個開發方法論。
要戰 TDD,請不要把它的好處只限縮在跟回歸測試、自動測試的比較,因為那只是它的衍生好處,當你試過在白海報紙上 TDD 就懂,TDD 是在釐清你的思緒的同時,又可以以終為始,確保你在 production code 的每一個動作都是為了滿足某個期待的情境。
要戰 TDD,請不要去把 單元測試、整合測試捲進來,那是測試的顆粒度,那是測試的分類,TDD 從來都不是只能限於單元測試。
要戰 TDD,請不要在那邊戰他是 bottom-up ,是直接從程式/class 的角度出發,事實上 TDD 既不是 bottom-up, 也不是 top-down, (書裡面就有講這件事咩),實務上的 TDD 結合倫敦派(GOOS)跟芝加哥派(Classic TDD),會更像 Outside-In 的進行方式,先定義好驗收情境,接著從最外部(也就是使用者看得到的部份)一路把依賴往另一邊的系統邊界推,直到推到系統以外的依賴資源(persistence 或 external API/service)
```
註: ATDD by Example 中 ATDD by Example, Kent Beck 寫的序最後的一段話。
Kent Beck:
「就像我曾說過的,TDD的一個缺點是,它可能會退化為一種用來滿足開發人員需求的編程技能。某些開發人員從更廣泛的角度來看待TDD,輕易在他們測試的不同抽象級別間跳躍。然而在ATDD中不存在歧義,這是一種加強與非編程人員溝通的技術。我們之間良好的協作關係,以及作為這種關係基礎的溝通,能夠使軟件開發更有效率。採用ATDD是向著溝通更清晰這個目標邁進的重要一步,而此書是一本全面又平易近人的入門讀物。」
```
要戰 TDD,請不要只關注在 test-frist,因為他只是用 test 來幫助你 think-first,不要邊寫邊想。然後不要過份依賴或相信你腦袋的能力,把你想好的東西具體化出來,最好可以被直接執行,最好除了你以外每個人執行出來的結果都會一樣(不管是對的,還是錯的)
要戰 TDD, 請不要把論點放在見樹不見林,如果你有看 TDD by Example 的 Part 1, Part 2 那兩個加起來共 24 個章節,就知道一開始就得把當下想到的全貌紀錄在一個「紙本」的 backlog (所謂的紙本,只是要講這並不依賴於任何工具)
而這個需求輪廓的全貌,會隨著你逐漸完成一部分一部分的情境,設計逐漸浮現後,而隨時跟著增減調整。
但不代表 TDD 就是先想到一個測試案例,就直接先幹下去了,那根本是亂搞。
以上這些,都還不是在列 TDD 的好處,而是針對那些從來沒搞懂 TDD 但又愛戰 TDD 的人一點提醒,你戰的很可能是「你誤解的 TDD」。
TDD 還有許多實務上的用途,列上我在譯者序中的一小段:
>> 測試驅動開發(Test-Driven Development, TDD)!一種以測試為開發輔助、以測試來描述需求情境、以測試來當作目標、以測試來表達期望、以測試來驗證疑問、以測試來實驗學習、以測試來溝通協作、以測試來協助設計高易用性 API 的「開發方法」。
譯者序有開放給大家看,請見:https://tdd.best/book/tdd-by-example/
拜託,要戰之前去看一下祖師爺 Kent Beck 對 TDD 的原始見解:https://www.tenlong.com.tw/products/9789864345618?list_name=srh
如果你想正確的使用 TDD 來幫助你在實務上產生許多的價值,帶來許多的好處,尤其是需求釐清、持續重構、小步快跑的部份,最好理解的培訓課就在這:https://tdd.best/courses/classic-tdd-by-example-video-training/
最後我想講一段話:
TDD 從來都不該被導入到團隊中,但它是一種很好的自我鍛鍊與學習的方式,也是一種能用很低的成本來帶來很多好處的開發方法(見下方註腳),然而它也不是適用所有的情況,但它可以讓『完美』變成一個動詞,而非不變的形容詞。
```
註:
Kent Beck 在 DHH 靠腰:《TDD is Dead》 之後寫的一篇反串文:《RIP TDD》
https://www.facebook.com/notes/1063422864115918/
我幾年前的簡易翻譯,通常也是 TDD 可以幫助你解決的問題,如下:
- Over-engineering (過度設計)
- API feedback (改善API的設計與可用性)
- Logic errors (想的跟寫的不一樣,寫的跟需求不一樣)
- Documentation (寫跟維護文件是痛苦的)
- Feeling overwhelmed (找不到切入點)
- Separate interface from implementation thinking (抽象設計)
- Agreement (確保已修正問題的證據)
- Anxiety (改東壞西的擔心受怕)
```
很久沒對 TDD 發表這種長篇大論了,因為不理解、不想理解、不同角度理解的人居多,能真的到各自的塔上用不同角度來看原義,以及實務上用它來幫助解決的問題有哪些的人,真的太少。
大部分人只想針對這個詞彙來攻訐以博得流量跟吸引目光,而不是想著「我可以用它來幫助我什麼」
問題跟需求是中性的,解決問題跟滿足需求的手段與方式有千萬種,不會只有一種,也不會有所謂的對錯,多點角度去了解不同的方法、方式,然後融會貫通,發揮綜效,在實務上用最少的成本與風險來產生最大的價值,這才是真正的目標。
導入敏捷不該是目標,導入 TDD 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有92部Youtube影片,追蹤數超過8萬的網紅Omitsai Mama's Exercise Life,也在其Youtube影片中提到,今晚跟著黑媽和安寶一起玩跳床運動吧! 二首歌5分鐘的時間,爆汗又燃脂, 小孩可以放電消耗體力, 大人訓練核心雕塑體態, 一台跳床玩法超多樣🤘 如果是體重基數比較大的朋友可以怎麼玩? 👉雙腳不離開彈跳布,做上下跳躍, 搭配間歇訓練的方式,跳45秒,休息15秒。 👉上下跳躍加上手部的動作, 搭配間歇訓...
「在家練跳躍力」的推薦目錄:
- 關於在家練跳躍力 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於在家練跳躍力 在 Facebook 的精選貼文
- 關於在家練跳躍力 在 Facebook 的最讚貼文
- 關於在家練跳躍力 在 Omitsai Mama's Exercise Life Youtube 的最佳貼文
- 關於在家練跳躍力 在 May Fit Youtube 的最佳貼文
- 關於在家練跳躍力 在 May Fit Youtube 的精選貼文
- 關於在家練跳躍力 在 徒手跳躍力訓練!170cm YouTuber也靠這18個動作灌籃 的評價
- 關於在家練跳躍力 在 「跳躍力訓練實驗計畫」 去年三級警戒前那段 ... - Facebook 的評價
- 關於在家練跳躍力 在 彈跳力訓練(第3頁) 的評價
- 關於在家練跳躍力 在 如果每天堅持做80個深蹲,堅持一個月後,跳躍能力會明顯增加 ... 的評價
- 關於在家練跳躍力 在 在家練跳躍力 - 台灣之美 的評價
在家練跳躍力 在 Facebook 的精選貼文
還沒想到放假要去哪玩嗎?是不是應該好好抓住夏天的尾巴!!
MS Water Ski Club - 蚊子滑水俱樂部
❤️⬆️真的超大力推薦
不需特地跑到海邊,地點就在新北市區河岸,享受夏日玩水沁涼💙
首先蚊子教練團會先進行岸上訓練
再做岸邊練習
沒問題後才由船拖出去~開始體驗屬於懶人運動的滑水!教練說~不要去抵抗板子的力量,眼神看著船、雙手拉著繩索即可!
但我的腿和手肌耐力不夠,沒力氣站起來太久😂一直坐著被拖在水上也是挺舒服滴!
還有因為手沒力而放手掉進水中
因此被妤妤妹記在腦海裡,可以看最後那令人融化的影片❤️貴貴姊姊在她心中應該就是一直掉進水裡😭
蚊子教練團人都超級可愛!也非常專業!也看到許多人有空就會過去玩~玩上癮的話還可以學習水上跳躍、180、360翻身~看起來也很帥唷!
在岸邊玩水個幾個小時~
回家睡得極香甜💗
#安全專業玩水
#小朋友也可以玩
#小朋友放電好去處
註:遵守防疫規定岸上戴口罩。
水上時離大家都很遠很遠,只有你一個人被拖在船後才不用戴口罩唷😉
以及妤妤妹是我非常非常親~就像家人般,我也因工作都會定期篩檢才敢這樣靠近唷~大家玩水時,還是要與家人外的陌生人保持距離嘿👍🏽
在家練跳躍力 在 Facebook 的最讚貼文
大家最喜歡的深蹲變化又來了。這次規劃無跳躍的動作,跟著練習十分鐘吧。
在家練跳躍力 在 Omitsai Mama's Exercise Life Youtube 的最佳貼文
今晚跟著黑媽和安寶一起玩跳床運動吧!
二首歌5分鐘的時間,爆汗又燃脂,
小孩可以放電消耗體力,
大人訓練核心雕塑體態,
一台跳床玩法超多樣🤘
如果是體重基數比較大的朋友可以怎麼玩?
👉雙腳不離開彈跳布,做上下跳躍,
搭配間歇訓練的方式,跳45秒,休息15秒。
👉上下跳躍加上手部的動作,
搭配間歇訓練的方式,跳45秒,休息15秒。
如果是運動老手可以怎麼玩?
👉彈跳床間歇運動(2021.5.19影片)
👉搭配歌曲跳free style的運動(2021.9.21影片)
黑媽和安寶才跳5分鐘,
熱量就消耗掉43卡,
平均心率135,最高心率有170。
簡單認識彈跳床:
屬於低衝擊性有氧運動,著重在「穩定性」,
當我們跳躍的時候,身體因為不平衡,
會啟動核心與專注力,幫我們協助穩定,
而且在彈跳布上跳躍可以降低對於膝蓋的衝擊性,
跳10分鐘等同於慢跑30分鐘啊!
●黑媽居家運動執行方式:
☛熱身:提高肌肉溫度簡單召喚訓練肌群。
☛訓練:多組菜單輪流讓訓練更多元提高運動成效。
例如:一三五做下肢運動、二四六做上肢運動、日休息。
☛收操:肌肉伸展放鬆。
☛飲食:運動後30~60分鐘內補充蛋白質。
#黑面蔡媽媽 #和妳一起運動的好朋友 #超媽事務所 #跳床運動
#彈跳床運動 #燃脂 #減脂 #親子運動
在家練跳躍力 在 May Fit Youtube 的最佳貼文
嗨大家好我是May~ 今天要帶來一套高強度的下肢燃脂訓練! 主要針對我們的下半身肌群,以及腿部的伸展。這套運動帶有跳躍、提高心率的動作、不需任何器材徒手即可完成 !
.
Today I’m showing you guys a 15min high intensity lower body workout
This workout mainly targets our lower body strength
There will be some jumping exercises in the middle to raise up your heart rate.
No equipment needed in this workout. Only using bodyweight.
.
在開始今天的訓練之前,想跟大家推薦專為女性設計的健身app- Nuli app :
優美精緻的介面 有客製化的居家/健身房課表 可依個人狀態選擇初階/進階菜單
還有省時訓練以及每週挑戰 讓運動充滿動力來源!
在臉書社群中更有上千萬女性分享自己的運動旅程 彼此互相加油打氣 跟著我們一起加入 Nuli community 吧:) (加入享十四天免費試用) ▶http://join.nuli.app/may_youtube
Before starting the workout ,I’m introducing a great app , Nuli app, which is specially designed for women.This app has beautiful interface. Moreover, there are diverse home and gym workouts you can choose from. Even you are just a beginner or an intermediate/ advanced trainer, you can easily fine workout that suits you. come join us! download it here ▶http://join.nuli.app/may_youtube
.
追蹤May Fit instagram ▶ https://www.instagram.com/may8572fit/
品牌Line官方帳號專屬ID: @mayufit ▶ https://lin.ee/tiQ1zgb
更多May Fit居家徒手/啞鈴訓練 ▶ https://www.youtube.com/playlist?list=PLol39BuP8rM-6l2PNZqXFETC6oCkjnXoi
健身初學女孩必看!人氣觀念影片▶ https://youtube.com/playlist?list=PLol39BuP8rM_llhEej42eRX9SnogqW8yz
.
15分鐘下肢燃脂高強度訓練(含伸展)
以下動作每個40秒休息20秒
High knee pause
Lateral squat jump
Alternative Squat walks
Lunge pauses high knee
Lunge pauses high knee
Split squat jump
Alternative side lunge
Alternative overhead squat
X cross jumps
Single leg deadlift hold (right)
Single leg deadlift hold (left)
Squat pauses starfish jump
.
Music by Axl & Arth - Rather Not - https://thmatc.co/?l=2E0F2D46
Music by GoodNight the Satellite - Supernova - https://thmatc.co/?l=30FD9872
Music by Eric Reprid - Lil Uzi - https://thmatc.co/?l=D5D9787F
Music by Eric Reprid - Young - https://thmatc.co/?l=0504D90D
Music by Lavengro - Love Me - https://thmatc.co/?l=EA8204B0
Music by Cael Dadian - but i love you - https://thmatc.co/?l=EB943B1A
Music by Kevatta - azurea - https://thmatc.co/?l=9C0556BF
Music by Kevatta - what we had was real - https://thmatc.co/?l=9218C022
在家練跳躍力 在 May Fit Youtube 的精選貼文
嗨大家好,歡迎來到我的yt channel!
這次帶來的是居家40分鐘阻力啞鈴臀腿訓練,含暖身以及伸展
強度比較適合中階 / 進階者,你會需要一條翹臀圈 以及 啞鈴 (兩支/一支都可以)
想要在家打造蜜桃臀的人,跟我一起練起來吧:)
Hello everyone, welcome to my yt channel
Today I'm showing you guys a 40 min banded DB booty workout, including warm-ups and stretching. This set is designed for intermediate/ advanced lifters.
You will need a resistance band and dumbbell. (2 or 1 dumbbell is either fine)
If you want to build a strong booty at home. Let's train with May!
.
正式組動作(共四個部分,每個部分X2次)
There are 4 sections. each sections do for 2 rounds.
.
啞鈴阻力深蹲 Dumbbell banded squat
前後腳單腳硬舉(右)B-stance single deadlift (right)
前後腳單腳硬舉(左)B-stance single deadlift (left)
坐姿開腿Seated abduction
前傾坐姿開腿Lean forward seated abduction
分腿蹲(右) Lunge (right)
後跨步蹲(右)Reverse lunge (right)
分腿蹲(左)Lunge (left)
後跨步蹲(左)reverse lunge (left)
啞鈴硬舉深蹲變化型DB deadlift into squat
窄站啞鈴深蹲停頓 Narrow stance squat pulses
啞鈴螃蟹走 Db crab walk
啞鈴深蹲停留 Banded squat hold
髖主導硬舉Banded hip dominant Deadlift
阻力恰恰(右)Banded cha cha (right)
阻力恰恰(左)Banded cha cha (left)
負重阻力臀橋 Weighted banded Glute bridge
負重阻力臀橋停留 Banded Glute bridge hold abduction
阻力單腳硬舉 (右)Banded Single leg thrust
阻力單腳硬舉 (左)Banded Single leg thrust
驢子踢腿 (右)Donkey kick (right)
小狗抬腳(右)Fire hydrant (right)
驢子踢腿 (左)Donkey kick (left)
小狗抬腳(左)Fire hydrant (left)
.
May Fit instagram ▶ https://www.instagram.com/may8572fit/
品牌Line官方帳號專屬ID: @mayufit ▶ https://lin.ee/tiQ1zgb
更多May Fit居家徒手/啞鈴訓練 ▶ https://www.youtube.com/playlist?list=PLol39BuP8rM-6l2PNZqXFETC6oCkjnXoi
健身初學女孩必看!人氣觀念影片▶ https://youtube.com/playlist?list=PLol39BuP8rM_llhEej42eRX9SnogqW8yz
.
Music by Chandler Juliet - This Ain't It (bitchdon'tbotherme) - https://thmatc.co/?l=B025161C
Music by Darrin Jones - Soulja - https://thmatc.co/?l=956CD9D0
Music by Dylan Rockoff - Magic - https://thmatc.co/?l=E4BD1411
Music by Fiji Blue - Outside - https://thmatc.co/?l=A4E1A05A
Music by Ookay - Not Again - https://thmatc.co/?l=1383866F
Music by SidKidd - Baggage - https://thmatc.co/?l=6F7810B1
Music by LEx Lidia - Diamond Girl - https://thmatc.co/?l=565D5E89
Music by S O U N D S - Don't Throw Our Love Away (feat. Martin Novales) - https://thmatc.co/?l=CCCA3991
Music by Davis Mallory - Ain't Afraid (feat. Luma) - https://thmatc.co/?l=BFE3A426
Music by Ollie Joseph - Ripped Up - https://thmatc.co/?l=680AB0C9
Music by Wade Graves - Yours Tonight - https://thmatc.co/?l=6AF07AFE
Music by Ollie Joseph - Dear You - https://thmatc.co/?l=F369ED41
Music by MYSM - Dreams - https://thmatc.co/?l=FF9196AB
Music by Mr. Chase - Pulse - https://thmatc.co/?l=CC38B20C
在家練跳躍力 在 「跳躍力訓練實驗計畫」 去年三級警戒前那段 ... - Facebook 的推薦與評價
後來三級警戒後,正在進行的訓練實驗計畫因為沒有健身房可以去被迫中止,只能怒 在家 赤腳 練跳躍 ,那時沒注意到自己身體的動作排列其實不好,某天從沙發 ... ... <看更多>
在家練跳躍力 在 彈跳力訓練(第3頁) 的推薦與評價
想一下...從靜止到跳起來落地會用到的肌肉有哪裡?? 主要練那些?? 不知道的話第一 ... 有些東西在家似乎沒辦法做不知道有沒有大大利用其他方式取代. kido715 wrote: 我是 ... ... <看更多>
在家練跳躍力 在 徒手跳躍力訓練!170cm YouTuber也靠這18個動作灌籃 的推薦與評價
令亞洲人可以用努力突破先天的界限,今番身高170cm的YouTuber黃士倫帶來的18個徒手跳躍力訓練動作,亦是他練成灌籃前的入門訓練。想入樽的你絕不能錯過! ... <看更多>