Software Development Lifecycle


軟體開發生命週期 (Software Development Lifecycle, SDLC) 是軟體工程裡很重要的概念,不同的角色 (PM, Developer, Test, Operator) 會有不同看法,從不同方法論 (CMMI、RUP、LEAN、XP、Agile、Scrum、DevOps) 也會有不同階段定義,Google 可以找到很多類似的圖。

類似的東西聽了不少,但是往往講者會因為個人經驗,會偏重在某一方面。像是現在經常提自動化測試,很多都是開發人員在喊,卻鮮少聽到從 QA 端的聲音;經常聽到開發人員在喊 DevOps,但實際現場調查很少 Operator 加入討論,更別提資安相關角色。最有趣的是,我還沒遇過有 PM 懂這些流程的,PMP 那又是另一個世界。

本文記錄我在不同的工作時期的體悟和心得。


2012/12: 從 SQA 角度的流程

這個階段主要考慮從老闆的 需求 到 Developer 和 SQA 的協作,部分的 Release Engineer (潮一點的說法 DevOps Engineer)。考慮 開發測試 在每個時間點對應的工作,以及協作方式。

這段在 Startup 的過程請參閱這篇的描述:協同合作系統建制與導入 - 以 Redmine 為例。開發流程沒有什麼很潮、很鮮的敏捷開發,而是很傳統的 Waterfull,但是主軸就是要讓大家彈性的做事。

站內相關文章:


2016/01: 從開發者角度的流程

這張圖比較聚焦在開發者的角度,同時也包含上線後的議題處理。開發重點沿用 IBM 的 DCUT,也就是 Design, Coding, and Unit Test,我只是做了一些調整。

圖中 Suggestion 是我很常用的 Feedback 方法,也就是開發過程中,大家透過建議的方式,Feedback 給團隊、或者是 PM,讓開發過程溝通更好,產品自然而然就會好。


2016/06: 系統維運角度

系統維運和管理 (System Operation and Administration) 角度出發,與各個單位,包含決策單位、管理單位、開發單位 … 等在各個時間應該要面對的任務。

這張的角度比較偏向 IT 與公司營運出發了,少了很多軟體開發,但是基本精神依舊是那四個:

  1. Plan
  2. Execution
  3. Acceptoance
  4. Operation

後來針對 Operation 的想法都整理在這個分享:Serverless All-Star - Ops as Code using Serverless

相關文章:


2016/06: 從整個軟體開發團隊

最終,我還是覺得要聚焦在整個開發團隊的 視野,每個區塊,都有期對應的職責,甚至是組織。


結論

而這些圖也不是存粹的時間導向,應該是要平行的,齊步跑的,也就是開案,這些單位就要一起同步,而不是接力賽,如下圖:

一路走來,我一直在嘗試調整 視野,期望能夠從不同角度,看得更清楚。而最後整理出來的結論:軟體開發要知道有哪一些角色會參與,然後應該什麼時間點知會相關的人,這是 PM / PO / Boss / 管理階層 的責任。

對我來說,一個成熟的軟體開發至少、至少、至少要有這四個面向:

  • 規劃 (Plan):包含以下
    • 市場調查、使用者情境
    • 需求分析管理、使用者體驗 (UX)、使用者介面 (UI)、
    • 技術評估 (PoC, Evalution) 與研究 (Research)、架構設計
    • 成本、風險管控、資源 ….
    • 執行方法,現代流行 敏捷開發
  • 開發 (Development):真的開始執行了,主要就是寫商業邏輯程式,大部分軟體工程師會注意的地方。
    • 主要有四個部分:System Analysis、System Design、Coding、Unit Test
    • 注意,不包含 Research,台灣常混在一起稱 RD …
  • 測試 (Test):驗證階段,也就是測試。
    • 第一張圖點出一個重點,測試的工作不是測試才開始,而是專案一開始就要開始進入。
    • 測試 (Test) 和品保 (QA) 是不樣的概念。
    • 測試的方法與策略參閱 Stages in Software Testing
    • 測試的職能參閱 How to be an SQA? 的深度介紹。
  • 維運 (Operation):上線前後的準備工作都是維運,舉凡 System EngineerDevOpsSRE … 都是這裡。這裡最複雜,也是最容易被忽略的,常常會被歸類為成本單位。我把定義有五大 Stages
    • Provisioning: 環境建置、配置 … Orchestration, Infra as Code. 更多參閱: Resource Provisioning and DevOps
    • Deployment: Build, Packing, Deploy, Rollback
    • Observability: Observability and Monitoring, Loggin, Alert, Dashboard
    • Maintain: Backup, Recovery, Security, Permission, Cost … (不知道算啥就丟這裡)
    • Pipeline: 串接上述工作的工作 (有點繞舌)。像是 Jenkins 這種工具,可以 Build / Compile,但也可以用來串接 CI/CD 的 Jobs. 相關文章:
    • Security: 算是另一個維度,是非常重要且一開始也要考慮到的!

P.E.A.G

我把上述提到的四個概念:Plan、Execution、Acceptoance、Operation 再一次 抽象化 後得到以下::

  1. 規劃 (Plan): 商業、業務、資源、成本、時程、架構、PoC、User Story …
  2. 執行 (Execution): 像是軟體開發的 Design, Coding, Unit Test、解一個 Bug
  3. 接受 (Acceptance): 確認執行的結果是否符合 Verification Point, 像是驗收、測試
  4. 現場 (Go Live): 接受之後,就是把產品放到現場,維運 (Operation) 是一般的說法。現場要觀察 (Observability) 與收集回饋 (Feedback)、做現場的 應變管理

這四個面向姑且稱為 P.E.A.G.,可以運用在各式各樣的領域,像是 軟體工程IT 維運管理測試生產導入 NPI … 等。

我把這四個抽象的階段,應用在 看板導入

網路上有很多類似的圖,像是 google DevOps, SDLC,都會有很多圖。但是往往都太複雜,或者太偏想某一個角度。像是 DevOps 的流程很容易偏向 Dev or Ops 的角度、PM 或系統分析角度會很偏開發,而完全忽略 Test、Operation、Security。。。

因為太複雜,不好溝通,所以我一概用四個階段來作為整個的流程與生命週期。

我常常會這樣比喻:產品交到客戶手上之後,叫做維運階段,產品是從這個時候開始活起來,才開始有故事。在產品還沒交付 (Delivery) 到客戶手上之前,但是已經可以賣了,叫做部署 (Deployment / Shipment / Packing)。但是在產品出工廠之前都是 在製品 (WIP, Work in Process),也就是還在開發驗證中。

延伸閱讀

相關資料


Comments