歡迎來到測試的世界!

你有沒有試過玩遊戲玩到快要贏的時候,遊戲卻突然崩潰?或是用應用程式時遇到奇怪的錯誤訊息?這些情況都是因為程式沒有經過妥善測試。在這一章,我們將學習程式設計師如何找出並修復這些「臭蟲(Bugs)」,以建立穩健的程式(Robust programs)——也就是那些強大、可靠且不容易當機的程式!

如果這些內容看起來很多,別擔心。我們會把它拆解成容易消化的小部分,並結合許多日常生活中的例子。

1. 為什麼要測試?

測試的主要目的很簡單:確保程式能完全按照預期運作!具體來說,測試能幫助我們:

• 找出並修復程式碼中的錯誤(Errors / Bugs)
• 確保程式符合需求(Requirements)(即完成使用者要求的功能)。
• 檢查程式是否能在遇到非預期的輸入(Unexpected inputs)時,不會崩潰。

快速複習:測試不是為了證明程式完美無缺;而是要在使用者看到程式之前,盡可能找出所有的錯誤!

2. 測試的類型

程式設計師主要有兩種測試工作的方式,就像廚師製作一道新湯品一樣。

迭代測試(Iterative Testing)

迭代測試發生在開發過程。程式設計師編寫一小段程式碼(模組),進行測試,修復任何錯誤,然後再進入下一部分。

比喻:廚師在煮湯的過程中不斷試味,並隨時加入適量的鹽或水。

最終 / 終端測試(Final / Terminal Testing)

最終測試(也稱為終端測試)發生在開發過程的最後階段,即所有程式零件都整合完成後。這會檢查整個系統作為一個整體是否能正常運作。

比喻:將煮好的湯盛給客人,等待最終評價。

重點總結:迭代 = 開發期間。最終 = 開發完成後

3. 識別錯誤

在電腦科學中,並非所有的錯誤都是一樣的。你需要了解兩種主要錯誤之間的區別。

語法錯誤(Syntax Errors)

語法錯誤是程式碼中的「文法」錯誤。程式語言有非常嚴格的規則(語法)。如果你把 print() 拼寫成 prnt(),或是漏掉了一個括號,電腦就會看不懂該怎麼做。如果有語法錯誤,程式將完全無法執行

邏輯錯誤(Logic Errors)

邏輯錯誤是程式「思考」上的錯誤。程式碼寫得完全正確(沒有文法錯誤),所以程式可以執行,但會給出錯誤的結果

例子:你想計算兩個數字相加 \(2 + 2\),但不小心輸入了 \(2 - 2\)。電腦雖然正確地執行了數學運算,但給出的答案是 0 而不是 4。這就是邏輯錯誤!

你知道嗎?「Bug」這個詞源於 1940 年代,當時一隻真正的飛蛾飛進電腦硬體裡,導致電腦停止運作!

4. 選擇合適的測試資料

為了正確測試程式,你不能隨便輸入亂碼。你需要一個計畫!想像我們有一個程式,要求使用者輸入學生的考試分數,該分數必須在 0 到 100 之間

我們會使用四種特定的測試資料類型:

1. 正常資料(Normal Data)
這些是範圍內的資料,程式應該要接受。
例子:45, 82, 或 10。

2. 邊界資料(Boundary Data)
這些是位於允許範圍最邊緣的資料。這些地方最容易隱藏邏輯錯誤!
例子:0 和 100。(我們也應該測試 -1 和 101,看看程式是否拒絕它們)。

3. 無效資料(Invalid Data)
這是類型正確(數字)但超出範圍的資料。
例子:-50 或 150。程式應該拒絕這些輸入。

4. 錯誤資料(Erroneous Data)
這是完全錯誤類型的資料。電腦預期是數字,但你卻給了其他東西。
例子:輸入「八十」而不是 80,或是輸入「香蕉」。程式應該要能處理這種情況而不崩潰。

記憶口訣 - 「NIBE」技巧:
Normal (正常)
Invalid (無效)
Boundary (邊界)
Erroneous (錯誤)

5. 測試計畫與修訂

測試計畫(Test plan)是一份文件(通常是表格),讓程式設計師在開始測試前列出所有要檢查的項目。它通常包含:

測試編號:方便追蹤紀錄。
描述:我們正在測試什麼?
測試資料:我們輸入了什麼數值?
預期結果:原本「應該」發生什麼?
實際結果:「實際」發生了什麼?
通過/失敗:它成功了嗎?

修訂演算法(Refining Algorithms)

當你測試完程式並發現錯誤後,必須進行修訂(Refining)。這意味著修正錯誤並改進程式碼,使其更加穩健。如果你的測試計畫顯示「失敗」,你就回到程式碼、修正邏輯,然後再次測試!

常見錯誤:學生經常會混淆無效(Invalid)錯誤(Erroneous)資料。請記住:無效資料是類型正確但「數值不對」(例如年齡輸入 -5)。錯誤資料則是完全錯誤的資料類型(例如年齡輸入「你好」)。

總結:快速複習

1. 測試目的:找出臭蟲並確保符合需求。
2. 迭代測試:邊寫邊測。最終測試:最後階段測試。
3. 語法錯誤:程式無法執行(文法錯誤)。邏輯錯誤:程式可執行但答案錯誤。
4. 測試資料:正常 (標準)、邊界 (邊緣)、無效 (數值錯誤)、錯誤 (類型錯誤)。
5. 測試計畫:用來紀錄與檢查結果的表格,以利修訂程式。