【從學員練習影片觀察到一個關於 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 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有84部Youtube影片,追蹤數超過4萬的網紅阿布X布布遊戲實況,也在其Youtube影片中提到,#免費鑽石 #FreeFire #阿布布布 Free Fire 免費鑽石3.0教學公開之前可以答應我一件事嗎? 增加Google問卷獎勵的秘訣 google opinion rewards 大家好我是阿布 昨天本來要發免費鑽石3.0 但是前天發生的體驗服事件 所以緊急撤下已經預排的免費鑽石3.0影片...
「極速開發」的推薦目錄:
- 關於極速開發 在 91 敏捷開發之路 Facebook 的最佳貼文
- 關於極速開發 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於極速開發 在 91 敏捷開發之路 Facebook 的最佳解答
- 關於極速開發 在 阿布X布布遊戲實況 Youtube 的最佳貼文
- 關於極速開發 在 Tiny 微影 Official Youtube 的最佳解答
- 關於極速開發 在 少年A Youtube 的最佳貼文
- 關於極速開發 在 [討論] 揪團報91 極速開發六月班- 看板Soft_Job - 批踢踢實業坊 的評價
- 關於極速開發 在 91 敏捷開發之路- 【極速開發+】熱血學員的典範之一今年 ... 的評價
- 關於極速開發 在 極速開發網頁極速搜索YouTube - 東方日報 的評價
- 關於極速開發 在 極速開發 :: 台北市補習班評價 的評價
極速開發 在 91 敏捷開發之路 Facebook 的精選貼文
中秋佳節連假,看著一堆人出遊的新聞,然而還是有一大群熱血的夥伴,在連假中一起在線上進行了【#針對遺留代碼加入單元測試的藝術】以及【#極速開發】的培訓。
這是第一次採線上直播的進行方式,在上課前因為之前有錄 Classic TDD by Example 無限次觀看的影音課程的經驗,比較能掌握在螢幕上該怎麼解說、標記、highlight 重點。
而這次課前也跟同事和夥伴們事先練習過,如何用 zoom 來安排互動、討論、上課下課之間流暢度的配合,所以都還蠻順利的。
唯一就是開了6個 IDE 再加上 zoom 的直播當下,memory 跟 cpu 在 live coding 過程中,跑單元測試需要等待的時間拉長了,甚至 6 個 IDE 時 intellisense 出來的速度跟不上我的手速(後來關到剩下4個)
陪家人團聚很重要,讓自己進步也很重要,疫情肆虐下要恢復過去的生活已經幾乎不可能了,但工作機會卻因此越來越險峻,怎麼投資自己,怎麼讓自己更加熟悉線上/遠端的協作,還是很重要的。
感謝陪伴我第一次正式線上直播課的所有學員,謝謝你們即使在遠端,仍積極參與、發問,還有課後的練習。
※ 極速開發課上完當晚,就有學員錄好第一版練習影片找我 review 了,今天是第二天,已經有六位同學交了第一版作業。看到大家都這麼熱血,我也跟著沸騰起來了。
投資自己不嫌晚,但最怕沒跨出第一步,你不需要一開始就很強,但你需要開始才能變強。
也謝謝好夥伴 Cash Wu Geek 在線上幫忙顧前顧後,有你的協助,讓兩天課得以進行地更順利完整。
極速開發 在 91 敏捷開發之路 Facebook 的最佳解答
【課程更新公告】
➀ 20210918 (六): 針對遺留代碼加入單元測試的藝術
➁ 20210919 (日): 極速開發
這兩門課因應疫情第二級管制,且九月學校剛開學更容易潛藏傳染風險,加上活動場地不允許室內用餐,且須梅花座、維持社交距離、避免直接的交流,加上室內上課時間長度與空氣流通問題,將改為「線上直播上課」搭配「未來實體課程/活動 回鍋」的方式,以便各位在原訂日期能即時獲得上課內容,且未來實體活動可補齊應有之上課效果。
還請有報名這兩門課的學員,檢查一下信箱,如您沒收到此通知信,請務必檢查一下垃圾信件,因為保護各位的 email 資訊,大量密件副本(bcc) 加上信件內容有些連結,容易被判定成垃圾信件。
如果還是沒有,請私訊我,我會盡快協助處理。
--
圖片來源:Photo by Patrick Fore on Unsplash
極速開發 在 阿布X布布遊戲實況 Youtube 的最佳貼文
#免費鑽石
#FreeFire
#阿布布布
Free Fire 免費鑽石3.0教學公開之前可以答應我一件事嗎?
增加Google問卷獎勵的秘訣
google opinion rewards
大家好我是阿布
昨天本來要發免費鑽石3.0
但是前天發生的體驗服事件
所以緊急撤下已經預排的免費鑽石3.0影片
我們還是想發
因為都已經剪好了
字幕也上好了
封面標題都打好了
哪有不發片的道理
但是體驗服事件後
我們希望在發布免費鑽石3.0之前
希望觀眾能完整看完這部影片
看完後承諾我們
不會去打擾其他創作者
遇到問題會在影片下方留言問我們
體驗服事件
讓我們發覺觀眾是一群
求知慾非常旺盛的人
這是好事我沒有說不好
但是影片是我發的
所以我希望任何問題都留在我們頻道就好
因為有些觀眾去其他實況主頻道問了
其他實況主覺得困擾、煩
所以把這件事情告訴官方
要官方來提醒我們
那我也發了道歉影片
道歉影片內容是向覺得困擾的實況主及官方道歉
我先說為什麼我會拍體驗服載點給大家知道
大家要知道世界很大
每天有上千部有關FF的影片被發布
任何實況主發布的任何影片主題
都不會是第一個發布也不會是最後一個發布
即使台灣沒有
其他地區一定會有
公布體驗服載點的影片
當然我們也不是第一個發的
國外有一堆實況主已經發布過了
如果大家用英文關鍵字搜尋可以找到一堆
畢竟體驗服載點是公開的任何人只要輸入關鍵字都能看到
官方並沒有鎖起來
FF這款遊戲在台灣被拍最多的主題是吃雞、抬槍、爆頭等技術型的影片
我們頻道這三年來的風格
都是偏向拍攝娛樂與資訊類型的影片
我們比大部分FF玩家都年長一些
同時也因為布布的理念
她希望盡量多放一點教育類型的內容
希望大家能受到啟發將來少走冤枉路
或是在成長過程中遇到挫折時能夠得到紓解
我們通常只在寒暑假發片
但是今年不一樣
我們整年都會發片
因為只要一開邊境布布就會直接跳上飛機
所以阿布想要在布布去留學前
保留越多布布的影片越好
並且盡可能的多出一點資訊型的影片
讓無課玩家可以多些資源
就像免費鑽石3.0
需要擁有軟體開發的背景
才能夠找到的方法
阿布再強調一次
每天光FF的影片就有上千部
何況是FF以外的各類型影片
各個主題之間都會有相似及相關的地方
所有主題沒有人會是第一個發現
也不會是最後一個拍的
問卷獎勵在FF這款遊戲還沒出之前就有了
當時就已經有人在拍問卷獎勵
但是多數人拍的都是教觀眾如何使用問卷獎勵而已
就像我剛剛說的
增加問卷獎勵的方法
是需要結合軟體開發的背景才能得到的資訊
阿布希望大家在看了免費鑽石3.0之後
觀眾有任何問題都在我們頻道詢問就好
不要寫信去google公司
也不要去其他只是純粹分享如何下載問卷獎勵的創作者頻道留言
造成他們的困擾
如果發布免費鑽石3.0
觀眾能做到完整看完影片教學並且有問題只會在我們頻道留言詢問
,請在這部影片按讚
如果沒耐心看完影片只想趕快知道答案,
所以會到任何拍過問卷獎勵的人頻道留言的,請在這部影片按倒讚
如果有其他想法也歡迎在這部影片下方留言
阿布會根據讚、倒讚及留言
直接無腦判斷要不要完整公開免費鑽石3.0
簡單來說免費鑽石3.0是否公開
決定權在各位觀眾,不是我們
那我們下部影片見 掰掰
合作提案歡迎寄信:egcba064@hotmail.com
【使用貝殼幣抖內說明】
雷雷工程師(布布)遊戲ID:55652423
軟體工程師(阿布)遊戲ID:55273189
一、成為阿布"或"布布永久遊戲好友:2000鑽
二、"同時"成為阿布"和"布布的永久遊戲好友:3500鑽
三、.擁有永久管理員板手(可聊天但不能管台):1500鑽
四、永久FreeFire阿布和布布好友+管理員板手:4200鑽
請截圖並私訊臉書粉絲專頁
我們會主動加你FF好友
【使用現金抖內說明】
一、使用【歐付寶】贊助支持我們繼續創作影片,
贊助後請【截圖私訊】臉書粉絲專頁【新聞布頻道阿布X布布】❤️,
臉書粉專管管或阿布布布會進行確認❤️
https://payment.opay.tw/Broadcaster/Donate/5C4C1C8F99D685F7933EE202DFD7578F
二、使用歐付寶或直播時使用超級留言
加入我們頻道會員累積滿800元台幣(請自行截圖累計並主動私訊阿布布的臉書粉絲專頁)
我們會在滿800元當天或下一次直播封面增加你的名字及贊助金額❤️
三、(請自行截圖累計並主動私訊阿布布的臉書粉絲專頁)
贊助阿布X布布遊戲實況累積達900台幣給板手(可聊天但不能管台)❤️
四、成為阿布"或"布布遊戲好友:500元
五、"同時"成為阿布"和"布布的遊戲好友:800元
六、FreeFire阿布和布布好友+管理員板手:2100元
【副頻道】
也請支持我們的副頻道[阿布X布布日常]❤️
https://www.youtube.com/channel/UCw9Ee7WdlbOzwg7y2C9SkDg?view_as=subscriber
免責聲明:
1.斗內請量力而為,本頻道不提供任何退款機制
2.若成為管管後,有任何詆毀、汙衊、妨害阿布X布布頻道發展的言行舉動,
阿布X布布頻道保有修正、暫停或終止玩家成為直播臨時管管或固定管管的權力
極速開發 在 Tiny 微影 Official Youtube 的最佳解答
【 6月9日? 派貨❗ 6月10日? 現貨開售‼️】
? TINY 城市 Bd5 九巴巴士廠模型套裝
ONLINE STORE:https://www.tiny.com.hk/product?product_id=25694
久等了? 早前大家喺 #春季購物節?預訂嘅九巴巴士廠派貨喇!暌違多年,各位巴士迷終於可以再帶佢番屋企喇? 九巴巴士廠 #樓高四層,大慨可以 #放置36部 1/76巴士模型,整體設計及外貌都同早年推出嘅冇太大分別~#唯獨 九巴Logo已經轉換成新模樣✨,而且附送嘅巴士牌貼紙都唔同咗嫁!快啲幫屋企啲巴士揾個落腳點啦?
? TINY 城市 126 合金車仔 - 三菱 Pajero 2015 消防 (F9208)
ONLINE STORE:https://www.tiny.com.hk/product?product_id=27739
#你地冇睇錯啊?? 派貨喇!上年已經推出過三菱 Pajero 2015 消防 (F9207),到底同依架有咩分別?#F9208特意加設窗網,車身沿用紅白「西利托格子花」(Sillitoe Tartan) 圖案作拉花⚪? 車頂配備排燈,車側設腳踏板及泥擋,車廂內更備有先進通訊設備,係每次火警或事故中現場總指揮官嘅好拍檔!?
? TINY 城市 JP4 合金車仔 - 東京消防廳直升機
ONLINE STORE:https://www.tiny.com.hk/product?product_id=27739
1/144比例,隸屬東京消防廳航空隊??☺️ 負責執行各種消防及急救任務? 機頂設有5塊主旋翼? 而且今次設計師仲特意為TINY日本系列重新設計包裝,以櫻花粉紅及天使藍色為主色調?? 締造濃濃嘅日本風啊~?
? TINY 城市 113 合金車仔 - 平治 Vito 紅A
ONLINE STORE:https://www.tiny.com.hk/product?product_id=24609
「紅A」拉花又點止一兩款呢?今次一改鮮明風格,走低調簡單路線,以白色為主調,再以鮮紅色作點綴? 拉花上印上「紅A」品牌母公司 ── 星光實業有限公司全名,以及公司所有社交媒體資料,以藉運送產品來宣傳品牌~☺️?
? TINY 城市 95 合金車仔 - DingDingSmile Tram (白色車身)
ONLINE STORE:https://www.tiny.com.hk/product?product_id=12358
全新模具!#第七代電車 終於登陸TINY喇!驟眼望落去,拉花同上一代#95 無差別,同樣係用上「笑聲笑聲,滿載叮叮」宣傳口號,但主調顏色已經由綠色轉為白色。而且!佢係唯一一部用此口號嘅冷氣電車~? 夠獨特喇掛??
▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿ ▿
? ONLINE STORE: https://www.tiny.com.hk/
【TINY微影 專門店】?
??
銅鑼灣皇室堡|柴灣杏花新城|山頂廣場
尖沙咀美麗華|九龍灣德福|觀塘APM
荃灣荃新天地|大埔超級城|屯門市廣場|元朗YOHO MALL
??
澳門 賈梅士分店
氹仔 樂駿盈軒分店
(來來電器店內)
【B51 專門店】? 旺角新世紀廣場Moko
? 查詢:
? Facebook Inbox: m.me/toyeastcom/
? Whatsapp:+852 5633-2221
(Whatsapp快速連結: https://bit.ly/2OZKpQP)
立即加入 Telegram 官方頻道,掌握最新預訂及現貨資訊! http://bit.ly/2raMDnW
極速開發 在 少年A Youtube 的最佳貼文
訂閱頻道 ➔ https://is.gd/tEauq7
成為我的頻道會員 ➔ https://is.gd/g2E2OA
合作咨詢 ➔ siuninA2000@gmail.com
其他能找到我的地方
Instagram ➔ https://is.gd/giLJOB
Facebook ➔ https://is.gd/bZFFRp
bilibili ➔ https://is.gd/SP6CoO
BGM ➔ https://is.gd/AAFGek
#極速領域 #QQ飛車 #SpeedDrifters #ZINGSPEEDMOBILE
極速開發 在 極速開發網頁極速搜索YouTube - 東方日報 的必吃
【本報綜合報道】美國史丹福大學一名十九歲電腦科學系學生,參照Google上周推出的極速搜索功能,僅花三小時便開發出一個可極速搜索YouTube短片的 ... ... <看更多>
極速開發 在 [討論] 揪團報91 極速開發六月班- 看板Soft_Job - 批踢踢實業坊 的必吃
1. 自介:前端工程師
2. 對象:對想更精進自己的寫code速度,以及調整出更合適自己的IDE環境的夥伴
3. 日期:06/07
4. 地點:台北市大安區金華街199巷5號
5. 團報人數:目前內建2人,滿三人可享團購價,想誠徵1~2 名夥伴
詳細參考網址:
https://dotblogs.com.tw/hatelove/2019/11/23/extreme-developing-training-202006
— 已徵到 —
謝謝大家
-----
Sent from JPTT on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.83.225 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1586440140.A.FEC.html
... <看更多>