Подтвердить что ты не робот

Как определить частоту смены кода?

Я работаю над программой, написанной несколькими людьми со значительным разным уровнем квалификации. Есть файлы, которые никогда не менялись (и, вероятно, никогда не будут, поскольку мы боимся их трогать) и другие, которые постоянно меняются.

Интересно, есть ли там какие-либо инструменты, которые будут смотреть на всю историю репо (git) и производить анализ того, как часто изменяется данный файл? Или пакет? Или проект?

Было бы полезно признать, что (например) мы потратили 25% нашего времени на набор пакетов, что было бы показательным или хрупким кодом по сравнению с кодом, который "просто работает".

4b9b3361

Ответ 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

Надеюсь, что это поможет.