Как определить частоту смены кода?
Я работаю над программой, написанной несколькими людьми со значительным разным уровнем квалификации. Есть файлы, которые никогда не менялись (и, вероятно, никогда не будут, поскольку мы боимся их трогать) и другие, которые постоянно меняются.
Интересно, есть ли там какие-либо инструменты, которые будут смотреть на всю историю репо (git
) и производить анализ того, как часто изменяется данный файл? Или пакет? Или проект?
Было бы полезно признать, что (например) мы потратили 25% нашего времени на набор пакетов, что было бы показательным или хрупким кодом по сравнению с кодом, который "просто работает".
Ответы
Ответ 1
Я написал что-то, что мы использовали для визуализации этой информации.
https://github.com/bcarlso/defect-density-heatmap
Взгляните на проект, и вы увидите, как выглядит результат в readme.
Вы можете сделать то, что вам нужно, сначала получив список файлов, которые были изменены в каждой фиксации из 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
Это даст вам облако тегов с файлами, которые больше всего показывают больше.
Ответ 2
Если вы ищете решение для ОС, я бы, вероятно, подумал о том, чтобы начать с gitstats и посмотреть, как расширить его, захватив файл журналы и агрегирование этих данных.
Ответ 3
Я бы посмотрел на NChurn:
NChurn - это утилита, которая помогает оценить уровень оттока ваших файлов в ваш репозиторий. Отключение может помочь вам определить, какие файлы изменены большинство в их жизни. Это помогает выявить потенциальные ульи ошибок и неправильный дизайн. Лучшее, что нужно сделать, это подключить NChurn к вашей сборке обрабатывать и хранить историю каждого прогона. Затем вы можете построить эволюция вашего оттока репозитория.
Ответ 4
Я предлагаю использовать команду типа
git log --follow -p file
Это даст вам все изменения, которые произошли с файлом в истории (включая переименования). Если вы хотите получить количество коммитов, которые изменили файл, вы можете сделать это на ОС на базе UNIX:
git log --follow --format=oneline Gemfile | wc -l
Затем вы можете создать bash script, чтобы применить это к нескольким файлам с именем в стороне.
Надеюсь, что это помогло!
Ответ 5
Основываясь на предыдущем ответе, я предлагаю следующее script проанализировать все файлы проекта
#!/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 ..
Если вы вызываете script как file_churn.sh, вы можете проанализировать каталог проекта git, вызывающий
> ./file_churn.sh project_dir
Надеюсь, что это поможет.