【從學員練習影片觀察到一個關於 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 也不該是目標,目標永遠都是在實務上產生價值、解決問題、滿足需求。
同時也有56部Youtube影片,追蹤數超過7萬的網紅燕秋老師教學頻道,也在其Youtube影片中提到,📕關於電子書閱讀器的作業系統 以廣義來說電子書閱讀器分成「開放式」及「封閉式」二類作業系統 📚開放式 說穿了就是具有E-ink螢幕的Android平板,例如hyread, 文石boox... 為androdi或自行開發之作業系統,可另外安裝APP,所以除了購買專屬的電子書廠商的書籍之外,也可以再安裝...
「系統開發文件」的推薦目錄:
系統開發文件 在 中環十一少 Facebook 的最佳解答
2021年是「蘋果」掉下來的一年,APPL反壟斷訴訟失利,下令蘋果公司不可強制應用程式App的開發商,必須使用App Store的支付系統付費,要求蘋果允許應用程式開發商,可引導客戶直接透過其他方法付費。
法官指,蘋果禁止第三方支付的做法違反市場競爭原則。不過,法官亦稱Epic 在手機遊戲《FORTNITE》違反合同,須向蘋果支付賠償金。
蘋果過往對應用程式開發商收取一成半至三成的銷售分成,俗稱為「蘋果稅」,今次案件定必削弱蘋果盈利能力,而蘋果的App Store年收入超過200億美元,利潤率高於75%,蘋果去年因為Epic的付費方式繞過蘋果系統,將《要塞英雄》下架,而Epic因此控告蘋果壟斷,蘋果行政總裁庫克於5月曾經出庭作證。
事實上,今年9月初蘋果已放寬App Store付款規定,Netflix等媒體可適用避開抽成。
法官 Rogers 說:「成功並不犯法」,但這宗商業案件,最後只能看法官怎麼判。
法庭文件:https://s3.documentcloud.org/documents/21060631/apple-epic-judgement.pdf
系統開發文件 在 創意創新行銷中心 Facebook 的最佳貼文
【N世代學苑】標竿企業實戰班🔎 #學而實戰之
💎 用數字說話,翻轉傳產,達到精準、有效、可控制的產能生態 💎
中小企業佔據臺灣整體企業的9成,而當中的製造業通常被視為傳統產業,也許你印象中的工廠是到處油汙、沾滿鐵屑,但其實,有些中小企業已經是有如科技廠的環境✨✨!
參與本次 #N世代學苑實戰班企業個案 緯凱工業有限公司 是位於中部一家專注於精密品質的模具暨射出成型廠,工作小組因本次計畫與鄭總經理和企業二代鄭特助接觸以來,完全感受到緯凱在推動數位化工廠,甚至推動產業的決心💪!
【從整潔環境的自我要求,讓客人看見做事的細膩】
進到廠區,工作小組馬上被乾淨、明亮且無味的現場環境所驚艷🌟,顛覆傳統認為塑膠生產會有異味的想法,
鄭總經理也分享曾經在爭取國外客戶訂單時,除了專業上的實力,現場作業環境也是讓客戶點頭的契機🤩;而在兩年前,更大力升級廠房,搭建 #一萬級無塵室,就是為了提供生產醫療、實驗器材的良好環境,同時在生產過程中,也有排氣系統經過活性碳過濾,才能達到無異味。
這些努力都環繞著緯凱工業成立以來,抱持著「以精密工藝把關源頭,做客戶產品的後盾」的初心❤️,從模具設計、開發製造、射出成型過程中,排解每一個環節裡可能產生的難題。
【善用數位工具協助資訊傳遞的正確性】
你也曾經不斷抄寫塗改報表😩,只因臨時的訂單而全部調整工作嗎?
這次在 #中小企業接班傳承數位成長計畫,緯凱除了延續去年已完成的機連網,蒐集設備稼動率等數據項目,
今年度透過計畫將實現排程管理系統化、可視化🔎,讓現場人員不用再騰抄及傳遞紙本文件,位在無塵室裡的師傅也能透過看板知道訂單排程,並且可以統整所有派工、任務單、庫存狀況等數據💻。
數位化導入協助公司年輕的接班團隊,更好地傳承現場經驗並管理數據,讓資訊達到高透明度!
也邀請你 #一起猜猜看緯凱工業下一步
🎯 問題1:陪跑教練將如何從旁協助企業強化經營策略?
🎯 問題2:如何行銷企業的優勢,創造更大收益?
--------
關於N世代學苑👉https://bit.ly/3meTo2J
系統開發文件 在 燕秋老師教學頻道 Youtube 的精選貼文
📕關於電子書閱讀器的作業系統
以廣義來說電子書閱讀器分成「開放式」及「封閉式」二類作業系統
📚開放式
說穿了就是具有E-ink螢幕的Android平板,例如hyread, 文石boox...
為androdi或自行開發之作業系統,可另外安裝APP,所以除了購買專屬的電子書廠商的書籍之外,也可以再安裝像是kindle, readmoo, kobo等多家書商的電子書APP,亦即可以在此閱讀器中看到其他的書.
優點
喜好購買不同家平台的書籍者(哪有優惠哪裡去),那就很適合此設備.
缺點
因不同家的戴具,在APP使用上的優化並不如專屬的閱讀器來的好,例如顏色對比,速度較延遲,介面比例過小等等.
📚封閉式
亦即為專屬的閱讀器,只能看同一個平台的書籍,也無法下載安裝任何的其他APP(就是台單純的閱讀器),例如:kindle, kobo, mooink...
專為自家平台所開發的電子書閱讀器,各家有各自的優點及特色,在介面上會更優化閱讀時的介面.
優點
專為自家開發故更能凸顯各家優點,
缺點
綁定特定書庫,並不是所有書庫都有所需的書籍,若喜歡在不同平台上購買書籍就無法觀看
則針對自行上傳文件(PDF)則是目前電子書閱讀器都有的功能哦!(每一台都有,只是上傳方式的不同)
心得
幾乎各家的閱讀器,燕秋老師都有購買及使用,但我的書大多以readmoo讀墨的平台為主(目前約莫1百多本,持續成長中)
使用策略是
✍外出時
是攜帶mooink 6吋 or kobo 6吋,因為外出的需求大多是零碎時間觀看,所以以小說為主,不需要大螢設備,工作需要則以ipad mini來處理
✍辦公室/家裡
🔖若要看小說,則使用7.8吋(減少翻頁次數),螢幕也比較大
🔖若要看圖書館的書,可利用學校或公共圖書館帳號借書,則會使用hyread gaze x, 因為這平台有與圖書館合作,可以使用借閱電子書,但這台只會拿來看圖書館的書,因為使用了其他的APP(例如readmoo), app的介面有點慘不忍賭(我個人認為啦!)
🔖若要看電腦書籍/文件/論文,則是使用mooink的13.3吋,因為閱讀效果不輸A4紙張,看起來又舒服又方便,亦可同時書寫筆記再匯出至電腦中,偶爾也會用這台來觀看小說,真的超讚的(回不去了)
以上是燕秋老師的心得分享
每個人的需求不同,所以也不會像我一樣買了一大堆,
但是能夠讓家裡空間變大,書籍永久留存,分享給家人觀看,文件註解都能留下,外出也不用帶一堆書.....
雖然也是有買實體書,但每一年會固定清書/裁書/掃描/電子化,將最喜歡的書永久留存,
我還是會持續支持電子書😎
#燕秋老師教學頻道
#歡迎轉載分享
#不論實體書或電子書
#知識就是力量
系統開發文件 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最佳貼文
從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料
01_重點回顧與建立會員系統
02_會員資料讀取與切割與輸出
03_與寫入資料庫結合批次寫入資料
04_編號與關鍵字與日期資料查詢
05_改為與抓前十個會員與B和E欄
06_python套件抓取與下載requests模組
07_requests模組下載資料
08_下載資料與切割資料
完整教學
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python113
吳老師教學論壇
http://www.tqc.idv.tw/
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 110/1/13
EXCEL,VBA,Python,東吳推廣部,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
系統開發文件 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的精選貼文
從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料
01_重點回顧與建立會員系統
02_會員資料讀取與切割與輸出
03_與寫入資料庫結合批次寫入資料
04_編號與關鍵字與日期資料查詢
05_改為與抓前十個會員與B和E欄
06_python套件抓取與下載requests模組
07_requests模組下載資料
08_下載資料與切割資料
完整教學
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python113
吳老師教學論壇
http://www.tqc.idv.tw/
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 110/1/13
EXCEL,VBA,Python,東吳推廣部,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
系統開發文件 在 開發文件範例2023-精選在Instagram/IG照片/Dcard上的焦點 ... 的推薦與評價
系統 管理與安全. 說明系統備援、整體操作及回復措施、系統安全、. 程式建構等。 前言. 1. 現行作業檢討. ○ 描述現行 ... ... <看更多>