iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Software Development

深入淺出設計模式 - 使用 C++系列 第 30

《軟體工程篇 - 2》 — 軟體開發生命週期 (SDLC) & 安全軟體發展生命週期 (SSDLC)

  • 分享至 

  • xImage
  •  

軟體開發生命週期 (SDLC)

  • 軟體開發生命週期 (SDLC) 是一個系統化的過程,用於建立和維護軟體應用。它確保所有開發活動都是有組織、有計劃可控制
    • 目標是透過事先規劃將專案風險降至最低
    • 此方法概述一系列步驟,將軟體開發程序劃分為您可以指派、完成和衡量的任務[1]

安全軟體發展生命週期 (SSDLC)

  • The Secure Software Development Life Cycle (SSDLC) is a framework that aims to integrate security into the SDLC
  • Unlike traditional SDLC, SSDLC incorporates security measures at every phase, ensuring that vulnerabilities are identified and addressed as early as possible
  • 就是在 SDLC 每個階段都考慮到 Security 面相

SDLC / SSDLC 階段

需求分析階段 (Requirement Analysis)

  • 需求分析和規劃階段通常包括成本效益分析、排程、資源預估和配置等任務
  • 開發團隊從客戶、內部和外部專家,以及經理等多個利害關係人收集需求,以建立軟體需求規範文件
  • 該文件將設定期望值,並定義有助於專案規劃的共同目標。團隊預估成本,設定時間表,並指定詳細的計畫來實現其目標

關鍵字

  • 需求清單(Requirement List): 列出所有需求的簡單清單
  • 需求規格書(Requirement Specification Document): 這是一個全面的文件,包含所有需求的詳細描述
    1. 系統需求(System Requirements): 列出硬體需求 & 軟體需求
    2. 性能需求(Performance Requirements): 響應時間、吞吐量
    3. 法律和規定需求(Legal and Compliance Requirements)
      • 數據保護: 符合 GDPR、HIPAA 等法律規定
      • 許可和證書: 所需的業務許可和認證
    4. 品質需求(Quality Requirements)
      • 可用性: 系統應具備的可用性水平
      • 可維護性: 系統應易於維護和更新
    5. 環境需求(Environmental Requirements)
      • 操作環境: 系統應在哪些環境下運行
      • 災難恢復: 系統應如何應對災難情況
    6. 文檔需求(Documentation Requirements)
      • 用戶手冊: 應提供哪些用戶文檔
      • 技術文檔: 需要哪些技術或開發文檔
    7. 界面需求(Interface Requirements)
      • 用戶界面: UI 的設計和互動方式
      • API 界面: 如何與其他系統或服務互動。
  • 用例圖(Use Case Diagrams): 圖形化表示系統的功能需求
  • 數據流程圖(Data Flow Diagrams, DFD): 展示系統內數據的流動
  • 實體關係圖(Entity-Relationship Diagrams, ERD): 描繪數據庫結構
  • 需求追踪矩陣(Requirement Traceability Matrix, RTM): 確保每個需求都有相應的測試案例
  • 需求驗證和驗收計劃(Requirement Validation and Acceptance Plan): 描述如何驗證和接受需求

整合 Security

  • 收集安全需求(Gathering Security Requirements: 確定所有與安全性相關的需求,這可能包括身份驗證、授權、數據加密等
  • 風險評估(Risk Assessment): 識別和評估可能影響系統安全的風險,並根據這些風險來定義安全需求
  • 安全政策和規範(Security Policies and Standards): 確保開發過程和最終產品符合相關的法律、法規和組織內部的安全政策
  • 資產識別(Asset Identification): 識別系統中哪些資產(如數據、硬體、軟體)是最有價值的,並因此需要特別保護

系統設計階段 (System Design)

  • 在系統設計階段,軟體工程師會分析需求,並確定建立軟體的最佳解決方案
    • 一句話: 把需求變成可開發
  • 可能要考慮整合預先存在的模組、現有 IT 基礎設施、做出技術選擇,並確定開發工具

關鍵字

  • 架構設計(Architecture Design): 這是整個系統的高層設計,包括系統的主要組件、它們之間的關係以及與外部實體的交互
  • 模塊化(Modularity): 系統被分解成多個模塊或組件,每個模塊都有特定的功能,這有助於更容易地管理和維護系統
  • 數據模型(Data Modeling): 定義和設計將在系統中使用的數據結構和數據庫 (DB Schema)
  • 界面設計(Interface Design): 確定系統組件之間以及系統與用戶之間的交互方式
  • 性能優化(Performance Optimization): 是一個關鍵考慮因素,其中包括
    • 緩存(Cache)策略的設計
    • 負載平衡(Load Balance)的實施
    • 數據庫(DB)性能的最大化
    • 消息隊列(Message Queue)的有效管理...等

整合 Security

  • 威脅建模(Threat Modeling): 建立可能影響系統安全的威脅模型,以便更有效地定義安全需求
  • 安全架構(Secure Architecture): 這涉及到整個系統的安全高層設計,包括安全控制、防禦機制和安全層
  • 數據保護(Data Protection): 設計階段就需要考慮如何保護存儲和傳輸中的數據,包括加密和訪問控制
  • Secure Design Principles
    1. 最小權限原則(Principle of Least Privilege): 確保每個用戶或系統組件僅具有完成其任務所需的最小訪問權限
    2. 防禦深度(Defense in Depth): 透過多層防禦機制(如防火牆、加密、身份驗證等)來增加系統的安全性
    3. 數據最小化(Data Minimization): 僅收集和存儲完成任務所需的最少數據
    4. 完整性(Integrity): 確保數據和代碼在存儲、傳輸和處理過程中的完整性
    5. 可審計性(Auditability): 設計應包括足夠的日誌和監控,以便在發生安全事件時能進行追蹤和分析

實作階段 (Implementation)

  • 將設計階段的模型和規格轉換為實際的代碼
  • 識別每天、每周可以完成的較小的編碼任務,進而實現最終結果

關鍵字

  • 設計模式(Design Patterns)
  • 版本控制(Version Control)
  • 代碼審查(Code Review)
  • 重構(Refactoring)

整合 Security

  • OWASP Secure Coding Practices [13]
    • Input Validation
      • Encoding and Escaping,將特殊字符轉換為其安全形式。例如,將單引號(')轉換為 ',以防止 SQL 注入
    • Output Encoding
      • Sanitize all output of un-trusted data to operating system commands
    • Authentication and Password Management
      • includes secure handling of credentials by external services/scripts
    • Session Management
    • Access Control
    • Cryptographic Practices
    • Error Handling and Logging
    • Data Protection
    • Communication Security
    • System Configuration
      • Turn off directory listings
    • Database Security
      • Use strongly typed parameterized queries
    • File Management
      • Require authentication before allowing a file to be uploaded
      • Validate uploaded files are the expected type by checking file headers. Checking for file type by extension alone is not sufficient
    • Memory Management
      • Specifically close resources, don’t rely on garbage collection. (e.g., connection objects, file handles, etc.)
      • Buffer Overflow prevention,始終檢查輸入的長度,確保它不會超過緩衝區的大小。啟用編譯器的安全選項,如堆疊保護(Stack Protection)
    • General Coding Practices
      • Do not pass user supplied data to any dynamic execution function
      • Use checksums or hashes to verify the integrity of interpreted code, libraries, executables, and configuration files

測試階段 (Testing)

  • 結合自動化和手動測試,來檢查軟體是否存在錯誤、檢查其是否滿足客戶需求
  • 測試階段通常與開發階段平行執行 (測試&開發密不可分)

流程

測試計劃(Test Planning)

  • 在這一步,會確定測試的目的、範圍、時間表和資源需求
  • 關鍵字: 測試策略、測試範圍、資源分配

測試設計(Test Design)

  • 設計測試用例和測試數據,並確定測試的具體執行方式
  • 關鍵字: 測試用例、測試數據、測試場景

測試實施(Test Implementation)

  • 根據測試設計,實施測試用例,可能包括編寫測試腳本和設置測試環境
  • 關鍵字: 測試腳本、自動化測試、測試環境

測試執行(Test Execution)

  • 執行測試用例,記錄測試結果,並追踪任何發現的缺陷
  • 關鍵字: 測試執行、缺陷追踪、測試報告

結果分析與報告(Result Analysis and Reporting)

  • 分析測試結果,生成測試報告,並進行品質評估
  • 關鍵字: 測試報告、缺陷報告、品質評估

回歸測試(Regression Testing)

  • 每當代碼發生變更(例如,新功能的添加、缺陷修復或性能優化),都有可能影響到現有的功能。回歸測試確保這些變更不會對現有功能產生負面影響

關鍵字

  • 單元測試(Unit Testing)
  • 系統測試(System Testing)
  • 整合測試(Integration Testing)
  • 驗收測試(Acceptance Testing)
  • 性能測試(Performance Testing)
  • 端到端測試(End-to-End Testing)

整合 Security

  • 安全測試(Security Testing): 測試系統的安全性,包括潛在的漏洞和風險
  • 靜態應用安全測試(Static Application Security Testing, SAST)
    • 是一種在代碼開發階段就進行的安全測試方法。它通過分析源代碼、字節碼或二進制代碼來識別潛在的安全漏洞
    • 重要性: SAST 可以在代碼還未運行之前就發現漏洞,從而使開發人員能夠及早修復問題,提高軟體的安全性
    • 常用工具: Checkmarx
  • 動態應用安全測試(Dynamic Application Security Testing, DAST)
    • 是一種在應用程序運行時進行的安全測試方法。它通過模擬各種攻擊來識別運行中應用的安全漏洞
    • 重要性: DAST 可以發現那些只有在應用運行時才會暴露出來的漏洞,如運行時配置錯誤、身份驗證問題...等

部署階段 (Deployment)

  • 當團隊開發軟體時,他們在不同環境上進行編碼和測試
  • 客戶使用的軟體稱為生產環境 (Prod-Env),而其他複本則稱為測試環境 (Test-Env)
  • 擁有獨立的建置和生產環境,可確保客戶即使在變更或升級軟體時也可以繼續使用該軟體

關鍵字

  • 環境配置(Environment Configuration): 確保目標部署環境(如生產、測試、暫存等)具有適當的硬體和軟體配置
  • 部署腳本(Deployment Scripts): 自動化部署過程的腳本或工具,如 Ansible、Terraform...等
  • 容器化(Containerization): 使用容器(如 Docker)來封裝應用和其依賴,以便於部署和擴展

整合 Security

  • 安全配置 (Secure Configuration): 安全配置是一種確保所有系統和軟體設定遵循安全最佳實踐的過程。這通常包括最小權限原則、防火牆規則、存取控制列表和其他安全相關的設定
  • 滲透測試(Penetration Testing): 模擬黑客攻擊以找出系統的安全漏洞。這通常包括對網絡、應用程序和其他系統組件的測試
  • 安全監控(Security Monitoring): 部署專門用於安全的監控解決方案,如入侵檢測系統(IDS)和安全信息和事件管理(SIEM)

維護階段 (Maintenance)

  • 確保軟體產品在其生命週期內持續有效、安全和高效地運行。這一階段涉及多種活動,包括錯誤修復、性能優化、功能更新和安全強化

流程

  • 錯誤修復(Bug Fixing): 修正軟體中的缺陷和錯誤
  • 功能更新(Feature Updates): 根據用戶需求或市場趨勢,添加或修改軟體功能
  • 性能優化(Performance Tuning): 提高軟體的運行效率和速度
  • 資料庫維護(Database Maintenance): 保持資料庫的完整性和效能
  • 文件更新(Documentation Updates): 更新軟體的使用說明、技術規格等
  • 監控與報告(Monitoring and Reporting): 實時監控軟體的運行狀況,並生成相應的報告
  • 測試(Testing): 在每次更新後進行全面的測試,以確保軟體的穩定性和可靠性

關鍵字

  • 維護計劃(Maintenance Plan)
  • 發布管理(Patch Management)
  • 緊急修復(Hotfix)
  • 代碼審查(Code Review)
  • 退役(End-of-Life, EOL)
  • 服務水平協議(Service Level Agreement, SLA)
  • 持續集成/持續部署(CI/CD)
  • 監控工具(Monitoring Tools

整合 Security

  • 安全審計(Security Audit): 系統化的評估過程,旨在識別和管理組織資訊系統的安全風險。這通常涉及對硬體、軟體、網絡、數據和人員的詳細審查,以確保遵循最佳安全實踐和法律規定
  • 安全強化(Security Patching): 更新安全漏洞和強化系統安全

[補充]: Software Project Management (SPM)

Work Breakdown Structure (WBS)

Cost Breakdown Structure (CBS)

Reference

  1. https://aws.amazon.com/tw/what-is/sdlc/
  2. https://jamie-life-coding.medium.com/sdlc-software-development-life-cycle-%E7%9F%A5%E8%AD%98%E5%88%86%E4%BA%AB%E6%95%B4%E7%90%86-54397826cd97
  3. https://www.isac.org.tw/spaw2/uploads/files/20161202/%E7%A7%91%E6%8A%80%E9%83%A8%E6%8E%A8%E5%8B%95SSDLC%E7%B6%93%E9%A9%97%E5%88%86%E4%BA%AB%E7%B0%A1%E5%A0%B1.pdf
  4. https://sdwh.dev/posts/2020/10/CyberSecurity-SSDLC/
  5. https://en.wikipedia.org/wiki/Systems_development_life_cycle
  6. https://datarob.com/sdlc-methodologies/
  7. https://en.wikipedia.org/wiki/Software_project_management
  8. https://www.tutorialspoint.com/software_engineering/software_project_management.htm
  9. https://www.adeaca.com/blog/faq-items/what-is-a-work-breakdown-structure/
  10. https://www.adeaca.com/blog/faq-items/what-is-a-cost-breakdown-structure/
  11. https://www.spreadsheet.com/template/wbs-project-management
  12. https://www.cybermedian.com/tw/%E8%BB%9F%E4%BB%B6%E9%96%8B%E7%99%BC%E7%94%9F%E5%91%BD%E9%80%B1%E6%9C%9F%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%96%B9%E6%B3%95/#luo_xuan_mo_xing_SDM
  13. https://owasp.org/www-pdf-archive/Jim_Manico_(Hamburg)_-_Securiing_the_SDLC.pdf
  14. https://owasp.org/www-pdf-archive/OWASP_SCP_Quick_Reference_Guide_v2.pdf

上一篇
《軟體工程篇 - 1》 — 軟體工程與設計模式
下一篇
《軟體工程篇 - 3》 — 軟體工程的方法論 (Methodology)
系列文
深入淺出設計模式 - 使用 C++37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言