歡迎來到軟件開發的旅程!

你好!你有沒有想過像 Instagram 這種大型應用程式,或是像 Minecraft 這種複雜的遊戲究竟是如何構建出來的?這並不僅僅是某個人坐下來不停地打程式碼直到完成為止。事實上,編寫程式碼只是整個過程中很小的一部分!

在本章中,我們將探索解決問題的系統化方法。這基本上就是軟件開發人員遵循的「路徑圖」,以確保他們開發出的系統真正有效,並且能滿足用戶的需求。想像一下蓋房子:你不會在沒有計劃的情況下就直接開始砌磚,對吧?讓我們開始深入探討吧!

1. 分析 (Analysis):理解問題

在解決問題之前,你必須先確切地了解問題是什麼。這個階段稱為分析

在這個階段,開發人員會與「客戶」(想要開發軟件的人)合作,以確立需求 (requirements)。你需要弄清楚:

  • 系統要做什麼?(輸入、處理和輸出)
  • 會使用什麼數據?(創建一個數據模型 (data model)
  • 系統必須遵循哪些規則?

抽象化 (Abstraction) 的力量

分析的一個重要部分是抽象化。這是一個簡單概念的華麗詞彙:過濾掉無關的細節,這樣你就可以專注於真正重要的部分。

例子:如果你正在建立一個學校註冊系統,你需要學生的姓名和出生日期。你可能不需要知道他們最喜歡的顏色或寵物的名字。透過忽略寵物的名字,你就是在運用抽象化!

快速回顧:分析是關於在考慮「如何」編寫程式碼之前,先定義系統「做什麼」。

2. 設計 (Design):繪製藍圖

既然我們知道了需要建構「什麼」,設計階段就是我們規劃「如何」去建構它的過程。如果分析是關於「什麼」,那麼設計就是關於「如何」。

在設計過程中,你需要規劃:

  • 數據結構 (Data Structures):數據將如何組織?(例如:使用陣列或記錄)。
  • 演算法 (Algorithms):任務的分步執行指令是什麼?
  • 用戶介面 (UI):螢幕看起來會是什麼樣子?人類使用起來方便嗎?
  • 模組化結構 (Modular Structure):將大型程式拆解成較小、易於管理的部分,稱為模組 (modules)

階層圖 (Hierarchy Charts)

為了保持井然有序,開發人員經常使用階層圖。這些圖表看起來像家譜,展示了程式的不同部分是如何連結在一起的。這有助於確保系統具有模組化結構,從而使日後的修正和更新變得更加容易。

重點總結:一個好的設計會使用清晰且有記載的介面 (documented interfaces),以便不同的模組可以在不引發錯誤的情況下進行「溝通」。

3. 實作 (Implementation):建構解決方案

這是大多數人認為的「電腦科學」階段——該開始編寫程式碼了!

實作是將你的設計(模型和演算法)轉換為電腦可以實際執行的數據結構程式碼的過程。

如果這看起來最困難,請不要擔心!如果你的設計做得好,編寫程式碼就會變得容易得多,因為你只是在遵循計劃。在此階段,開發人員會運用邏輯推理來確保程式碼高效且正確。

你知道嗎?

程式設計師很少能在第一次就寫出完美的程式碼。他們在實作設計時會不斷進行「偵錯」(debugging)(尋找並修正小錯誤)。

4. 測試 (Testing):獵捕錯誤

即使是最優秀的程式設計師也會犯錯。測試就是我們試圖「破壞」軟件,以便在真實用戶看到它之前發現任何隱藏的錯誤 (bugs)。為了正確地做到這一點,你必須使用不同類型的測試數據 (test data)

測試的三劍客

你需要為考試記住這三種測試數據類型:

  1. 正常數據 (Normal Data):用戶「應該」輸入的內容。
    例子:如果一個方框要求輸入 1 到 100 之間的分數,輸入 50 就是正常數據。
  2. 邊界數據 (Boundary Data):位於允許範圍最邊緣的數值。程式通常在這裡最容易出錯!
    例子:輸入 1 或 100。
  3. 錯誤數據 (Erroneous Data):完全錯誤或類型錯誤的數據。
    例子:在分數框中輸入 "Hello" 或 -5。

記憶輔助:記住首字母縮寫 NBE (Normal, Boundary, Erroneous)。你可以把它想像成:Nearly Broken Everywhere(幾乎到處都快壞掉了)!

快速回顧:測試不僅僅是檢查程式碼是否能運行;它是在證明程式碼能正確處理正常邊界錯誤數據。

5. 評估 (Evaluation):成功了嗎?

最後一步是評估。這是回顧你在分析階段寫下的需求,並詢問:「我們真的做到了當初所說的嗎?」

評估的主要準則包括:

  • 系統是否滿足所有原始需求?
  • 它是否易於使用?
  • 它是否高效(運行速度足夠快嗎)?
  • 程式碼在未來是否易於維護(修正)?
要避免的常見錯誤:

學生常會混淆測試評估
測試是為了在程式碼中尋找錯誤。
評估則是判斷最終產品是否真的好用,以及是否符合用戶需求。

重點總結:評估是軟件的最後「評分」。如果不符合需求,開發人員可能需要回到分析或設計階段重新來過!

總結:軟件開發生命週期

最後,記住這個順序。這是一個持續運作的循環!

  1. 分析:問題是什麼?
  2. 設計:我們將如何解決它?
  3. 實作:編寫程式碼!
  4. 測試:找出錯誤。
  5. 評估:它對用戶有效嗎?

做得好!你現在已經了解了軟件開發中解決問題的系統化方法。只要記住:一點點的規劃(分析和設計)可以省去日後大量的壓力!