歡迎來到軟件開發的世界!
你有沒有想過像 Instagram 這種大型應用程式或 Minecraft 這種複雜的遊戲是如何開發出來的?這可不僅僅是隨便找個人坐下來,敲敲鍵盤直到程式寫完那麼簡單。這需要一套方法論 (Methodology)——也就是一套計劃或「食譜」,指導你如何從一個構思轉化為實際運作的產品。在本章中,我們將探索不同的軟件開發方式,以及我們如何透過測試 (Testing) 來確保產品真正發揮作用。
如果初看之下覺得理論太多,請不要擔心。把它想像成蓋房子:在搬磚動工之前,你總得先有一份藍圖!
1. 軟件開發生命週期(方法論)
開發方法論其實就是一套框架,用於組織、規劃和控制資訊系統的開發過程。以下是你考試需要掌握的五種方法:
A. 瀑布模型 (Waterfall Model)
瀑布模型是「傳統派」的做法。它是線性 (Linear) 且順序式 (Sequential) 的。你必須徹底完成一個階段,才能進入下一個階段。一旦過了這個「瀑布」,就無法回頭。
比喻:就像一位嚴格遵守食譜的專業廚師。蛋糕一旦放進烤箱開始烤,就無法倒轉過程重新來過!
優點:簡單易懂、易於管理;階段明確且截止日期清晰。
缺點:非常僵化;如果用戶在過程中改變主意,修補起來會很困難(且昂貴)。在項目結束前,無法看到任何實際運作的軟件。
B. 敏捷開發 (Agile Methodologies)
敏捷開發的核心在於靈活應變。與其把項目看作一個巨大的整體,不如將工作拆分成多個稱為衝刺 (Sprints) 的小區塊。在每個衝刺完成後,都會向客戶展示產品的「迷你版本」。
比喻:就像繪製肖像畫。你先勾勒出輪廓展示給客戶看,然後加上色彩再次展示,並根據反饋不斷完善。
優點:對變化的反應非常迅速;持續的用戶回饋確保客戶得到他們真正想要的產品。
缺點:難以預測最終成本或完成日期,因為計劃總是在變動。
C. 極限編程 (Extreme Programming, XP)
極限編程是敏捷開發的一種特定類型,專注於生產高品質程式碼。其主要特徵包括結對編程 (Pair Programming)(兩個人共用一台電腦)以及頻繁的測試。
核心概念:之所以稱為「極限」,是因為它將有益的實踐(例如測試)發揮到了極致。
D. 螺旋模型 (Spiral Model)
螺旋模型圍繞著風險分析 (Risk Analysis) 構建。項目以螺旋形狀通過各個階段。螺旋的每一圈都涉及識別風險和建立原型。
比喻:就像專業的工程項目(例如研發新型噴射引擎)。如果發現重大風險,你可能會在投入更多資金之前直接終止項目。
優點:非常適合高風險、昂貴的項目。
缺點:成本可能非常高,且需要技術高超的風險評估人員。
E. 快速應用開發 (Rapid Application Development, RAD)
RAD 專注於速度。它使用原型 (Prototypes)(軟件的初步版本),讓用戶試用並給予回饋。這是一個「試錯」的過程,直到軟件達到滿意效果為止。
優點:開發速度極快;非常適合用戶需求尚未完全明確的項目。
缺點:不適合大型、複雜的系統(如飛行控制軟件),因為這類系統要求從一開始就必須完美無缺。
快速回顧:該用哪一個?
- 瀑布模型:適用於需求明確且不會變動的小型項目。
- 螺旋模型:適用於大型、高風險項目。
- 敏捷/XP:適用於需要頻繁更新的軟件(如手機 App)。
- RAD:當你需要快速獲得可用版本時。
2. 測試策略
寫程式只是成功了一半,你還必須證明它能運作!我們通常將測試分為四種主要方式:
黑箱測試 vs. 白箱測試
黑箱測試 (Black Box Testing):測試人員看不到內部的程式碼。他們只關注輸入什麼 (Input) 以及得到什麼輸出 (Output)。他們是在測試程式是否符合需求規格。
記憶小貼士:想像一個塗成黑色的盒子——你看不到裡面,只能與外部互動。
白箱測試 (White Box Testing):測試人員檢查內部的邏輯和程式結構。他們會檢查程式碼可能走過的每一條路徑(例如 if 語句、迴圈),以確保沒有邏輯錯誤。
記憶小貼士:想像一個玻璃盒子——你可以清楚看到裡面所有的齒輪和電線。
阿爾法測試 (Alpha) vs. 貝塔測試 (Beta)
阿爾法測試 (Alpha Testing):這是內部進行的測試。由開發人員及其同事測試軟件。這是整個系統首次整合在一起測試,目的是找出重大錯誤。
記憶小貼士:Alpha (A) 排第一,是給「A-Team」(開發團隊)測試的。
貝塔測試 (Beta Testing):軟件發佈給特定的一群真實用戶,他們並非公司內部人員。他們會在「現實世界」的環境下使用軟件,並回報發現的異常情況。
記憶小貼士:Beta (B) 排第二,是給公司外部「勇敢 (Brave)」的用戶測試的。
重點總結:測試不僅僅是為了找出錯誤,更是為了確保軟件穩健 (Robust)(不會輕易當機)且好用 (Usable)。
3. 使用測試數據
測試程式時,不能隨便輸入亂碼。你需要一套策略!必須使用以下三類數據:
- 正常數據 (Normal Data):程式應該接受的數據。(例如:若程式要求輸入 1 到 100 之間的年齡,輸入「15」)。
- 邊界數據 (Boundary/Extreme Data):允許範圍邊緣的數據。(例如:輸入「1」或「100」)。這是許多錯誤隱藏的地方!
- 錯誤數據 (Erroneous Data):程式應該拒絕的數據。(例如:若程式要求輸入年齡,輸入「Hello」或「-5」)。
你知道嗎?許多著名的軟件當機事件都是因為程式設計師忘記測試邊界數據。例如,如果數字比程式預期的多了一位數,整個系統可能會直接崩潰!
最終總結清單
在繼續學習之前,請確保你能:
- 解釋為什麼開發者會選擇敏捷開發而不是瀑布模型。
- 明確指出螺旋模型側重於風險 (Risk)。
- 描述黑箱測試(關注輸出)與白箱測試(關注程式碼結構)之間的區別。
- 解釋為什麼貝塔測試很有用(它在開發者可能沒考慮到的現實環境中測試軟件)。
- 針對特定情境,提供正常、邊界和錯誤測試數據的範例。
做得好!你已經掌握了軟件從構思到成品的核心精髓。請繼續練習這些測試數據情境——它們可是考試的熱門考點!