軟體開發建構筆記

紀錄一下軟體工程的每個專案/產品通常都會有以及應該要有的一些過程

mindset

  • 價值優先,優先做有價值的/長期有複利效應的工作
    • 早點雇用到好用的員工、新進員工能早點上手就是可能長期有複利效應的工作
  • 如何快速迭代,fail fast
    • 太晚跟客戶確認需求與實作出來的東西,方向錯了走的路都是浪費

需求文件/規格

  • User Story
  • 模組功能
  • 角色/使用權限
  • 要蒐集/測量哪些資料,什麼樣的資料當指標可以很好的解釋市場/使用者行為
    • 使用者行為的資料
    • 維運需要的資料
  • 畫面設計的準則
  • 畫面/功能的等待時間
  • 同時可服務人數
  • 推播訊息,推播同時最大人數/頻率/即時性
  • 服務的SLA,SLA的定義

專案管理

  • 進度
  • 怎麼追蹤feature/issue/bug,怎麼與版本控制的commit結合
  • 怎麼分配ticket

設計文件

  • 依照需求推算出的系統需求
  • 系統架構
    • 傳輸協定

程式碼

開發環境

  • IDE
  • 程式撰寫風格準則
  • 套件檢查程式碼準則

版本控制

  • Git/SVN
  • 程式碼存放處
  • 版本控管的流程
    • Git Flow/其他設計

使用者介面端

Web App

  • 對RWD的要求
  • 對不同瀏覽器的要求
  • 對SEO的要求
  • 對無障礙設計的要求
  • PWA
  • SPA,優缺點,是否適用
  • JavaScript框架
  • CSS preprocessor
  • 打包,壓縮,CDN
  • i18n,l10n

Mobile App

  • 要支援的平台Android/iOS
  • 平台的要支援版本
  • 要用Native App/Hybrid App/還是其他產生App的方式開發
  • 發佈,上架

伺服器端

  • HTTPS
  • 選語言、框架、ORM
  • 不同端點的傳輸協定TCP/UDP/MQTT等等
  • 使用者註冊,驗證(authentication),MFA,忘記密碼,session/JWT等等,OAuth,SSO
  • RESTful API設計
  • API的即時文件,swagger
  • 設計錯誤處理、API回應、log
  • 是否已經要scale out
  • load balance
  • message queue接收事件
  • worker處理事件
  • 行動端的推播訊息
  • i18n,l10n

資料庫端

  • 哪些/多少資料要存SQL/NoSQL
  • 哪些/多少資料要cache,cache策略
  • 哪些資料要用index
  • 哪些資料做正規化
  • 哪些資料不做正規化
  • 是否要scale out, 依需求考量CAP然後選適用的資料庫/服務
  • 怎麼樣做對Machine Learning時資料比較好處理

CI/CD

  • 檢查是否有不符合準則的程式碼
  • 自動compile
  • 自動測試
  • 自動佈署

雲端

  • 選平台AWS/GCP/Azure

AI

  • 整理資料
  • 訓練模型
  • 佈署

測試

  • 單元測試
  • 功能測試
  • 整合測試
  • 資安測試
    • OWASP
  • 壓力測試

報表

參考資料

研究資料