【從學員練習影片觀察到一個關於 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 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「separate形容詞」的推薦目錄:
- 關於separate形容詞 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於separate形容詞 在 EZ Talk Facebook 的最佳貼文
- 關於separate形容詞 在 Eric's English Lounge Facebook 的最佳貼文
- 關於separate形容詞 在 コバにゃんチャンネル Youtube 的最佳貼文
- 關於separate形容詞 在 大象中醫 Youtube 的精選貼文
- 關於separate形容詞 在 大象中醫 Youtube 的最佳解答
- 關於separate形容詞 在 separate名詞的菜單和評價,YOUTUBE和價格外帶和訂位 的評價
- 關於separate形容詞 在 70名工廠工人被解雇。 【單字2:lay off (v.) 裁員】 這個字是個 ... 的評價
separate形容詞 在 EZ Talk Facebook 的最佳貼文
#EZTALK #你不知道的美國大小事
#KimJongUn
Is Kim Jong-un Critically Ill? 👀
💬 金正恩病危❓
最近這幾天最常看到的新聞,除了新冠肺炎外,就是北韓領導人突然消失的新聞,今天就來聊聊這件事。進入文章前,先來看看單字~
【✍主題單字】
1. critically ill「病危的」:critically 常用來形容「病情危急地」。
2. absent「缺席的」
3. speculation「猜測,推斷」:當名詞,動詞為 speculate。
4. credible「可信的」
5. severity「嚴重性,嚴重程度」:當名詞,形容詞 severe。
6. North Korean defector「脫北者」:defector「叛逃者」,指脫離原本國家、逃到對立政治立場的另一個國家者。
7. obesity「過胖」
8. decline「拒絕,謝絕」:比 reject 跟 refuse 要婉轉一些。
9. in light of「有鑑於」
--
On April 15, North Korean leader Kim Jong-un was absent from the celebration of his grandfather Kim Il-sung’s birthday. Kim Il-sung was the founder of North Korea, and the anniversary of his birth is the nation’s most important holiday. Ever since then, there has been speculation about Kim Jong-un’s health. Kim’s last known appearance was at a Politburo meeting on April 11.
4 月 15 日,北韓領導人金正恩缺席祖父金日成的誕辰。金日成是北韓國父,所以他的誕辰可說是北韓全國上下最重要的國定節日。自此之後,有關金正恩健康堪慮的傳言四起。而金正恩最後一次現身,是參加 4 月 11 日勞動黨中央政局會議。
According to a U.S. official, Kim is in grave danger after undergoing surgery. And another U.S. official told American media that the concerns about Kim’s health are credible, but the severity of his condition is hard to access. What kind of surgery? Daily NK, a newspaper run by North Korean defectors, reports that Kim received heart surgery because of “excessive smoking, obesity and overwork.” On the other hand, two separate South Korean government sources have said that the reports about Kim’s health aren’t true, and that there have been no unusual signs coming from North Korea.
一名美國官員指出,金正恩術後病危,而另一名美國官員告訴媒體,有關金正恩健康的揣測是可信的,不過嚴重程度還不得而知。那麼,金正恩做的是什麼手術?由脫北者經營的韓國媒體《Daily NK》指出,金正恩所接受的手術是心血管手術,因為他有「嚴重煙癮、過重而且過勞」。不過另一方面,兩個不同的南韓政府消息來源指出,有關金正恩的健康傳聞並非屬實,北韓看起來並沒有任何不正常的徵兆。
When asked about Kim’s health condition, the U.S. National Security Council and the Office of the Director of National Intelligence declined to comment. The State Department and the CIA have also made no public statements. But in light of the military exercises carried out by North Korea on April 14, which included the launch of several missiles, U.S. intelligence agencies are continuing to closely monitor the situation.
當被問及金正恩的健康狀況,美國國家安全委員會與國家情報總監都拒絕評論。國務院與中央情報局也沒有做任何公開聲明。不過,鑑於北韓在4月14日執行軍事演習,其中還發射數枚導彈,美國情報單位仍密切關注情勢發展。
【📎美國新聞相關】
1. the U.S. National Security Council「美國國家安全會議」:簡稱國安會,是由美國總統主持的最高級別國家安全及外交事務決策委員會,處理外交與安全事務。
2. the Office of the Director of National Intelligence「國家情報總監」:處理有關國家安全的情報事務時的主要諮詢對象,統領 16 個美國情報體系。在建立國家情報總監之前,美國情報體系龍頭是中央情報局(CIA)總監。
3. the State of Department「美國國務院」:美國政府負責外交事務的行政部門。
--
🔔 按下「搶先看」,每週五【美國大小事】,由 Judd 編審分享最即時美國新鮮事!想知道更多美國文化,請看 👉 http://bit.ly/EZTalk嚴選
separate形容詞 在 Eric's English Lounge Facebook 的最佳貼文
[文法指南] 免費英文文法書
「為什麼要學英文文法?」這可能是英語學習者最常問的一個問題,什麼五大句型、三大子句、分詞構句、倒裝句、無靈主語、五花八門、千變萬化。光是看文法名稱就會眼花撩亂!
完整地理解每一種文法架構,對一般的英語學習者是極大的挑戰,即便背下每種架構,還是無法隨心應用規則,反而導致很多學習者怕被挑毛病而不敢開口說英文。但是不學習文法的話,進階英文口說與寫作的測驗就無法順利通過。
但是英文學習者真的一定要背所有文法規則嗎? 畢竟我們學習母語時也沒有研究文法,英語母語者基本上也是不專修文法。答案是不需要,但學習者必須持續地獲取大量正確而有意義英語輸入 (comprehensible input) 來學習到正確的英文字彙 (words)、搭配詞 (collocation)、片語 (phrases)、子句(clauses)、和句子 (sentences) 的表達與使用。
雖然在學習中偶爾會有些錯誤產生,但是只要透過大量的英語輸入,並且逐步改正錯誤,語言的使用無論是在語態學 (morphology)、句法學 (syntax)、語音學 (phonology),語義學 (semantics) 及語用學 (pragmatics) 都會逐漸地變得越來越流暢,更接近母語者的使用方式。
但畢竟在以英語外語的國家 (EFL),需要投資龐大的時間、精力、和花費才能營造健全的英語的環境來獲取充足的英文輸入。因此目前大部分在國內的英文學習者(至少是中階或進階學習者)還是必須理解英文文法。問題是我們到底要怎麼樣才可以有效率的學文法?
老師提供同學以下的4個建議:
★★★★★★★★★★★★
1. The separate study of grammar, at least for beginning to intermediate learners, when decoupled from communication is ineffective!* 有一些學習者可以把所有不規則的動詞 (irregular verbs) 都背出來,但是在問路或者給建議的基本對話可能連一句也說不出來。所以建議學習者在學習文法的時候,一定要理解文法的用途,在有意義的情境中應用在聽、說、讀、寫上,而不只是記句型而已!
比如說假設語氣 (type 2 conditional) 的假設 (if clause)是用過去式 (simple past) 去寫的,但是假設的事件並非一定發生在過去 (e.g. If I were you)。學習者則是需要理解過去式的寫法在句構中是代表事件並非事實 (hypothetical conditional),同時也建議把剛學習的假設語氣句型應用在自己的生活中,例如可以用這種句型給別人建議 (If I were you, I would read this book.) 賦予句構意義。
*http://www.mikeswan.co.uk/elt-applied-linguistics/teaching-grammar.htm
★★★★★★★★★★★★
2. 學習者也一定要了解自己的程度和目標,並不建議為了溝通而學習的初學者一開始花太多時間在分析文法,應該是了解主要必須用的字彙、搭配詞、和片語以後才去理解文法,幫助自己歸納和應用已經累積與理解的語料庫,同時輔助對自己進一步的學習。相對的考托福 (TOEFL iBT) 和雅思 (IELTS) 的考生就需要花更多時間去理解文法,畢竟口說跟寫作的評分確實是包含了文法的指標 (grammatical accuracy and syntactic variety)。
準備英文考試,文法是關鍵嗎?
https://goo.gl/9yZcHn
★★★★★★★★★★★★
3. 學習文法時可嘗試從使用頻率最高的文法架構開始下手。有些語言學者認為文法學習是有自然順序的 (the natural order hypothesis),而且比較容易學習的文法結構不一定是最常用的。雖然有一些結構同學是要照順序學習的 (e.g. 要先學形容詞子句,才可學得怎麼把形容詞子句簡化) 建議同學把火力集中在一些自己常用到的架構。一開始也不需要學習所有的文法架構,而應該規劃自己按部就班地學習。
★★★★★★★★★★★★
4. 學習文法時絕對不要走火入魔,有時候甚至會寫出文法正確但是不符合溝通目的句子 (e.g. "Colorless green ideas sleep furiously"*)。初學者在練習口說跟寫作時一開始也不需要太注意自己的文法,絕對不要恐懼,一定要踏出第一步多使用英文! 很多人都會覺得這樣子做沒有辦法勝任考試,可是同學必須記得學習跟測驗是兩件事,托福或雅思考試只是用來評估自己目前學習的進度是否達到可以應付大學的英文程度,而並非是學習的方式!
不是說文法在口說跟寫作完全不重要,而是不應該讓它導致我們不敢開口跟動筆! 要知道就連英文母語者的出版品,也需要校對不知道多少次才可以寫出完美的句子!
*https://en.wikipedia.org/wiki/Colorless_green_ideas_sleep_furiously
★★★★★★★★★★★★
那想必同學接下來的一個問題,一定是哪裡可以買到適當的文法書,相信同學只要搜尋「英文文法書推薦」就會看到 Grammar In Use 和 Azar English Grammar 這兩個系列的文法書。但是說實話市面上的文法書大部分都包含了完整的架構,只要同學認真去查詢和理解,每一本都是好的文法書!
在此老師也幫同學編輯了免費的電子文法書:
https://esenglishlounge.com/2015/06/16/grammar-resources/
同學只要按下Ctrl+F 再搜尋自己有興趣的文法架構 (中英文即可) 就可以找到相關的文法連結、影片、和講義,有問題也歡迎留言。
★★★★★★★★★★★★
Sources:
http://www.mikeswan.co.uk/elt-applied-linguistics/teaching-grammar.htm
https://www.teachingenglish.org.uk/article/natural-order
http://www.educ.ualberta.ca/staff/olenka.bilash/best%20of%20bilash/krashen.html
https://en.wikipedia.org/wiki/Colorless_green_ideas_sleep_furiously
Image source: http://manxman.ch/moodle2/file.php/4/happytest_corrections3.png
separate形容詞 在 70名工廠工人被解雇。 【單字2:lay off (v.) 裁員】 這個字是個 ... 的推薦與評價
再細一點看,se是「分開」的意思,比較常用的代表字是separate (v.) 分開。 ... 「多餘的」這個字是由re再+d停音+und多、留、氾濫+ant 形容詞組成。 ... <看更多>