歡迎來到軟件開發的旅程!
你好!你有沒有想過像 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)。
測試的三劍客
你需要為考試記住這三種測試數據類型:
- 正常數據 (Normal Data):用戶「應該」輸入的內容。
例子:如果一個方框要求輸入 1 到 100 之間的分數,輸入 50 就是正常數據。 - 邊界數據 (Boundary Data):位於允許範圍最邊緣的數值。程式通常在這裡最容易出錯!
例子:輸入 1 或 100。 - 錯誤數據 (Erroneous Data):完全錯誤或類型錯誤的數據。
例子:在分數框中輸入 "Hello" 或 -5。
記憶輔助:記住首字母縮寫 NBE (Normal, Boundary, Erroneous)。你可以把它想像成:Nearly Broken Everywhere(幾乎到處都快壞掉了)!
快速回顧:測試不僅僅是檢查程式碼是否能運行;它是在證明程式碼能正確處理正常、邊界和錯誤數據。
5. 評估 (Evaluation):成功了嗎?
最後一步是評估。這是回顧你在分析階段寫下的需求,並詢問:「我們真的做到了當初所說的嗎?」
評估的主要準則包括:
- 系統是否滿足所有原始需求?
- 它是否易於使用?
- 它是否高效(運行速度足夠快嗎)?
- 程式碼在未來是否易於維護(修正)?
要避免的常見錯誤:
學生常會混淆測試和評估。
測試是為了在程式碼中尋找錯誤。
評估則是判斷最終產品是否真的好用,以及是否符合用戶需求。
重點總結:評估是軟件的最後「評分」。如果不符合需求,開發人員可能需要回到分析或設計階段重新來過!
總結:軟件開發生命週期
最後,記住這個順序。這是一個持續運作的循環!
- 分析:問題是什麼?
- 設計:我們將如何解決它?
- 實作:編寫程式碼!
- 測試:找出錯誤。
- 評估:它對用戶有效嗎?
做得好!你現在已經了解了軟件開發中解決問題的系統化方法。只要記住:一點點的規劃(分析和設計)可以省去日後大量的壓力!