1.11 · 測試與調試
目標: 知道課程點名的數值與結構錯誤以及調試工具。
數值錯誤(課程點名)
| 錯誤 | 原因 | 例 |
|---|---|---|
| 舍入 Rounding | 十進精度受限 | 0.1 + 0.2 != 0.3 |
| 截斷 Truncation | 截掉多餘位 | int(3.9) → 3 |
| 溢出 Overflow | 結果超最大可表示 | Int32 最大 + 1 環繞 |
| 下溢 Underflow | 結果小於最小可表示 | 極小 float 變 0 |
緩解:
- 錢用
Decimal避 float 舍入。 - 用 64 位整數(Python 的
int任意精度)。 - 刻意用
round()。
其他錯誤(複習)
| 類型 | 何時 |
|---|---|
| 語法 | 編譯 / 解釋時 |
| 邏輯 | 跑但輸出錯 |
| 執行時 | 執行中崩 |
調試工具
| 工具 | 做什麼 |
|---|---|
| Stubs 佔位 | 自頂向下開發時用的空佔位函式 |
| Flags 標誌 | 切換行為的布林狀態變數 |
| Break points 斷點 | IDE 調試器在選定行暫停以查狀態 |
| Program trace 程序追蹤 | print / logger 顯變數值 |
| Test data sets 測試資料集 | 正常 / 邊界 / 錯誤 |
調試走查
設函式本應返平均但返 0。
- 用小輸入復現。
- 關鍵點加 print:python
def average(nums): print("DEBUG nums:", nums) total = sum(nums) print("DEBUG total:", total) return total / len(nums)1
2
3
4
5 - 假設 —— 除以零?總和錯?
- 修並刪 debug print。
學生常見錯誤
- 捕異常以藏 bug。
- 一次改太多。
- 忘邊界測試。
- 信「我機器上能跑」。
考試式題目
題(5 分): 識別錯誤類型並各提一種調試技術: (a) 程序印
0而非平均。 (b) Python 拋IndexError: list index out of range。 (c) 程序起不來:「SyntaxError: invalid syntax」。 (d) 結果是0.30000000000000004而非0.3。
參考答案:
(a) 邏輯錯誤。用追蹤表或 print 調試查中間值;可能原因:累加前先除、迴圈邊界偏差 1。
(b) 執行時錯誤。在索引行加斷點,查列表長度 vs 索引;加守衞 if i < len(arr)。
(c) 語法錯誤。讀錯誤資訊行號;查未匹配括號、漏冒號、壞縮進。
(d) 數值舍入錯誤,由二進制浮點引起。顯示用 round(x, 1),或切到 Decimal 做精確算術。
關鍵要點
- 數值錯誤:舍入、截斷、溢出、下溢。
- 調試工具:佔位、標誌、斷點、追蹤、測試資料。
- 系統地修。
第 1 章總結
你完成了 2C 的主體。自測:
- 能實現線性 & 二分查找嗎?
- 能實現冒泡、插入、選擇排序嗎?
- 能在 Python 建棧、隊列、鏈表嗎?
- 能系統調試嗎?
➡️ 下一章:2 · 現實中的編程