boyter/scc:一個用 Go 編寫的原始碼計數器
Sloc、Cloc 和 Code:scc 是一個非常快速、準確的程式碼計數器,具有用純 Go 編寫的複雜性計算和 COCOMO 估計。
秒懂
- 它是什麼?
- scc 統計程式碼、註解和空行,計算複雜度,並產生 COCOMO 與 LOCOMO 估算,全部用純 Go 實現。
- 適合誰用?
- MIT 授權條款授予使用、複製、修改、合併、發布、再授權和銷售軟體副本的權利,但軟體按「現狀」提供,不附帶任何明示或暗示的擔保。 針對 boyter-scc,先依 README 指定的安裝命令、設定檔與輸出逐項核對,再決定是否納入現有流程;這篇文章適合需要理解其實作邊界的工程師,不適合把個人設定或實驗性功能直接當成正式保證的人。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 2 天前。
- 用什麼語言寫的?
- 主要是 Go(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。
開源專案深度解析
這是什麼
scc 是一個命令列工具,用於統計原始碼:它會計算程式碼行、空行、註解行以及實體行數。它類似於 cloc、sloccount 和 tokei。該專案用 Go 編寫,目標是成為盡可能快的程式碼計數器,同時也能執行其他任務,例如 COCOMO 估算、LOCOMO 估算、程式碼複雜度近似計算,以及獨特程式碼行或 DRYness 指標。該專案託管在 GitHub 上的 boyter/scc 倉庫中,目前有 8592 個星標和 329 個復刻。
安裝方式 · boyter scc
README 列出了幾種安裝方式:Go 工具鏈(需要 Go 版本 1.25 或更高),Snap、Homebrew、Fedora 的 COPR 倉庫、MacPorts、Scoop、Chocolatey、WinGet、FreeBSD 套件,以及 Docker。例如,使用 Go 安裝最新穩定版本的命令是:go install github.com/boyter/scc/v3@latest。Windows、GNU/Linux 和 macOS 的預編譯二進位檔案可在專案的 releases 頁面取得。
計數行為
README 記錄了與其他工具的兩個重要區別。註解內的空行會被計為註解;例如,一個包含空行的區塊註解會被計為 4 行註解。scc 還能正確計算逐字字串:在 C# 中,以 @ 為前綴的字串會在結尾引號處結束,忽略逸出字元,因此後續的註解不會被誤認為字串,從而不會被誤計為程式碼。該工具還會報告它處理的位元組數(在大多數輸出格式中),以便估算執行靜態分析工具的成本。
複雜度估計
複雜度數字是透過在程式碼中尋找分支和迴圈語句(如 for、if、switch、while、else、||、&&、!=、==)並遞增該檔案的計數器來計算的。這是對迴圈複雜度的近似,並非精確計算,因為它不建立 AST;它只是在掃描時執行一個廉價的查詢。該數字僅用於比較同一語言的檔案,而不是跨語言比較,因為某些語言可能使用遞迴而不是迴圈。README 建議使用 scc --by-file -s complexity 來尋找專案中最複雜的檔案。
ULOC 和 DRYness
ULOC(獨特程式碼行)代表跨語言、檔案和專案本身的獨特程式碼行。該想法源自 cmcenroe.me 上的一篇文章,使用標準 Unix 工具 sort -u *.h *.c | wc -l 計算。它旨在提供比 SLOC 更好的複雜度估算,因為空行和重複結構(如閉合大括號)被折扣,而註解被計入,但授權頭部不會在重複的每個檔案中重複膨脹結果。DRYness 百分比是 ULOC 除以 SLOC;數字越高表示重複程式碼越少。使用 -u 或 --uloc 啟用 ULOC,使用 -a 或 --dryness 啟用 DRYness。README 警告說,ULOC 計算可能會使執行時間加倍。
COCOMO 和 LOCOMO 估算
scc 在每次執行時顯示 COCOMO 估算:開發成本、計畫工作量和所需人員。可以透過選擇 organic、semi-detached 或 embedded 模型來配置這些,或使用自訂參數,例如 --cocomo-project-type "custom,1,1,1,1"。LOCOMO(LLM 輸出成本模型)是一個實驗性的、非行業標準的估算器,用於使用大型語言模型重新生成程式碼庫的成本。與 COCOMO(估算人類建立成本)不同,LOCOMO 估算重新生成已知程式碼的成本。它預設不啟用;使用 --locomo 或 --cost-comparison 顯示兩者。LOCOMO 提供模型預設(大型、中型、小型、本地),並允許覆寫價格、吞吐量、審查時間和內部參數。
Git 洞察報告
README 描述了五個 git 感知的報告,可透過旗標選擇:--hotspots(高頻修改的複雜檔案)、--coupling(一起變化的檔案對)、--coupling-for(給定檔案的爆炸半徑)、--by-author(最後修改者歸屬)和 --timeline(隨時間變化的檢視)。這些報告比正常計數執行慢得多,因為它們使用純 Go Myers diff 在倉庫歷史中執行每次提交的 diff,而不呼叫 git 二進位檔案。深度由 --depth 旗標控制(預設 1000 次提交;0 表示整個歷史)。
授權條款 · boyter scc
該專案使用 MIT 授權條款。該授權條款授予使用、複製、修改、合併、發布、再授權和銷售軟體副本的權利,前提是版權聲明和許可聲明包含在所有副本中。該軟體按「現狀」提供,不附帶任何明示或暗示的擔保,包括適銷性、特定用途適用性和非侵權性的保證。授權條款文字沒有說明支援或安全更新;它只授予上述權利。
boyter-scc 的 README 所列內容應視為這個版本的操作邊界。實際閱讀時,先對照專案名稱、命令列入口、設定檔路徑與輸出格式,再檢查環境需求是否吻合。若文件沒有說明某項能力,本文不把它推定為已提供。這個判讀方式特別適合將 boyter-scc 放進既有工具鏈前的初步篩選:可以從最小輸入開始,觀察終端輸出、產生的檔案與錯誤訊息,再決定是否擴大使用範圍。
編輯結論
MIT 授權條款授予使用、複製、修改、合併、發布、再授權和銷售軟體副本的權利,但軟體按「現狀」提供,不附帶任何明示或暗示的擔保。 針對 boyter-scc,先依 README 指定的安裝命令、設定檔與輸出逐項核對,再決定是否納入現有流程;這篇文章適合需要理解其實作邊界的工程師,不適合把個人設定或實驗性功能直接當成正式保證的人。
社群筆記