軟件開發的各個方面 (課程大綱 3.3.4)

各位未來的軟件工程師,你們好!這一章將帶領我們從編寫單行代碼的思維,轉向項目經理的視角。開發軟件不僅僅是編碼;它是一個包含規劃、構建和檢查的嚴謹過程。理解這個過程(通常稱為「軟件開發生命週期」,SDLC)對於創建可靠、高效且實用的電腦系統至關重要。

如果這些步驟看起來很多,請不要擔心——我們在現實生活中處理複雜任務時(例如籌辦學校活動或裝修房間),其實都在運用類似的過程!

軟件開發的階段

軟件開發通常分為幾個關鍵階段。雖然有時它被呈現為一個僵化的順序(如瀑布式模型),但現代開發通常採用迭代式 (iterative)敏捷式 (agile) 方法,這意味著你需要多次循環經過這些階段,並在每次循環中不斷完善產品。

階段 1:分析 (Analysis)

這是「弄清楚用戶真正想要什麼」的階段。如果你完美地構建出錯誤的東西,那依然是失敗的!

在開始任何構建工作之前,必須先明確定義 (define) 問題。

分析階段的關鍵步驟:

1. 確立需求 (Establish Requirements):

  • 這涉及與目標用戶(真正使用該系統的人)進行詳細溝通。
  • 我們需要釐清系統必須做什麼(功能性需求),以及它必須達到多好的表現(非功能性需求,例如速度或安全性)。

2. 建立數據模型 (Create a Data Model):

  • 這涉及釐清系統需要儲存哪些數據,以及這些數據之間如何關聯。
  • 例子: 如果你要構建一個學校註冊系統,你需要為「學生」、「班級」和「教師」等實體建模,並定義每個實體的屬性。

你知道嗎? 釐清需求的過程通常涉及原型製作 (prototyping) 或採用敏捷開發。這意味著先創建一個快速、基礎的可運行版本(原型)展示給用戶看,讓他們能及早提出意見,例如:「等等,那個按鈕應該是藍色的,而不是紅色的!」,這樣就不用等到花了幾個月編寫最終版本後才發現錯誤。

快速回顧:分析階段重點
此階段的核心工作是定義問題、從用戶處收集需求,並規劃所需的數據模型
階段 2:設計 (Design)

一旦我們知道「要構建什麼」(分析階段),設計階段就會決定「如何構建」。在編寫任何最終代碼之前,此階段會先規劃出解決方案。

設計的關鍵組成部分:

  • 規劃數據結構: 決定如何在代碼中實現數據模型(例如使用陣列、列表或記錄)。
  • 設計算法: 創建解決問題各部分的逐步程序(算法,通常以偽代碼寫成)。
  • 模組化結構: 將程序分解為較小、易於管理且有名字的代碼塊(子程序 (subroutines) 或函數)。這對於結構化編程 (Structured Programming)(在 3.3.1 涵蓋)至關重要,並且能讓代碼更易於測試和維護。
  • 設計人機界面 (HUI): 規劃屏幕的視覺效果以及用戶如何與系統互動(例如按鈕位置、導航流程)。

與分析階段一樣,設計階段也可以是迭代式的,特別是在使用原型製作或敏捷方法時。

快速回顧:設計階段重點
此階段的核心工作是規劃結構(模組)、數據組織,以及逐步邏輯(算法)
階段 3:實現 (Implementation)

這就是編寫實際代碼的階段!你將之前的計劃(算法和設計)轉化為可執行的代碼。

在前幾個階段設計的模型和算法會被轉譯為電腦可以處理的數據結構和代碼(指令)

在使用迭代式或敏捷開發時,開發人員通常會先聚焦於關鍵路徑 (critical path)

什麼是關鍵路徑?
關鍵路徑是指解決方案中其他一切都依賴的部分。如果關鍵路徑無法運作,整個系統就會失敗或無法繼續運作。
類比: 如果你要構建一個網上商店,處理付款的能力就是關鍵路徑。如果沒有付款處理功能,無論產品展示看起來多麼美觀,整個商店都是無用的。

快速回顧:實現階段重點
編寫代碼、將算法轉換為指令,並在迭代開發中優先處理關鍵路徑
階段 4:測試 (Testing)

程序必須經過嚴格測試,實現階段才算真正完成!目標是找出錯誤(臭蟲/bugs)並確保系統行為完全符合需求說明。

學生必須具備設計和應用各類測試數據的實踐經驗:

1. 正常 (Normal/Typical) 數據
目的: 檢查系統在預期的有效條件下能否正確運行。
例子: 程序要求輸入 18 到 60 歲之間的年齡,正常數據可以是 3542

2. 邊界 (Boundary) 數據
目的: 檢查可接受輸入的極端情況。程序往往就是在邊界限制處出錯。
例子: 對於 18 到 60 歲的範圍,邊界數據包括 1817(剛好在邊界外)、6061(剛好在邊界外)。

3. 錯誤 (Erroneous/Invalid) 數據
目的: 檢查當輸入完全錯誤或預期之外的數據類型時,程序的穩健性 (robustness)。
例子: 當預期輸入年齡時,輸入 "Tuesday""-5"。程序應能優雅地處理這種情況(例如顯示錯誤訊息),而不應該崩潰。

記憶小撇步: 利用首字母縮寫記住三種測試數據:Normal (正常)、Boundary (邊界)、Erroneous (錯誤)。即 NBE
快速回顧:測試階段重點
測試透過規劃好的測試數據集來確認正確性 (correctness):包括正常(預期)、邊界(極限)及錯誤(無效)數據。
階段 5:評估 (Evaluation)

在系統構建並測試完成後,我們必須回顧並判斷其品質。這涉及將最終系統與初始需求進行比較,並使用關鍵標準進行評核。

你需要掌握評估電腦系統的標準:

1. 正確性 (Correctness)

  • 程序是否滿足分析階段中規定的所有原始用戶需求?
  • 它能否為正確的輸入產生正確的輸出?(即它是否沒有臭蟲?)

2. 效率 (Efficiency)

  • 系統是否能有效利用電腦資源?
  • 我們透過時間效率(算法運行速度,通常與算法選擇有關)和空間效率(程序使用的記憶體量,與數據結構選擇有關)來衡量。

3. 可維護性 (Maintainability)

  • 系統在未來是否容易理解、調試和更新?
  • 高可維護性意味著代碼結構良好(模組化)、使用有意義的識別符名稱,並包含說明性註解
  • 鼓勵一下: 編寫好的註解和清晰的變數名稱對於可維護性至關重要——這能為你未來省下大量的時間和麻煩!

記憶小撇步: 評估的三個標準是 C.E.M.Correctness(正確性)、Efficiency(效率)、Maintainability(可維護性)。

軟件開發週期總結

一個穩健的系統會經歷這些階段,並且通常會在原型測試失敗或用戶反饋改變需求時,循環回到早期的階段(特別是分析或設計階段)。

分析(構建什麼?)→ 設計(如何構建?)→ 實現(動手構建!)→ 測試(檢查是否有效!)→ 評估(產品好嗎?)