Clojure 程序的特定软件指标

发布于 2024-11-01 04:51:28 字数 107 浏览 2 评论 0原文

我们正在考虑编写一个静态分析器来收集 Clojure 代码的软件指标。当然,它会处理明显的东西,例如文件数、函数、每个函数的参数等。我想知道是否有任何特定于 Clojure 代码的指标。有什么想法吗?

We are considering writing a static analyzer to collect software metrics for Clojure code. Of course it will handle the obvious stuff like number of files, functions, parameters per function, etc. I wonder if there are any metrics that are specific for Clojure code. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只想待在家 2024-11-08 04:51:28

平均而言,我认为软件指标是一个可疑的想法,它们通常会分散您对真正重要问题的注意力,即“我们为客户提供了多少价值??”。

话虽如此,我认识到它们在某些情况下可能是一种必要的邪恶,并且偶尔可以为您提供一些有关代码库的有用见解。

这里有一些可能是 Clojure 特定的。

  • 顶级定义的数量(也许表示为符号总数的比率?)
  • Java 耦合:与 Java 互操作相关的符号百分比(new、ClassName.、.someMethod 等) - 理想情况下将耦合限制在负责 Java 的特定模块互操作性,即除了管理互操作性的库之外,所有地方的百分比都应该非常低。
  • 函数 defns 的平均最大嵌套级别(我猜 5 左右好,10+ 不好??)
  • 宏密度:需要宏扩展的形式的百分比
  • 具有文档字符串的函数的百分比
  • 使用类型提示定义的符号或函数参数的
  • 百分比 匿名函数的平均大小(这些可能应该很小!)
  • clojure.core 中使用的函数的百分比(给出了“词汇范围”和代码复杂程度的一些想法)
  • (感谢 nickik!)创建的引用类型(动态变量、原子、引用和代理)——如果你想仔细控制你的可变状态,这是必不可少的!

ps 如果你能做到这一点,那么看到一些不同的开源 clojure 项目的结果差异将会非常有趣!

On average - I think that software metrics are a dubious idea - they usually distract you from the really important question which is "how much value are we delivering to the customer??".

Having said that, I recognise they can be a necessary evil in some contexts and can occasionally give you some useful insights about your code base.

So here's a few that might be Clojure-specific.

  • Number of top-level defines (perhaps expressed as a ratio to total symbol count?)
  • Java coupling: % of symbols related to Java interop (new, ClassName., .someMethod etc.) - ideally keep coupling confined to specific modules responsible for Java interop, i.e. should be verey low % everywhere except libraries that manage the interop.
  • Average maximum nesting level of function defns (I guess 5ish good, 10+ bad??)
  • Macro density: % of forms that require macro expansion
  • % of functions with docstrings
  • % of symbols or function parameters defined with type hints
  • Average size of anonymous functions (these should probably be small!)
  • % of functions in clojure.core used (gives some idea of the "vocabulary range" and sophistication of the code)
  • (Thanks nickik!) number of ref-types created (dynamic vars, atom, ref and agent) - essential if you want to keep careful control of your mutable state!

p.s. if you get this working it would be really interesting to see the variation in results across some of the different open source clojure projects!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文