如何检测代码更改频率?

Jam*_*sev 25 code-analysis

我正在研究由几个技术水平差异很大的人编写的程序.那里的文件从未改变过(可能永远不会,因为我们害怕触摸它们)和其他不断变化的文件.

我想知道,是否有任何工具可以查看整个仓库历史(git)并对给定文件的更改频率进行分析?还是打包?还是项目?

值得认识的是(例如)我们花了25%的时间在一组软件包上工作,与"正常工作"的代码相比,这将是指示性或代码的脆弱性.

Dav*_*ton 11

如果您正在寻找操作系统解决方案,我可能会考虑从gitstats开始,然后通过抓取文件日志并聚合该数据来扩展它.


Hen*_*rik 8

我看看NChurn:

NChurn是一个实用程序,可帮助评估存储库中文件的流失级别.流失可以帮助您检测哪些文件在其生命周期中发生了最大的变化.这有助于识别潜在的错误配置和不正确的设计.最好的办法是将NChurn插入构建过程并存储每次运行的历史记录.然后,您可以绘制存储库流失的演变.


Cyd*_*ia7 5

我建议使用类似的命令

git log --follow -p file
Run Code Online (Sandbox Code Playgroud)

这将为您提供历史记录中对该文件进行的所有更改(包括重命名)。如果要获取更改文件的提交次数,则可以在基于UNIX的OS上执行以下操作:

git log --follow --format=oneline Gemfile | wc -l
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个bash脚本,以将此名称应用到多个文件(名称除外)。

希望能有所帮助!


bca*_*lso 5

我写了一些东西,用于成功地可视化这些信息.

https://github.com/bcarlso/defect-density-heatmap

看看项目,您可以看到自述文件中的输出结果.

您可以通过首先从Git获取每个提交中已更改的文件列表来执行您所需的操作.

~ $ git log --pretty="format:" --name-only | grep -v ^$ > file-changes.txt

~ $ for i in `cat file-changes.txt | cut -d"." -f1,2 | uniq`; do num=`cat file-changes.txt | grep $i | wc -l`; if (( $num > 1 )); then echo $num,0,$i; fi; done | heatmap > results.html 
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个带有文件的标签云,这些文件会更多地显示出来.

  • 第二位并不能很好地扩展.`sort file-changes.txt | uniq -c | sed -e's/^*//'-e's//,0,/'> heatmap.in`或者那种效果应该更快. (2认同)