最近碰到蠻多朋友或客戶的需求,想要針對 ActionFilter, Decorator, DI 的 service locator,middleware/interceptor 或是其他 static helper 相依的情況寫單元測試,卻總是不順、卡手。(尤其是 service locator)
總把測試寫得牛鬼蛇神的,即使看到了綠燈,這測試活超過一個月之後,就人見人厭、爹不親娘不愛的。
更甚至總覺得寫測試很花時間,維護起來更花時間。
其實這些有一半是產品設計不良,有一半是測試設計不良。
(說難聽點,就不是測試的問題,是工程師能力的問題)
很多時候,沒見過人家可以怎麼行雲流水地在 legacy code 上整理、抽絲剝繭,一路用工具重構到具備可測試性,再把測試重構到跟人話、規格、需求情境一樣,是很難想像 #原來可以這樣寫Code 的。
今年的梯次已滿,明天一月的 【#針對遺留代碼加入單元測試的藝術】,只剩下 5 席,live demo 支援 java/kotlin, python, php 與 C#。
參考:https://dotblogs.com.tw/hatelove/2020/08/21/Unit-testing-effectively-with-legacy-code-202101
會不會到時已經可以支援 node.js 與 Ruby 我也不知道,但基本上一法通、萬法通,概念都一樣。
#動態語言其實相對單元測試好寫很多,不寫真的是太浪費了。(寫得醜,更浪費人生)
想要觀望晚點才報名的同學,恩....good luck....luck 可能也沒有用,你的問題可能不在寫程式,而是在執行力上。
同時也有12部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,Python程式入門與Django架站第4次(templates目錄&設定字型與輸出現在日期時間&設定語系與時區與取得年月日&增加static與images資料夾與顯示圖檔) 上課內容: 01_重點回顧與templates目錄 02_設定字型與輸出現在日期時間 03_設定語系與時區與取得年月日 0...
「python static」的推薦目錄:
- 關於python static 在 91 敏捷開發之路 Facebook 的最佳解答
- 關於python static 在 iThome Security Facebook 的精選貼文
- 關於python static 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
- 關於python static 在 吳老師教學部落格 Youtube 的最佳貼文
- 關於python static 在 吳老師教學部落格 Youtube 的最佳解答
- 關於python static 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於python static 在 Are static class variables possible in Python? - Stack Overflow 的評價
- 關於python static 在 Python之classmethod和staticmethod的觀念理解 - 小菜雞在 ... 的評價
- 關於python static 在 ELI5: Pysa - A Security-Focused Static Analysis Tool for ... 的評價
- 關於python static 在 Aries Static Agent library for Python - GitHub 的評價
- 關於python static 在 Python decorator to support static properties - Code Review ... 的評價
python static 在 iThome Security Facebook 的精選貼文
繼靜態程式碼分析工具Zoncolan後,臉書再釋出Python Static Analyzer,這是臉書用於偵測Instagram伺服器上常見安全性與隱私問題的工具
python static 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
Functional programming ชื่อไทยคือ “การโปรแกรมเชิงฟังก์ชั่น” ชื่อย่อ FP เป็นแนวคิดหนึ่งของการเขียนโปรแกรม (programming paradigm) ชื่อขึ้นต้นด้วย functional แต่ไม่ได้มีดีแค่ประกาศ function ปุ๊บเสร็จ แล้วเรียกใช้ มันมีเบื้องลึกมากกว่านั้นแน่ๆ
🤔 มันจะต่างจากการเขียนโปรแกรมทีละสเตป ตามลำดับก่อนหลัง มีการวนลูป ที่เน้นแก้ state ของโปรแกรมเป็นหลัก
แต่แนวทาง functional programming จะไม่แก้ state ของโปรแกรมเลย ไม่มีการวนลูบ (ใช้ recursion แทน)
ซึ่งแนวคิดก็ต้องเน้นสร้างฟังก์ชั่นนั่นแหละ แต่หลักสำคัญต้องออกแบบให้หลีกเลี่ยง side-effect (ผลข้างเคียง) ที่จะเกิดต่อ function ตัวเอง และตัวอื่น โดยมีหลักยึด 2 อย่างใหญ่คือ
👉 1) function ที่สร้างขึ้นมา เมื่อมีอินพุตค่าเดิมส่งไปหา (เป็นค่าอากิวเมนต์) ไม่ว่าจะกี่ครั้งก็ตาม function จะรีเทิร์นค่าออกมาเหมือนเดิมทุกครั้ง ...(ไอเดียมาจากฟังก์ชั่นในทางคณิตศาสตร์เลยครับ)
เช่น
func(1); // เรียกครั้งที่ 1 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30
func(1); // เรียกครั้งที่ 2 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
func(1); // เรียกครั้งที่ 3 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
👉 2) function ต้องไม่ไปเปลี่ยนแปลงค่าของตัวแปรจำพวก global variable หรือ static variable หรือตัวแปรที่อยู่ข้างนอก function ...เพื่อไม่ให้ function อื่นได้รับผลกระทบ
ถ้า function ที่เราประกาศไว้ มีคุณสมบัติ 2 อย่างที่ว่านี้ ก็จะเรียกว่า pure function (ฟังก์ชั่นบริสุทธ์แท้ๆ) 👌
สำหรับอีกคุณลักษณะหนึ่งที่จะไม่กล่าวถึงไม่ได้เลยก็คือ
👉 3) First-class function และ Higher-order function
คำว่า first-class function มาจาก "first class citizen" ที่หมายถึง "พลเมืองชั้นหนึ่ง" ดังนั้น first-class function จะหมายถึง ฟังก์ชั่นเป็นพลเมืองชั้นหนึ่งจริงๆ เลยนะ
คุณสมบัตินี้ function จะถูกมองเป็นข้อมูลประเภทหนึ่ง ไม่ต่างจากข้อมูลตัวเลข สตริง บูลีน ด้วยเหตุนี้จึงสามารถนำ function ไปกำหนดค่าให้กับตัวแปรยังได้เลย เช่น
x = function(){ .....}
ส่วนคุณสมบัติ Higher-order function:
คุณสมบัตินี้หมายถึง เราสามารถใช้ function ส่งไปเป็นค่าอากิวเมนต์แก่ function ตัวอื่น หรือ function จะรีเทิร์นออกมาจาก function ตัวอื่นออกมาก็ได้ด้วย เช่น
- ส่ง function_A เป็นค่าอากิวเมนต์ไปให้ function_X(function_A);
- จากนั้น function_X() ก็จะสร้าง function_Y แล้วรีเทิร์นมันออกมาได้
😜 ===ประโยชน์ functional programming===
🔥 เอาไปเขียนโปรแกรมโดยไม่มีการวนลูป เช่น ไม่ต้องมานั่งเขียน for … หรือ while… วนลูป เพื่อเข้าถึงข้อมูลโครงสร้างพวก array , list ฯลฯ เป็นต้น
🔥 การทำ currying หมายถึงทำให้ฟังก์ชั่น จากเดิมที่มี parameter หลายตัวให้เหลือแค่ตัวเดียว ด้วยการส่งผลลัพธ์เป็น function ที่รับ Parameter ที่เหลือ ...ใช้เทคนิค closure
🔥 หรือจะทำ function Composition (เอาฟังก์ชั่นมาประกอบกัน)
🔥 หรือจะเอาไปใช้เขียนโปรแกรมแบบ parallel computing (โปรแกรมคู่ขนาน)
🔥 หรือจะเขียนโปรแกรมแบบ asynchronous โดยที่โค้ดหลักไม่ต้องรอการประมวลผลฝั่ง I/O ให้แล้วเสร็จ โค้ดหลักสามารถข้ามไปยังบรรทัดถัดไปก่อนได้เลย
🔥 Testability — ผลพลอยได้ก็คือ เอาแนวคิดนี้ไปใช้ทำ test function ได้ง่าย โดยแต่ละการ test จะเป็นอิสระต่อกัน เมื่อใช้วิธีการเดิมในการทดสอบ 10 ครั้ง ก็ควรได้ผลเหมือนเดิม 10 ครั้ง เป็นต้น
++++ 🤔 ++++++
เมื่อเปรียบเทียบกับแนวคิด OOP (โปรแกรมเชิงวัตถุ object-oriented programming)
ถ้าโจทย์ปัญหาเป็น parallel computing หรือ asynchronous การใช้แนวคิด functional programming ดูแล้วคล่องแคล่วปราดเปรียวไม่ยุ่งยาก
เนื่องจากแนวคิด functional programming ไม่มีอะไรซับซ้อนมากนัก เขียนโปรแกรมก็จะกระชับ ง่าย...ง๊าย เมื่อเทียบกับ OOP ที่โค้ดจะเยอะกว่า เพราะมี class มากมาย ยิ่งถ้า inheritance โดยให้มีการสืบทอดสมาชิกหลายชั้น ก็จะสับสนตาลาย มึนงงได้ คงต้องพึ่ง IDE ให้เป็นพี่เลี้ยงช่วยแนะนำว่ามีสมาชิกอะไรที่สืบทอดมา
แต่จุดเด่นเรื่อง OOP จะมีความเป็น Modularity ที่สูง โค้ดที่เขียนเป็นอ็อบเจ็กต์แต่ละตัวจะเป็นอิสระต่อกัน เนื่องจากข้อมูลหรือ state ซึ่งอยู่ภายในตัวอ็อบเจ็กต์เอง จะมีเป็นของใครของมัน ขณะเดียวกันแต่ละอ็อบเจ็กต์จะปฏิสัมพันธ์กันได้ สามารถเอาอ็อบเจ็กต์ที่มีอยู่แล้วมา reuse ใช้ได้ง่าย รวมทั้งถอดเข้าถอดออกขณะโปรแกรม run time
แล้วแต่สถานการณ์ว่าจะใช้แนวทางเขียนโปรแกรมแบบไหน
แต่ก็ยอมรับว่าบางทีเขียนแบบ functional programming ก็ยากต่อการทำความเข้าใจ เพราะโค้ดมันสั้นกระชับเกิ๊น
ยิ่งหลายภาษาโปรแกรมมิ่งสมัยใหม่ในปัจจุบันนี้ มีการแทรกแนวคิด functional programming เข้ามา นอกเหนือจากแนวคิด OOP เช่น JavaScript, Python, Java, C#, Swift, Kotlin แต่ก็อาจประยุกต์แนวคิดนี้ได้ไม่ 100% มากนัก
จะไม่เหมือนบ้างภาษาเช่น Haskell ที่มาพร้อมกับ immutable data structure หมายถึงข้อมูลที่ไม่สามารถแก้ไขค่าได้เลย จึงทำให้ function กลายเป็น functional programming แท้ๆ (pure function)
✍ สรุป แนวคิดนี้ไม่ได้เรื่องใหม่มีมานานก่อนบางคน ...อุ้แว ...อุ้แวเกิดเสียอีก แต่ตอนโน่นแนวคิดนี้ยังไม่ดังเปรี้ยงเหมือน OOP คนที่เขียนภาษา JavaScript รวมไปถึง Node.js ย่อมใช้หลักการนี้อย่างไม่รู้ตัว ยิ่งภาษาสมัยใหม่หลายตัวก็ยอมรับแนวคิด functional programming เข้ามาในภาษาเรียบร้อยแล้ว ไม่มีนี้ถือว่าแปลกมาก
--------
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
python static 在 吳老師教學部落格 Youtube 的最佳貼文
Python程式入門與Django架站第4次(templates目錄&設定字型與輸出現在日期時間&設定語系與時區與取得年月日&增加static與images資料夾與顯示圖檔)
上課內容:
01_重點回顧與templates目錄
02_設定字型與輸出現在日期時間
03_設定語系與時區與取得年月日
04_增加static與images資料夾與顯示圖檔
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/labor_python_2018
課程簡介:入門
建置Python與Django開發環境
基本語法與結構控制
迴圈、資料結構及函式
建立專案及app與檔案處理
視圖與模版
資料庫及後台管理
資料查詢與新增功能實作
資料刪除和修改功能實作
專題:新聞公告系統、網站留言版、網路相簿、購物車、美食地圖
部署網站到Heroku
上課用書:
Python架站特訓班:Django最強實戰作者: 鄧文淵/總監製, 文淵閣工作室/編著 出版社:碁峰 出版日期:2017/08/31
It's Django--用 Python 迅速打造 Web 應用
袁克倫、楊孟穎
出版商:碁峰
出版日期:2015-06-08
Python新手使用Django架站的16堂課:活用Django Web Framework快速建構動態網站
作者: 何敏煌
出版社:博碩
吳老師 107/3/3
ECLIPSE,Django,Python,新北市勞工大學,EXCEL,VBA,函數,網站設計,資料庫設計,程式設計,線上教學,PYTHON與Django安裝環境

python static 在 吳老師教學部落格 Youtube 的最佳解答
Python程式入門與Django架站第4次(templates目錄&設定字型與輸出現在日期時間&設定語系與時區與取得年月日&增加static與images資料夾與顯示圖檔)
上課內容:
01_重點回顧與templates目錄
02_設定字型與輸出現在日期時間
03_設定語系與時區與取得年月日
04_增加static與images資料夾與顯示圖檔
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/labor_python_2018
課程簡介:入門
建置Python與Django開發環境
基本語法與結構控制
迴圈、資料結構及函式
建立專案及app與檔案處理
視圖與模版
資料庫及後台管理
資料查詢與新增功能實作
資料刪除和修改功能實作
專題:新聞公告系統、網站留言版、網路相簿、購物車、美食地圖
部署網站到Heroku
上課用書:
Python架站特訓班:Django最強實戰作者: 鄧文淵/總監製, 文淵閣工作室/編著 出版社:碁峰 出版日期:2017/08/31
It's Django--用 Python 迅速打造 Web 應用
袁克倫、楊孟穎
出版商:碁峰
出版日期:2015-06-08
Python新手使用Django架站的16堂課:活用Django Web Framework快速建構動態網站
作者: 何敏煌
出版社:博碩
吳老師 107/3/3
ECLIPSE,Django,Python,新北市勞工大學,EXCEL,VBA,函數,網站設計,資料庫設計,程式設計,線上教學,PYTHON與Django安裝環境

python static 在 吳老師教學部落格 Youtube 的最讚貼文
Python程式入門與Django架站第4次(templates目錄&設定字型與輸出現在日期時間&設定語系與時區與取得年月日&增加static與images資料夾與顯示圖檔)
上課內容:
01_重點回顧與templates目錄
02_設定字型與輸出現在日期時間
03_設定語系與時區與取得年月日
04_增加static與images資料夾與顯示圖檔
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/labor_python_2018
課程簡介:入門
建置Python與Django開發環境
基本語法與結構控制
迴圈、資料結構及函式
建立專案及app與檔案處理
視圖與模版
資料庫及後台管理
資料查詢與新增功能實作
資料刪除和修改功能實作
專題:新聞公告系統、網站留言版、網路相簿、購物車、美食地圖
部署網站到Heroku
上課用書:
Python架站特訓班:Django最強實戰作者: 鄧文淵/總監製, 文淵閣工作室/編著 出版社:碁峰 出版日期:2017/08/31
It's Django--用 Python 迅速打造 Web 應用
袁克倫、楊孟穎
出版商:碁峰
出版日期:2015-06-08
Python新手使用Django架站的16堂課:活用Django Web Framework快速建構動態網站
作者: 何敏煌
出版社:博碩
吳老師 107/3/3
ECLIPSE,Django,Python,新北市勞工大學,EXCEL,VBA,函數,網站設計,資料庫設計,程式設計,線上教學,PYTHON與Django安裝環境

python static 在 Python之classmethod和staticmethod的觀念理解 - 小菜雞在 ... 的推薦與評價
簡單來說,static method 的使用時機可以是在當這個方法裡不需要有self 或是cls 時,使用靜態方法能夠比較有效的完成工作,既不需要接收用不到的參數, ... ... <看更多>
python static 在 ELI5: Pysa - A Security-Focused Static Analysis Tool for ... 的推薦與評價
In this post, we explain Pysa, a static analysis tool to detect and prevent security issues in Python code, in a way that is super simple to understand (or ... ... <看更多>
python static 在 Are static class variables possible in Python? - Stack Overflow 的推薦與評價
... <看更多>
相關內容