Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

有效面對技術債

1,876 views

Published on

在快速迭代開發中,難免會不經意的在程式碼中遺留下技術債務,本次的分享將向大家介紹技術團隊面對技術債務的心路歷程,技術債如何的阻礙團隊開發及營運,面對技術債務的因應策略,以及如何有計畫、系統性的償還技術債務,讓技術債透明化並有效管理。

Published in: Software

有效面對技術債

  1. 1. 有效面對技術債 陳小風
  2. 2. 自我介紹 • 陳鋒逸(陳小風) • 講師經歷 • 微軟最有價值專家 (MVP) • SkillTree兼任講師 • Techday 講師 (2014) • JSDC 講師 (2013) • 社群研討會講師 • AgileCommunity.tw • Javascript.tw • twMVC 粉絲團: 愛流浪的小風
  3. 3. 有效面對技術債 陳小風 認識技術債
  4. 4. • 程式碼的壞味道 • 功能有靈異現象 • 難以維護的功能 • 改 A 壞 B • 牽一髮而動全身 • But…It works! 什麼是技術債?
  5. 5. • 專案時程緊迫 • 對語言、架構熟悉度不足夠 • 多頭馬車、Context Switch • 對產品的認知不足夠 • 複製 / 貼上 技術債是怎麼產生的?
  6. 6. 時間少 功能多 成本低 貴 久 少 技術債 技術債是怎麼產生的?
  7. 7. 技術債影響 時程 無法評估 質量下滑 影響開發 大量錯誤 滿意度下降 客戶流失
  8. 8. 無法忽略的技術債 0 20 40 60 80 100 120 SPRINT 1 SPRINT 2 SPRINT 3 SPRINT 4 產能 產能
  9. 9. 瞭解它 接受它 包容它 改變它 面對技術債
  10. 10. 有效面對技術債 陳小風 瞭解負債狀況
  11. 11. 功能正確性 測試涵蓋率 重複 安全性 撰寫風格 半成品 技術債種類
  12. 12. What is SonarQube • 程式碼品質分析工具 • 結合版本控制 • 多維度分析 • 差異比較 • 儀表版
  13. 13. 支援多語言
  14. 14. 與其他工具比較 Simian FxCop StyleCop Source Monitor
  15. 15. 自動化 • 多語言 • 建置整合 • 結合 CI Server Runner • 視覺化圖表 • 數據呈現 • 版本比較 Dashboard
  16. 16. • Pull Request • 省時間 • 關注點分離 • 負擔較輕 • 習慣養成 差異比較
  17. 17. Coverage
  18. 18. Duplication
  19. 19. Rules
  20. 20. Pull Request 整合
  21. 21. 管理未完成項目
  22. 22. 管理未完成項目 https://wiki.jenkins.io/display/JENKINS/TODOs+Plugin
  23. 23. 有效面對技術債 陳小風 面對技術債
  24. 24. 發生原因 時間 程式碼
  25. 25. 時間 程式碼 解決問題 • 資源有限 • 專注在重要的 • 減少浪費 • 自動化 • 瞭解現況 • 確保正確性 • 提升品質 • 持續改善
  26. 26. • 時間永遠不夠 • 做得多不如做得巧 • 錯誤的需求 => 昂貴的成本 • 盡可能找出有價值的內容 • 從使用者的 Feedback 學習 • 一次到位,不如持續改善 接受現實 假設 實驗改善
  27. 27. 需求很重要 • 大需求不斷 • 功能四處發散 • 時間壓力緊迫 • 技術債蔓延 • 惡性循環 • 找出真正的問題 • 產出有價值的功能 • 觀察用戶的行為 • 調整策略 • 最小化成本
  28. 28. 瞭解使用者 使用者故事 地圖 影響地圖 實例化需求 用戶 Feedback Page Analytics Funnel
  29. 29. 處理技術債的步驟 量化技術債 撰寫測試 重構 or 重寫 自動化工作 追蹤、排序、修改
  30. 30. 改善程式碼 • 瞭解目前的問題 • 撰寫測試,建立防護網 • 排出撰寫測試優先順序 • 功能重要性 • 最常異動的部分 • 阻礙最大的部分
  31. 31. Git Effort 找出最常變動的程式碼
  32. 32. 對照測試涵蓋率
  33. 33. 年久失修的技術債 • 重構 or 重寫 • 了解使用者如何使用 • 是否還在使用? • 追蹤使用者如何使用 • 重新探索功能真正的需求 • 確認是否需要改寫 User Story Mapping Specification by example
  34. 34. 修正技術債 • 使用自動化測試 • 確保真正需要的功能正常 • 逐步改善,先把已知部分抽離 • 從外而內,補上單元測試 • 收復失地
  35. 35. Refactor Step Legacy Code • 加上整合測試 • 解除耦合性 • 重構熟悉部分 • 補上單元測試 • 逐漸重構全部程式碼 Integration Test Dependency Class A Dependency Class B Interface Function A Unit Test Function B Unit Test
  36. 36. Test Covered Rewrite Step • Code Level Function Call V1 Class Factory V2 Class
  37. 37. Test Covered • Infrastructure Level Rewrite Step Request V1 App Load Balancer V2 App
  38. 38. 讓工作自動化 • 持續整合伺服器 • 自動建置、測試、分析 • 提前發現問題 • 確保環境隔離 • 節省大量時間 • 專注在開發
  39. 39. Source Code Production CI Server Build Unit Test Integratio n Test Code Analysis Deploy Code Review Pair Programming 軟體開發流程 40
  40. 40. • 公司需要 生存,有商業目標 • 良好的開發流程 • 自動化測試 • 程式碼分析 • 優先償還影響大的技術債 • 定期清理嚴重問題 計畫性負債
  41. 41. 定期清理 • 休耕期 • 週期性檢討產品程式碼現況 • 解決可能會影響開發的嚴重部分 • 持續改善團隊開發流程 • 增進團隊開發技能 • 補足測試或修正問題
  42. 42. 有效面對技術債 陳小風 結論
  43. 43. 資源有限,花在刀口 合理的需求 有效的產出 自動化流程 從經驗中學習 減少浪費
  44. 44. 與技術債共處 • 瞭解目前產品的問題 • 專注在最需要解決的項目 • 控管可能發生的問題 • 定期檢討開發團隊的瓶頸 • 有效消除技術債並避免再次產生
  45. 45. 有效面對技術債 陳小風 Q & A

×