动态

详情 返回 返回

一行命令統計代碼行數 - 动态 详情

公眾號首發:https://mp.weixin.qq.com/s/N1JxiRnr5c4pq0RBo3RGYA

我在網上衝浪時,在 GitHub 上發現了一個感興趣的開源項目 OneX ,我將其下載到本地,現在我該如何知道這個項目的體量呢?一個非常直觀的指標是看這個項目有多少行代碼。

我們可以使用如下命令,來統計 OneX 項目代碼行數:

$ cd onex
$ find . -name "*.go" -print | xargs wc -l | tail -n 1
  155784 total

截止目前,這個項目共計 155784 行 Go 代碼。

本文完。

scc

開個玩笑,接下來我將介紹一款強大的統計代碼行數的工具 scc 。

scc 是 Sloc、Cloc 和 Code 三個單詞的首字母縮寫,scc 是一款用 Go 編寫的速度飛快且準確的代碼統計工具,並且支持複雜度計算和成本估計。

可以通過如下命令來安裝 scc:

$ go install github.com/boyter/scc/v3@latest

如果你是 Mac 電腦,也可以使用 Homebrew 來安裝 scc:

$ brew install scc

使用 scc 統計 OneX 項目代碼行數:

scc

scc 使用非常簡單,只需要進入到項目目錄,然後執行 scc 命令,即可實現統計。

scc 支持多種輸出格式,如 tabular(表格)、jsoncsvhtmlsql 等,默認以表格的形式在命令行輸出統計結果,其輸出字段依次為:語言、文件數、總行數、空白行、註釋行、代碼行、複雜度。

以下是針對 scc 代碼統計結果的簡單分析:

一、核心指標解讀

  1. 語言分佈與代碼量

    • Go 語言主導:佔比 76.5%(155,784/203,648 行),文件數 1,220 個,複雜度 11,382,是項目核心開發語言。
    • 非代碼文件佔比:

      • YAML/Markdown:佔 9.3%((12,390+6,510)/203,648 行),多為配置文件和文檔,説明此項目文檔齊全。
      • Shell/Dockerfile/Makefile:佔 7.9%((13,346+778+1,920)/203,648 行),反映項目實現了容器化且自動化程度高。
    • 代碼總量超過 14+ 萬行,説明這是一個大而全的超級項目。
  2. 代碼質量指標

    • 註釋率:全局註釋佔比 16.2%(32,933/203,648 行),Go 語言註釋率 15.3%(23,859/155,784 行),符合健康標準(通常建議 10-20%)。
    • 複雜度分析:

      • Go 複雜度:平均每個文件 9.3 行(11,382/1,220 行)複雜代碼。
      • Shell 複雜度:平均每個文件 9.6 行(789/82 行)複雜代碼,説明可能存在較為複雜的嵌套邏輯。

二、項目規模估算

  1. COCOMO 模型結果

    • 成本估算:

      • 開發成本:$5,124,210。
      • 時間估算:25.59 個月。
      • 需要人數:需 17.79 人團隊。

cost

當然,關於成本估算,我們可以通過 --avg-wage 參數修改人員的年平均工資(默認為 $56286);還可以通過參數 --cocomo-project-type 修改模型(默認為 organic),可以選擇 organic, semi-detached, embedded, "custom,1,1,1,1" 其中的一項。

  1. 實際代碼效率

    • 千行代碼成本:$25.16(總成本 / 總代碼行數),反映代碼質量較高或團隊效率較好。

以上便是 scc 輸出結果的基本解讀。

scc 支持非常多的可選參數,你可以通過命令 scc -h 獲得幫助。這裏簡單介紹幾個常用選項:

$ scc ./src # 統計指定路徑
$ scc -l # 查看支持的語言和擴展名
$ scc -i go,java  # 僅統計 Go 和 Java 文件
$ scc -f json # JSON 格式輸出
$ scc -f html > report.html # 生成可視化 HTML 報告
$ scc --format-multi="html:report.html,json:data.json" # 同時輸出多種格式,並寫入文件
$ scc --avg-wage=60000  # 自定義平均工資(默認 $56,286 美元)

此外,如果你想在統計 Go 代碼時忽略以 *_test.go 結尾的測試文件,則可以結合 git 來時先。

首先在 .gitignore 文件中加入如下配置項:

**/*_test.go

然後,再次執行 scc 命令即可在統計時忽略所有以 *_test.go 結尾的測試文件。

因為 scc 默認就會讀取 .gitignore 中的配置項,如果你想忽略 .gitignore 文件的作用,則可以執行如下命令:

# 指定參數 --no-gitignore 忽略 .gitignore 文件產生的副作用
$ scc --no-gitignore

cloc

除了 scc 工具,其實還有一個老牌的更加流行的工具 cloc 也可以用來統計代碼。cloc 使用 Perl 語言編寫,以下是使用 cloc 工具統計 OneX 項目代碼行數的輸出結果:

cloc

可以發現,與 scc 輸出結果略有差異,不過整體來説都比較準確。cloc 最大的問題是慢,從速度角度來説,確實 scc 速度更快,體驗更好。針對 OneX 項目代碼統計,scc 幾乎瞬間完成,而 cloc 則需要 40+ 秒才統計完成。

總結

scc 是一款用 Go 編寫的速度飛快且準確的代碼統計工具,並且支持複雜度計算和成本估計。通過使用 scc,一行命令我們就可以統計代碼行數。

以下是我用 Hunyuan 大模型幫我生成的 scc 與其他主流代碼統計工具的對比表格:

工具 語言 核心功能 優勢 侷限性
scc Go 代碼行數、複雜度、COCOMO 估算 速度最快(百萬行級處理) 功能相對單一
cloc Perl 代碼行數、註釋、空白行 支持更多非代碼文件(如二進制) 統計速度較慢
tokei Rust 語言分類統計 支持 200+ 語言,內存佔用低 無複雜度分析功能

僅供參考。

希望此文能對你有所啓發。

延伸閲讀

  • OneX GitHub 源碼:https://github.com/onexstack/onex
  • scc GitHub 源碼:https://github.com/boyter/scc
  • cloc GitHub 源碼:https://github.com/AlDanial/cloc
  • tokie GitHub 源碼:https://github.com/XAMPPRocky/tokei
  • 構造性成本模型(COCOMO):https://zh.wikipedia.org/wiki/構造性成本模型
  • 本文永久地址:https://jianghushinian.cn/2025/05/17/scc/

聯繫我

  • 公眾號:Go編程世界
  • 微信:jianghushinian
  • 郵箱:jianghushinian007@outlook.com
  • 博客:https://jianghushinian.cn
  • GitHub:https://github.com/jianghushinian
user avatar sofastack 头像 debuginn 头像
点赞 2 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.