Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Code metrics 存储代码度量_Code Metrics_Pre Commit Hook - Fatal编程技术网

Code metrics 存储代码度量

Code metrics 存储代码度量,code-metrics,pre-commit-hook,Code Metrics,Pre Commit Hook,我想编写一个预提交钩子,告诉您是否改进/恶化了项目的某些代码度量(即平均函数长度)。钩子必须知道以前的平均函数长度是多少,我不知道在哪里存储这些信息。一种选择是在回购协议中存储一个额外的.metrics文件,但这听起来很笨拙。另一个选项是git stash,计算度量,git stash pop,再次计算度量并打印增量。我倾向于后者。是否有其他解决方案?免责声明:我是该工具的作者,我正在下面描述的工作流中使用该工具。我想同样的工作流程也可以通过其他能够比较结果的工具来执行 如果您添加两个CI检查

我想编写一个预提交钩子,告诉您是否改进/恶化了项目的某些代码度量(即平均函数长度)。钩子必须知道以前的平均函数长度是多少,我不知道在哪里存储这些信息。一种选择是在回购协议中存储一个额外的.metrics文件,但这听起来很笨拙。另一个选项是
git stash
,计算度量,
git stash pop
,再次计算度量并打印增量。我倾向于后者。是否有其他解决方案?

免责声明:我是该工具的作者,我正在下面描述的工作流中使用该工具。我想同样的工作流程也可以通过其他能够比较结果的工具来执行


如果您添加两个CI检查(请参见下面的步骤),您建议的其中一个想法将非常有效。我觉得它很结实。不知道你为什么认为它笨重

我有一个包含度量结果的文件,它在每次提交之前更新并存储在VCS中。让我们命名这个文件MealICS.DB,并考虑下面的工作流在项目的构建/测试中的自动化:

1) 如果metrics.db自上次签出后未更改(即,它是先前/基本修订版的原始数据),请将其复制到metrics-prev.db

2) 收集当前代码的度量值,然后再次生成metrics.db文件。注意:当度量工具可以进行迭代扫描以获得最佳性能(即计算更新的函数/类的度量)时,这非常有用,因此它为您提供了在每个构建(包括迭代)上运行度量工具的机会

3) 将metrics-prev.db与metrics.db进行比较。如果指标确定了回归,则构建失败,[可选]不允许提交-团队规则。如果度量是好的,则构建是成功的,并且可能发生提交

4) [可选]您可以运行持续集成(CI),以验证实际提交的metrics.db文件是否对应于同一版本的提交代码(即,执行相同的1-3步骤,并确保在步骤3中差异为零)。如果diff不为零,则表示有人忘记更新metrics.db文件,并且可能没有执行预提交检查,因此恢复更改

5) [可选]如果您从上一版本获取metrics.db作为metrics-prev.db,CI可能会执行步骤1-3。在这种情况下,CI还可以检查收集的metrics.db是否与提交的相同(步骤4的替代或添加)


我看到的另一个实现是:metrics.db文件存储在VCS之外的单独驱动器中,定制脚本能够为修订找到相应的metrics.db。我发现这个解决方案不可靠,因为驱动器可能会消失,文件可能会被移动和重命名,等等。因此,将文件放在VCS中是更好的解决方案,但任何方法都可以


我尝试了您建议的替代方法:切换到上一版本并运行度量工具两次。我放弃这种方法有几个原因:metrics check脚本改变了您的源文件(因此,不可能将其包括在迭代重建中并继续与IDE顺利工作,因为它会抱怨更改的文件),其次,它的性能非常慢(与迭代重新扫描相比,它非常慢)

希望能有帮助