【问题标题】:Specific software metrics for Clojure programsClojure 程序的特定软件指标
【发布时间】:2023-12-02 11:45:01
【问题描述】:

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

【问题讨论】:

    标签: clojure metrics


    【解决方案1】:

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

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

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

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

    附言如果你能做到这一点,那么看到一些不同的开源 clojure 项目的结果变化会非常有趣!

    【讨论】:

    • 我理解反指标情绪。我认为指标仅对放大有问题的区域有用。顺便说一句,很好的答案。
    • Countig ref-types 真的是即兴发挥。计算 ref/atom/agent 和动态变量(在 1.3 中)。
    • @nickik - 完全同意 ref 类型非常重要。虽然很难弄清楚你在静态分析器中使用的指标是什么?我预见的问题是这些通常是动态分配的,因此仅计算 ref/atom/agent 符号不一定有帮助.....反正已经添加到列表中
    • 我认为静态执行与跟踪实际对象的数量一样好。如果你只在一个地方创建原子,那么复杂性可能同样受到限制:即使该函数被调用一千次,它也不会变得更复杂。