【從學員練習影片觀察到一個關於 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影片,追蹤數超過3萬的網紅YouTube予備校 by デブレイクスルー たまに 塾えもん,也在其Youtube影片中提到,【偏差値30台から早慶・地方国立・難関私大合格率90%の方法】を無料メルマガで教えてます。登録は→http://exam-achievement.jp/lp/magazine_new/ (LINEでもok!→@irg4316f でID検索!) ※英単語一覧は下記にまとめてます。ついでに英文法など...
output動詞 在 辣媽英文天后 林俐 Carol Facebook 的精選貼文
英模班第一回的震撼教育還好嗎?
俐媽在班群裡解決了大家的疑惑,安撫了你們的心情😊
很快的,明天又由模A率先上場體驗第2️⃣回了!
是的!你沒有看錯!
這堂課俐媽錄了近2 hr 40 min😱
因為趁著暑假在家學習比較沒有下課時間的限制,你們也可以自己分上/下半堂學習,
俐媽一口氣把所有大題的答題技巧都仔細教授。
混合題每一段講什麼、這一題的答題關鍵在哪一行?
閱測每一篇有什麼重點字可以提點補充?
篇章結構先看每個選項的什麼詞性?如何找前後文關鍵字句?
文意選填真的只是看詞性?空格前後要看幾個字才比較容易答對?
克漏字還有什麼機關陷阱可以考?
第一大題哪些字是核心單?
當然,該給的大餐筆記,沒有少過~
別忘了,上週有News English新聞英文,
這週有「英語正則」喔!
這週英語正則中教到了「rate」的搭配詞,
俐媽藉機再多補充一些✌🏼
———————————————————————
㊙️ 俐媽英文教室—rate搭配詞篇:
https://www.instagram.com/p/CRYoceTMBa9/?utm_medium=copy_link
——————————————————————-
說起來,
俐媽在FB/IG的知識性po文「產出率output rate 」很高耶~
這真的很燒腦耗心力,
趕快給我個👏🏼👏🏼👏🏼👏🏼👏🏼👏🏼
至於rate搭配哪些動詞?
以後英模班會教喔😉😉
高三孩子會領到「克漏字 2️⃣」,詳細使用方法及時程,請詳看內頁~
第三回的小單字本,請儘早服用,會有奇效!
#俐媽英文教室
#俐媽英文教室搭配詞篇
#俐媽英文教室搭配詞篇rate
#錄影比台上上課還累
#請你們一定要認真上課呀
#台大明明線上課程好豐富
output動詞 在 對画框|生活裡的一些murmur Facebook 的最佳貼文
#喀琿畫話 #喀琿日付
做得越多、能做的也就越多。
The more we do,the more we can do.
https://linktr.ee/hless2350
___________________
軟體📝 #procreate
突然驚醒又過了一天,我卻還停在2號。
果然照顧好情緒很重要,以往若事情不能如自己的安排走,我一定會焦慮到廢掉爛掉。這一陣子的自我勉勵(不做清單、每日抄寫勵志小語、寫日記),或是高品質的輸入(人間劇場、精彩的線上講座、好看的連續劇),讓我大多數的時間都覺得日子充實且忙碌,根本沒時間焦慮和煩惱現階段解決不了的事(偶爾還是會陷入焦慮迴圈,但能比較快地跳出來了)。
所以說,照顧好情緒很重要,如果 #心靈雞湯 有用那就灌下去,不需要太在意他人的想法,日子是你自己在過的。
激勵自己一番後,想來補補自己的日付進度,畫著畫著又去畫些實驗性的東西了( 左滑可以看看「情書小動畫」 ),看來是追不上進度了,只好拿之前的圖撐場,給自己彈性也是很重要的。
今天選擇句子時,是以「享受生活」作為關鍵字。引起共鳴的就是抄寫的這一句「The more we do,the more we can do.」。最近較有規劃、有系統且持續的去做些生活上的實驗(ex.畫日付、寫電子手帳)SJ,都能感受到自己有在前進。
「do」好像也可以置換成其他動詞,比如:「看得越多,就會看到越多」、「想得越多,想法就會越多」(不過output的太慢了,腦容量將用盡都快跑不動了><)。
___________________
#插畫 #插画 #手寫 #手抄 #illustration #painting #drawing #doodle #sketch #diaryart #diarydoodle #drawthisinyourstyle #drawingchallenge #這個句子打動了我 #語錄 #圖文 #手寫字 #handwriting #手寫的溫度 #每日一句 #日付 #日付シート #日曆 #勵志語錄 #自由書寫 #英文語錄
output動詞 在 YouTube予備校 by デブレイクスルー たまに 塾えもん Youtube 的最讚貼文
【偏差値30台から早慶・地方国立・難関私大合格率90%の方法】を無料メルマガで教えてます。登録は→http://exam-achievement.jp/lp/magazine_new/
(LINEでもok!→@irg4316f でID検索!)
※英単語一覧は下記にまとめてます。ついでに英文法なども解説してます。
これまで英語が苦手でしょうがない人は、この動画を最後に見てください。この動画を見たら、英語を得意にする方法が明確にわかり、やる気がグワーッと出てくるはずです(^^)英語が苦手な人は、英語の勉強法を知らないからです。この動画では、たった一つの英語勉強法を教えます。どんな教材でも使える方法です。この方法を知り、目の前の試験をクリアしましょう!定期試験、センター試験、明治大学などのMARCH・関関同立にも対応可能です。
【①単語】
まず、単語を勉強します。(暗記してみましょう)⇒必要な単語数26
この時点で、全く英語が分からない場合は単語を抑えるだけで頭がいっぱいになります。
あせらず、ゆっくり覚えてみてください。そして、おおよそ覚える事が出来たら次の【②文法】へ進んでください。
1World世界の9from~~から17everずっと
2meat食料10gain増加18soとても
3production生産11of~~の19slightわずかの
4in~~年の12justちょうど20~ly~に
5total~~に達する13percentパーセント21output生産量
6million 百万の14WithABAがBして22per~~当たり
7tonトン(重量)15lagぐずぐずする23peron人
8up 上昇した16population人口24fell fall(落ちる)の過去形
25kilogramキログラム(重量)
26growth成長
【②文法】
次に、文法を勉強します。⇒必要な文法知識5
①過去形
過去の出来事は一般動詞(※)にdまたはedを付けるか、つづりを独自の形に変えて表します。
※一般動詞はBE動詞(⇒is,am.are(~です)または、was,were(~でした))以外の動詞です。
ここではtotal~(~に到達する)、fall(落ちる)が一般動詞になります。
total⇒totaled(到達した)←edが付く
fall⇒fell(落ちた)←独自の形になる(この形は単語1つ1つ覚える必要があります)
②副詞(ここの理解は完璧でなくても大丈夫です。)
副詞は形容詞、副詞、動詞を説明するものです。
英文⇒ever soslightly
この英文は"このところ(⇒ever)非常に(⇒so)少ない(⇒少ない)"という意味です。
"so(非常に)"が"slightly(わずかな)"を説明していて、"eve(このところ)が"so slightly(非常
にわずかな)"を説明しています。
したがってso とeverがここでは副詞になります。
③形容詞(ここの理解は完璧でなくても大丈夫です。)
形容詞は名詞を説明するものです。
英文⇒ World meat production in 1999
ポイントは名詞部分をしっかり覚えておく点(ここではmeat productionが名詞部分)と、
後ろにある形容詞がその前にある名詞を説明することがある点です。
(ここではin 1999が前の名詞meat productionを説明してます)
・worldは名詞でもありますがここでは、"世界の"という意味の形容詞です。
これはmeat productionを説明しています。
・meat productionは名詞で、"食糧生産"の意味です。
・1999は名詞で"1999年"を意味しますが、"in 1999"でmeat productionを説明する一つの
形容詞の役割を果たし"1999年の"という意味になります。
したがって、
World meat production in 1999 の意味は"1999年の世界の食糧生産"になります。
また通常形容詞部分も含めた名詞を大きな一つの名詞として認識します。
つまり「 World meat production in 1999 」はひとつの大きな名詞として認識します。
④現在分詞
現在分詞も形容詞と同じく名詞を説明する言葉です。
動詞にingを付けて表します。
production lagging populations growth (人口成長率に負けている生産)
ここではlagging populations growthが現在分詞です。
意味は"人口成長率に負けている"です。
※lag A でAに負けているの意味。ここで言うAとはpopulations growth("人口成長率"という意味の名詞)です。
したがって、
production lagging populations growth は "人口成長率を遅らせる(食料)生産"になります。
また、現在分詞に説明されている名詞は大きな一つの名詞として認識します。
(つまり" production lagging populations growth "が一つの名詞となります)
【③構文】
次に英語の基本構文を勉強します。⇒必要な構文知識4
①AofB
"BのA(AはBの所有物)"、あるいは"BというA(BはAと同じ)"の意味です。
ここではa gain of just 1 percentですので前者の"BのA"の意味になり、"ちょうど1%の増加"
になります。ちなみにAはa gain(増加)で、Bはjust 1 percent(ちょうど1%)です。
②With C D
"CがDしたので"を意味します。
Cには名詞(production lagging populations growth)が入り、Dには形容詞または副詞(ever
so slightly)が入ります。
したがって、
With production lagging populations growth ever so slightlyは
CD
"人口成長率に負けている(食料)生産がこのところ(⇒ever)非常に(⇒so)少ない(⇒slightly)ので"
という意味になります。
③up fromE
"Eから増えて"を意味します。
Eには名詞が入ります。本文ではE="215 million tons in 1998(1998年の2億15百万トン)"が入っています。
④fall from F to G
"FからGに落ちる"を意味します。FとGには名詞が入ります。
ここでは
Fに"36.4 kilograms in 1998(1998年の36.4kg)"が入り、
Gには"36.3 in 1999(1999年の36.3)"が入っています。
したがって、fell from 36.4 kilograms in 1998 to 36.3 in 1999は
"1998年の36.4kgから1999年の36.3に落ちた"の意味になります。
【④論理】
さらに、英語のロジカルな文章構成に関して勉強する必要があります。⇒必要な論理の知識3
①A-B⇒A=B
World meat production in 1999 totaled 217 million tons,up from 215 million tons in 1998 - a gain of just 1 percent.
AB
この文章で、Aに当たる部分はどこかと言えば、"World~1998"までです。
一方、Bは"a gain of just 1 percent"になります。
Aの意味は"1999年世界の食糧生産は1998年の2億15百万トンから2億17百万トンになった"
Bの意味は"ちょうど(前年と比べ)1%の増加"
Aは"217/215*100-100=1(%)"と言うことなので、ちょうど1%の増加だと分かります。
したがってA=Bになります。
②A(原因)⇒B(結果)
With C D ,sentence.
この場合、"With C D"がA(原因)となり、"sentence"がB(結果)になります。
ここでは、"With C D"は"With production lagging populations growth ever so slightly"であり、
(意味は「食糧生産量が非常に僅かしか伸びなかっため人口増加率に追いつけないでいるので」)
"sentence"は"output per peron fell from 36.4 kilograms in 1998 to 36.3 in 1999."となります。
(意味は「一人当たりの生産量は1998年の36.4kgから1999年の36.3kgまで落ちた」)
③同じ形の反復
英語の文章は、同じ形を好みます。そして同じ形のときは言葉の省略を行ないます。
ただルールとして、前に出した言葉のみ省略することになっています。
したがって日本語のように"なんとなく省略しても分かるだろう"と考え、勝手に省略することは
英文では好まれません。
ここでは"from 36.4 kilograms in 1998 to 36.3 in 1999"で"同じ形の省略"が起きています。
36.4 kilograms in 1998 と36.3 in 1999とは 同じ形ですね。
つまり、どちらも"数字+キログラム+西暦"です。
しかし、前に出てきている形("36.4 kilograms in 1998")と同じだと分かるので、
36.3 in 1999は"kilograms"が省略されていると理解できます。
ここまで来て、ようやく38程度の知識が同時に頭に入ってますから、なんとかこの英文が読めるようになります。
ちなみに英文訳はこうなります。
1999年の世界食料生産量は、1998年の生産量2億1千5百万トンから2億1千7百万トンになった-ちょうど
前年比1%の増加率だ。食糧生産量が非常に僅かしか伸びなかっため人口増加率に追いつけないでいる。
そのため一人当たりの生産量が1998年の36.4kgから36.3kgに減ってしまっている。
気軽に相談ください!相談フォーム:
https://1lejend.com/stepmail/kd.php?no=205831
(相談いただいた方全員に、10万人が支持した「9割受かる勉強法(ダイヤモンド社)」の特別編集編(無料)もプレゼント中!)
プロフィール:
中学時代、登校拒否を起こし、当時偏差値39の私立高校に入学。高校1年時に「偏差値29」から早稲田に合格!その経験をもとに、偏差値30-40の学力の生徒を偏差値60以上の大学合格に導く。累計合格率9割を実現。これまで約3,000名の指導実績を誇る。7万部ベストセラー9割受かる勉強法(ダイヤモンド社)著者。
![post-title](https://i.ytimg.com/vi/Hi0QtLYnijw/hqdefault.jpg)