如何检测代码更改频率?

时间:2012-02-22 00:51:47

标签: code-analysis

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

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

认识到(例如)我们花费25%的时间在一组软件包上工作是有价值的,与“正常工作”的代码相比,这将是指示性或代码的脆弱性。

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

我看一下NChurn

  

NChurn是一个实用程序,可帮助评估文件的流失级别   你的存储库。流失可以帮助您检测哪些文件被更改了   大多数人在他们的一生中。这有助于识别潜在的漏洞荨麻疹   不正确的设计。最好的办法是将NChurn插入你的构建中   每次运行的过程和存储历史记录。然后,你可以绘制   存储库流失的演变。

答案 2 :(得分: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 

这将为您提供一个标签云,其中包含的文件会更多地显示更大的文件。

答案 3 :(得分:4)

我建议使用像

这样的命令
git log --follow -p file

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

git log --follow --format=oneline Gemfile | wc -l

然后,您可以创建一个bash脚本,将其应用于名称旁边的多个文件。

希望它有所帮助!

答案 4 :(得分:2)

基于之前的回答,我建议使用以下脚本来解析所有项目文件

#!/bin/sh
cd $1
find . -path ./.git -prune -o -name "*" -exec sh -c 'git log --follow --format=oneline $1 | wc -l | awk "{ print \$1,\"\\t\",\"$1\" }" ' {} {} \; | sort -nr
cd ..

如果您将脚本称为file_churn.sh,则可以解析调用

的git项目目录
> ./file_churn.sh project_dir

希望它有所帮助。