命令列工具
boyter/scc avatar
boyter/scc

boyter/scc:一個用 Go 編寫的原始碼計數器

Sloc、Cloc 和 Code:scc 是一個非常快速、準確的程式碼計數器,具有用純 Go 編寫的複雜性計算和 COCOMO 估計。

8,748 個 Star344 個 ForkGoMIT
GitHub

秒懂

它是什麼?
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 指定的安裝命令、設定檔與輸出逐項核對,再決定是否納入現有流程;這篇文章適合需要理解其實作邊界的工程師,不適合把個人設定或實驗性功能直接當成正式保證的人。

官方來源

  1. Official README
  2. Project repository
  3. Release notes
社群筆記

社群筆記