【從學員練習影片觀察到一個關於 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 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有1部Youtube影片,追蹤數超過1萬的網紅小王子Miles,也在其Youtube影片中提到,我以前真的是球隊的,雖然身高不像 神力大高玩正式開賣拉 課表這裡點進去購買👇 https://reurl.cc/5qYy27 - - A7 STRONGWEAR訓練止滑衣 折扣碼M66 https://www.a7tw.com/ 🎧Podcast 老貳保健室 https://reurl.c...
跳躍力重訓 在 健身教官-應充明Jimmy Facebook 的最讚貼文
《一開口, 全世界都想聽你說》
一直以來, 從我開始做培訓工作開始, 我都將我的教課方式視為理所當然的, 也很少思考是否應該要去做一些改變或是調整. 但是最近幾年, 慢慢的接觸了一些書籍, 以及一些TED演講之後, 開始受到演講者這些在台上辯才無礙, 落落大方的氣質所折服, 再反觀我自己不過就是一個每天躲在教室裡不斷重複同樣教材內容的機器罷了..
雖然過去參加過不少講師訓, 但就是懊惱那些時候並沒有很真切地意識到課程內所提供的所有訊息是多麼重要… 出來混就是要還的, 現在我才開始積極的思考這一方面
作者在這本書裡面總結了一些他過去準備演講的方式, 技巧, 以及心得. 我覺得這些都是走過實際戰場上, 經歷過槍林彈雨所帶回來的寶貴經驗, 而且馬上可以實際的利用, 可以說對我們而言非常的有價值, 他把演講分成了四個部分:
一. 上台準備篇:
要在台上顯得落落大方而不慌亂, 就必須要有自信. 而自信的第一要訣, 就是必須要相信自己, 自我效能可以無限的影響一個人的行為. 而要做到這一點, 說的不是盲目的自滿, 而是要知道自己的優點在哪裡? 如何把它放大?
在"自信”這一章節裡面, 作者強調了”自欺”的重要性: 讓自己相信自己是最優秀的人, 讓自己表現的就是一位眾人矚目的巨星, 當你投入在其中時, 就真的可以更加的有活力. 這直接呼應了在TED演講點閱率第一名的”姿勢決定你是誰?” , Amy Cuddy博士所說的”Fake it, until you make it!”而之後我也會在寫這一本書的讀書心得 (老高上身) .演講連結: https://youtu.be/3E8L2sDZtOY
而作者提到的四大準備講課的技巧, 我也覺得非常實用:
1. 每天找一段文字, 大聲朗讀出來, 練習咬字, 口齒, 與抑揚頓挫
2. 試著用自己的意思, 將前面那一段文章敘述出來, 看看是否已經消化吸收了
3. 找機會與人分享, 看看實際上說出來的效果如何?
4. 自我檢視: 把自己的演講錄下來檢討 (作者是建議可以對著鏡子練習, 但我認為會受限於鏡子的面積, 有一些走位或是肢體語言沒辦法很到位)
再來, 每一次講課, 會有全神貫注的學生, 也一定會有猛滑手機的同學… 心態就要調整好. 即便所有人都在睡覺, 只要有一個人在專心聽課, 你的授課內容就不能夠打折扣,你就是為了這一個人而講! 這真的需要非常大的心理調適, 有時候, 同樣的課程內容, 同樣的笑話, 在一個城市同學反應熱烈, 互動踴躍, 但是到另一個城市卻是冷淡如冰, 甚至會有學生給負評… 當然地域不同, 一些文化會有所差異, 這是講師必須要意識到的一點, 可是就算這一堂課參加者極度不捧場, 我們還是需要全力以赴地完成使命, 不能受到絲毫的影響… 甚至有時候現場會遭遇到一些挑戰.. 因此這也算是一位講師的修行, 我目前也在努力當中
同時, 要先預想到所有最壞的打算.. 設備故障怎麼辦? 有人衝上台怎麼辦? 自己狀況不佳怎麼辦? 事情永遠不可能100%照我們預期的發展, 特別是假如我們有可能到一個完全沒去過的地方講課, 可以預測得到的意外最好都要先做好對應方案, 畢竟台下的同學是期望著我們最完美的演出
再來, “說故事”: 在”誰會說故事, 誰就是贏家” 這一本書內, 作者強調了說故事的重要性, 會說故事, 可以在溝通交流時無往不利. 而故事要打動人心, 首先要可以感動自己. 也就是說出來的每一個故事要真誠, 必須出自內心. 情感是有渲染力的, 你的故事有足夠真實的情感, 才可以牢牢地抓住聽眾的心. 因此故事的選擇, 敘述的方法非常重要, 而且, 絕不能加油添醋, 反而會使人感到過度的矯情
二. 台上功夫篇
當你站在台上時, 除了說故事以外, 另一項要訣就是要說笑話. 而笑話要真的能夠引爆笑點, 就必須要出乎意料, 或是有兩面的意涵, 甚至要提前埋梗. 因此演講者的日常笑話儲備就非常重要, 這樣就可以根據不同的狀況選取不同的笑話, 同時可以適度地做更改. 過多的笑話會讓人覺得演講缺乏深度, 但是適度的笑話則可以引發專注, 甚至是使人省思
在台上的肢體語言, 眼神接觸, 走位, 以及道具利用等等, 都是可以吸引觀眾焦點的關鍵技巧. 文中提到了一點, 我很同意. 我們常常會習慣使用ppt, 因為可以利用文字或是圖片來強化演講的一先內容, 但是, ppt也會成為講師的鎖鏈… 整場的教課有可能都圍繞的ppt走, 甚至單純的就成為了講師的提詞機. 因此, ppt在一次演講時的出現比例, 製作的技巧, 也會對於聽眾的感受有著直接正面或是負面的影響. 身為演講者, 需要對這一點有明確的感知
接下來, 雖然作者把這點放在上台篇, 但是我認為應該可以放在準備篇, 就是減少自己不自覺的”嗯…. 這個… 然後…. 對… 那個啥…” 的贅詞. 我自己都有這一個毛病. 絕大多數當我們使用這些贅詞時就代表我們在想下一句要說什麼… 偶一出現還好, 但是過度頻繁就會使人不悅. 所以這一點應該再檢視自己演講技巧時就要改進, 畢竟到了台上, 根本沒時間提醒自己不要不斷地重複無意義的這些語助詞
三. 走下舞台篇:
也就是互動. 我們是否可以與聽講者製造最大的連結, 就是靠互動. 而互動有現場的提問, 課後的答疑, 甚至是一些遊戲環節的安排, 都能有效地把台上與台下連結起來. 作者提到了一點我認為是一個極好的想法: 他會在每一次的演講觀眾當中安排一兩個暗樁, 事先給了他們問題. 假如這一次反應很冷淡, 就由這幾位暗樁負責提問, 也可以讓場面不會太尷尬; 另外一個用處是假如這一次的演講時間太短, 沒辦法把想說的都說完, 那麼暗樁的問題就等於是幫助你延長了點演說時間, 可以更加完整的把你想要表達的說完
另外一點, 就是承認自己的不懂. 有的時候, 某個主題, 台下可能有人比你更了解; 也許有的時候同學提出的問題超出了本身的專業, 這個時候回應”不知道” 並不是一種示弱, 而是一種負責任的態度. 而且, 不要盲目的追求100分的表現, 每一次演講, 會有人喜歡, 也一定會有人討厭. 至少我們要知道他們不滿意的點在哪裡? 而且不會因為少數人的反應就否定自己的表現. 也就是說, 講師的心理素質要夠強韌, 不會自我感覺良好, 也不會有一顆易碎的玻璃心
四. 成為專業講者篇:
一個演講者, 需要有舞台, 與其一直苦等賞識你的伯樂, 不如主動出擊去製造機會. 我覺得作者積極的態度與不屈不能的精神非常值得敬佩! 為了自身的理想, 他不像一般人只會抱怨懷才不遇, 反而不斷向人毛遂自薦, 並且把握每一次的上台機會. 就算賺不到金錢, 但也要賺到曝光率與知名度, 特別是對一位新手而言
而且我完全同意他說的”寫作可以提升演講技巧, 演講可以提升寫作能力”!
文字跟語言一項是一體的兩面. 有的時候由於說話速度快, 我們常常會忽略了一些遣詞用句, 或是演說內容過度跳躍; 而寫作可以反覆思量與修改, 一再的將詞句美化與潤飾. 反過來說, 假如我們有機會先將想要表達的內容寫下來, 日後當我們講到這個主題的事後會更加的流暢! 這一點我本人有非常大的共鳴. 至於要不要寫書還在計劃之中, 但我已經有明確的感受到這兩者相互協助所帶來的好處!
這是一個人人的有機會當講師的年代, 但是可以講課, 不代表會講課. 我真的認為除了專業知識之外, 身為講師, 必須要不斷的持續精進自己的教學與演講技巧. 多去觀摩, 練習, 與檢討. 這才是成長的不二法門
最後, 我要趁這個機會跟以前所有曾經我課程的同學說: 如果你們喜歡我的課程, 我由衷表示感激, 這是我的榮幸. 如果你們不喜歡我的課程, 非常抱歉, 我會盡力的修正我的缺點, 希望未來能夠有機會讓我彌補曾經犯過的錯誤!
謝謝大家~
跳躍力重訓 在 Facebook 的最讚貼文
今晚跟著黑媽和安寶一起玩跳床運動吧!
二首歌5分鐘的時間,爆汗又燃脂,
小孩可以放電消耗體力,
大人訓練核心雕塑體態,
一台跳床玩法超多樣🤘
影片中黑媽使用的是Fitwell 40吋彈跳床,
安寶使用的是53吋彈跳床。
如果是體重基數比較大的朋友可以怎麼玩?
👉雙腳不離開彈跳布,做上下跳躍,
搭配間歇訓練的方式,跳45秒,休息15秒。
👉上下跳躍加上手部的動作,
搭配間歇訓練的方式,跳45秒,休息15秒。
如果是運動老手可以怎麼玩?
👉彈跳床間歇運動(2021.5.19影片)
👉搭配歌曲跳free style的運動(2021.9.21影片)
黑媽和安寶才跳5分鐘,
熱量就消耗掉43卡,
平均心率135,最高心率有170。
簡單認識彈跳床:
屬於低衝擊性有氧運動,著重在「穩定性」,
當我們跳躍的時候,身體因為不平衡,
會啟動核心與專注力,幫我們協助穩定,
而且在彈跳布上跳躍可以降低對於膝蓋的衝擊性,
跳10分鐘等同於慢跑30分鐘啊!
●黑媽居家運動執行方式:
☛熱身:提高肌肉溫度簡單召喚訓練肌群。
☛訓練:多組菜單輪流讓訓練更多元提高運動成效。
例如:一三五做下肢運動、二四六做上肢運動、日休息。
☛收操:肌肉伸展放鬆。
☛飲食:運動後30~60分鐘內補充蛋白質。
#黑面蔡媽媽 #和妳一起運動的好朋友 #超媽事務所 #跳床運動
#彈跳床運動 #燃脂 #減脂 #親子運動
跳躍力重訓 在 小王子Miles Youtube 的精選貼文
我以前真的是球隊的,雖然身高不像
神力大高玩正式開賣拉 課表這裡點進去購買👇
https://reurl.cc/5qYy27
-
-
A7 STRONGWEAR訓練止滑衣
折扣碼M66
https://www.a7tw.com/
🎧Podcast 老貳保健室
https://reurl.cc/Md6o5L
🍵最好喝的乳清、BCAA
Creative Power👇95折扣碼『M66』
https://www.creativepowernutrition.com/
🐟藥師健生活高濃度魚油 折扣碼『M66』
https://www.phargoods.com/
史上最強護具「SBD」🔥折扣碼『MILES』全部大寫
https://www.sbdapparel.com.tw/
⌚️S-Force 手錶
https://www.sforcewatches.com/ 9折扣碼 『M66』
Follow my Instagram👇
https://www.instagram.com/mileshuang1122/
廠商合作邀約請伊媚兒📧
kino40370@gmail.com