# 走一遭『 寫程式 』以外的軟體開發 - 大型軟體公司的工作日誌 - 劉奕為(John Liu) {%hackmd @HWDC/BJOE4qInR %} >#### 》[議程介紹](https://hwdc.ithome.com.tw/2024/session-page/3202) >#### 》[填寫議程滿意度問卷|回饋建言給辛苦的講者](https://forms.gle/fBGcaHwP1E18n1eG8) # Code Review ## Code Review - 正確性 - 安全性 - 效能性 - 強固性:十年多的 Legacy code - 可讀性 - 可能尚未了解組織團隊 knowhow - 真的可讀性有待加強 - 風格一致性 ## Code Review 怎麼操作 - 禮貌與接受:Could you please... - 主觀議題傾向接受作者的意見 - 即時回饋 - 縮小審查的範疇(200行) - 陳述變更的類別 - 盡可能減少 reviewer - 邊際效應:越後面的審查者可能觀念會與前面的相似 - 盡可能自動化 - 錯字、安全...etc # 文件 Documentation ## 核心價值 - 強迫設計清楚定義規格 - 增加新人對程式碼與 API 理解 - 手動流程更容易遵守 - 能回答出:為何做出如此的設計決策與使用這樣的解決方案 - e.g. 為何當初要使用 PostgreSql, MySQL 的原因 ## 難處/解決方案  - 容易受到版本更新影響:找長期有價值的來記錄 - Documentation everywhere,文件存放處集中 ## 何時寫 - on call SOP - system architecture - onboarding guide - feature high level design - exposed API ## 工具參考 - Sonarqube # 測試 Testing ## 好處 - 保證基本功能品質,讓大規模重構或修改成為選項 - 增加開發人員的信心 - 可規模化,一個人完成的測試,所有人都可以使用 - 督促更嚴格的程式碼設計,迫使開發者思考函式的可測試性 > 測試本身無法被測試,所以開發者難以加入測試 ## 維度 ice cream cron 測試圖 - 規模:小中大 - 範圍:單元測試、整合測試、E2E 測試 - 一開始可能會是 e2e testing 數量多,但考慮效益應增加單元測試 - 盡可能減少手動測試 ## 生態系 Ecosystem - 自動化測試做為新人入職訓練的一環,讓測試文件自然的帶入團隊中 - 透過儀表板顯示團隊測試狀況,促使彼此競爭 - 廁所測試,在大量經過的場所貼上測試的提示(Google 案例) - 影片品質、搜尋結果或複雜的安全漏洞得依賴人工測試,或更有創意興趣檢驗 - Agoda 案例:透過變異測試(mutation testing )來增加安全性 ## 無法解決的問題 - 模擬度不足的問題 - configuration 版本問題 - 特殊情境:效能或壓力測試 - 妃育晴行為 - 真空效應:單元可能相較嚴格,但是可能會忽略掉某些缺陷 => 透過大型測試解決 ## 大型測試類別 - UAT Ttest、Probers and Canary... - 特殊類別 - Configuration 測試:針對 deployment 的 config 做測試,比較接近冒煙測試 - 探索性測試 - Binary 檔案功能測試 - 故障恢復 - User Evaluation ## CI fast feedback loop(測試左移) - 處理的工程師較熟悉 - 需要修改者更少回憶與時間 ### CI 失敗案例 Google Takeout:發一個小的改動 commit 卻要測試整個產品 ## CD - 敏捷性,小而快 - 自動化 - 隔離性,模組化,加速故障排除 - 可靠性 - 資料導向,A/B testing - 分階段推出 - feature toggle常用,保護功能 ## Release Train - 沒有完美的 release 不可能修復完美每個 bug - deadline 是固定的,且是嚴格執行 # 依賴 diamond dependency ## 自評清單 - 是否要自動化測試 - 誰提供的 - 依賴相容性承諾 - 預計被使用多久 - 多久會有大型版本異動 - 實現依賴的成本 ## 解決策略 - static dependency model - semantic - ... ## 找出依賴 # 棄用 Hyrum's 定律:使用者常以意外、不可預見的方式使用系統,尤其是使用者越多且越古老的系統 # 大規模變更 - 技術限制 - 合併衝突 - 對古老複雜緩慢的系統異動可能會有商業損失 - CI 整合 - ... # Google 流程 - 授權 - 內部工具切割 - ... # 工程效率 Promotion Packet 根據不同層面所需要的內容紀錄 daily note(紀錄重點) 個人層面 - 描述技術能力 - 描述工作知識 - 描述如何執行準時完成專案 - 過去一年中參與並完成的關鍵專案 團隊層面 - 描述溝通方式 - 描述同事經理與其他人合作 - 描述指導他人的能力 組織層面 - 描述如何公司目標和成功做出貢獻
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up