Google 揭秘:如何量化代码的 CRAP 值
Code Is CRAP [2011]
Google 测试团队提出了一套名为 CRAP 的指标,用于量化代码质量与测试覆盖率的综合水平。CRAP 并非简单的代码行数统计,而是结合了圈复杂度与测试覆盖率,精准识别出那些高风险且缺乏测试的“危险”代码。通过 Crap4J 工具,开发者可以直观地看到项目中哪些模块最需要关注,从而避免盲目测试,将精力集中在真正容易产生 Bug 的地方。这种将测试价值量化的思路,为软件质量保障提供了新的视角。
Crap4J 是我们在 Java 项目中使用的唯一工具,它能精准识别出那些真正危险的代码。
HN 评论区
56- almondfestival
我敢肯定,这套方法在过去 15 年里已经进化或被取代了,但读这篇文章时,最让我印象深刻的是单元测试覆盖率的动态在最近发生了巨大变化。如今 AI 生成的提交中,单元测试数量是过去的 10 倍(其中很多测试既愚蠢又同义反复)。看来得更新一下他们 CRAP1 公式里的一些系数了……或者,测试覆盖率这个参数已经/将会变得过于嘈杂,以至于根本无法使用。
- bluGill
只有当我能根据某个指标采取行动并因此改善现状时,这个指标才有价值。有很多东西很容易测量,但我却不知道该针对这些测量结果采取什么有用的行动。
- onionisafruit
我见过几个计算 CRAP 分数的工具,不过我还没在实战中用过。
Rust 有 https://crates.io/crates/cargo-crap,Go 有 https://padiazg.github.io/go-crap/
- aomix
我的目标是让公司的代码库符合 cargo-crap 标准,并通过 CI 强制执行。我曾让一个代理在夜间运行过一次,结果生成的 diff 触及了我们代码库的 40%,这对于单次合并来说是不可接受的。所以目前我是见缝插针,逐步推进。
- Anonyneko
注意:本文因使用轻微脏话被评为 PG-13 级。如果你可能会因反复听到小学操场上常见的某个词而感到被冒犯,请不要再往下读。
虽然这种带有讽刺意味的被动攻击相当温和,但很难想象在现代无菌化的企业沟通中会出现这种东西。