程式設計基礎講座(四)

向 bug 宣戰─
程式中最容易潛藏 BUG 的地方


本文大綱

蟑 螂 是 生 命 力 很 強 的 動 物 , 大 概 有 人 的 地 方 就 有 它 , 雖 然 人 類 發 明 了 許 多 殺 蟑 的 方 法 , 但 蟑 螂 還 是 沒 有 因 此 絕 跡 ; 電 腦 的 bug 很 像 蟑 螂 , 它 總 是 悄 悄 地 躲 進 我 們 所 開 發 的 程 式 中 , 雖 然 大 部 份 的 軟 體 開 發 工 具 都 有 殺 蟲 劑 (debugger), 但 bug 也 沒 有 因 此 絕 跡 。

我 有 一 位 很 強 壯 的 同 事 卻 很 怕 蟑 螂 , 只 要 看 到 蟑 螂 , 他 一 定 要 翻 箱 倒 櫃 把 它 找 出 來 , 否 則 便 無 法 入 睡 , 這 讓 我 聯 想 到 是 否 有 人 為 了 一 個 bug 而 翻 遍 所 有 的 程 式 ? 對 於 小 程 式 來 說 , 這 也 許 不 是 太 難 的 事 情 , 但 對 於 大 型 程 式 , 這 卻 是 不 實 際 的 , 就 像 您 要 在 幾 十 層 的 大 樓 中 搜 索 一 隻 蟑 螂 一 樣 。

我 想 應 該 先 從 蟑 螂 最 常 出 沒 的 地 方 開 始 , 甚 至 在 這 些 地 方 擺 放 殺 蟑 劑 , 同 樣 的 , 在 程 式 中 也 有 bug 比 較 容 易 躲 藏 的 地 方 , 我 們 首 先 要 確 定 bug 是 否 會 躲 藏 在 這 些 地 方 , 並 且 埋 設 一 些 檢 查 的 關 卡 , 只 要 bug 出 現 就 能 顯 現 警 告 訊 息 。

蟑 螂 的 多 寡 與 家 具 的 選 擇 有 極 大 的 關 係 , 同 樣 的 , bug 的 多 寡 與 開 發 程 式 的 語 言 也 有 極 大 的 關 係 , 而 在 眾 多 流 通 廣 泛 的 程 式 語 言 中 , 又 以 C 語 言 為 bug 的 最 愛 , 本 期 探 討 一 般 程 式 語 言 容 易 潛 藏 bug 的 地 方 , 或 多 或 少 會 以 C 語 言 為 例 , 不 過 較 完 整 的 整 理 及 討 論 則 留 待 以 後 。

數學運算式

錯 誤 類 型 之 一 : 溢 位

錯 誤 類 型 之 二 : 浮 點 數 的 不 準 確 性

錯 誤 類 型 之 三 : 除 以 0

錯 誤 類 型 之 四 : 弄 錯 運 算 符 號 的 優 先 順 序

錯 誤 類 型 之 五 : 不 同 型 別 的 運 算

程 式 轉 彎 處

goto 的 後 遺 症

無 窮 迴 圈

邏 輯 判 斷 式

變 數

打 錯 了 變 數 名 稱

指 標 超 過 陣 列 的 範 圍

全 域 變 數

結 語