Software Development Lifecycle


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

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

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

2012/12: 從 SQA 角度的流程

這個階段主要考慮從老闆的 需求 到 Developer 和 SQA 的協作,部分的 Release Engineer (潮一點的說法 DevOps Engineer)

考慮開發跟測試在每個時間點對應的工作,以及協作方式。

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

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

2016/06: 系統維運角度

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

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

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

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

結論

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

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

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

  • 規劃 (Plan):包含 需求分析管理、使用者體驗 (UX)、使用者介面 (UI)、技術評估 (PoC, Evalution) 與研究 (Research)、市場調查、成本、風險管控、資源 ….
  • 開發 (Development):真的開始執行了,軟體工程就是寫程式,就是一班說的開發工作 (注意,不包含 Research,台灣常混在一起稱 RD …)
  • 測試 (Test):驗證階段,也就是測試。第一張圖點出一個重點,測試的工作不是測試才開始,而是專案一開始就要開始進入。測試 (Test) 和品保 (QA) 是不樣的概念。詳細參閱 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 Monitor, Log, Alert, Dashboard
    • Maintain: Backup, Recovery, Security, Permission, Billing … (不知道算啥就丟這裡)
    • Pipeline: 串接上述工作的工作 (有點繞舌)。像是 Jenkins 這種工具,可以 Build / Compile,但也可以用來串接 CI/CD 的 Jobs.
    • Security: 算是另一個維度,是非常重要且一開始也要考慮到的!更多參閱 AWS Well-Architected

抽象 這四個面向的上層是:

  1. 規劃 (Plan): 人力, 資源, 時程, 架構, PoC, User Story …
  2. 執行 (Execution): 像是軟體開發的 Design, Coding, Unit Test、解一個 Bug
  3. 接受 (Acceptance): 確認執行的結果是否符合 Verification Point, 像是驗收、測試
  4. 維運 (Operation): 接受之後的回饋觀察 (Feedback)

這四個面向可以運用在這種領域,像是 IT 維運管理測試生產導入 NPI … 等。

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

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

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

所以 軟體開發 是什麼?不是只有 User StorayAgile看板DevOps 這些官話,而是一個可以交付給客戶,變成有故事的產品,這才是 軟體

延伸閱讀

參考資料


Comments

2017-09-14 09:50:30




About Me

Software Developer, SQA Manager, System Operation Manager, Guitarist

AWS Certifications