I'm a mother of two precious kids and a professional programmer.
我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材
PSCP介紹 PSCP 是一套使用命令提示列的軟體,是PuTTY相關可選擇使用的軟體。它提供 SCP client 的功能。當我們僅需要將一個或少數檔案從 pc 端 upload 到 server 端時,這套軟體就提供非常安全的方法,使得所傳送的內容不會被其他人給竊聽。倘若遠端有提供 SSH2 建議還是使用 PSFTP 會比較好。 檔案下載:pscp.exe 下載原站:Download PuTTY: latest release (0.72) linux傳送檔案到windows 下載單一檔案: /claire/test.txt為linux檔案位置,/tmp為windows要下載到的位置…
軟體介紹 軟體下載:pietty0400b14.exe 官方網站:PieTTY:A terminal forked from PuTTY by piaip PuTTY 是個小巧方便的 Telnet/SSH 安全遠端連線程式, 但用於非英語系文字時有非常多的問題, 而且它對於初學者來說過於複雜的使用界面也為人詬病已久。 PieTTY (舊稱 pputty) 則是源自於 PuTTY ,修正與完整支援亞洲等多國語系字元、 並在使用界面上大幅改進、易學易用的版本。 連線至Linux伺服器 按下『連線』後,就會出現等待登入與輸入帳/密資料的畫面,輸入帳密後就可以連線到遠端的linux電腦了。 如果想更改程式的編碼,可以選擇『選項…
重構test的重要性 好的測試應該要容易維護,容易閱讀, 不應包含程式邏輯在內,因此像是if, while, for迴圈等都不應該出現在測試裡 如果我們驗證的內容會和資料有關,則建議使用Substitute,這樣可以讓我們能夠在每一個測試裡增加不同的資料 而且可以直接在每個測試裡看到資料的內容是什麼 下面是一個範例 91的課程中建議每一次寫成功一個測試案例,就可以先做重構,這樣之後的的開發速度可以更加速 重構測試的步驟 抽出field: mock object(繼承假物件去創建假物件), stub(用Substitute) Setup: SUT初始化(或者[TestInitialize]) 抽出方法(用Given為開頭):定義mock object行為,代表假如在跑這個scenario時… Extra Method with “Shouldxxx()” => SUT行為+Assertion 也就是盡可能讓我們的重構能夠符合3A原則,…
STUB的功能 這邊是NSubstitute的說明:http://nsubstitute.github.io/help/getting-started/ Substitute是.NET裡的一個隔離框架,若要使用,需要額外在測試專案用NUGET去安裝NSubstitute 1. 動態產生假物件 2. 模擬回傳值 3. 測試監聽事件 4. 驗證傳入參數是否正確 使用Subsitute(Sub) 使用方法如下 設定呼叫某個方法應該回傳的值 下面可以驗證是否Add這個FUNC有被呼叫到 下面的程式能夠判別傳入的參數是不是正確 使用Substitute來針對不同狀況實作假介面 這是一個用MOCK方法的範例 上面做法有什麼問題? 每一個不同的依賴案例就要製作一個不同的FakeObject,會讓寫測試的時間太久 沒辦法直接從程式碼知道為什麼這樣會是Vaild 動態產生物件的使用完整範例 定義假物件行為(stub) 驗證某個函數是否被呼叫 使用mock…
如何用Code Coverage來衡量單元測試的成果 在build的時候要自動去跑測試(使用CI,CD當作工具)> 大於0% 關心相對趨勢 大於 絕對數字,衡量相對的數字,評估code coverage的數值有沒有比昨天高,每一次針對PROD的程式碼修改都要加上測試,這樣這個數值只會往上不會往下。鼓勵持續的COMMIT > 持續整合,每天都要COMMIT個5~6次或7~8次。 那些測試的投資報酬率高:為什麼要寫測試?目標是要提升產品品質。假設這段PROD CODE沒有BUG,其實不需要為它寫測試。那什麼東西的投資報酬率最高? 1. 要修正的BUG(BUG越晚發現修正成本就更高) 2. 實務上常跑到的scenario 3. 最主要的情境 4.和錢有關的 5.和人命有關的(EX:自動駕駛系統) 6. 最常改到的CODE,可以避免被改錯 那code coverage的意義如下: 觀察沒有被含蓋到的情境:判斷要不要補測試…
抽取相依的物件並且覆寫 下面是一個範例,這個範例的SUT是Holiday.cs,如果今天是9/1就傳HappyBirthday,否則就傳No 因為單元測試應該要能夠具有隔離的特性,不可因為今天的日期不一樣而有不同的結果 所以”取得今天日期”,就會讓程式碼變得不可測試。 在下面的範例裡,我們可以看見如何使用假物件去測試不可測試的程式碼: Holiday.cs Test2Cs.cs 如何對現行沒有測試的PROD CODE加上unit test 這一個測試的重點在於:針對依賴的code,找出不可控制的地方並抽出來 找到不可控制的依賴 抽出方法 把private改成protect virtual 在測試專案新增子類繼承SUT override protected方法並加開set方法 測試SUT改測子類 set依賴的值 使用依賴注入 使用依賴注入來達成低藕合高內聚的程式碼 1. 針對相依的物件抽出interface,針對相依的值抽出field 2.…
熱鍵 Alt+Enter: Quick+Action Ctrl+R,M 抽方法出來 code snippets / live template constructor: ctor property:prop console.writeLine)():cw ctrl+R,F: Extract Field Alt+Insert 循環剪貼簿:ctrl+shift+V 測試替身有下面三種 stub:不做驗證,單純只做模擬相依物件的行為 mock:一開始就要把所有的都定義清楚,應該要呼叫那個方法,所有的值一定要一模一樣,否則就會報錯(嚴格,敏感,不穩定) spy: 則是把所有的互動先做完,只驗要驗的,剩的沒有測就是都算過,差異是一個從嚴一個從寬。(寬鬆) 因此mock和spy本身含有驗證(Assertion),而stub本身只有在模擬相依的物件而已。…
單元測試 一個單元代表的是系統中的工作單元或是一個使用案例 被測試的系統(System Under Test)我們稱做SUT或者Class Unit Test(CUT) 一個單元測試是一段程式呼叫一個工作單元,並驗證工作單元的一個具體最終結果。如果對這個最終結果的假設是錯誤的,那單元測試就失敗了。一個單元測試的範圍,可以小到一個方法,大到多個類別。 優秀單元測試的特質 自動化,可被重覆執行的 很容易被實現 非臨時性的 任何人都可以按鈕執行他 執行速度快 執行結果每次都是一致的 能完全掌控被測試的單元 完全被隔離的 若執行失敗會有清楚的原因 整合測試 整合測試是一個有順序的測試過程,將軟硬體相結合並進行測試直到整個系統被整合在一起。也就是這個測試對被測試的單元並沒有完全的控制,而是使用該單元一個或多個真實依賴的相依物件,例如:時間,網路,資料庫,執行緒,亂數產生器等等。 一個單元測試通常包含了三個行為 準備(Arrange):物件,建立物件,進行必要的設定 操作(Act): 物件 驗證(Asset):…
這本書算是一本故事書,也因為是以故事的型態去描述一間公司如何從谷底翻身,讀者會更能夠明白『管理』對於一間公司有多麼重要。 也能從故事裡面直接理解書中所闡述的管理方式在實際情況是怎樣的去運用,在運用時也不會是直接的一帆風順,而是有重重的考驗並且需要高層的全力支持與理解。 我覺得此本書是管理相關書籍中相當值得一看的書。 因為故事情節用簡述的,就沒辦法讓讀者感受書中情境,因此本文主要為筆者自己讀後的筆記 主要紀錄我認為書中很重要的管理方法和管理思維,書內的附錄也有此書管理思維的整理。 有關故事內容,想了解的話建議自己去買書來看。 Work in process控制 在這邊他們使用工廠管理來比喻我們在開發專案的狀況。 對工廠管理而言,在生產線會盡量的去避免讓工廠內同時有過多的在製品,也就是所謂庫存。 對開發專案來說,在製品指的是開發中但是尚未開發完成的功能,還無法帶給公司收益,也是要極力去減少的。 在生產線上,一定會有處理效率最差的點,我們稱為瓶頸點(或稱約束點),創造約束理論的艾利高德拉特告訴我們,在瓶頸以外任何地方做的改進都是假像。 的確,在瓶頸點之後做的任何改進都是徒勞無功的,因為只能乾等瓶頸把工作送過來,而在瓶頸點之前做的任何改進只會導致瓶頸處堆積更多庫存。 因此,在開發專案時,要了解公司的瓶頸點在那,是什麼地方讓最多的專案在等待這個資源而讓需求被卡住無法繼續進行。 以鳳凰專案而言,因為過多的核心資訊被掌握在一個天才員工布倫特手中,只有他知道怎麼處理,導至這個員工每天都必須處理非常多的事也有非常多的事在等待這一個資源。 下圖表示當一個越忙錄的資源,其他資源想等待這個資源的時間會越來越高 因此改善這個狀況,第一步就是要先釐清約束點所在,第二步就是充分利用約束點。 以此書案例來說,約束點是天才員工布倫特,那他們首先做的就是保護這個約束點,不讓大家直接指使這個約束點去做他們認為重要的事,他們安排了一位專門的人員來安排這位約束點的工作內容,避免大家一直想私自去使喚他做事。接著他們要讓約束點的時間不被浪費,確認約束點永遠不會因為要遷就其他資源而枯等。再來他們將布倫特的工作標準化,讓更多其他的人也可以去接手做布倫特正在做的事,也就是提升約束點的產出。 總之,我們要記得任何對非約束點的改善都只是鏡花水月。 三步工作法 第一步工作法: 幫助我們理解如何建立快速的工作流,讓工作順暢地從開發部移動到IT運維部,因為那正是公司與客戶之間的銜接。 這邊需要去了解公司的價值點,相較於把更多的工作投入系統,將不需要的工作從系統中剃除甚至更為重要,讓資訊部門能夠很快速的產出最精簡可用的有價值的系統,並且獲得反饋。為此,我們需要知道,與達成企業目標息息相關的東西是什麼,不論是專案,運營,戰略,合規,安全性等,通通有可能(請見下方的訂定組織目標)。 第二步工作法:…
這是由公司同事Jed所發起的公司內部課程。 Agile LEGO City workshop是用樂高積木來模擬敏捷開發的實際情形的一個小遊戲,藉著遊戲可以從中體認到軟體開發時,可能會遇到的許多狀況,並藉由會後的討論與檢討來讓參與者更能夠理解敏捷開發的意義。 敏捷開發宣言 在一開始時,我們先讀了下面的敏捷開發宣言 藉著親自並協助他人進行軟體開發, 我們正致力於發掘更優良的軟體開發方法。 透過這樣的努力,我們已建立以下價值觀: 個人與互動 重於 流程與工具 可用的軟體 重於 詳盡的文件 與客戶合作 重於 合約協商 回應變化 重於 遵循計劃 也就是說,雖然右側項目有其價值, 但我們更重視左側項目。 讓參與者能夠從中理解敏捷的核心精神,也就是重視團隊間的溝通互動,接受需求的變化。 並且讓我們知道敏捷開發最核心的就是這個宣言裡所描述的,所有敏捷實作方法如SCRUM等都需要建構於這個核心精神上。 遊戲規則 接著就是介紹LEGO遊戲的規則: 1. 依照下圖建造客戶所需的樂高城市,項目越前面代表客戶越重視的 2. 這個建城市的PO就是主講人Jed,在開始之前可以先和Jed提問,在每一個sprint的結束也會由PO來做驗收 3.…
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!