

上週我們陪一家中部的傳產客戶做軟體外包驗收——250 萬發包的 ERP,承包商說「跑得起來、驗收給過」,老闆問了我們一句:「你們覺得這個我能簽嗎?」我們花了三天把 commit log、Dockerfile、資料庫 schema、單元測試覆蓋率全看過一遍,回他一句話:「不能。這套上線後 6 個月會撞牆。」
這個故事不是要嚇你,是要告訴你一個被嚴重低估的環節:**程式碼審計(Code Audit)**。台灣 90% 中小企業老闆發包軟體案時,驗收只看「畫面有沒有跑出來、功能能不能點」——這跟買房只看「燈會不會亮」一樣天真。這篇要做的事情是把程式碼審計拆給沒有工程背景的老闆看:6 個必查項、5 個 red flag、3 個第三方審計報價區間,讓你在 200 萬合約簽下去之前,知道該逼承包商交出什麼。
程式碼審計到底在審什麼
根據 Gartner 2026 軟體外包風險報告,全球外包軟體專案有 42% 在上線後 12 個月內因「程式碼品質不足」需要重做或大幅重構。台灣本地的數字更慘——經濟部中小企業處 2025 數位轉型調查 顯示 67% 的客製化系統發包案,老闆認為「驗收時看不出問題」是最大採購痛點。
程式碼審計分三層:**功能審計**(functional review,QA 在做的事)、**品質審計**(code quality review,看的是可維護性、安全性、效能)、**架構審計**(architecture review,看的是擴展性、整合性)。中小企業老闆驗收時,承包商交付的多半只是第一層——畫面能跑、功能會動。後兩層如果不主動要求,根本不會做。
為什麼非做不可
一個寫得爛的系統,跑得起來不代表撐得住。常見後果:上線 3 個月後資料量一大就卡爆、改一個小欄位要 3 週、找新工程師接手沒人敢動、原承包商離開後系統等於變成黑盒。這些問題在驗收當下完全看不出來,但 12 個月後爆炸時,重做成本通常是原案的 60-150%。
6 個必查項目(驗收前老闆該逼承包商交出來的東西)
這 6 項是「不需要工程背景也能要求」的硬性交付。每一項都對應一個具體的「拿不出來就有問題」訊號。
必查 1:程式碼版控完整 commit log(Git history)
要承包商把專案的 GitHub / GitLab repo 開出來,看 commit 頻率與訊息。健康的專案:每 2-3 天至少 1 個 commit、訊息有意義(不是 "update" "fix bug" 這種廢話)。Red flag:整個專案只有 5-10 個 commit、或 commit 全部集中在最後一週(代表前面都在自己電腦寫,沒做版控)。源碼託管條款部分可以對應 客製化系統「源碼託管」(Source Code Escrow) 完整指南 處理。
必查 2:單元測試覆蓋率(Test Coverage)
中小企業客製化系統,**業務邏輯部分**(計價、訂單流程、報表計算)的 unit test 覆蓋率至少要 60%。承包商通常會說「我們有測啊,QA 都過了」——但 QA 是手動測試,不可重複。要看的是自動化測試,每次 deploy 都會跑。要求承包商交付 `coverage report` HTML 檔。沒有任何自動化測試的專案,一律當作 red flag。
必查 3:依賴套件清單與 CVE 掃描
專案用了哪些第三方套件、有沒有已知漏洞。前端跑 `npm audit`、後端跑 `pip-audit` 或 `bundle audit` 都會出報表。High / Critical 等級的 CVE 一個都不能有(必須升級或替換)。最常出事的是用了 3 年前的 jQuery、過時的 image processing library、或被棄用的 ORM。承包商如果交不出這份報表,可能是因為他們自己沒看過。
必查 4:資料庫 schema 文件與遷移腳本(Migration Scripts)
要看每一張資料表的欄位、索引、外鍵、約束條件,並且要有「從零建立」的 migration scripts。Red flag:資料表是手動在 phpMyAdmin / pgAdmin 點出來的,沒有任何 migration 紀錄——這代表未來搬到新環境(DR、雲端切換)等於重建。資料遷移完整流程可以對應 中小企業客製化系統資料遷移完整指南。
必查 5:Docker / 部署設定檔(Infrastructure as Code)
專案能不能用一個指令在新機器上跑起來。`docker-compose up` 或類似的部署腳本是基本。Red flag:部署設定全寫在工程師的 README.md 裡(「先裝 nginx、再裝 PostgreSQL、設定 .env、跑 npm build...」)——這代表只有那個工程師會部署。一旦他離職,系統等於沒人能搬。
必查 6:API 文件(OpenAPI / Swagger)與資料字典
如果系統有 API(多數現代系統都有),要有自動產生的 OpenAPI / Swagger 文件——不是手寫的 PDF。文件要包含每個 endpoint 的 request / response schema、authentication 方式、error code。資料字典要寫清楚每張表、每個欄位的業務意義。沒有這些,未來要做手機 App、做整合、換廠商接手都會卡住。
5 個 red flag — 看到任何一個都要按暫停鍵
這 5 個 red flag 不需要會看程式碼也能判斷,是「老闆級警示」。看到立刻找第三方獨立審計,不要相信承包商的解釋。
Red Flag | 實際長相 | 為什麼要按暫停 |
|---|---|---|
帳號密碼 hard-code 在程式碼裡 | 資料庫連線、API key、第三方服務密碼直接寫在原始碼 | 資安重大漏洞,任何拿到 source code 的人都能直接登入 production |
沒有 staging / production 區分 | 開發、測試、上線同一台主機同一個資料庫 | 改一個小 bug 整個正式環境就掛掉,沒有 rollback 機制 |
沒有 log / monitoring | 系統出錯只能等使用者打電話來,沒有任何告警 | Production incident 24-72 小時才發現是常態 |
關鍵函式 1000 行起跳 | 一個 function 寫一千行、所有業務邏輯混在一起 | 無法測試、無法維護、新人接手 6 個月才上手 |
註解 / 命名是亂碼或拼音 | 變數叫 `a1, b2`、註解寫拼音「jisuan」、無業務上下文 | 代表這份程式碼從沒打算給第二個人讀,等於黑盒交付 |
中了任何一個都不要單純跟承包商爭執——他們會告訴你「業界都這樣」「我們十幾年都這樣寫」。事實是:這些 anti-pattern 在 2010 年也許可接受,2026 年是基本配備缺失。找第三方做獨立審計,把這份報告當成議價籌碼。
3 個第三方審計報價區間(中小企業老闆該抓多少預算)
台灣本地的第三方程式碼審計服務分三個層級。不同層級對應不同合約金額與風險容忍度。
層級 | 適用情境 | 審計範圍 | 台灣本地報價區間 |
|---|---|---|---|
L1 輕量檢查 | 合約金額 30-80 萬,標準需求 | 6 個必查項抽查 + 上述 5 個 red flag 掃描,3-5 天交報告 | 3-8 萬 |
L2 完整審計 | 合約金額 80-300 萬,含核心業務邏輯 | 全程式碼覆蓋率 + 安全性掃描 + 架構評估,2-3 週交報告 | 15-35 萬 |
L3 深度審計(含滲透測試) | 合約金額 300 萬+ 或涉及金流 / 個資 | L2 + OWASP Top 10 + 滲透測試 + 法規合規檢查,1-2 個月 | 50-150 萬 |
L3 的滲透測試本站不提供(在 11 項服務範圍外),需要另找專業資安顧問公司。但 L1 / L2 屬於客製化系統開發諮詢的衍生服務,可以對齊 中小企業 AI / 軟體採購供應商盡職調查 SOP 與 AI 廠商議價談判完整指南 整套來看。
我們自己怎麼跑這套
我們公司客製化系統開發歷年 15+ 件案落地,每個案子在交付前都會跑一輪內部 code audit checklist——其實就是上面 6 個必查項的擴充版。內部 checklist 有 30 多項,每個 senior 工程師交付前都要 self-audit 一輪,再讓另一個 senior peer review。然後才進客戶驗收流程。
這套流程不是天生的。早期我們也吃過虧——一個用 Laravel 寫的訂單系統,上線 4 個月後因為某個 query 沒下 index,資料量到 8 萬筆就慢到 30 秒回應。從那次之後我們開始把 N+1 query、缺 index、缺 cache 列為交付前必檢項。客戶不會看,但客戶不知道的事情才是工程團隊真正的品質責任。
市場上對程式碼審計的兩個常見誤解
我們不認同的第一個說法:「找小工作室、便宜接案,省下來的錢就能 cover 後續維運」。這個算法有個盲點——你假設後續維運只是「修 bug」,但實際上 60-80% 的後續成本是「重構不可維護的舊系統」。便宜的不是省錢,是把錢延後到 12 個月後再付,而且通常付得更多。
第二個我們不認同的:「程式碼審計是大公司才需要的事」。錯。大公司有錢養 in-house team 持續 review,反而不一定需要第三方介入;中小企業沒有 in-house 工程主管能挑剔承包商交付品質,**才是最需要第三方審計的對象**。200 萬的合約做一次 15 萬的 L2 審計,是 7.5% 的保險費——這個價格買到的是「驗收後 12 個月不會撞牆」的確定性。
怎麼把程式碼審計寫進合約
光自己警覺沒用,要把審計條款寫進原始合約,不然驗收時承包商會推說「合約沒寫」。建議條款結構:
- 驗收前 7 個工作天交付完整 source code repo(Git history、test coverage report、依賴套件 CVE 掃描)
- 驗收方有權委託第三方做程式碼審計,承包商必須配合提供文件與訪談(時間上限 8 小時)
- 審計報告若發現 Critical 等級問題(hard-code 密碼、SQL injection、嚴重架構缺陷),承包商需於 14 個工作天內修正
- 尾款 20-30% 在第三方審計通過後才付,不接受「先付款後審計」
- 承包商需提供 90 天 production warranty,期間內若因品質問題導致系統不可用,須無償修復
這套條款的精神是把「驗收」從一次性事件變成有客觀依據的程序。詳細的撤退條款設計可以對應 客製化系統「合約撤退條款」完整指南 與 客製化系統「上線後 90 天驗證」完整指南。
ℹ️聊聊你的客製化系統驗收
看到這裡,如果你正在處理一個 100 萬以上的軟體外包驗收——我們很樂意 聽你聊聊現況,一起看看哪些必查項在你案子裡能直接套用、哪些 red flag 已經中招了該怎麼補救。
ℹ️我們怎麼看
3 年後贏的不會是「便宜 30% 接案」的工作室,而是「驗收後 12 個月不會撞牆」的工程團隊。對中小企業老闆而言這代表一件具體的事:把「程式碼審計」從「老闆操心的事」變成「合約條款明定的事」。價格不要硬殺到底——殺到底的代價通常是 6-12 個月後再付一次重做的錢。我們的取捨是:寧可前期審計花 7.5% 預算買確定性,也不要事後賭運氣。給你的判斷工具是這篇的 6 必查 + 5 紅旗 + 3 報價區間表——把它印出來,下次驗收會議直接擺在桌上。
ℹ️我們做過這件事
順帶說一下,這篇講的程式碼審計流程我們公司自己每天都在跑——目前內部 30+ 企業客製案落地,每一個交付前都要過一輪 30 項內部 audit checklist。 例如我們做過一家工程行業客戶(員工 ~20 人)的報價系統客製化,交付前的內部 audit 抓出了 3 個 N+1 query 與 1 個 race condition,上線後資料量翻 5 倍仍維持穩定。這些東西客戶看不到,但客戶不知道的事情才是工程團隊的本分。 看到這裡,如果你正在驗收一個外包工程廠商交付的客製化系統,我們很樂意 聽你聊聊現況,幫你看看該不該做第三方審計、該抓多少預算。
Q我們是 50 人公司,合約金額 100 萬,需要做到 L2 完整審計嗎?
建議至少做 L1 輕量檢查(3-8 萬)。100 萬的案子如果上線後撞牆要重做,重做成本通常落在 60-100 萬之間,L1 審計用 3-8% 的預算買到「先看到 red flag」的確定性,CP 值非常高。L2 通常建議用在合約 150 萬以上、或系統涉及訂單金流的情境。
Q承包商不願意給 source code,說「smart contract / IP 保密」怎麼辦?
這本身就是 red flag。客製化系統發包,source code 著作權歸屬要在合約第一頁就寫清楚。如果承包商不願意完整交付 source code、只願意給「執行檔」——這個案子直接 walk away,不要簽。台灣本地中小企業客製化合約的市場慣例就是 source code 隨驗收一併交付,不接受任何「我們保留核心技術」的話術。
Qtest coverage 60% 的標準是哪裡來的?我們聽過要 80% 才算合格
80% 是 high-availability 系統(如金融、醫療)的標準,中小企業客製化系統通常不需要這麼高。60% 是「業務邏輯部分」(計價、訂單流程、報表)的合理底線,UI 與輔助函式可以低一點。重點不是數字本身,是「有自動化測試 + 跑得起來 + 覆蓋到核心邏輯」這三個條件。0% 覆蓋率 = 完全沒寫測試,這才是 red flag。
Q第三方審計的報告我看不懂怎麼辦?
好的審計顧問會交付兩份報告——技術版(給工程師)+ 老闆版(5-10 頁的執行摘要,用紅黃綠燈標示)。簽合約時請審計方確認會交付老闆版。如果只給技術版,這份審計的可讀性對你而言就只有 30%。
Q原承包商不願意配合第三方審計,怎麼辦?
這應該在原始合約就寫進去(建議條款看上文)。如果合約沒寫,承包商有權拒絕——但「拒絕配合審計」本身就是嚴重的信任警示。實務上的處理方式:(1) 把尾款扣下不付,等他願意配合;(2) 委請律師發存證信函要求依約交付完整文件;(3) 走法律程序。三種都比「忍下來簽收」好。
Q我們公司就 1 個人會寫程式,沒有 IT 主管,怎麼自己做 code audit?
完全自己做不太可能,但可以「老闆級半自助」——本文的 6 必查項 + 5 紅旗,每一項都不需要會寫程式也能要求承包商交出來。請承包商把 GitHub repo 開出來看 commit log、把 npm audit / coverage report 截圖丟過來。光是這幾項,就能過濾掉 60% 不及格的承包商。剩下的細節再委託第三方做 L1 輕量檢查。
AUTHOR
自由揚AntonyLin
想了解更多?看看我們的相關服務
相關文章

企業內網 AI 助理自架完整指南:Open WebUI / LibreChat / AnythingLLM 三條路徑 + Claude API 接入 — 中小企業老闆「不被 SaaS 鎖死」的 5 個訊號與 4 條合約替代方案

Google Gemini 3.5 Pro 完整解析:中小企業 AI 採購 5 個訊號 + 60 天評估清單(對標 Claude Opus 4.8、GPT-5.4)

Excel 自動化教學完整指南:VBA、Power Query、進階函式、Apps Script 四條路徑 + 五個業務場景 + 三個升級訊號

進銷存自己做完整指南:Excel / Google Sheet / Airtable / Notion 4 條 DIY 路徑與 5 個崩塌訊號

Make.com 自動化教學完整指南:6 個中小企業實戰場景 + 4 個 vs n8n / Zapier 選型決策 + 3 個收費區間

留言(0)
尚無留言,成為第一個留言的人吧!